From b15d9507d529fa922b53ff5803545412e21c62bd Mon Sep 17 00:00:00 2001
From: Tibor Kotosz <tkotosz@inviqa.com>
Date: Fri, 4 Sep 2015 17:24:49 +0200
Subject: [PATCH 001/370] Fix invalid @method phpdoc to prevent prophecy
 mocking error

---
 .../Magento/Backend/Block/Widget/Button/Item.php | 12 ++++++------
 .../Block/Widget/Button/Toolbar/Container.php    |  4 ++--
 .../Product/Attribute/Edit/Tab/Options.php       |  2 +-
 app/code/Magento/Catalog/Model/Product.php       |  2 +-
 .../Model/Config/Backend/Address/Street.php      |  2 +-
 .../Block/Adminhtml/Shopcart/Abandoned/Grid.php  |  2 +-
 .../Adminhtml/Order/CreditmemoLoader.php         | 16 ++++++++--------
 .../Adminhtml/Order/ShipmentLoader.php           | 16 ++++++++--------
 .../Adminhtml/Wysiwyg/Files/Content/Files.php    |  2 +-
 9 files changed, 29 insertions(+), 29 deletions(-)

diff --git a/app/code/Magento/Backend/Block/Widget/Button/Item.php b/app/code/Magento/Backend/Block/Widget/Button/Item.php
index a500f836312..73ed2c5f50e 100644
--- a/app/code/Magento/Backend/Block/Widget/Button/Item.php
+++ b/app/code/Magento/Backend/Block/Widget/Button/Item.php
@@ -7,12 +7,12 @@
 namespace Magento\Backend\Block\Widget\Button;
 
 /**
- * @method string getButtonKey
- * @method string getRegion
- * @method string getName
- * @method int getLevel
- * @method int getSortOrder
- * @method string getTitle
+ * @method string getButtonKey()
+ * @method string getRegion()
+ * @method string getName()
+ * @method int getLevel()
+ * @method int getSortOrder()
+ * @method string getTitle()
  */
 class Item extends \Magento\Framework\DataObject
 {
diff --git a/app/code/Magento/Backend/Block/Widget/Button/Toolbar/Container.php b/app/code/Magento/Backend/Block/Widget/Button/Toolbar/Container.php
index e7c199cf478..959ef806acf 100644
--- a/app/code/Magento/Backend/Block/Widget/Button/Toolbar/Container.php
+++ b/app/code/Magento/Backend/Block/Widget/Button/Toolbar/Container.php
@@ -9,8 +9,8 @@ namespace Magento\Backend\Block\Widget\Button\Toolbar;
 use Magento\Backend\Block\Widget\Button\ContextInterface;
 
 /**
- * @method \Magento\Backend\Block\Widget\Button\Item getButtonItem
- * @method ContextInterface getContext
+ * @method \Magento\Backend\Block\Widget\Button\Item getButtonItem()
+ * @method ContextInterface getContext()
  * @method ContextInterface setContext(ContextInterface $context)
  */
 class Container extends \Magento\Framework\View\Element\AbstractBlock
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Options.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Options.php
index eabcac9f715..b08fdb85de1 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Options.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Options.php
@@ -8,7 +8,7 @@
  * Product attribute add/edit form options tab
  *
  * @method \Magento\Catalog\Block\Adminhtml\Product\Attribute\Edit\Tab\Options setReadOnly(bool $value)
- * @method null|bool getReadOnly
+ * @method null|bool getReadOnly()
  *
  * @author     Magento Core Team <core@magentocommerce.com>
  */
diff --git a/app/code/Magento/Catalog/Model/Product.php b/app/code/Magento/Catalog/Model/Product.php
index dd0f5ec4ead..26a6f10defd 100644
--- a/app/code/Magento/Catalog/Model/Product.php
+++ b/app/code/Magento/Catalog/Model/Product.php
@@ -23,7 +23,7 @@ use Magento\Framework\Api\Data\ImageContentInterface;
  * @method array getAssociatedProductIds()
  * @method Product setNewVariationsAttributeSetId(int $value)
  * @method int getNewVariationsAttributeSetId()
- * @method int getPriceType
+ * @method int getPriceType()
  * @method Resource\Product\Collection getCollection()
  * @method string getUrlKey()
  * @method Product setUrlKey(string $urlKey)
diff --git a/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php b/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php
index 5870718e463..4f4c92edd0d 100644
--- a/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php
+++ b/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php
@@ -10,7 +10,7 @@ use Magento\Framework\App\Config\ScopeConfigInterface;
 /**
  * Line count config model for customer address street attribute
  *
- * @method string getWebsiteCode
+ * @method string getWebsiteCode()
  */
 class Street extends \Magento\Framework\App\Config\Value
 {
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Shopcart/Abandoned/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Shopcart/Abandoned/Grid.php
index 04e370c9736..70abcd68459 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Shopcart/Abandoned/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Shopcart/Abandoned/Grid.php
@@ -8,7 +8,7 @@ namespace Magento\Reports\Block\Adminhtml\Shopcart\Abandoned;
 /**
  * Adminhtml abandoned shopping carts report grid block
  *
- * @method \Magento\Reports\Model\Resource\Quote\Collection getCollection
+ * @method \Magento\Reports\Model\Resource\Quote\Collection getCollection()
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  * @SuppressWarnings(PHPMD.DepthOfInheritance)
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/CreditmemoLoader.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/CreditmemoLoader.php
index cf69855c148..5918bdb0326 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/CreditmemoLoader.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/CreditmemoLoader.php
@@ -14,14 +14,14 @@ use \Magento\Sales\Model\Order\CreditmemoFactory;
  * Class CreditmemoLoader
  *
  * @package Magento\Sales\Controller\Adminhtml\Order
- * @method CreditmemoLoader setCreditmemoId
- * @method CreditmemoLoader setCreditmemo
- * @method CreditmemoLoader setInvoiceId
- * @method CreditmemoLoader setOrderId
- * @method int getCreditmemoId
- * @method string getCreditmemo
- * @method int getInvoiceId
- * @method int getOrderId
+ * @method CreditmemoLoader setCreditmemoId($id)
+ * @method CreditmemoLoader setCreditmemo($creditMemo)
+ * @method CreditmemoLoader setInvoiceId($id)
+ * @method CreditmemoLoader setOrderId($id)
+ * @method int getCreditmemoId()
+ * @method string getCreditmemo()
+ * @method int getInvoiceId()
+ * @method int getOrderId()
  */
 class CreditmemoLoader extends DataObject
 {
diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Order/ShipmentLoader.php b/app/code/Magento/Shipping/Controller/Adminhtml/Order/ShipmentLoader.php
index 6bbaac5a04d..c837623ac8f 100644
--- a/app/code/Magento/Shipping/Controller/Adminhtml/Order/ShipmentLoader.php
+++ b/app/code/Magento/Shipping/Controller/Adminhtml/Order/ShipmentLoader.php
@@ -12,14 +12,14 @@ use Magento\Framework\DataObject;
  * Class ShipmentLoader
  *
  * @package Magento\Shipping\Controller\Adminhtml\Order
- * @method ShipmentLoader setOrderId
- * @method ShipmentLoader setShipmentId
- * @method ShipmentLoader setShipment
- * @method ShipmentLoader setTracking
- * @method int getOrderId
- * @method int getShipmentId
- * @method array getShipment
- * @method array getTracking
+ * @method ShipmentLoader setOrderId($id)
+ * @method ShipmentLoader setShipmentId($id)
+ * @method ShipmentLoader setShipment($shipment)
+ * @method ShipmentLoader setTracking($tracking)
+ * @method int getOrderId()
+ * @method int getShipmentId()
+ * @method array getShipment()
+ * @method array getTracking()
  */
 class ShipmentLoader extends DataObject
 {
diff --git a/app/code/Magento/Theme/Block/Adminhtml/Wysiwyg/Files/Content/Files.php b/app/code/Magento/Theme/Block/Adminhtml/Wysiwyg/Files/Content/Files.php
index 9b11f465787..1af3ea8e4bc 100644
--- a/app/code/Magento/Theme/Block/Adminhtml/Wysiwyg/Files/Content/Files.php
+++ b/app/code/Magento/Theme/Block/Adminhtml/Wysiwyg/Files/Content/Files.php
@@ -9,7 +9,7 @@
  *
  * @method
  *  \Magento\Theme\Block\Adminhtml\Wysiwyg\Files\Content\Files setStorage(\Magento\Theme\Model\Wysiwyg\Storage $storage)
- * @method \Magento\Theme\Model\Wysiwyg\Storage getStorage
+ * @method \Magento\Theme\Model\Wysiwyg\Storage getStorage()
  */
 namespace Magento\Theme\Block\Adminhtml\Wysiwyg\Files\Content;
 
-- 
GitLab


From 732870356847dfbcb771571a98fbd20a489472fd Mon Sep 17 00:00:00 2001
From: Eugene Tulika <etulika@ebay.com>
Date: Tue, 29 Sep 2015 15:42:53 -0500
Subject: [PATCH 002/370] MAGETWO-40845 Web Setup Wizard: Add support for
 metapackage updates

- show "Update" dropdown element for the metapackage
---
 setup/src/Magento/Setup/Controller/ComponentGrid.php | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/setup/src/Magento/Setup/Controller/ComponentGrid.php b/setup/src/Magento/Setup/Controller/ComponentGrid.php
index cb68dc558aa..d3d053572eb 100644
--- a/setup/src/Magento/Setup/Controller/ComponentGrid.php
+++ b/setup/src/Magento/Setup/Controller/ComponentGrid.php
@@ -99,9 +99,10 @@ class ComponentGrid extends AbstractActionController
             $components[$component['name']]['update'] = false;
             $components[$component['name']]['uninstall'] = false;
             $components[$component['name']]['moduleName'] = $this->packageInfo->getModuleName($component['name']);
-            if ($this->composerInformation->isPackageInComposerJson($component['name'])
-                && ($component['type'] !== ComposerInformation::METAPACKAGE_PACKAGE_TYPE)) {
-                $components[$component['name']]['uninstall'] = true;
+            if ($this->composerInformation->isPackageInComposerJson($component['name'])) {
+                if ($component['type'] !== ComposerInformation::METAPACKAGE_PACKAGE_TYPE) {
+                    $components[$component['name']]['uninstall'] = true;
+                }
                 if (isset($lastSyncData['packages'][$component['name']]['latestVersion'])
                     && version_compare(
                         $lastSyncData['packages'][$component['name']]['latestVersion'],
-- 
GitLab


From 9f635569ebfac4c7ecc67e3ea9df9d1299ad44c6 Mon Sep 17 00:00:00 2001
From: Safwan Khan <safwkhan@ebay.com>
Date: Wed, 30 Sep 2015 12:16:49 -0500
Subject: [PATCH 003/370] MAGETWO-41807: Segmentation fault on setup:rollback

- Fixed the another issue related to rollback - unable rollback db backup file taken in GUI.
---
 lib/internal/Magento/Framework/Setup/BackupRollback.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/internal/Magento/Framework/Setup/BackupRollback.php b/lib/internal/Magento/Framework/Setup/BackupRollback.php
index b992827bff9..4433c7b655a 100644
--- a/lib/internal/Magento/Framework/Setup/BackupRollback.php
+++ b/lib/internal/Magento/Framework/Setup/BackupRollback.php
@@ -227,7 +227,7 @@ class BackupRollback
      */
     public function dbRollback($rollbackFile)
     {
-        if (preg_match('/[0-9]_(db).(gz)$/', $rollbackFile) !== 1) {
+        if (preg_match('/[0-9]_(db)(.*?).(gz)$/', $rollbackFile) !== 1) {
             throw new LocalizedException(new Phrase('Invalid rollback file.'));
         }
         if (!$this->file->isExists($this->backupsDir . '/' . $rollbackFile)) {
-- 
GitLab


From 09bb813d8ca7760bc9ef5610b1208c06040a258f Mon Sep 17 00:00:00 2001
From: Mike Weis <miweis@ebay.com>
Date: Fri, 2 Oct 2015 15:33:02 -0500
Subject: [PATCH 004/370] MAGETWO-43549: Wrong FPT and from/to prices for
 bundle product when tax applied on FPT

 - fixed
---
 .../Pricing/Adjustment/Calculator.php         |  4 +-
 .../Test/Unit/Adjustment/CalculatorTest.php   | 75 ++++++++++---------
 2 files changed, 41 insertions(+), 38 deletions(-)

diff --git a/lib/internal/Magento/Framework/Pricing/Adjustment/Calculator.php b/lib/internal/Magento/Framework/Pricing/Adjustment/Calculator.php
index fdd3c051726..6fe22927507 100644
--- a/lib/internal/Magento/Framework/Pricing/Adjustment/Calculator.php
+++ b/lib/internal/Magento/Framework/Pricing/Adjustment/Calculator.php
@@ -40,6 +40,7 @@ class Calculator implements CalculatorInterface
     public function getAmount($amount, SaleableInterface $saleableItem, $exclude = null, $context = [])
     {
         $baseAmount = $fullAmount = $amount;
+        $previousAdjustments = 0;
         $adjustments = [];
         foreach ($saleableItem->getPriceInfo()->getAdjustments() as $adjustment) {
             $code = $adjustment->getAdjustmentCode();
@@ -51,7 +52,7 @@ class Calculator implements CalculatorInterface
                 $adjust = $adjustment->extractAdjustment($baseAmount, $saleableItem, $context);
                 $baseAmount -= $adjust;
                 $fullAmount = $adjustment->applyAdjustment($fullAmount, $saleableItem, $context);
-                $adjust = $fullAmount - $baseAmount;
+                $adjust = $fullAmount - $baseAmount - $previousAdjustments;
                 if (!$toExclude) {
                     $adjustments[$code] = $adjust;
                 }
@@ -63,6 +64,7 @@ class Calculator implements CalculatorInterface
                 $adjust = $newAmount - $fullAmount;
                 $adjustments[$code] = $adjust;
                 $fullAmount = $newAmount;
+                $previousAdjustments += $adjust;
             }
         }
 
diff --git a/lib/internal/Magento/Framework/Pricing/Test/Unit/Adjustment/CalculatorTest.php b/lib/internal/Magento/Framework/Pricing/Test/Unit/Adjustment/CalculatorTest.php
index 9aa6eccbe09..7865cf7db85 100644
--- a/lib/internal/Magento/Framework/Pricing/Test/Unit/Adjustment/CalculatorTest.php
+++ b/lib/internal/Magento/Framework/Pricing/Test/Unit/Adjustment/CalculatorTest.php
@@ -40,39 +40,30 @@ class CalculatorTest extends \PHPUnit_Framework_TestCase
      */
     public function testGetAmount()
     {
-        $amount = 10;
-        $fullAmount = $amount;
-        $newAmount = 15;
-        $taxAdjustmentCode = 'tax';
+        $amountInclTax = 10;
+        $taxAdjustment = 2;
+        $weeeAdjustment = 5;
+        $totalAmount = $amountInclTax + $weeeAdjustment;
+
         $weeeAdjustmentCode = 'weee';
-        $adjustment = 5;
+        $taxAdjustmentCode = 'tax';
         $expectedAdjustments = [
-            $taxAdjustmentCode => $adjustment,
-            $weeeAdjustmentCode => $adjustment,
+            $weeeAdjustmentCode => $weeeAdjustment,
+            $taxAdjustmentCode => $taxAdjustment,
         ];
 
-        $productMock = $this->getMockBuilder('Magento\Catalog\Model\Product')
+        $amountBaseMock = $this->getMockBuilder('Magento\Framework\Pricing\Amount\Base')
             ->disableOriginalConstructor()
-            ->setMethods(['getPriceInfo', '__wakeup'])
             ->getMock();
+        $this->amountFactoryMock->expects($this->once())
+            ->method('create')
+            ->with($this->equalTo($totalAmount), $this->equalTo($expectedAdjustments))
+            ->will($this->returnValue($amountBaseMock));
 
-        $taxAdjustmentMock = $this->getMockBuilder('Magento\Tax\Pricing\Adjustment')
+        $productMock = $this->getMockBuilder('Magento\Catalog\Model\Product')
             ->disableOriginalConstructor()
+            ->setMethods(['getPriceInfo', '__wakeup'])
             ->getMock();
-        $taxAdjustmentMock->expects($this->once())
-            ->method('getAdjustmentCode')
-            ->will($this->returnValue($taxAdjustmentCode));
-        $taxAdjustmentMock->expects($this->once())
-            ->method('isIncludedInBasePrice')
-            ->will($this->returnValue(true));
-        $taxAdjustmentMock->expects($this->once())
-            ->method('extractAdjustment')
-            ->with($this->equalTo($amount), $this->equalTo($productMock))
-            ->will($this->returnValue($adjustment));
-        $taxAdjustmentMock->expects($this->once())
-            ->method('applyAdjustment')
-            ->with($this->equalTo($fullAmount), $this->equalTo($productMock))
-            ->will($this->returnValue($amount));
 
         $weeeAdjustmentMock = $this->getMockBuilder('Magento\Weee\Pricing\Adjustment')
             ->disableOriginalConstructor()
@@ -85,15 +76,33 @@ class CalculatorTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue(false));
         $weeeAdjustmentMock->expects($this->once())
             ->method('isIncludedInDisplayPrice')
-            ->with($this->equalTo($productMock))
             ->will($this->returnValue(true));
         $weeeAdjustmentMock->expects($this->once())
             ->method('applyAdjustment')
-            ->with($this->equalTo($fullAmount), $this->equalTo($productMock))
-            ->will($this->returnValue($newAmount));
+            ->with($this->equalTo($amountInclTax), $this->equalTo($productMock))
+            ->will($this->returnValue($weeeAdjustment + $amountInclTax));
 
-        $adjustments = [$taxAdjustmentMock, $weeeAdjustmentMock];
+        $taxAdjustmentMock = $this->getMockBuilder('Magento\Tax\Pricing\Adjustment')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $taxAdjustmentMock->expects($this->once())
+            ->method('getAdjustmentCode')
+            ->will($this->returnValue($taxAdjustmentCode));
+        $taxAdjustmentMock->expects($this->once())
+            ->method('isIncludedInBasePrice')
+            ->will($this->returnValue(true));
+        $taxAdjustmentMock->expects($this->once())
+            ->method('extractAdjustment')
+            ->with($this->equalTo($amountInclTax), $this->equalTo($productMock))
+            ->will($this->returnValue($taxAdjustment));
+        $taxAdjustmentMock->expects($this->once())
+            ->method('applyAdjustment')
+            ->with($this->equalTo($totalAmount), $this->equalTo($productMock))
+            ->will($this->returnValue($totalAmount));
+        $taxAdjustmentMock->expects($this->never())
+            ->method('isIncludedInDisplayPrice');
 
+        $adjustments = [$weeeAdjustmentMock, $taxAdjustmentMock];
         $priceInfoMock = $this->getMockBuilder('\Magento\Framework\Pricing\PriceInfo\Base')
             ->disableOriginalConstructor()
             ->getMock();
@@ -105,15 +114,7 @@ class CalculatorTest extends \PHPUnit_Framework_TestCase
             ->method('getPriceInfo')
             ->will($this->returnValue($priceInfoMock));
 
-        $amountBaseMock = $this->getMockBuilder('Magento\Framework\Pricing\Amount\Base')
-            ->disableOriginalConstructor()
-            ->getMock();
-
-        $this->amountFactoryMock->expects($this->once())
-            ->method('create')
-            ->with($this->equalTo($newAmount), $this->equalTo($expectedAdjustments))
-            ->will($this->returnValue($amountBaseMock));
-        $result = $this->model->getAmount($amount, $productMock);
+        $result = $this->model->getAmount($amountInclTax, $productMock);
         $this->assertInstanceOf('Magento\Framework\Pricing\Amount\AmountInterface', $result);
     }
 
-- 
GitLab


From c50bff87a4a8beb7b53796825e08df76977b865d Mon Sep 17 00:00:00 2001
From: Mike Weis <miweis@ebay.com>
Date: Fri, 2 Oct 2015 19:44:46 -0500
Subject: [PATCH 005/370] MAGETWO-43614: FPT display configuration option name
 ambiguity

 - fixed
---
 .../Magento/Weee/Model/Config/Source/Display.php     | 12 +++++++++---
 app/code/Magento/Weee/Model/Tax.php                  |  2 +-
 app/code/Magento/Weee/i18n/de_DE.csv                 |  2 +-
 app/code/Magento/Weee/i18n/en_US.csv                 |  2 +-
 app/code/Magento/Weee/i18n/es_ES.csv                 |  2 +-
 app/code/Magento/Weee/i18n/fr_FR.csv                 |  2 +-
 app/code/Magento/Weee/i18n/nl_NL.csv                 |  2 +-
 app/code/Magento/Weee/i18n/pt_BR.csv                 |  2 +-
 app/code/Magento/Weee/i18n/zh_CN.csv                 |  2 +-
 9 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/app/code/Magento/Weee/Model/Config/Source/Display.php b/app/code/Magento/Weee/Model/Config/Source/Display.php
index c5408a0489f..67824638578 100644
--- a/app/code/Magento/Weee/Model/Config/Source/Display.php
+++ b/app/code/Magento/Weee/Model/Config/Source/Display.php
@@ -15,16 +15,22 @@ class Display implements \Magento\Framework\Option\ArrayInterface
     public function toOptionArray()
     {
         return [
-            ['value' => \Magento\Weee\Model\Tax::DISPLAY_INCL, 'label' => __('Including FPT only')],
+            [
+                'value' => \Magento\Weee\Model\Tax::DISPLAY_INCL,
+                'label' => __('Including FPT only')
+            ],
             [
                 'value' => \Magento\Weee\Model\Tax::DISPLAY_INCL_DESCR,
                 'label' => __('Including FPT and FPT description')
             ],
             [
                 'value' => \Magento\Weee\Model\Tax::DISPLAY_EXCL_DESCR_INCL,
-                'label' => __('Excluding FPT, FPT description, final price')
+                'label' => __('Excluding FPT. Including FPT description and final price')
             ],
-            ['value' => \Magento\Weee\Model\Tax::DISPLAY_EXCL, 'label' => __('Excluding FPT')]
+            [
+                'value' => \Magento\Weee\Model\Tax::DISPLAY_EXCL,
+                'label' => __('Excluding FPT')
+            ]
         ];
     }
 }
diff --git a/app/code/Magento/Weee/Model/Tax.php b/app/code/Magento/Weee/Model/Tax.php
index 8d51045a88e..52f38c57271 100644
--- a/app/code/Magento/Weee/Model/Tax.php
+++ b/app/code/Magento/Weee/Model/Tax.php
@@ -27,7 +27,7 @@ class Tax extends \Magento\Framework\Model\AbstractModel
     const DISPLAY_INCL_DESCR = 1;
 
     /**
-     * Excluding FPT, FPT description, final price
+     * Excluding FPT. Including FPT description and final price
      */
     const DISPLAY_EXCL_DESCR_INCL = 2;
 
diff --git a/app/code/Magento/Weee/i18n/de_DE.csv b/app/code/Magento/Weee/i18n/de_DE.csv
index 7ec820d9eb2..5c64ff992a1 100644
--- a/app/code/Magento/Weee/i18n/de_DE.csv
+++ b/app/code/Magento/Weee/i18n/de_DE.csv
@@ -7,7 +7,7 @@ Website,Website
 "We found a duplicate of website, country and state fields for a fixed product tax","We found a duplicate of website, country and state fields for a fixed product tax"
 "Including FPT only","Lediglich einschließlich FPT"
 "Including FPT and FPT description","Einschließlich FPT und FPT-Beschreibung"
-"Excluding FPT, FPT description, final price","Ausschließlich FPT, FPT-Beschreibung, Endpreis"
+"Excluding FPT. Including FPT description and final price","Excluding FPT. Including FPT description and final price"
 "Excluding FPT","Ausschließlich FPT"
 "Fixed Product Tax","Feste Produktsteuer"
 Country/State,Country/State
diff --git a/app/code/Magento/Weee/i18n/en_US.csv b/app/code/Magento/Weee/i18n/en_US.csv
index e0989690885..668926b6815 100644
--- a/app/code/Magento/Weee/i18n/en_US.csv
+++ b/app/code/Magento/Weee/i18n/en_US.csv
@@ -7,7 +7,7 @@ Website,Website
 "We found a duplicate of website, country and state fields for a fixed product tax","We found a duplicate of website, country and state fields for a fixed product tax"
 "Including FPT only","Including FPT only"
 "Including FPT and FPT description","Including FPT and FPT description"
-"Excluding FPT, FPT description, final price","Excluding FPT, FPT description, final price"
+"Excluding FPT. Including FPT description and final price","Excluding FPT. Including FPT description and final price"
 "Excluding FPT","Excluding FPT"
 "Fixed Product Tax","Fixed Product Tax"
 Country/State,Country/State
diff --git a/app/code/Magento/Weee/i18n/es_ES.csv b/app/code/Magento/Weee/i18n/es_ES.csv
index 75afe15b65e..967e9d55c16 100644
--- a/app/code/Magento/Weee/i18n/es_ES.csv
+++ b/app/code/Magento/Weee/i18n/es_ES.csv
@@ -7,7 +7,7 @@ Website,Website
 "We found a duplicate of website, country and state fields for a fixed product tax","We found a duplicate of website, country and state fields for a fixed product tax"
 "Including FPT only","Incluir sólo FPT"
 "Including FPT and FPT description","Inlcuir impuestos y descripción de los impuestos"
-"Excluding FPT, FPT description, final price","Excluido FPT, descripción FPT, precio final"
+"Excluding FPT. Including FPT description and final price","Excluding FPT. Including FPT description and final price"
 "Excluding FPT","FPT no incluido"
 "Fixed Product Tax","Impuesto fijo del producto"
 Country/State,Country/State
diff --git a/app/code/Magento/Weee/i18n/fr_FR.csv b/app/code/Magento/Weee/i18n/fr_FR.csv
index 7570f61e26c..3361b7bc238 100644
--- a/app/code/Magento/Weee/i18n/fr_FR.csv
+++ b/app/code/Magento/Weee/i18n/fr_FR.csv
@@ -7,7 +7,7 @@ Website,Website
 "We found a duplicate of website, country and state fields for a fixed product tax","We found a duplicate of website, country and state fields for a fixed product tax"
 "Including FPT only","Inclure uniquement les taxes sur les produits fixes"
 "Including FPT and FPT description","Inclure les taxes sur les produits fixes et leur description"
-"Excluding FPT, FPT description, final price","Exclure les taxes sur les produits fixes, les descriptions, et le prix final"
+"Excluding FPT. Including FPT description and final price","Excluding FPT. Including FPT description and final price"
 "Excluding FPT","Exclure les taxes sur les produits fixes"
 "Fixed Product Tax","Taxe sur le produit fixe"
 Country/State,Country/State
diff --git a/app/code/Magento/Weee/i18n/nl_NL.csv b/app/code/Magento/Weee/i18n/nl_NL.csv
index b86bb192006..b21a8574d6d 100644
--- a/app/code/Magento/Weee/i18n/nl_NL.csv
+++ b/app/code/Magento/Weee/i18n/nl_NL.csv
@@ -7,7 +7,7 @@ Website,Website
 "We found a duplicate of website, country and state fields for a fixed product tax","We found a duplicate of website, country and state fields for a fixed product tax"
 "Including FPT only","Inclusief alleen FPT"
 "Including FPT and FPT description","Inclusief FPT en FPT omschrijving"
-"Excluding FPT, FPT description, final price","Met uitzondering van FPT, FPT omschrijving, definitieve prijs"
+"Excluding FPT. Including FPT description and final price","Excluding FPT. Including FPT description and final price"
 "Excluding FPT","Met uitzondering van FPT"
 "Fixed Product Tax","Vaste Product Belasting"
 Country/State,Country/State
diff --git a/app/code/Magento/Weee/i18n/pt_BR.csv b/app/code/Magento/Weee/i18n/pt_BR.csv
index 7f2a0e7632a..881b6fe4a60 100644
--- a/app/code/Magento/Weee/i18n/pt_BR.csv
+++ b/app/code/Magento/Weee/i18n/pt_BR.csv
@@ -7,7 +7,7 @@ Website,Website
 "We found a duplicate of website, country and state fields for a fixed product tax","We found a duplicate of website, country and state fields for a fixed product tax"
 "Including FPT only","Incluindo somente FPT"
 "Including FPT and FPT description","Incluindo FPT e descrição de FPT"
-"Excluding FPT, FPT description, final price","Excluindo FPT, descrição de FPT, preço final"
+"Excluding FPT. Including FPT description and final price","Excluding FPT. Including FPT description and final price"
 "Excluding FPT","Excluindo FPT"
 "Fixed Product Tax","Imposto fixo do produto"
 Country/State,Country/State
diff --git a/app/code/Magento/Weee/i18n/zh_CN.csv b/app/code/Magento/Weee/i18n/zh_CN.csv
index a2c88c87999..55878a66c3f 100644
--- a/app/code/Magento/Weee/i18n/zh_CN.csv
+++ b/app/code/Magento/Weee/i18n/zh_CN.csv
@@ -7,7 +7,7 @@ Website,Website
 "We found a duplicate of website, country and state fields for a fixed product tax","We found a duplicate of website, country and state fields for a fixed product tax"
 "Including FPT only","仅包含 FPT"
 "Including FPT and FPT description","包含 FPT 和 FPT 描述"
-"Excluding FPT, FPT description, final price","不包含 FPT,FPT 描述,最终价格"
+"Excluding FPT. Including FPT description and final price","Excluding FPT. Including FPT description and final price"
 "Excluding FPT","不包含 FPT"
 "Fixed Product Tax",固定产品税费
 Country/State,Country/State
-- 
GitLab


From 01b6ddcaa8163e09ab223d7fc18b74ac22aa637b Mon Sep 17 00:00:00 2001
From: Mike Weis <miweis@ebay.com>
Date: Mon, 5 Oct 2015 16:16:30 -0500
Subject: [PATCH 006/370] MAGETWO-43614: FPT display configuration option name
 ambiguity

 - fixed functional test config file
---
 .../Weee/Test/Repository/ConfigData.xml       | 30 +++++++++----------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/Weee/Test/Repository/ConfigData.xml b/dev/tests/functional/tests/app/Magento/Weee/Test/Repository/ConfigData.xml
index c78a826e850..95d06f6d407 100644
--- a/dev/tests/functional/tests/app/Magento/Weee/Test/Repository/ConfigData.xml
+++ b/dev/tests/functional/tests/app/Magento/Weee/Test/Repository/ConfigData.xml
@@ -92,19 +92,19 @@
             <field name="tax/weee/display_list" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/display" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/display_sales" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/apply_vat" xsi:type="array">
@@ -242,19 +242,19 @@
             <field name="tax/weee/display_list" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/display" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/display_sales" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/apply_vat" xsi:type="array">
@@ -392,19 +392,19 @@
             <field name="tax/weee/display_list" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/display" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/display_sales" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/apply_vat" xsi:type="array">
@@ -467,19 +467,19 @@
             <field name="tax/weee/display_list" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/display" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/display_sales" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/apply_vat" xsi:type="array">
@@ -542,19 +542,19 @@
             <field name="tax/weee/display_list" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/display" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/display_sales" xsi:type="array">
                 <item name="scope" xsi:type="string">tax</item>
                 <item name="scope_id" xsi:type="number">1</item>
-                <item name="label" xsi:type="string">Excluding FPT, FPT description, final price</item>
+                <item name="label" xsi:type="string">Excluding FPT. Including FPT description and final price</item>
                 <item name="value" xsi:type="number">2</item>
             </field>
             <field name="tax/weee/apply_vat" xsi:type="array">
-- 
GitLab


From 8f3142cd4d5b81ea89e1e5cde335491167a5daab Mon Sep 17 00:00:00 2001
From: Maddy Chellathurai <mchellathura@ebay.com>
Date: Mon, 5 Oct 2015 18:49:25 -0500
Subject: [PATCH 007/370] MAGETWO-41701: [Github] Move ext- and lib- from
 require-dev in composer.json to require section

- moving to require
---
 composer.json                                 | 16 ++++----
 composer.lock                                 | 39 +++++++++----------
 .../_files/testFromClone/composer.json        | 16 ++++----
 .../testFromCreateProject/composer.json       | 11 ------
 4 files changed, 35 insertions(+), 47 deletions(-)

diff --git a/composer.json b/composer.json
index 7548136c397..e2fa29a61e3 100644
--- a/composer.json
+++ b/composer.json
@@ -49,13 +49,7 @@
         "symfony/event-dispatcher": "~2.1",
         "phpseclib/phpseclib": "~0.3",
         "tedivm/jshrink": "~1.0.1",
-        "magento/composer": "~1.0.0"
-    },
-    "require-dev": {
-        "phpunit/phpunit": "4.1.0",
-        "squizlabs/php_codesniffer": "1.5.3",
-        "phpmd/phpmd": "@stable",
-        "pdepend/pdepend": "2.0.6",
+        "magento/composer": "~1.0.0",
         "lib-libxml": "*",
         "ext-ctype": "*",
         "ext-gd": "*",
@@ -68,7 +62,13 @@
         "ext-iconv": "*",
         "ext-intl": "*",
         "ext-xsl": "*",
-        "ext-mbstring": "*",
+        "ext-mbstring": "*"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "4.1.0",
+        "squizlabs/php_codesniffer": "1.5.3",
+        "phpmd/phpmd": "@stable",
+        "pdepend/pdepend": "2.0.6",
         "sjparkinson/static-review": "~4.1",
         "fabpot/php-cs-fixer": "~1.2",
         "lusitanian/oauth": "~0.3"
diff --git a/composer.lock b/composer.lock
index 265f51694fc..7a7af860304 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,8 +4,8 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "hash": "3544fbc9568fdcc58279fcc2de51e6ec",
-    "content-hash": "963e7bfad082098b3a82bfb445c272d9",
+    "hash": "1e972f74ba4e62737e324c7bfc1738d6",
+    "content-hash": "cc0dfc42e4d933d9cabafc7c52fb20af",
     "packages": [
         {
             "name": "braintree/braintree_php",
@@ -188,16 +188,16 @@
         },
         {
             "name": "magento/composer",
-            "version": "1.0.1",
+            "version": "1.0.2",
             "dist": {
                 "type": "zip",
-                "url": "https://packages.magento.com/_packages/composer-1.0.1.zip",
+                "url": "https://packages.magento.com/_packages/composer-1.0.2.zip",
                 "reference": null,
-                "shasum": "a4ecd6bc55c6b53a74a75a3624d30b529710c4a3"
+                "shasum": "79156c3e7317af1ff64a482ba90ec81c66b82c73"
             },
             "require": {
                 "composer/composer": "1.0.0-alpha10",
-                "php": "~5.5.0|~5.6.0",
+                "php": "~5.5.0|~5.6.0|~7.0.0",
                 "symfony/console": "~2.3 <2.7"
             },
             "require-dev": {
@@ -2674,16 +2674,16 @@
         },
         {
             "name": "lusitanian/oauth",
-            "version": "v0.6.0",
+            "version": "v0.6.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Lusitanian/PHPoAuthLib.git",
-                "reference": "74a5a62457568176d9c1af41a900dd3389b70414"
+                "reference": "4e710c294f41857752b370f16aeff52ba76d48b9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Lusitanian/PHPoAuthLib/zipball/74a5a62457568176d9c1af41a900dd3389b70414",
-                "reference": "74a5a62457568176d9c1af41a900dd3389b70414",
+                "url": "https://api.github.com/repos/Lusitanian/PHPoAuthLib/zipball/4e710c294f41857752b370f16aeff52ba76d48b9",
+                "reference": "4e710c294f41857752b370f16aeff52ba76d48b9",
                 "shasum": ""
             },
             "require": {
@@ -2737,7 +2737,7 @@
                 "oauth",
                 "security"
             ],
-            "time": "2015-09-24 00:18:45"
+            "time": "2015-09-30 23:32:37"
         },
         {
             "name": "pdepend/pdepend",
@@ -3157,16 +3157,16 @@
         },
         {
             "name": "phpunit/phpunit-mock-objects",
-            "version": "2.3.7",
+            "version": "2.3.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
-                "reference": "5e2645ad49d196e020b85598d7c97e482725786a"
+                "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/5e2645ad49d196e020b85598d7c97e482725786a",
-                "reference": "5e2645ad49d196e020b85598d7c97e482725786a",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983",
+                "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983",
                 "shasum": ""
             },
             "require": {
@@ -3209,7 +3209,7 @@
                 "mock",
                 "xunit"
             ],
-            "time": "2015-08-19 09:14:08"
+            "time": "2015-10-02 06:51:40"
         },
         {
             "name": "sebastian/comparator",
@@ -3926,9 +3926,7 @@
     "prefer-stable": true,
     "prefer-lowest": false,
     "platform": {
-        "php": "~5.5.0|~5.6.0|~7.0.0"
-    },
-    "platform-dev": {
+        "php": "~5.5.0|~5.6.0|~7.0.0",
         "lib-libxml": "*",
         "ext-ctype": "*",
         "ext-gd": "*",
@@ -3942,5 +3940,6 @@
         "ext-intl": "*",
         "ext-xsl": "*",
         "ext-mbstring": "*"
-    }
+    },
+    "platform-dev": []
 }
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/composer.json b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/composer.json
index 438e99d692d..437b304fa98 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/composer.json
+++ b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromClone/composer.json
@@ -37,13 +37,7 @@
         "tubalmartin/cssmin": "2.4.8-p4",
         "magento/magento-composer-installer": "*",
         "phpseclib/phpseclib": "~0.3",
-        "symfony/console": "~2.3"
-    },
-    "require-dev": {
-        "phpunit/phpunit": "4.1.0",
-        "squizlabs/php_codesniffer": "1.5.3",
-        "phpmd/phpmd": "@stable",
-        "pdepend/pdepend": "2.0.6",
+        "symfony/console": "~2.3",
         "lib-libxml": "*",
         "ext-ctype": "*",
         "ext-gd": "*",
@@ -54,7 +48,13 @@
         "ext-hash": "*",
         "ext-curl": "*",
         "ext-iconv": "*",
-        "ext-intl": "*",
+        "ext-intl": "*"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "4.1.0",
+        "squizlabs/php_codesniffer": "1.5.3",
+        "phpmd/phpmd": "@stable",
+        "pdepend/pdepend": "2.0.6",
         "sjparkinson/static-review": "~4.1",
         "fabpot/php-cs-fixer": "~1.2",
         "lusitanian/oauth": "~0.3"
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/composer.json b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/composer.json
index e7403b54be9..7ca0399b8ce 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/composer.json
+++ b/dev/tests/integration/testsuite/Magento/Framework/Composer/_files/testFromCreateProject/composer.json
@@ -15,17 +15,6 @@
         "squizlabs/php_codesniffer": "1.5.3",
         "phpmd/phpmd": "@stable",
         "pdepend/pdepend": "2.0.6",
-        "lib-libxml": "*",
-        "ext-ctype": "*",
-        "ext-gd": "*",
-        "ext-spl": "*",
-        "ext-dom": "*",
-        "ext-simplexml": "*",
-        "ext-mcrypt": "*",
-        "ext-hash": "*",
-        "ext-curl": "*",
-        "ext-iconv": "*",
-        "ext-intl": "*",
         "sjparkinson/static-review": "~4.1",
         "fabpot/php-cs-fixer": "~1.2",
         "lusitanian/oauth": "~0.3"
-- 
GitLab


From f1fadc9fe7021ee064b5e184e1441c028f02e772 Mon Sep 17 00:00:00 2001
From: Safwan Khan <safwkhan@ebay.com>
Date: Tue, 6 Oct 2015 15:06:12 -0500
Subject: [PATCH 008/370] MAGETWO-40374: [GitHub] Grammar error in Error
 message when a file is not writable #1507

- Fixed the messages.
---
 lib/internal/Magento/Framework/Filesystem/Io/File.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/internal/Magento/Framework/Filesystem/Io/File.php b/lib/internal/Magento/Framework/Filesystem/Io/File.php
index b504f54b173..b050199e4d1 100644
--- a/lib/internal/Magento/Framework/Filesystem/Io/File.php
+++ b/lib/internal/Magento/Framework/Filesystem/Io/File.php
@@ -463,12 +463,12 @@ class File extends AbstractIo
 
         if (file_exists($filename)) {
             if (!is_writeable($filename)) {
-                printf('File %s don\'t writeable', $filename);
+                printf('The file %s is not writable', $filename);
                 return false;
             }
         } else {
             if (!is_writable(dirname($filename))) {
-                printf('Folder %s don\'t writeable', dirname($filename));
+                printf('The folder %s is not writable', dirname($filename));
                 return false;
             }
         }
-- 
GitLab


From bda76d754711d6475eef0d5744d431c91fa011b2 Mon Sep 17 00:00:00 2001
From: Safwan Khan <safwkhan@ebay.com>
Date: Tue, 6 Oct 2015 18:18:53 -0500
Subject: [PATCH 009/370] MAGETWO-40374: [GitHub] Grammar error in Error
 message when a file is not writable #1507

- Fix based on CR comment.
---
 lib/internal/Magento/Framework/Filesystem/Io/File.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/internal/Magento/Framework/Filesystem/Io/File.php b/lib/internal/Magento/Framework/Filesystem/Io/File.php
index b050199e4d1..875f960126d 100644
--- a/lib/internal/Magento/Framework/Filesystem/Io/File.php
+++ b/lib/internal/Magento/Framework/Filesystem/Io/File.php
@@ -468,7 +468,7 @@ class File extends AbstractIo
             }
         } else {
             if (!is_writable(dirname($filename))) {
-                printf('The folder %s is not writable', dirname($filename));
+                printf('The directory %s is not writable', dirname($filename));
                 return false;
             }
         }
-- 
GitLab


From 77c61cd4a207113520ca8a41c37c7121af73826d Mon Sep 17 00:00:00 2001
From: Olga Matviienko <omatviienko@ebay.com>
Date: Thu, 8 Oct 2015 14:13:51 +0300
Subject: [PATCH 010/370] MAGETWO-42871: Storefront menu UI issues on mobile

---
 .../Magento/blank/web/css/source/_navigation.less      | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/app/design/frontend/Magento/blank/web/css/source/_navigation.less b/app/design/frontend/Magento/blank/web/css/source/_navigation.less
index 4e4b410c5f6..c271f3cba1e 100644
--- a/app/design/frontend/Magento/blank/web/css/source/_navigation.less
+++ b/app/design/frontend/Magento/blank/web/css/source/_navigation.less
@@ -86,7 +86,7 @@
             font-size: 1.6rem;
             font-weight: 700;
             margin: 0;
-            padding: 8px 20px;
+            padding: .8rem 3.5rem .8rem 2rem;
             .label {
                 display: block;
                 margin-bottom: @indent__xs;
@@ -133,9 +133,6 @@
                     font-weight: 700;
                     padding: 8px 20px;
                 }
-                &:last-child {
-                    border-bottom: 1px solid @color-gray82;
-                }
             }
             a,
             a:hover {
@@ -217,6 +214,11 @@
                 background: transparent;
                 border-bottom: 0;
             }
+            .nav-sections-item-switch {
+                &:hover {
+                    text-decoration: none;
+                }
+            }
         }
 
         &-item-content {
-- 
GitLab


From f8304935f3fff585ab401392043f3f476293490d Mon Sep 17 00:00:00 2001
From: Olga Matviienko <omatviienko@ebay.com>
Date: Thu, 8 Oct 2015 17:00:49 +0300
Subject: [PATCH 011/370] MAGETWO-42871: Storefront menu UI issues on mobile

---
 .../frontend/Magento/blank/web/css/source/_navigation.less  | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/app/design/frontend/Magento/blank/web/css/source/_navigation.less b/app/design/frontend/Magento/blank/web/css/source/_navigation.less
index c271f3cba1e..0132f9840cb 100644
--- a/app/design/frontend/Magento/blank/web/css/source/_navigation.less
+++ b/app/design/frontend/Magento/blank/web/css/source/_navigation.less
@@ -125,14 +125,18 @@
 
         .header.links {
             .lib-list-reset-styles();
+            border-bottom: 1px solid @color-gray82;
             li {
-                border-top: 1px solid @color-gray82;
                 font-size: 1.6rem;
                 margin: 0;
                 &.greet.welcome {
+                    border-top: 1px solid @color-gray82;
                     font-weight: 700;
                     padding: 8px 20px;
                 }
+                > a {
+                    border-top: 1px solid @color-gray82;
+                }
             }
             a,
             a:hover {
-- 
GitLab


From 0edac92219a102eb3175a2ede02bde4abaf98056 Mon Sep 17 00:00:00 2001
From: Olga Matviienko <omatviienko@ebay.com>
Date: Thu, 8 Oct 2015 17:05:02 +0300
Subject: [PATCH 012/370] MAGETWO-42871: Storefront menu UI issues on mobile

---
 .../frontend/Magento/blank/web/css/source/_navigation.less    | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/design/frontend/Magento/blank/web/css/source/_navigation.less b/app/design/frontend/Magento/blank/web/css/source/_navigation.less
index 0132f9840cb..862e09dfdec 100644
--- a/app/design/frontend/Magento/blank/web/css/source/_navigation.less
+++ b/app/design/frontend/Magento/blank/web/css/source/_navigation.less
@@ -132,7 +132,7 @@
                 &.greet.welcome {
                     border-top: 1px solid @color-gray82;
                     font-weight: 700;
-                    padding: 8px 20px;
+                    padding: .8rem @indent__base;
                 }
                 > a {
                     border-top: 1px solid @color-gray82;
@@ -144,7 +144,7 @@
                 .lib-css(text-decoration, @navigation-level0-item__text-decoration);
                 display: block;
                 font-weight: 700;
-                padding: 8px 20px;
+                padding: .8rem @indent__base;
             }
         }
     }
-- 
GitLab


From 3dacd07312181d19dc2ff7719397bea46f737ad8 Mon Sep 17 00:00:00 2001
From: Mike Weis <miweis@ebay.com>
Date: Thu, 8 Oct 2015 15:45:27 -0500
Subject: [PATCH 013/370] MAGETWO-43549: Wrong FPT and from/to prices for
 bundle product when tax applied on FPT

 - fixed bug when catalog prices include tax, but prices are displayed excluding tax
---
 .../Observer/UpdateProductOptionsObserver.php | 57 +++++------
 .../UpdateProductOptionsObserverTest.php      | 97 ++++++++++++++++---
 2 files changed, 111 insertions(+), 43 deletions(-)

diff --git a/app/code/Magento/Weee/Observer/UpdateProductOptionsObserver.php b/app/code/Magento/Weee/Observer/UpdateProductOptionsObserver.php
index 77d02281170..32e262fb971 100644
--- a/app/code/Magento/Weee/Observer/UpdateProductOptionsObserver.php
+++ b/app/code/Magento/Weee/Observer/UpdateProductOptionsObserver.php
@@ -59,23 +59,28 @@ class UpdateProductOptionsObserver implements ObserverInterface
             return $this;
         }
 
-        if ($this->weeeData->isEnabled() &&
-            !$this->weeeData->geDisplayIncl($product->getStoreId()) &&
-            !$this->weeeData->geDisplayExcl($product->getStoreId())
-        ) {
-            // only do processing on bundle product
-            if ($product->getTypeId() == \Magento\Catalog\Model\Product\Type::TYPE_BUNDLE) {
-                if (!array_key_exists('optionTemplate', $options)) {
-                    $calcPrice = $this->getWhichCalcPriceToUse($product->getStoreId());
-                    $options['optionTemplate'] = '<%- data.label %>'
-                        . '<% if (data.' . $calcPrice . '.value) { %>'
-                        . ' +<%- data.' . $calcPrice . '.formatted %>'
-                        . '<% } %>';
-                }
+        // if the Weee module is enabled, then only do processing on bundle products
+        if ($this->weeeData->isEnabled() && $product->getTypeId() == \Magento\Catalog\Model\Product\Type::TYPE_BUNDLE) {
+
+            if ($this->taxData->priceIncludesTax() && $this->taxData->displayPriceExcludingTax()) {
+                // the Tax module might have set up a default, but we will re-decide which calcPrice field to use
+                unset($options['optionTemplate']);
+            }
+
+            if (!array_key_exists('optionTemplate', $options)) {
+                $calcPrice = $this->getWhichCalcPriceToUse($product->getStoreId());
+                $options['optionTemplate'] = '<%- data.label %>'
+                    . '<% if (data.' . $calcPrice . '.value) { %>'
+                    . ' +<%- data.' . $calcPrice . '.formatted %>'
+                    . '<% } %>';
+            }
 
+            if (!$this->weeeData->geDisplayIncl($product->getStoreId()) &&
+                !$this->weeeData->geDisplayExcl($product->getStoreId())) {
+                // we need to display the individual Weee amounts
                 foreach ($this->weeeData->getWeeeAttributesForBundle($product) as $weeeAttributes) {
                     foreach ($weeeAttributes as $weeeAttribute) {
-                        if (!preg_match('/'.$weeeAttribute->getCode().'/', $options['optionTemplate'])) {
+                        if (!preg_match('/' . $weeeAttribute->getCode() . '/', $options['optionTemplate'])) {
                             $options['optionTemplate'] .= sprintf(
                                 ' <%% if (data.weeePrice' . $weeeAttribute->getCode() . ') { %%>'
                                 . '  (' . $weeeAttribute->getName()
@@ -86,15 +91,14 @@ class UpdateProductOptionsObserver implements ObserverInterface
                         }
                     }
                 }
+            }
 
-                if ($this->weeeData->geDisplayExlDescIncl($product->getStoreId())) {
-                    $options['optionTemplate'] .= sprintf(
-                        ' <%% if (data.weeePrice) { %%>'
-                        . '<%%- data.weeePrice.formatted %%>'
-                        . '<%% } %%>'
-                    );
-                }
-
+            if ($this->weeeData->geDisplayExlDescIncl($product->getStoreId())) {
+                $options['optionTemplate'] .= sprintf(
+                    ' <%% if (data.weeePrice) { %%>'
+                    . '<%%- data.weeePrice.formatted %%>'
+                    . '<%% } %%>'
+                );
             }
         }
         $response->setAdditionalOptions($options);
@@ -102,7 +106,7 @@ class UpdateProductOptionsObserver implements ObserverInterface
     }
 
     /**
-     * Returns which product price to use as a basis for the Weee's final price
+     * Returns which product price to show (before listing the individual Weee amounts, if applicable)
      *
      * @param  int|null $storeId
      * @return string
@@ -110,10 +114,9 @@ class UpdateProductOptionsObserver implements ObserverInterface
     protected function getWhichCalcPriceToUse($storeId = null)
     {
         $calcPrice = 'finalPrice';
-        if ($this->weeeData->geDisplayExcl($storeId) ||
-            $this->weeeData->geDisplayExlDescIncl($storeId) ||
-            ($this->taxData->priceIncludesTax() && $this->taxData->displayPriceExcludingTax())
-        ) {
+        if ($this->weeeData->geDisplayExlDescIncl($storeId)) {
+            $calcPrice = 'basePrice';
+        } elseif ($this->weeeData->geDisplayExcl($storeId) && $this->taxData->displayPriceExcludingTax()) {
             $calcPrice = 'basePrice';
         }
         return $calcPrice;
diff --git a/app/code/Magento/Weee/Test/Unit/Observer/UpdateProductOptionsObserverTest.php b/app/code/Magento/Weee/Test/Unit/Observer/UpdateProductOptionsObserverTest.php
index 8725a62d837..777a93d1923 100644
--- a/app/code/Magento/Weee/Test/Unit/Observer/UpdateProductOptionsObserverTest.php
+++ b/app/code/Magento/Weee/Test/Unit/Observer/UpdateProductOptionsObserverTest.php
@@ -6,25 +6,28 @@
 
 namespace Magento\Weee\Test\Unit\Observer;
 
-use \Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+use Magento\Weee\Model\Tax as WeeeDisplayConfig;
+use Magento\Tax\Model\Config as TaxConfig;
 
 class UpdateProductOptionsObserverTest extends \PHPUnit_Framework_TestCase
 {
     /**
      * Tests the methods that rely on the ScopeConfigInterface object to provide their return values
      *
-     * @param array $testArray The initial array that specifies the set of additional options
+     * @param array $initialArray The initial array that specifies the set of additional options
      * @param bool $weeeEnabled Whether the Weee module is assumed to be enabled
-     * @param bool $weeeDisplayExclDescIncl Is this Weee display setting assumed to be set
+     * @param int $weeeDisplay Which Weee display is configured
+     * @param int $priceDisplay Values are: including tax, excluding tax, or both including and excluding tax
      * @param array $expectedArray The revised array of the additional options
      *
      * @dataProvider updateProductOptionsProvider
      */
-    public function testUpdateProductOptions($testArray, $weeeEnabled, $weeeDisplayExclDescIncl, $expectedArray)
+    public function testUpdateProductOptions($initialArray, $weeeEnabled, $weeeDisplay, $priceDisplay, $expectedArray)
     {
         $configObj = new \Magento\Framework\DataObject(
             [
-                'additional_options' => $testArray,
+                'additional_options' => $initialArray,
             ]
         );
 
@@ -46,13 +49,27 @@ class UpdateProductOptionsObserverTest extends \PHPUnit_Framework_TestCase
         $weeeHelper->expects($this->any())
             ->method('isEnabled')
             ->will($this->returnValue($weeeEnabled));
+        $weeeHelper->expects($this->any())
+            ->method('geDisplayIncl')
+            ->will($this->returnValue($weeeDisplay == WeeeDisplayConfig::DISPLAY_INCL));
         $weeeHelper->expects($this->any())
             ->method('geDisplayExlDescIncl')
-            ->will($this->returnValue($weeeDisplayExclDescIncl));
+            ->will($this->returnValue($weeeDisplay == WeeeDisplayConfig::DISPLAY_EXCL_DESCR_INCL));
+        $weeeHelper->expects($this->any())
+            ->method('geDisplayExcl')
+            ->will($this->returnValue($weeeDisplay == WeeeDisplayConfig::DISPLAY_EXCL));
         $weeeHelper->expects($this->any())
             ->method('getWeeeAttributesForBundle')
             ->will($this->returnValue([['fpt1' => $weeeObject1], ['fpt1'=>$weeeObject1, 'fpt2'=>$weeeObject2]]));
 
+        $taxHelper=$this->getMock('Magento\Tax\Helper\Data', [], [], '', false);
+        $taxHelper->expects($this->any())
+            ->method('displayPriceExcludingTax')
+            ->will($this->returnValue($priceDisplay == TaxConfig::DISPLAY_TYPE_EXCLUDING_TAX));
+        $taxHelper->expects($this->any())
+            ->method('priceIncludesTax')
+            ->will($this->returnValue(true));
+
         $responseObject=$this->getMock('Magento\Framework\Event\Observer', ['getResponseObject'], [], '', false);
         $responseObject->expects($this->any())
             ->method('getResponseObject')
@@ -83,6 +100,7 @@ class UpdateProductOptionsObserverTest extends \PHPUnit_Framework_TestCase
             'Magento\Weee\Observer\UpdateProductOptionsObserver',
             [
                 'weeeData' => $weeeHelper,
+                'taxData' => $taxHelper,
                 'registry' => $registry,
             ]
         );
@@ -99,13 +117,30 @@ class UpdateProductOptionsObserverTest extends \PHPUnit_Framework_TestCase
     {
         return [
             'weee not enabled' => [
-                'testArray' => [
+                'initialArray' => [
+                    'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
+                    'optionTemplate' => '<%= data.label %><% if (data.finalPrice.value) '
+                        . '{ %> +<%- data.finalPrice.formatted %><% } %>',
+                ],
+                'weeeEnabled' => false,
+                'weeeDisplay' => WeeeDisplayConfig::DISPLAY_INCL,         // has no effect for this scenario
+                'priceDisplay' => TaxConfig::DISPLAY_TYPE_EXCLUDING_TAX,  // has no effect for this scenario
+                'expectedArray' => [
+                    'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
+                    'optionTemplate' => '<%= data.label %><% if (data.finalPrice.value) '
+                        . '{ %> +<%- data.finalPrice.formatted %><% } %>',
+                ],
+            ],
+
+            'weee enabled, and display with Weee included in the price' => [
+                'initialArray' => [
                     'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
                     'optionTemplate' => '<%= data.label %><% if (data.basePrice.value) '
                         . '{ %> +<%- data.basePrice.formatted %><% } %>',
                 ],
-                'weeeEnabled' => false,
-                'weeeDisplayExclDescIncl' => true,
+                'weeeEnabled' => true,
+                'weeeDisplay' => WeeeDisplayConfig::DISPLAY_INCL,
+                'priceDisplay' => TaxConfig::DISPLAY_TYPE_INCLUDING_TAX,
                 'expectedArray' => [
                     'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
                     'optionTemplate' => '<%= data.label %><% if (data.basePrice.value) '
@@ -113,31 +148,33 @@ class UpdateProductOptionsObserverTest extends \PHPUnit_Framework_TestCase
                 ],
             ],
 
-            'weee enabled, but not displaying ExclDescIncl' => [
-                'testArray' => [
+            'weee enabled, and display with Weee included in the price, and include the Weee descriptions' => [
+                'initialArray' => [
                     'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
                     'optionTemplate' => '<%= data.label %><% if (data.basePrice.value) '
                         . '{ %> +<%- data.basePrice.formatted %><% } %>',
                 ],
                 'weeeEnabled' => true,
-                'weeeDisplayExclDescIncl' => false,
+                'weeeDisplay' => WeeeDisplayConfig::DISPLAY_INCL_DESCR,
+                'priceDisplay' => TaxConfig::DISPLAY_TYPE_INCLUDING_TAX,
                 'expectedArray' => [
                     'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
                     'optionTemplate' => '<%= data.label %><% if (data.basePrice.value) '
                         . '{ %> +<%- data.basePrice.formatted %><% } %> <% if (data.weeePricefpt1) '
-                        . '{ %>  (: <%- data.weeePricefpt1.formatted %>)<% } %>'
-                        . ' <% if (data.weeePricefpt2) { %>  (: <%- data.weeePricefpt2.formatted %>)<% } %>',
+                        . '{ %>  (: <%- data.weeePricefpt1.formatted %>)<% } %> '
+                        . '<% if (data.weeePricefpt2) { %>  (: <%- data.weeePricefpt2.formatted %>)<% } %>',
                 ],
             ],
 
             'weee enabled, and display with ExclDescIncl' => [
-                'testArray' => [
+                'initialArray' => [
                     'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
                     'optionTemplate' => '<%= data.label %><% if (data.basePrice.value) '
                         . '{ %> +<%- data.basePrice.formatted %><% } %>',
                 ],
                 'weeeEnabled' => true,
-                'weeeDisplayExclDescIncl' => true,
+                'weeeDisplay' => WeeeDisplayConfig::DISPLAY_EXCL_DESCR_INCL,
+                'priceDisplay' => TaxConfig::DISPLAY_TYPE_INCLUDING_TAX,
                 'expectedArray' => [
                     'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
                     'optionTemplate' => '<%= data.label %><% if (data.basePrice.value) '
@@ -147,6 +184,34 @@ class UpdateProductOptionsObserverTest extends \PHPUnit_Framework_TestCase
                         . '<% if (data.weeePrice) { %><%- data.weeePrice.formatted %><% } %>',
                 ],
             ],
+
+            'weee enabled, and display prices including tax but without Weee' => [
+                'initialArray' => [
+                    'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
+                ],
+                'weeeEnabled' => true,
+                'weeeDisplay' => WeeeDisplayConfig::DISPLAY_EXCL,
+                'priceDisplay' => TaxConfig::DISPLAY_TYPE_INCLUDING_TAX,
+                'expectedArray' => [
+                    'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
+                    'optionTemplate' => '<%- data.label %><% if (data.finalPrice.value) '
+                        . '{ %> +<%- data.finalPrice.formatted %><% } %>',
+                ],
+            ],
+
+            'weee enabled, and display prices excluding tax but without Weee' => [
+                'initialArray' => [
+                    'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
+                ],
+                'weeeEnabled' => true,
+                'weeeDisplay' => WeeeDisplayConfig::DISPLAY_EXCL,
+                'priceDisplay' => TaxConfig::DISPLAY_TYPE_EXCLUDING_TAX,
+                'expectedArray' => [
+                    'TOTAL_BASE_CALCULATION' => 'TOTAL_BASE_CALCULATION',
+                    'optionTemplate' => '<%- data.label %><% if (data.basePrice.value) '
+                        . '{ %> +<%- data.basePrice.formatted %><% } %>',
+                ],
+            ],
         ];
     }
 }
-- 
GitLab


From 4d423ca121df634994a940df447b26828d88422c Mon Sep 17 00:00:00 2001
From: Ivan Gavryshko <igavryshko@ebay.com>
Date: Fri, 9 Oct 2015 17:00:22 -0500
Subject: [PATCH 014/370] MAGETWO-43906: Long database prefix length breaks
 setup

- fixed
---
 setup/src/Magento/Setup/Validator/DbValidator.php | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/setup/src/Magento/Setup/Validator/DbValidator.php b/setup/src/Magento/Setup/Validator/DbValidator.php
index 1470ecf6c18..d74c5e60863 100644
--- a/setup/src/Magento/Setup/Validator/DbValidator.php
+++ b/setup/src/Magento/Setup/Validator/DbValidator.php
@@ -15,6 +15,9 @@ use Magento\Setup\Module\ConnectionFactory;
  */
 class DbValidator
 {
+
+    const DB_PREFIX_LENGTH = 10;
+
     /**
      * DB connection factory
      *
@@ -47,6 +50,12 @@ class DbValidator
             throw new \InvalidArgumentException('Please correct the table prefix format.');
         }
 
+        if (strlen($prefix) > self::DB_PREFIX_LENGTH) {
+            throw new \InvalidArgumentException(
+                'Table prefix length can\'t be more then ' . self::DB_PREFIX_LENGTH . ' characters.'
+            );
+        }
+
         return true;
     }
 
-- 
GitLab


From 94097e9e51de94209d415085cfdfd1d781219a2a Mon Sep 17 00:00:00 2001
From: Ivan Gavryshko <igavryshko@ebay.com>
Date: Fri, 9 Oct 2015 17:12:14 -0500
Subject: [PATCH 015/370] MAGETWO-43906: Long database prefix length breaks
 setup

- added test-case
---
 .../Setup/Test/Unit/Validator/DbValidatorTest.php    | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/setup/src/Magento/Setup/Test/Unit/Validator/DbValidatorTest.php b/setup/src/Magento/Setup/Test/Unit/Validator/DbValidatorTest.php
index 3f833f10a80..3822e9fd2ea 100644
--- a/setup/src/Magento/Setup/Test/Unit/Validator/DbValidatorTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Validator/DbValidatorTest.php
@@ -87,6 +87,18 @@ class DbValidatorTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals(true, $this->dbValidator->checkDatabaseTablePrefix('_wrong_format'));
     }
 
+    /**
+     * @expectedException \InvalidArgumentException
+     * @expectedExceptionMessage Table prefix length can't be more then
+     */
+    public function testCheckDatabaseTablePrefixWrongLength()
+    {
+        $this->assertEquals(
+            true,
+            $this->dbValidator->checkDatabaseTablePrefix('mvbXzXzItSIr0wrZW3gqgV2UKrWiK1Mj7bkBlW72rZW3gqgV2UKrWiK1M')
+        );
+    }
+
     /**
      * @expectedException \Magento\Setup\Exception
      * @expectedExceptionMessage Database connection failure.
-- 
GitLab


From 52abb196171dd282b7efa4f5ed23672c2f4f1c7a Mon Sep 17 00:00:00 2001
From: Robert He <rohe@ebay.com>
Date: Fri, 9 Oct 2015 17:19:38 -0500
Subject: [PATCH 016/370] MAGETWO-43908: Rename misspelled functions in Weee
 helper

 -- rename some Weee functions
---
 app/code/Magento/Weee/Helper/Data.php         | 27 ++++++++++++++-----
 .../GetPriceConfigurationObserver.php         |  4 +--
 .../Observer/UpdateProductOptionsObserver.php | 10 +++----
 .../UpdateProductOptionsObserverTest.php      |  2 +-
 4 files changed, 29 insertions(+), 14 deletions(-)

diff --git a/app/code/Magento/Weee/Helper/Data.php b/app/code/Magento/Weee/Helper/Data.php
index 55db9791896..b91cd19e6be 100644
--- a/app/code/Magento/Weee/Helper/Data.php
+++ b/app/code/Magento/Weee/Helper/Data.php
@@ -739,12 +739,12 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
     }
 
     /**
-     * get FPT DISPLAY_INCL setting
+     * Get FPT DISPLAY_INCL setting
      *
      * @param  int|null $storeId
      * @return bool
      */
-    public function geDisplayIncl($storeId = null)
+    public function getDisplayIncl($storeId = null)
     {
         return $this->typeOfDisplay(
             WeeeDisplayConfig::DISPLAY_INCL,
@@ -754,12 +754,27 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
     }
 
     /**
-     * get FPT DISPLAY_EXCL_DESCR_INCL setting
+     * Get FPT DISPLAY_INCL_DESCR setting
      *
      * @param  int|null $storeId
      * @return bool
      */
-    public function geDisplayExlDescIncl($storeId = null)
+    public function getDisplayInclDesc($storeId = null)
+    {
+        return $this->typeOfDisplay(
+            WeeeDisplayConfig::DISPLAY_INCL_DESCR,
+            \Magento\Framework\Pricing\Render::ZONE_ITEM_VIEW,
+            $storeId
+        );
+    }
+
+    /**
+     * Get FPT DISPLAY_EXCL_DESCR_INCL setting
+     *
+     * @param  int|null $storeId
+     * @return bool
+     */
+    public function getDisplayExlDescIncl($storeId = null)
     {
         return $this->typeOfDisplay(
             WeeeDisplayConfig::DISPLAY_EXCL_DESCR_INCL,
@@ -769,12 +784,12 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
     }
 
     /**
-     * get FPT DISPLAY_EXCL setting
+     * Get FPT DISPLAY_EXCL setting
      *
      * @param  int|null $storeId
      * @return bool
      */
-    public function geDisplayExcl($storeId = null)
+    public function getDisplayExcl($storeId = null)
     {
         return $this->typeOfDisplay(
             WeeeDisplayConfig::DISPLAY_EXCL,
diff --git a/app/code/Magento/Weee/Observer/GetPriceConfigurationObserver.php b/app/code/Magento/Weee/Observer/GetPriceConfigurationObserver.php
index 96effbb8545..0b8f4a4ea2b 100644
--- a/app/code/Magento/Weee/Observer/GetPriceConfigurationObserver.php
+++ b/app/code/Magento/Weee/Observer/GetPriceConfigurationObserver.php
@@ -142,8 +142,8 @@ class GetPriceConfigurationObserver implements ObserverInterface
     protected function getWhichCalcPriceToUse($storeId = null)
     {
         $calcPrice = 'finalPrice';
-        if ($this->weeeData->geDisplayExcl($storeId) ||
-            $this->weeeData->geDisplayExlDescIncl($storeId) ||
+        if ($this->weeeData->getDisplayExcl($storeId) ||
+            $this->weeeData->getDisplayExlDescIncl($storeId) ||
             ($this->taxData->priceIncludesTax() && $this->taxData->displayPriceExcludingTax())
         ) {
             $calcPrice = 'basePrice';
diff --git a/app/code/Magento/Weee/Observer/UpdateProductOptionsObserver.php b/app/code/Magento/Weee/Observer/UpdateProductOptionsObserver.php
index 77d02281170..deca1b93cf1 100644
--- a/app/code/Magento/Weee/Observer/UpdateProductOptionsObserver.php
+++ b/app/code/Magento/Weee/Observer/UpdateProductOptionsObserver.php
@@ -60,8 +60,8 @@ class UpdateProductOptionsObserver implements ObserverInterface
         }
 
         if ($this->weeeData->isEnabled() &&
-            !$this->weeeData->geDisplayIncl($product->getStoreId()) &&
-            !$this->weeeData->geDisplayExcl($product->getStoreId())
+            !$this->weeeData->getDisplayIncl($product->getStoreId()) &&
+            !$this->weeeData->getDisplayExcl($product->getStoreId())
         ) {
             // only do processing on bundle product
             if ($product->getTypeId() == \Magento\Catalog\Model\Product\Type::TYPE_BUNDLE) {
@@ -87,7 +87,7 @@ class UpdateProductOptionsObserver implements ObserverInterface
                     }
                 }
 
-                if ($this->weeeData->geDisplayExlDescIncl($product->getStoreId())) {
+                if ($this->weeeData->getDisplayExlDescIncl($product->getStoreId())) {
                     $options['optionTemplate'] .= sprintf(
                         ' <%% if (data.weeePrice) { %%>'
                         . '<%%- data.weeePrice.formatted %%>'
@@ -110,8 +110,8 @@ class UpdateProductOptionsObserver implements ObserverInterface
     protected function getWhichCalcPriceToUse($storeId = null)
     {
         $calcPrice = 'finalPrice';
-        if ($this->weeeData->geDisplayExcl($storeId) ||
-            $this->weeeData->geDisplayExlDescIncl($storeId) ||
+        if ($this->weeeData->getDisplayExcl($storeId) ||
+            $this->weeeData->getDisplayExlDescIncl($storeId) ||
             ($this->taxData->priceIncludesTax() && $this->taxData->displayPriceExcludingTax())
         ) {
             $calcPrice = 'basePrice';
diff --git a/app/code/Magento/Weee/Test/Unit/Observer/UpdateProductOptionsObserverTest.php b/app/code/Magento/Weee/Test/Unit/Observer/UpdateProductOptionsObserverTest.php
index 8725a62d837..c80de6e8958 100644
--- a/app/code/Magento/Weee/Test/Unit/Observer/UpdateProductOptionsObserverTest.php
+++ b/app/code/Magento/Weee/Test/Unit/Observer/UpdateProductOptionsObserverTest.php
@@ -47,7 +47,7 @@ class UpdateProductOptionsObserverTest extends \PHPUnit_Framework_TestCase
             ->method('isEnabled')
             ->will($this->returnValue($weeeEnabled));
         $weeeHelper->expects($this->any())
-            ->method('geDisplayExlDescIncl')
+            ->method('getDisplayExlDescIncl')
             ->will($this->returnValue($weeeDisplayExclDescIncl));
         $weeeHelper->expects($this->any())
             ->method('getWeeeAttributesForBundle')
-- 
GitLab


From 34ab5502ce12306607bf87c69105be00a038e078 Mon Sep 17 00:00:00 2001
From: Olga Matviienko <omatviienko@ebay.com>
Date: Mon, 12 Oct 2015 12:50:49 +0300
Subject: [PATCH 017/370] MAGETWO-42358: Action buttons are displayed shuffled
 in Storefront Wish List

---
 .../web/css/source/_module.less               | 268 +++++++++---------
 1 file changed, 140 insertions(+), 128 deletions(-)

diff --git a/app/design/frontend/Magento/blank/Magento_Wishlist/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_Wishlist/web/css/source/_module.less
index 506bbbd71fe..49720b30a2c 100644
--- a/app/design/frontend/Magento/blank/Magento_Wishlist/web/css/source/_module.less
+++ b/app/design/frontend/Magento/blank/Magento_Wishlist/web/css/source/_module.less
@@ -4,143 +4,143 @@
 //  */
 
 //
-//    Common
-//--------------------------------------
+//  Common
+//  _____________________________________________
 
 & when (@media-common = true) {
 
-.form.wishlist.items {
-    .actions-toolbar {
-        &:extend(.abs-reset-left-margin all);
+    .form.wishlist.items {
+        .actions-toolbar {
+            &:extend(.abs-reset-left-margin all);
+        }
     }
-}
 
-.product-info-main,
-.product-options-bottom,
-.block-bundle-summary {
-    .action.towishlist {
-        &:extend(.abs-action-addto-product all);
+    .product-info-main,
+    .product-options-bottom,
+    .block-bundle-summary {
+        .action.towishlist {
+            &:extend(.abs-action-addto-product all);
+        }
     }
-}
 
-.products.list.items,
-.table-comparison {
-    .action {
-        &.towishlist {
-            &:extend(.abs-actions-addto-gridlist all);
-            .lib-icon-font-symbol(
-                @icon-wishlist-empty
-            );
+    .products.list.items,
+    .table-comparison {
+        .action {
+            &.towishlist {
+                &:extend(.abs-actions-addto-gridlist all);
+                .lib-icon-font-symbol(
+                    @icon-wishlist-empty
+                );
+            }
         }
     }
-}
 
-.account .table-wrapper .data.table.wishlist {
-    .lib-table-bordered(
-        @_table_type: horizontal
-    );
-    thead > tr > th {
-        border-bottom: 0;
-    }
-    tbody > tr:last-child > td {
-        border-bottom: 1px solid @table__border-color;
-    }
-    .product.name {
-        display: inline-block;
-        margin-bottom: @indent__s;
-    }
-    .box-tocart {
-        margin: @indent__s 0;
-        .qty {
-            vertical-align: middle;
-            &:extend(.abs-input-qty all);
+    .account .table-wrapper .data.table.wishlist {
+        .lib-table-bordered(
+            @_table_type: horizontal
+        );
+        thead > tr > th {
+            border-bottom: 0;
         }
-    }
-    .col {
-        &.item {
-            width: 50%;
+        tbody > tr:last-child > td {
+            border-bottom: 1px solid @table__border-color;
         }
-        &.photo {
-            max-width: 150px;
+        .product.name {
+            display: inline-block;
+            margin-bottom: @indent__s;
         }
-        &.selector {
-            max-width: 15px;
+        .box-tocart {
+            margin: @indent__s 0;
+            .qty {
+                vertical-align: middle;
+                &:extend(.abs-input-qty all);
+            }
+        }
+        .col {
+            &.item {
+                width: 50%;
+            }
+            &.photo {
+                max-width: 150px;
+            }
+            &.selector {
+                max-width: 15px;
+            }
+        }
+        textarea {
+            margin: @indent__s 0;
+        }
+        .input-text.qty {
+            margin-bottom: @indent__s;
+        }
+        .action.primary {
+            vertical-align: top;
+        }
+        .price {
+            font-weight: @font-weight__bold;
         }
     }
-    textarea {
-        margin: 10px 0;
-    }
-    .input-text.qty {
-        margin-bottom: 10px;
-    }
-    .action.primary {
-        vertical-align: top;
-    }
-    .price {
-        font-weight: @font-weight__bold;
-    }
-}
 
-.block-wishlist {
-    .block-title {
-        &:extend(.abs-block-title all);
-    }
-    .counter {
-        &:extend(.abs-block-items-counter all);
-    }
-    .product-item-name {
-        margin-right: @indent__m;
+    .block-wishlist {
+        .block-title {
+            &:extend(.abs-block-title all);
+        }
+        .counter {
+            &:extend(.abs-block-items-counter all);
+        }
+        .product-item-name {
+            margin-right: @indent__m;
+        }
     }
-}
 
-.products-grid.wishlist {
-    .product {
-        &-item {
-            &-photo {
-                margin-bottom: @indent__s;
-                display: block;
-            }
-            &-name {
-                margin-top: 0;
-            }
-            .price-box {
-                margin: 0;
-            }
-            &-tooltip {
-            }
-            .comment-box {
-                .label {
-                    &:extend(.abs-visually-hidden all);
+    .products-grid.wishlist {
+        .product {
+            &-item {
+                &-photo {
+                    display: block;
+                    margin-bottom: @indent__s;
                 }
-            }
-            &-comment {
-                display: block;
-                margin: @indent__s 0;
-                height: 42px;
-            }
-            &-actions {
-                > * {
-                    margin-right: 15px;
-                    &:last-child {
-                        margin-right: 0;
+                &-name {
+                    margin-top: 0;
+                }
+                .price-box {
+                    margin: 0;
+                }
+                &-tooltip {
+                }
+                .comment-box {
+                    .label {
+                        &:extend(.abs-visually-hidden all);
                     }
                 }
-            }
-            .box-tocart {
-                input.qty {
-                    height: 32px;
-                    &:extend(.abs-input-qty all);
+                &-comment {
+                    display: block;
+                    height: 42px;
+                    margin: @indent__s 0;
+                }
+                &-actions {
+                    > * {
+                        margin-right: 15px;
+                        &:last-child {
+                            margin-right: 0;
+                        }
+                    }
+                }
+                .box-tocart {
+                    input.qty {
+                        height: 32px;
+                        &:extend(.abs-input-qty all);
+                    }
                 }
             }
         }
     }
 }
 
-}
-
 //
-//    Mobile
-//--------------------------------------
+//  Mobile
+//  _____________________________________________
+
 .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) {
     .products-grid.wishlist {
         .product-item {
@@ -154,15 +154,15 @@
 
 .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) {
     .products-grid.wishlist {
-        margin-right: -@indent__s;
         margin-bottom: @indent__l;
+        margin-right: -@indent__s;
         .product {
             &-item {
                 padding: @indent__base @indent__s @indent__base @indent__base;
                 position: relative;
                 &-photo {
-                    margin-right: @indent__base;
                     float: left;
+                    margin-right: @indent__base;
                 }
                 &-name {
                     .lib-font-size(16);
@@ -211,8 +211,9 @@
     }
 
     //
-    //    Grid view for wishlist
-    //--------------------------------------
+    //  Grid view for wishlist
+    //  -----------------------------------------
+
     .wishlist-index-index {
         .product {
             &-item {
@@ -229,7 +230,7 @@
     .wishlist-index-index {
         .products-grid {
             .product-item {
-                margin-bottom: 20px;
+                margin-bottom: @indent__base;
                 width: 50%;
             }
             .product-item-actions {
@@ -240,8 +241,9 @@
 }
 
 //
-//    Desktop
-//--------------------------------------
+//  Desktop
+//  _____________________________________________
+
 .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
     .products-grid.wishlist {
         .product {
@@ -253,12 +255,9 @@
                     margin: @indent__s 0 0;
                 }
                 .fieldset {
-                    .field.qty,
-                    .product-item-actions {
-                    }
                     .field.qty {
-                        padding-right: @indent__s;
                         margin-bottom: @indent__s;
+                        padding-right: @indent__s;
                         .label {
                             width: auto;
                         }
@@ -275,7 +274,7 @@
             }
         }
     }
-    .wishlist-index-index  {
+    .wishlist-index-index {
         .product {
             &-item {
                 &-info {
@@ -283,17 +282,30 @@
                 }
             }
         }
+        .main {
+            .form-wishlist-items {
+                .actions-toolbar {
+                    &:extend(.abs-reset-left-margin-desktop all);
+                }
+            }
+        }
     }
 }
 
 .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__l) {
-    .wishlist-index-index .products-grid .product-items { margin: 0; }
-    .wishlist-index-index .products-grid .product-item {
-        width: 24.439%;
-        margin-left: calc(~"(100% - 4 * 24.439%) / 3");
-        padding: 0;
-        &:nth-child(4n+1) {
-            margin-left: 0;
+    .wishlist-index-index {
+        .products-grid {
+            .product-items {
+                margin: 0;
+            }
+            .product-item {
+                margin-left: calc(~"(100% - 4 * 24.439%) / 3");
+                padding: 0;
+                width: 24.439%;
+                &:nth-child(4n+1) {
+                    margin-left: 0;
+                }
+            }
         }
     }
 }
-- 
GitLab


From 4f1cfb72b578dd5852110b1f51b9333bab535f2d Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Mon, 12 Oct 2015 15:06:57 +0300
Subject: [PATCH 018/370] MAGETWO-42984: Remove Section from Customer Data

---
 .../Magento/Customer/Block/CustomerData.php   | 32 +------------------
 .../frontend/templates/js/customer-data.phtml |  1 -
 .../view/frontend/web/js/customer-data.js     |  8 -----
 3 files changed, 1 insertion(+), 40 deletions(-)

diff --git a/app/code/Magento/Customer/Block/CustomerData.php b/app/code/Magento/Customer/Block/CustomerData.php
index 66d4043f152..9d30a56de21 100644
--- a/app/code/Magento/Customer/Block/CustomerData.php
+++ b/app/code/Magento/Customer/Block/CustomerData.php
@@ -7,24 +7,14 @@ namespace Magento\Customer\Block;
 
 class CustomerData extends \Magento\Framework\View\Element\Template
 {
-    /**
-     * Sections that can not be cached on frontend-side
-     *
-     * @var array
-     */
-    protected $nonCachedSections = [];
-
     /**
      * @param \Magento\Framework\View\Element\Template\Context $context
      * @param array $data
-     * @param array $nonCachedSections
      */
     public function __construct(
         \Magento\Framework\View\Element\Template\Context $context,
-        array $data = [],
-        array $nonCachedSections = []
+        array $data = []
     ) {
-        $this->nonCachedSections = $nonCachedSections;
         parent::__construct($context, $data);
     }
 
@@ -50,24 +40,4 @@ class CustomerData extends \Magento\Framework\View\Element\Template
     {
         return $this->getUrl($route, ['_secure' => $this->getRequest()->isSecure()]);
     }
-
-    /**
-     * Get sections that can not be cached on frontend-side
-     *
-     * @return array
-     */
-    public function getNotCachedSections()
-    {
-        return $this->nonCachedSections;
-    }
-
-    /**
-     * Get keys of sections that can not be cached on frontend-side
-     *
-     * @return array
-     */
-    public function getNonCachedSectionKeys()
-    {
-        return array_keys($this->nonCachedSections);
-    }
 }
diff --git a/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml b/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml
index 60441eb039d..b34e7c871d3 100644
--- a/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml
+++ b/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml
@@ -13,7 +13,6 @@
         '*' => ['Magento_Customer/js/customer-data' => [
             'sectionLoadUrl' => $block->getCustomerDataUrl('customer/section/load'),
             'cookieLifeTime' => $block->getCookieLifeTime(),
-            'nonCachedSections' => $block->getNonCachedSectionKeys(),
         ]],
     ]);
 ?>
diff --git a/app/code/Magento/Customer/view/frontend/web/js/customer-data.js b/app/code/Magento/Customer/view/frontend/web/js/customer-data.js
index 726fa0816d7..f76913fee60 100644
--- a/app/code/Magento/Customer/view/frontend/web/js/customer-data.js
+++ b/app/code/Magento/Customer/view/frontend/web/js/customer-data.js
@@ -23,8 +23,6 @@ define([
             storage.removeAll();
             var date = new Date(Date.now() + parseInt(options.cookieLifeTime, 10) * 1000);
             $.localStorage.set('mage-cache-timeout', date);
-        } else {
-            invalidateNonCachedSections(options);
         }
     };
 
@@ -35,12 +33,6 @@ define([
         }
     };
 
-    var invalidateNonCachedSections = function(options) {
-        _.each(options.nonCachedSections, function (sectionName) {
-            storageInvalidation.set(sectionName, true);
-        });
-    }
-
     var dataProvider = {
         getFromStorage: function (sectionNames) {
             var result = {};
-- 
GitLab


From 537ef9982515dbcbd34079a62f66b747c5ac5875 Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Mon, 12 Oct 2015 16:29:26 +0300
Subject: [PATCH 019/370] MAGETWO-42984: Remove Section from Customer Data

---
 .../Customer/Test/TestCase/UpdateCustomerFrontendEntityTest.php | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/UpdateCustomerFrontendEntityTest.php b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/UpdateCustomerFrontendEntityTest.php
index 63308bbea50..e432b6c13eb 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/UpdateCustomerFrontendEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/UpdateCustomerFrontendEntityTest.php
@@ -127,6 +127,7 @@ class UpdateCustomerFrontendEntityTest extends Injectable
         $this->customerAccountIndex->getInfoBlock()->openEditContactInfo();
         $this->customerAccountEdit->getAccountInfoForm()->fill($customer);
         $this->customerAccountEdit->getAccountInfoForm()->submit();
+        $this->cmsIndex->getCmsPageBlock()->waitPageInit();
 
         \PHPUnit_Framework_Assert::assertThat($this->getName(), $assertCustomerInfoSuccessSavedMessage);
 
@@ -134,5 +135,6 @@ class UpdateCustomerFrontendEntityTest extends Injectable
         $this->customerAccountIndex->getDashboardAddress()->editBillingAddress();
         $this->customerAddressEdit->getEditForm()->fill($address);
         $this->customerAddressEdit->getEditForm()->saveAddress();
+        $this->cmsIndex->getCmsPageBlock()->waitPageInit();
     }
 }
-- 
GitLab


From e6e90c8fa66f870ca32765c2386db8adbba2cb79 Mon Sep 17 00:00:00 2001
From: Robert He <rohe@ebay.com>
Date: Mon, 12 Oct 2015 11:15:33 -0500
Subject: [PATCH 020/370] MAGETWO-43908: Rename misspelled functions in Weee
 helper

 -- rename some Weee functions
---
 app/code/Magento/Weee/Helper/Data.php                  |  8 ++++----
 .../Weee/Observer/GetPriceConfigurationObserver.php    |  4 ++--
 .../Weee/Observer/UpdateProductOptionsObserver.php     | 10 +++++-----
 .../Unit/Observer/UpdateProductOptionsObserverTest.php |  2 +-
 4 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/app/code/Magento/Weee/Helper/Data.php b/app/code/Magento/Weee/Helper/Data.php
index b91cd19e6be..c3d18ef8aa1 100644
--- a/app/code/Magento/Weee/Helper/Data.php
+++ b/app/code/Magento/Weee/Helper/Data.php
@@ -744,7 +744,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
      * @param  int|null $storeId
      * @return bool
      */
-    public function getDisplayIncl($storeId = null)
+    public function isDisplayIncl($storeId = null)
     {
         return $this->typeOfDisplay(
             WeeeDisplayConfig::DISPLAY_INCL,
@@ -759,7 +759,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
      * @param  int|null $storeId
      * @return bool
      */
-    public function getDisplayInclDesc($storeId = null)
+    public function isDisplayInclDesc($storeId = null)
     {
         return $this->typeOfDisplay(
             WeeeDisplayConfig::DISPLAY_INCL_DESCR,
@@ -774,7 +774,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
      * @param  int|null $storeId
      * @return bool
      */
-    public function getDisplayExlDescIncl($storeId = null)
+    public function isDisplayExlDescIncl($storeId = null)
     {
         return $this->typeOfDisplay(
             WeeeDisplayConfig::DISPLAY_EXCL_DESCR_INCL,
@@ -789,7 +789,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
      * @param  int|null $storeId
      * @return bool
      */
-    public function getDisplayExcl($storeId = null)
+    public function isDisplayExcl($storeId = null)
     {
         return $this->typeOfDisplay(
             WeeeDisplayConfig::DISPLAY_EXCL,
diff --git a/app/code/Magento/Weee/Observer/GetPriceConfigurationObserver.php b/app/code/Magento/Weee/Observer/GetPriceConfigurationObserver.php
index 0b8f4a4ea2b..6331faaa5c5 100644
--- a/app/code/Magento/Weee/Observer/GetPriceConfigurationObserver.php
+++ b/app/code/Magento/Weee/Observer/GetPriceConfigurationObserver.php
@@ -142,8 +142,8 @@ class GetPriceConfigurationObserver implements ObserverInterface
     protected function getWhichCalcPriceToUse($storeId = null)
     {
         $calcPrice = 'finalPrice';
-        if ($this->weeeData->getDisplayExcl($storeId) ||
-            $this->weeeData->getDisplayExlDescIncl($storeId) ||
+        if ($this->weeeData->isDisplayExcl($storeId) ||
+            $this->weeeData->isDisplayExlDescIncl($storeId) ||
             ($this->taxData->priceIncludesTax() && $this->taxData->displayPriceExcludingTax())
         ) {
             $calcPrice = 'basePrice';
diff --git a/app/code/Magento/Weee/Observer/UpdateProductOptionsObserver.php b/app/code/Magento/Weee/Observer/UpdateProductOptionsObserver.php
index deca1b93cf1..a572037b504 100644
--- a/app/code/Magento/Weee/Observer/UpdateProductOptionsObserver.php
+++ b/app/code/Magento/Weee/Observer/UpdateProductOptionsObserver.php
@@ -60,8 +60,8 @@ class UpdateProductOptionsObserver implements ObserverInterface
         }
 
         if ($this->weeeData->isEnabled() &&
-            !$this->weeeData->getDisplayIncl($product->getStoreId()) &&
-            !$this->weeeData->getDisplayExcl($product->getStoreId())
+            !$this->weeeData->isDisplayIncl($product->getStoreId()) &&
+            !$this->weeeData->isDisplayExcl($product->getStoreId())
         ) {
             // only do processing on bundle product
             if ($product->getTypeId() == \Magento\Catalog\Model\Product\Type::TYPE_BUNDLE) {
@@ -87,7 +87,7 @@ class UpdateProductOptionsObserver implements ObserverInterface
                     }
                 }
 
-                if ($this->weeeData->getDisplayExlDescIncl($product->getStoreId())) {
+                if ($this->weeeData->isDisplayExlDescIncl($product->getStoreId())) {
                     $options['optionTemplate'] .= sprintf(
                         ' <%% if (data.weeePrice) { %%>'
                         . '<%%- data.weeePrice.formatted %%>'
@@ -110,8 +110,8 @@ class UpdateProductOptionsObserver implements ObserverInterface
     protected function getWhichCalcPriceToUse($storeId = null)
     {
         $calcPrice = 'finalPrice';
-        if ($this->weeeData->getDisplayExcl($storeId) ||
-            $this->weeeData->getDisplayExlDescIncl($storeId) ||
+        if ($this->weeeData->isDisplayExcl($storeId) ||
+            $this->weeeData->isDisplayExlDescIncl($storeId) ||
             ($this->taxData->priceIncludesTax() && $this->taxData->displayPriceExcludingTax())
         ) {
             $calcPrice = 'basePrice';
diff --git a/app/code/Magento/Weee/Test/Unit/Observer/UpdateProductOptionsObserverTest.php b/app/code/Magento/Weee/Test/Unit/Observer/UpdateProductOptionsObserverTest.php
index c80de6e8958..4afd4ab454b 100644
--- a/app/code/Magento/Weee/Test/Unit/Observer/UpdateProductOptionsObserverTest.php
+++ b/app/code/Magento/Weee/Test/Unit/Observer/UpdateProductOptionsObserverTest.php
@@ -47,7 +47,7 @@ class UpdateProductOptionsObserverTest extends \PHPUnit_Framework_TestCase
             ->method('isEnabled')
             ->will($this->returnValue($weeeEnabled));
         $weeeHelper->expects($this->any())
-            ->method('getDisplayExlDescIncl')
+            ->method('isDisplayExlDescIncl')
             ->will($this->returnValue($weeeDisplayExclDescIncl));
         $weeeHelper->expects($this->any())
             ->method('getWeeeAttributesForBundle')
-- 
GitLab


From b0093e88a6d52963a4cc8af5d4ff893c92c3113a Mon Sep 17 00:00:00 2001
From: manasa <mpotluri@ebay.com>
Date: Mon, 12 Oct 2015 12:09:21 -0500
Subject: [PATCH 021/370] MAGETWO-43944: Fix Weee and Tax functional tests

---
 .../app/Magento/Tax/Test/Constraint/AssertTaxRuleApplying.php  | 3 +--
 .../app/Magento/Weee/Test/Constraint/AssertFptApplied.php      | 2 ++
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Constraint/AssertTaxRuleApplying.php b/dev/tests/functional/tests/app/Magento/Tax/Test/Constraint/AssertTaxRuleApplying.php
index 51caa4822fa..fb0f970f01b 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/Constraint/AssertTaxRuleApplying.php
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Constraint/AssertTaxRuleApplying.php
@@ -137,8 +137,7 @@ abstract class AssertTaxRuleApplying extends AbstractConstraint
         // Estimate Shipping and Tax
         $checkoutCart->open();
         $checkoutCart->getShippingBlock()->openEstimateShippingAndTax();
-        $checkoutCart->getShippingBlock()->fill($address);
-        $checkoutCart->getShippingBlock()->clickGetQuote();
+        $checkoutCart->getShippingBlock()->fillEstimateShippingAndTax($address);
         $checkoutCart->getShippingBlock()->selectShippingMethod($shipping);
         $this->assert();
     }
diff --git a/dev/tests/functional/tests/app/Magento/Weee/Test/Constraint/AssertFptApplied.php b/dev/tests/functional/tests/app/Magento/Weee/Test/Constraint/AssertFptApplied.php
index 2814c8597df..8975388bed1 100644
--- a/dev/tests/functional/tests/app/Magento/Weee/Test/Constraint/AssertFptApplied.php
+++ b/dev/tests/functional/tests/app/Magento/Weee/Test/Constraint/AssertFptApplied.php
@@ -172,6 +172,8 @@ class AssertFptApplied extends AbstractConstraint
     protected function getCartPrice(CatalogProductSimple $product, array $actualPrices)
     {
         $this->checkoutCart->open();
+        $this->checkoutCart->getShippingBlock()->openEstimateShippingAndTax();
+        $this->checkoutCart->getShippingBlock()->waitForUpdatedShippingMethods();
         $productItem = $this->checkoutCart->getCartBlock()->getCartItem($product);
         $productWeeeItem = $this->checkoutCart->getWeeeCartBlock()->getCartItem($product);
         $actualPrices['cart_item_price'] = $productItem->getPrice();
-- 
GitLab


From 2cf09f22e3f3234496aa67904947a97b5fe8f247 Mon Sep 17 00:00:00 2001
From: Mike Weis <miweis@ebay.com>
Date: Mon, 12 Oct 2015 14:05:29 -0500
Subject: [PATCH 022/370] MAGETWO-42753: Incorrect prices in mini shopping cart
 for combination of tax and FPT settings

 - fixed
---
 .../checkout/cart/item/price/sidebar.phtml    | 68 +++++++++++--------
 1 file changed, 39 insertions(+), 29 deletions(-)

diff --git a/app/code/Magento/Weee/view/frontend/templates/checkout/cart/item/price/sidebar.phtml b/app/code/Magento/Weee/view/frontend/templates/checkout/cart/item/price/sidebar.phtml
index 0f71192ce39..2da14c7d14b 100644
--- a/app/code/Magento/Weee/view/frontend/templates/checkout/cart/item/price/sidebar.phtml
+++ b/app/code/Magento/Weee/view/frontend/templates/checkout/cart/item/price/sidebar.phtml
@@ -9,24 +9,30 @@
 /** @var $block \Magento\Weee\Block\Item\Price\Renderer */
 
 $item = $block->getItem();
+
+// ensure we use the zone for the shopping cart / minicart
+$originalZone = $block->getZone();
+$block->setZone(\Magento\Framework\Pricing\Render::ZONE_CART);
 ?>
+
 <?php if ($block->displayPriceInclTax() || $block->displayBothPrices()): ?>
-<span class="price-including-tax" data-label="<?php echo $block->escapeHtml(__('Incl. Tax')); ?>">
-        <?php if ($block->displayPriceWithWeeeDetails()): ?>
-    <span class="minicart-tax-total">
-        <?php else: ?>
+    <span class="price-including-tax" data-label="<?php echo $block->escapeHtml(__('Incl. Tax')); ?>">
+    <?php if ($block->displayPriceWithWeeeDetails()): ?>
+        <span class="minicart-tax-total">
+    <?php else: ?>
         <span class="minicart-price">
-        <?php endif; ?>
+    <?php endif; ?>
         <?php /* @escapeNotVerified */ echo $block->formatPrice($block->getUnitDisplayPriceInclTax()); ?>
-            </span>
+        </span>
 
+    <?php if ($block->displayPriceWithWeeeDetails()): ?>
         <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($item)): ?>
-            <span class="minicart-tax-info" style="display: none">
-                <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($item) as $tax): ?>
-                    <span class="weee" data-label="<?php /* @escapeNotVerified */ echo $tax['title']; ?>">
-                        <?php /* @escapeNotVerified */ echo $block->formatPrice($tax['amount_incl_tax'], true, true); ?>
-                    </span>
-                <?php endforeach; ?>
+            <span class="minicart-tax-info">
+            <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($item) as $tax): ?>
+                <span class="weee" data-label="<?php /* @escapeNotVerified */ echo $tax['title']; ?>">
+                    <?php /* @escapeNotVerified */ echo $block->formatPrice($tax['amount_incl_tax'], true, true); ?>
+                </span>
+            <?php endforeach; ?>
             </span>
 
             <?php if ($block->displayFinalPrice()): ?>
@@ -37,35 +43,39 @@ $item = $block->getItem();
                 </span>
             <?php endif; ?>
         <?php endif; ?>
-    </span>
     <?php endif; ?>
+    </span>
+<?php endif; ?>
 
-    <?php if ($block->displayPriceExclTax() || $block->displayBothPrices()): ?>
+<?php if ($block->displayPriceExclTax() || $block->displayBothPrices()): ?>
     <span class="price-excluding-tax" data-label="<?php echo $block->escapeHtml(__('Excl. Tax')); ?>">
-        <?php if ($block->displayPriceWithWeeeDetails()): ?>
+    <?php if ($block->displayPriceWithWeeeDetails()): ?>
         <span class="minicart-tax-total">
-        <?php else: ?>
-            <span class="minicart-price">
-        <?php endif; ?>
+    <?php else: ?>
+        <span class="minicart-price">
+    <?php endif; ?>
         <?php /* @escapeNotVerified */ echo $block->formatPrice($block->getUnitDisplayPriceExclTax()); ?>
-            </span>
+        </span>
 
-            <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($item)): ?>
-                <span class="minicart-tax-info">
-                <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($item) as $tax): ?>
-                    <span class="weee" data-label="<?php /* @escapeNotVerified */ echo $tax['title']; ?>">
-                        <?php /* @escapeNotVerified */ echo $block->formatPrice($tax['amount'], true, true); ?>
-                    </span>
-                <?php endforeach; ?>
+    <?php if ($block->displayPriceWithWeeeDetails()): ?>
+        <?php if ($this->helper('Magento\Weee\Helper\Data')->getApplied($item)): ?>
+            <span class="minicart-tax-info">
+            <?php foreach ($this->helper('Magento\Weee\Helper\Data')->getApplied($item) as $tax): ?>
+                <span class="weee" data-label="<?php /* @escapeNotVerified */ echo $tax['title']; ?>">
+                    <?php /* @escapeNotVerified */ echo $block->formatPrice($tax['amount'], true, true); ?>
+                </span>
+            <?php endforeach; ?>
             </span>
 
             <?php if ($block->displayFinalPrice()): ?>
-                    <span class="minicart-tax-total">
+                <span class="minicart-tax-total">
                     <span class="weee" data-label="<?php echo $block->escapeHtml(__('Total')); ?>">
                         <?php /* @escapeNotVerified */ echo $block->formatPrice($block->getFinalUnitDisplayPriceExclTax()); ?>
                     </span>
                 </span>
-                <?php endif; ?>
             <?php endif; ?>
-    </span>
         <?php endif; ?>
+    <?php endif; ?>
+    </span>
+<?php endif; ?>
+<?php $block->setZone($originalZone); ?>
-- 
GitLab


From a355760787fe26c1655718e2fc8f351d3b8d2757 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Mon, 12 Oct 2015 16:35:47 -0500
Subject: [PATCH 023/370] MAGETWO-43787: cache:clean command doesn't clear
 Varnish cache  - throw events to handle page caching from CLI tools

---
 .../Command/AbstractCacheTypeManageCommand.php  | 17 +++++++++++++++++
 .../Console/Command/CacheCleanCommand.php       |  1 +
 .../Console/Command/CacheFlushCommand.php       |  1 +
 .../Command/AbstractCacheCommandTest.php        |  4 ++--
 .../Command/AbstractCacheManageCommandTest.php  | 17 ++++++++++++++++-
 .../Console/Command/CacheCleanCommandTest.php   |  7 ++++---
 .../Console/Command/CacheDisableCommandTest.php |  6 +++---
 .../Console/Command/CacheEnableCommandTest.php  |  8 ++++----
 .../Console/Command/CacheFlushCommandTest.php   |  7 ++++---
 .../Console/Command/CacheStatusCommandTest.php  |  4 ++--
 10 files changed, 54 insertions(+), 18 deletions(-)

diff --git a/app/code/Magento/Backend/Console/Command/AbstractCacheTypeManageCommand.php b/app/code/Magento/Backend/Console/Command/AbstractCacheTypeManageCommand.php
index 5974798f74b..56970004795 100644
--- a/app/code/Magento/Backend/Console/Command/AbstractCacheTypeManageCommand.php
+++ b/app/code/Magento/Backend/Console/Command/AbstractCacheTypeManageCommand.php
@@ -6,11 +6,28 @@
 
 namespace Magento\Backend\Console\Command;
 
+use Magento\Framework\Event\ManagerInterface as EventManagerInterface;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
+use Magento\Framework\App\Cache\Manager;
 
 abstract class AbstractCacheTypeManageCommand extends AbstractCacheManageCommand
 {
+    /** @var EventManagerInterface */
+    protected $eventManager;
+
+    /**
+     * @param Manager $cacheManager
+     * @param EventManagerInterface $eventManager
+     */
+    public function __construct(
+        Manager $cacheManager,
+        EventManagerInterface $eventManager
+    ) {
+        $this->eventManager = $eventManager;
+        parent::__construct($cacheManager);
+    }
+
     /**
      * Perform a cache management action on cache types
      *
diff --git a/app/code/Magento/Backend/Console/Command/CacheCleanCommand.php b/app/code/Magento/Backend/Console/Command/CacheCleanCommand.php
index ab57f0ff7b5..49aeb17839e 100644
--- a/app/code/Magento/Backend/Console/Command/CacheCleanCommand.php
+++ b/app/code/Magento/Backend/Console/Command/CacheCleanCommand.php
@@ -29,6 +29,7 @@ class CacheCleanCommand extends AbstractCacheTypeManageCommand
      */
     protected function performAction(array $cacheTypes)
     {
+        $this->eventManager->dispatch('adminhtml_cache_flush_system');
         $this->cacheManager->clean($cacheTypes);
     }
 
diff --git a/app/code/Magento/Backend/Console/Command/CacheFlushCommand.php b/app/code/Magento/Backend/Console/Command/CacheFlushCommand.php
index c847204de90..7572fb21cba 100644
--- a/app/code/Magento/Backend/Console/Command/CacheFlushCommand.php
+++ b/app/code/Magento/Backend/Console/Command/CacheFlushCommand.php
@@ -29,6 +29,7 @@ class CacheFlushCommand extends AbstractCacheTypeManageCommand
      */
     protected function performAction(array $cacheTypes)
     {
+        $this->eventManager->dispatch('adminhtml_cache_flush_all');
         $this->cacheManager->flush($cacheTypes);
     }
 
diff --git a/app/code/Magento/Backend/Test/Unit/Console/Command/AbstractCacheCommandTest.php b/app/code/Magento/Backend/Test/Unit/Console/Command/AbstractCacheCommandTest.php
index 33bce6388fb..b7ecddf4d23 100644
--- a/app/code/Magento/Backend/Test/Unit/Console/Command/AbstractCacheCommandTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Console/Command/AbstractCacheCommandTest.php
@@ -13,7 +13,7 @@ abstract class AbstractCacheCommandTest extends \PHPUnit_Framework_TestCase
     /**
      * @var \Magento\Framework\App\Cache\Manager|\PHPUnit_Framework_MockObject_MockObject
      */
-    protected $cacheManager;
+    protected $cacheManagerMock;
 
     /**
      * @var AbstractCacheManageCommand
@@ -22,7 +22,7 @@ abstract class AbstractCacheCommandTest extends \PHPUnit_Framework_TestCase
 
     public function setUp()
     {
-        $this->cacheManager = $this->getMock('Magento\Framework\App\Cache\Manager', [], [], '', false);
+        $this->cacheManagerMock = $this->getMock('Magento\Framework\App\Cache\Manager', [], [], '', false);
     }
 
     /**
diff --git a/app/code/Magento/Backend/Test/Unit/Console/Command/AbstractCacheManageCommandTest.php b/app/code/Magento/Backend/Test/Unit/Console/Command/AbstractCacheManageCommandTest.php
index 53ed624db47..ef8a9e941bf 100644
--- a/app/code/Magento/Backend/Test/Unit/Console/Command/AbstractCacheManageCommandTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Console/Command/AbstractCacheManageCommandTest.php
@@ -10,6 +10,21 @@ use Symfony\Component\Console\Tester\CommandTester;
 
 abstract class AbstractCacheManageCommandTest extends AbstractCacheCommandTest
 {
+    /** @var  string */
+    protected $cacheEventName;
+
+    /** @var  \Magento\Framework\Event\ManagerInterface */
+    protected $eventManagerMock;
+
+    public function setUp()
+    {
+        $this->eventManagerMock = $this->getMockBuilder('\Magento\Framework\Event\ManagerInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->eventManagerMock->expects($this->any())->method('dispatch');
+        parent::setUp();
+    }
+
     /**
      * @return array
      */
@@ -35,7 +50,7 @@ abstract class AbstractCacheManageCommandTest extends AbstractCacheCommandTest
      */
     public function testExecuteInvalidCacheType()
     {
-        $this->cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
+        $this->cacheManagerMock->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
         $param = ['types' => ['A', 'D']];
         $commandTester = new CommandTester($this->command);
         $commandTester->execute($param);
diff --git a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheCleanCommandTest.php b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheCleanCommandTest.php
index a51fa92c1ad..16ef5f2d797 100644
--- a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheCleanCommandTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheCleanCommandTest.php
@@ -13,8 +13,9 @@ class CacheCleanCommandTest extends AbstractCacheManageCommandTest
 {
     public function setUp()
     {
+        $this->cacheEventName = 'adminhtml_cache_flush_system';
         parent::setUp();
-        $this->command = new CacheCleanCommand($this->cacheManager);
+        $this->command = new CacheCleanCommand($this->cacheManagerMock, $this->eventManagerMock);
     }
 
     /**
@@ -25,8 +26,8 @@ class CacheCleanCommandTest extends AbstractCacheManageCommandTest
      */
     public function testExecute($param, $types, $output)
     {
-        $this->cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
-        $this->cacheManager->expects($this->once())->method('clean')->with($types);
+        $this->cacheManagerMock->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
+        $this->cacheManagerMock->expects($this->once())->method('clean')->with($types);
 
         $commandTester = new CommandTester($this->command);
         $commandTester->execute($param);
diff --git a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheDisableCommandTest.php b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheDisableCommandTest.php
index 1eb4cffd23f..f3e3311d4b8 100644
--- a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheDisableCommandTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheDisableCommandTest.php
@@ -14,7 +14,7 @@ class CacheDisableCommandTest extends AbstractCacheSetCommandTest
     public function setUp()
     {
         parent::setUp();
-        $this->command = new CacheDisableCommand($this->cacheManager);
+        $this->command = new CacheDisableCommand($this->cacheManagerMock);
     }
 
     /**
@@ -26,8 +26,8 @@ class CacheDisableCommandTest extends AbstractCacheSetCommandTest
      */
     public function testExecute($param, $enable, $result, $output)
     {
-        $this->cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
-        $this->cacheManager->expects($this->once())->method('setEnabled')->with($enable, false)->willReturn($result);
+        $this->cacheManagerMock->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
+        $this->cacheManagerMock->expects($this->once())->method('setEnabled')->with($enable, false)->willReturn($result);
 
         $commandTester = new CommandTester($this->command);
         $commandTester->execute($param);
diff --git a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheEnableCommandTest.php b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheEnableCommandTest.php
index e20978e81e7..8690d4295ec 100644
--- a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheEnableCommandTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheEnableCommandTest.php
@@ -14,7 +14,7 @@ class CacheEnableCommandTest extends AbstractCacheSetCommandTest
     public function setUp()
     {
         parent::setUp();
-        $this->command = new CacheEnableCommand($this->cacheManager);
+        $this->command = new CacheEnableCommand($this->cacheManagerMock);
     }
 
     /**
@@ -26,9 +26,9 @@ class CacheEnableCommandTest extends AbstractCacheSetCommandTest
      */
     public function testExecute($param, $enable, $result, $output)
     {
-        $this->cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
-        $this->cacheManager->expects($this->once())->method('setEnabled')->with($enable, true)->willReturn($result);
-        $this->cacheManager->expects($result === [] ? $this->never() : $this->once())->method('clean')->with($enable);
+        $this->cacheManagerMock->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
+        $this->cacheManagerMock->expects($this->once())->method('setEnabled')->with($enable, true)->willReturn($result);
+        $this->cacheManagerMock->expects($result === [] ? $this->never() : $this->once())->method('clean')->with($enable);
 
         $commandTester = new CommandTester($this->command);
         $commandTester->execute($param);
diff --git a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheFlushCommandTest.php b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheFlushCommandTest.php
index 53032fe55ae..5717e8a7307 100644
--- a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheFlushCommandTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheFlushCommandTest.php
@@ -13,8 +13,9 @@ class CacheFlushCommandTest extends AbstractCacheManageCommandTest
 {
     public function setUp()
     {
+        $this->cacheEventName = 'adminhtml_cache_flush_all';
         parent::setUp();
-        $this->command = new CacheFlushCommand($this->cacheManager);
+        $this->command = new CacheFlushCommand($this->cacheManagerMock, $this->eventManagerMock);
     }
 
     /**
@@ -25,8 +26,8 @@ class CacheFlushCommandTest extends AbstractCacheManageCommandTest
      */
     public function testExecute($param, $types, $output)
     {
-        $this->cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
-        $this->cacheManager->expects($this->once())->method('flush')->with($types);
+        $this->cacheManagerMock->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
+        $this->cacheManagerMock->expects($this->once())->method('flush')->with($types);
 
         $commandTester = new CommandTester($this->command);
         $commandTester->execute($param);
diff --git a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheStatusCommandTest.php b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheStatusCommandTest.php
index 4c792a4548d..a8ee48491fb 100644
--- a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheStatusCommandTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheStatusCommandTest.php
@@ -14,13 +14,13 @@ class CacheStatusCommandTest extends AbstractCacheCommandTest
     public function setUp()
     {
         parent::setUp();
-        $this->command = new CacheStatusCommand($this->cacheManager);
+        $this->command = new CacheStatusCommand($this->cacheManagerMock);
     }
 
     public function testExecute()
     {
         $cacheTypes = ['A' => 0, 'B' => 1, 'C' => 1];
-        $this->cacheManager->expects($this->once())->method('getStatus')->willReturn($cacheTypes);
+        $this->cacheManagerMock->expects($this->once())->method('getStatus')->willReturn($cacheTypes);
         $commandTester = new CommandTester($this->command);
         $commandTester->execute([]);
 
-- 
GitLab


From aec4ea244d6adac7b97f2e964e688ed6055bae4e Mon Sep 17 00:00:00 2001
From: Michail Slabko <mslabko@ebay.com>
Date: Tue, 13 Oct 2015 15:43:23 +0300
Subject: [PATCH 024/370] MAGETWO-43791: [GITHUB] Adding product configurations
 uses name based SKU #1736

---
 .../view/adminhtml/web/js/variations/steps/summary.js         | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/summary.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/summary.js
index 0da35357808..9a0d4b2dab0 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/summary.js
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/summary.js
@@ -40,7 +40,7 @@ define([
         nextLabelText: $.mage.__('Generate Products'),
         variations: [],
         generateGrid: function (variations, getSectionValue) {
-            var productName = this.variationsComponent().getProductValue('name'),
+            var productSku = this.variationsComponent().getProductValue('sku'),
                 productPrice = this.variationsComponent().getProductValue('price'),
                 productWeight = this.variationsComponent().getProductValue('weight'),
                 variationsKeys = [],
@@ -59,7 +59,7 @@ define([
                     });
                 }
                 images = getSectionValue('images', options);
-                sku = productName + _.reduce(options, function (memo, option) {
+                sku = productSku + _.reduce(options, function (memo, option) {
                     return memo + '-' + option.label;
                 }, '');
                 quantity = getSectionValue('quantity', options);
-- 
GitLab


From 14c9f5670aaa8900cfa0dee56cd27ec66bdca2d4 Mon Sep 17 00:00:00 2001
From: Olga Matviienko <omatviienko@ebay.com>
Date: Tue, 13 Oct 2015 16:02:56 +0300
Subject: [PATCH 025/370] MAGETWO-41780: Update .less files with changes put
 into CSS

---
 .../app/setup/styles/less/pages/_common.less  |  20 ++++
 .../styles/less/pages/_readiness-check.less   |   2 +-
 .../web/app/setup/styles/less/setup.less      |   1 +
 .../updater/styles/less/components/_menu.less |   7 ++
 .../updater/styles/less/pages/_common.less    |   1 +
 .../updater/styles/less/source/_forms.less    |   2 +-
 .../styles/less/source/_typography.less       |   2 -
 .../styles/less/source/_variables.less        |   2 +-
 .../css/source/actions/_actions-switcher.less | 110 ++++++++++++++++++
 setup/pub/styles/setup.css                    |   2 +-
 setup/view/magento/setup/select-version.phtml |  11 +-
 11 files changed, 149 insertions(+), 11 deletions(-)
 create mode 100644 app/design/adminhtml/Magento/backend/web/css/source/actions/_actions-switcher.less

diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/pages/_common.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/pages/_common.less
index c743005c076..2665555a635 100644
--- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/pages/_common.less
+++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/pages/_common.less
@@ -19,6 +19,12 @@
     padding-top: @main__indent-top;
 }
 
+.menu-wrapper {
+    .logo-static {
+        pointer-events: none;
+    }
+}
+
 //
 //  Header
 //  _____________________________________________
@@ -44,6 +50,10 @@
 //  Titles
 //  _____________________________________________
 
+.page-title {
+    margin-bottom: @indent__s;
+}
+
 .page-sub-title {
     font-size: 2rem;
     margin-bottom: 1.3em;
@@ -59,3 +69,13 @@
         margin-top: 1.5rem;
     }
 }
+
+//  Spinner modification for installer
+.spinner {
+    &.side {
+        float: left;
+        font-size: 2.4rem;
+        margin-left: 2rem;
+        margin-top: -5px;
+    }
+}
diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/pages/_readiness-check.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/pages/_readiness-check.less
index cde931e2c71..68932713975 100644
--- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/pages/_readiness-check.less
+++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/pages/_readiness-check.less
@@ -56,7 +56,7 @@
 .readiness-check-icon {
     float: left;
     margin-left: 1.7rem;
-    margin-top: .7rem;
+    margin-top: .3rem;
 }
 
 //
diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/setup.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/setup.less
index c2bbaf8f432..f315d89cba1 100644
--- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/setup.less
+++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/setup.less
@@ -52,6 +52,7 @@
 
 //  Inherit Backend components
 @import '../../../../css/source/_actions.less';
+@import '../../../../css/source/actions/_actions-switcher.less'; // ToDo UI: remove when yes/no switcher is integrated to the backend
 @import '../../../../css/source/components/_messages.less';
 @import '../../../../css/source/components/_modals_extend.less';
 @import '../../../../css/source/components/_spinner.less';
diff --git a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/components/_menu.less b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/components/_menu.less
index e2fb2952d45..0d8e187946d 100644
--- a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/components/_menu.less
+++ b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/components/_menu.less
@@ -25,6 +25,13 @@
                     top: -1.6rem;
                 }
             }
+            &._active {
+                > a {
+                    &:after {
+                        display: block;
+                    }
+                }
+            }
         }
         > a {
             padding-top: 1.3rem;
diff --git a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/pages/_common.less b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/pages/_common.less
index a404bd2a8a9..7748463ab88 100644
--- a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/pages/_common.less
+++ b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/pages/_common.less
@@ -13,6 +13,7 @@
 
 .page-sub-title {
     margin-bottom: 2.1rem;
+    margin-top: @indent__l;
 }
 
 .multiselect-custom {
diff --git a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/source/_forms.less b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/source/_forms.less
index 22833d4d0ce..0f44d221ef7 100644
--- a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/source/_forms.less
+++ b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/source/_forms.less
@@ -15,4 +15,4 @@
     letter-spacing: @letter-spacing__small;
     margin-left: .4rem;
     margin-bottom: .4rem;
-}
\ No newline at end of file
+}
diff --git a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/source/_typography.less b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/source/_typography.less
index d11865d6989..0fc83eb059c 100644
--- a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/source/_typography.less
+++ b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/source/_typography.less
@@ -42,5 +42,3 @@
         margin-right: 2.4rem;
     }
 }
-
-
diff --git a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/source/_variables.less b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/source/_variables.less
index ff92bb10842..6d14e0a707d 100644
--- a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/source/_variables.less
+++ b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/source/_variables.less
@@ -36,4 +36,4 @@
 //
 //  Tables
 //  ---------------------------------------------
-@table__color: @color-very-dark-gray-black;
\ No newline at end of file
+@table__color: @color-very-dark-gray-black;
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/actions/_actions-switcher.less b/app/design/adminhtml/Magento/backend/web/css/source/actions/_actions-switcher.less
new file mode 100644
index 00000000000..1dd211f38ba
--- /dev/null
+++ b/app/design/adminhtml/Magento/backend/web/css/source/actions/_actions-switcher.less
@@ -0,0 +1,110 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  Yes/no switcher
+//  _____________________________________________
+
+//  ToDo UI: integrate the switcher to the backend
+
+//
+//  Variables
+//  ---------------------------------------------
+
+@actions-switcher-background-color: @color-gray89;
+@actions-switcher-border-radius: 12px;
+@actions-switcher-border: 1px solid @color-gray65-lighten;
+@actions-switcher-control-background-color: @color-white;
+@actions-switcher-height: 20px;
+@actions-switcher-width: 37px;
+
+//
+
+.actions-switch {
+    -webkit-user-select: none;
+       -moz-user-select: none;
+        -ms-user-select: none;
+    height: @actions-switcher-height;
+    margin-right: 30px;
+    position: relative;
+    width: @actions-switcher-width;
+}
+
+.actions-switch-label {
+    background: @actions-switcher-background-color;
+    border-radius: @actions-switcher-border-radius;
+    border: @actions-switcher-border;
+    cursor: pointer;
+    display: block;
+    overflow: hidden;
+}
+
+.actions-switch-inner {
+    display: block;
+    margin-left: -100%;
+    transition: margin 0.3s ease-in 0s;
+    width: 200%;
+    &:before,
+    &:after {
+        border-radius: @actions-switcher-border-radius;
+        color: @color-white;
+        display: block;
+        float: left;
+        height: @actions-switcher-height;
+        line-height: 22px;
+        padding: 0;
+        width: 50%;
+    }
+    &:before {
+        background-color: @color-green-apple;
+        content: "";
+    }
+    &:after {
+        content: "";
+        text-align: right;
+    }
+}
+
+.actions-switch-indicator {
+    background: @actions-switcher-control-background-color;
+    border-radius: @actions-switcher-border-radius;
+    border: @actions-switcher-border;
+    bottom: -2px;
+    display: block;
+    position: absolute;
+    right: 15px;
+    top: 0;
+    transition: all 0.3s ease-in 0s;
+    width: 22px;
+}
+
+.actions-switch-text {
+    &:after {
+        content: attr(data-label-no);
+        display: block;
+        left: 32px;
+        margin-left: 12px;
+        position: absolute;
+    }
+}
+
+.actions-switch-checkbox {
+    display: none;
+    &:checked {
+        + .actions-switch-label {
+            .actions-switch-inner {
+                margin-left: 0;
+            }
+            .actions-switch-indicator {
+                right: 0;
+            }
+            .actions-switch-text {
+                &:after {
+                    content: attr(data-label-yes);
+                }
+            }
+        }
+    }
+}
diff --git a/setup/pub/styles/setup.css b/setup/pub/styles/setup.css
index ebfc3c33616..37dbf409f7a 100644
--- a/setup/pub/styles/setup.css
+++ b/setup/pub/styles/setup.css
@@ -3,4 +3,4 @@
  * See COPYING.txt for license details.
  */
 
-.abs-action-delete,.abs-icon,.action-close:before,.action-next:before,.action-previous:before,.admin-user .admin__action-dropdown:before,.admin__action-multiselect-search-label:before,.admin__control-checkbox+label:before,.admin__control-radio+label:before,.admin__control-table .action-delete:before,.admin__current-filters-list .action-remove:before,.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before,.admin__data-grid-action-bookmarks .admin__action-dropdown:before,.admin__data-grid-action-columns .admin__action-dropdown:before,.admin__data-grid-action-export .admin__action-dropdown:before,.admin__menu .level-0>a:before,.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon,.admin__page-nav-title._collapsible:after,.data-grid-filters-action-wrap .action-default:before,.data-grid-row-changed:after,.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before,.data-grid-search-control-wrap .action-submit:before,.icon-failed:before,.icon-success:before,.notifications-action:before,.notifications-close:before,.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before,.page-title-jumbo-success:before,.search-global-label:before,.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before,.setup-home-item:before,.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before,.store-switcher .dropdown-menu .dropdown-toolbar a:before,.tooltip .help a:before,.tooltip .help span:before{-webkit-font-smoothing:antialiased;font-family:Icons;line-height:1;font-style:normal;font-weight:400;speak:none}.validation-symbol:after{content:'*';color:#e22626;font-weight:400;margin-left:3px}.abs-modal-overlay,.modals-overlay{background:rgba(0,0,0,.35);bottom:0;left:0;position:fixed;right:0;top:0}.abs-action-delete>span,.abs-visually-hidden,.admin__control-fields .admin__field:nth-child(n+2):not(.admin__field-option)>.admin__field-label,.admin__field-tooltip .admin__field-tooltip-action span,.selectmenu .action-delete>span,.selectmenu .action-edit>span,.selectmenu .action-save>span,.selectmenu-toggle span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.abs-visually-hidden-reset{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.abs-clearfix:after,.abs-clearfix:before,.action-multicheck-wrap:after,.action-multicheck-wrap:before,.actions-split:after,.actions-split:before,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:after,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:before,.admin__data-grid-filters-footer:after,.admin__data-grid-filters-footer:before,.admin__data-grid-filters:after,.admin__data-grid-filters:before,.admin__data-grid-header-row:after,.admin__data-grid-header-row:before,.page-actions._fixed:after,.page-actions._fixed:before,.page-content:after,.page-content:before,.page-header-actions:after,.page-header-actions:before,.page-main-actions:not(._hidden):after,.page-main-actions:not(._hidden):before{content:'';display:table}.abs-clearfix:after,.action-multicheck-wrap:after,.actions-split:after,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:after,.admin__data-grid-filters-footer:after,.admin__data-grid-filters:after,.admin__data-grid-header-row:after,.page-actions._fixed:after,.page-content:after,.page-header-actions:after,.page-main-actions:not(._hidden):after{clear:both}.abs-list-reset-styles{margin:0;padding:0;list-style:none}.abs-draggable-handle{cursor:-webkit-grab;cursor:move;font-size:0;margin-top:-4px;padding:0 1rem 0 0;vertical-align:middle;display:inline-block;text-decoration:none}.abs-draggable-handle:before{-webkit-font-smoothing:antialiased;font-size:1.8rem;line-height:inherit;color:#9e9e9e;content:'\e617';font-family:Icons;vertical-align:middle;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.abs-draggable-handle:hover:before{color:#858585}html{box-sizing:border-box;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}*,:after,:before{box-sizing:inherit}:focus{box-shadow:none;outline:0}._keyfocus :focus{box-shadow:0 0 0 1px #008bdb}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}embed,img,object,video{max-width:100%}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/light/opensans-300.eot);src:url(../fonts/opensans/light/opensans-300.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/light/opensans-300.woff2) format('woff2'),url(../fonts/opensans/light/opensans-300.woff) format('woff'),url(../fonts/opensans/light/opensans-300.ttf) format('truetype'),url('../fonts/opensans/light/opensans-300.svg#Open Sans') format('svg');font-weight:300;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/regular/opensans-400.eot);src:url(../fonts/opensans/regular/opensans-400.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/regular/opensans-400.woff2) format('woff2'),url(../fonts/opensans/regular/opensans-400.woff) format('woff'),url(../fonts/opensans/regular/opensans-400.ttf) format('truetype'),url('../fonts/opensans/regular/opensans-400.svg#Open Sans') format('svg');font-weight:400;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/semibold/opensans-600.eot);src:url(../fonts/opensans/semibold/opensans-600.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/semibold/opensans-600.woff2) format('woff2'),url(../fonts/opensans/semibold/opensans-600.woff) format('woff'),url(../fonts/opensans/semibold/opensans-600.ttf) format('truetype'),url('../fonts/opensans/semibold/opensans-600.svg#Open Sans') format('svg');font-weight:600;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/bold/opensans-700.eot);src:url(../fonts/opensans/bold/opensans-700.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/bold/opensans-700.woff2) format('woff2'),url(../fonts/opensans/bold/opensans-700.woff) format('woff'),url(../fonts/opensans/bold/opensans-700.ttf) format('truetype'),url('../fonts/opensans/bold/opensans-700.svg#Open Sans') format('svg');font-weight:700;font-style:normal}html{font-size:62.5%}body{color:#333;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.36;font-size:1.4rem}h1{margin:0 0 2rem;color:#41362f;font-weight:400;line-height:1.2;font-size:2.8rem}h2{margin:0 0 2rem;color:#41362f;font-weight:400;line-height:1.2;font-size:2rem}h3{margin:0 0 2rem;color:#41362f;font-weight:600;line-height:1.2;font-size:1.7rem}h4,h5,h6{font-weight:600;margin-top:0}p{margin:0 0 1em}small{font-size:1.2rem}a{color:#008bdb;text-decoration:none}a:hover{color:#0fa7ff;text-decoration:underline}dl,ol,ul{padding-left:0}nav ol,nav ul{list-style:none;margin:0;padding:0}html{height:100%}body{background-color:#fff;min-height:100%;min-width:102.4rem}.page-wrapper{background-color:#fff;display:inline-block;margin-left:-4px;vertical-align:top;width:calc(100% - 8.8rem)}.page-content{padding-bottom:3rem;padding-left:3rem;padding-right:3rem}.notices-wrapper{margin:0 3rem}.notices-wrapper .messages{margin-bottom:0}@media (min-width:1024px){html{width:100vw}body{overflow-x:hidden}}.row{margin-left:0;margin-right:0}.row:after{clear:both;content:'';display:table}.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9,.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:0;padding-right:0}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}.row-gutter{margin-left:-1.5rem;margin-right:-1.5rem}.row-gutter>[class*=col-]{padding-left:1.5rem;padding-right:1.5rem}.abs-clearer:after,.component-manager-content:after,.component-manager-title:after,.form-row:after,.header:after,.nav:after,body:after{clear:both;content:'';display:table}.ng-cloak{display:none!important}.hide.hide{display:none}.show.show{display:block}.text-center{text-align:center}.text-right{text-align:right}@font-face{font-family:Icons;src:url(../fonts/icons/icons.eot);src:url(../fonts/icons/icons.eot?#iefix) format('embedded-opentype'),url(../fonts/icons/icons.woff2) format('woff2'),url(../fonts/icons/icons.woff) format('woff'),url(../fonts/icons/icons.ttf) format('truetype'),url(../fonts/icons/icons.svg#Icons) format('svg');font-weight:400;font-style:normal}[class*=icon-]{display:inline-block;line-height:1}.icon-failed:before,.icon-success:before,[class*=icon-]:after{font-family:Icons}.icon-success{color:#79a22e}.icon-success:before{content:'\e62d'}.icon-failed{color:#e22626}.icon-failed:before{content:'\e632'}.icon-success-thick:after{content:'\e62d'}.icon-collapse:after{content:'\e615'}.icon-failed-thick:after{content:'\e632'}.icon-expand:after{content:'\e616'}.icon-warning:after{content:'\e623'}.icon-failed-round,.icon-success-round{border-radius:100%;color:#fff;font-size:2.5rem;height:1em;position:relative;text-align:center;width:1em}.icon-failed-round:after,.icon-success-round:after{bottom:0;font-size:.5em;left:0;position:absolute;right:0;top:.45em}.icon-success-round{background-color:#79a22e}.icon-success-round:after{content:'\e62d'}.icon-failed-round{background-color:#e22626}.icon-failed-round:after{content:'\e632'}dl,ol,ul{margin-top:0}.list{padding-left:0}.list>li{display:block;margin-bottom:.75em;position:relative}.list>li>.icon-failed,.list>li>.icon-success{font-size:1.6em;left:-.1em;position:absolute;top:0}.list>li>.icon-success{color:#79a22e}.list>li>.icon-failed{color:#e22626}.list-item-failed,.list-item-icon,.list-item-success,.list-item-warning{padding-left:3.5rem}.list-item-failed:before,.list-item-success:before,.list-item-warning:before{left:-.1em;position:absolute}.list-item-success:before{color:#79a22e}.list-item-failed:before{color:#e22626}.list-item-warning:before{color:#ef672f}.list-definition{margin:0 0 3rem;padding:0}.list-definition>dt{clear:left;float:left}.list-definition>dd{margin-bottom:1em;margin-left:20rem}.btn-wrap{margin:0 auto}.btn-wrap .btn{width:100%}.btn{background:#e3e3e3;border:none;color:#514943;display:inline-block;font-size:1.6rem;font-weight:600;padding:.45em .9em;text-align:center}.btn:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.btn:active{background-color:#d6d6d6}.btn.disabled,.btn[disabled]{cursor:default;opacity:.5;pointer-events:none}.ie9 .btn.disabled,.ie9 .btn[disabled]{background-color:#f0f0f0;opacity:1;text-shadow:none}.btn-large{padding:.75em 1.25em}.btn-medium{font-size:1.4rem;padding:.5em 1.5em .6em}.btn-link{background-color:transparent;border:none;color:#008bdb;font-family:1.6rem;font-size:1.5rem}.btn-link:active,.btn-link:focus,.btn-link:hover{background-color:transparent;color:#0fa7ff}.btn-prime{background-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.btn-prime:focus,.btn-prime:hover{background-color:#f65405;background-repeat:repeat-x;background-image:linear-gradient(to right,#e04f00 0,#f65405 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e04f00', endColorstr='#f65405', GradientType=1);color:#fff}.btn-prime:active{background-color:#e04f00;background-repeat:repeat-x;background-image:linear-gradient(to right,#f65405 0,#e04f00 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f65405', endColorstr='#e04f00', GradientType=1);color:#fff}.ie9 .btn-prime.disabled,.ie9 .btn-prime[disabled]{background-color:#fd6e23}.ie9 .btn-prime.disabled:active,.ie9 .btn-prime.disabled:hover,.ie9 .btn-prime[disabled]:active,.ie9 .btn-prime[disabled]:hover{background-color:#fd6e23;-webkit-filter:none;filter:none}.btn-secondary{background-color:#514943;color:#fff}.btn-secondary:hover{background-color:#5f564f;color:#fff}.btn-secondary:active,.btn-secondary:focus{background-color:#574e48;color:#fff}.ie9 .btn-secondary.disabled,.ie9 .btn-secondary[disabled]{background-color:#514943}.ie9 .btn-secondary.disabled:active,.ie9 .btn-secondary[disabled]:active{background-color:#514943;-webkit-filter:none;filter:none}[class*=btn-wrap-triangle]{overflow:hidden;position:relative}[class*=btn-wrap-triangle] .btn:after{border-style:solid;content:'';height:0;position:absolute;top:0;width:0}.btn-wrap-triangle-right{display:inline-block;padding-right:1.74rem;position:relative}.btn-wrap-triangle-right .btn{text-indent:.92rem}.btn-wrap-triangle-right .btn:after{border-color:transparent transparent transparent #e3e3e3;border-width:1.84rem 0 1.84rem 1.84rem;left:100%;margin-left:-1.74rem}.btn-wrap-triangle-right .btn:focus:after,.btn-wrap-triangle-right .btn:hover:after{border-left-color:#dbdbdb}.btn-wrap-triangle-right .btn:active:after{border-left-color:#d6d6d6}.btn-wrap-triangle-right .btn:not(.disabled):active,.btn-wrap-triangle-right .btn:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn.disabled:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:after{border-color:transparent transparent transparent #f0f0f0}.ie9 .btn-wrap-triangle-right .btn.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn.disabled:focus:after,.ie9 .btn-wrap-triangle-right .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:focus:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:hover:after{border-left-color:#f0f0f0}.btn-wrap-triangle-right .btn-prime:after{border-color:transparent transparent transparent #eb5202}.btn-wrap-triangle-right .btn-prime:focus:after,.btn-wrap-triangle-right .btn-prime:hover:after{border-left-color:#f65405}.btn-wrap-triangle-right .btn-prime:active:after{border-left-color:#e04f00}.btn-wrap-triangle-right .btn-prime:not(.disabled):active,.btn-wrap-triangle-right .btn-prime:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:after{border-color:transparent transparent transparent #fd6e23}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:hover:after{border-left-color:#fd6e23}.btn-wrap-triangle-left{display:inline-block;padding-left:1.74rem}.btn-wrap-triangle-left .btn{text-indent:-.92rem}.btn-wrap-triangle-left .btn:after{border-color:transparent #e3e3e3 transparent transparent;border-width:1.84rem 1.84rem 1.84rem 0;margin-right:-1.74rem;right:100%}.btn-wrap-triangle-left .btn:focus:after,.btn-wrap-triangle-left .btn:hover:after{border-right-color:#dbdbdb}.btn-wrap-triangle-left .btn:active:after{border-right-color:#d6d6d6}.btn-wrap-triangle-left .btn:not(.disabled):active,.btn-wrap-triangle-left .btn:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn.disabled:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:after{border-color:transparent #f0f0f0 transparent transparent}.ie9 .btn-wrap-triangle-left .btn.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:hover:after{border-right-color:#f0f0f0}.btn-wrap-triangle-left .btn-prime:after{border-color:transparent #eb5202 transparent transparent}.btn-wrap-triangle-left .btn-prime:focus:after,.btn-wrap-triangle-left .btn-prime:hover:after{border-right-color:#e04f00}.btn-wrap-triangle-left .btn-prime:active:after{border-right-color:#f65405}.btn-wrap-triangle-left .btn-prime:not(.disabled):active,.btn-wrap-triangle-left .btn-prime:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:after{border-color:transparent #fd6e23 transparent transparent}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:hover:after{border-right-color:#fd6e23}.btn-expand{background-color:transparent;border:none;color:#303030;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:700;padding:0;position:relative}.btn-expand.expanded:after{border-color:transparent transparent #303030;border-width:0 .285em .36em}.btn-expand.expanded:hover:after{border-color:transparent transparent #3d3d3d}.btn-expand:hover{background-color:transparent;border:none;color:#3d3d3d}.btn-expand:hover:after{border-color:#3d3d3d transparent transparent}.btn-expand:after{border-color:#303030 transparent transparent;border-style:solid;border-width:.36em .285em 0;content:'';height:0;left:100%;margin-left:.5em;margin-top:-.18em;position:absolute;top:50%;width:0}[class*=col-] .form-el-input,[class*=col-] .form-el-select{width:100%}.form-fieldset{border:none;margin:0 0 1em;padding:0}.form-row{margin-bottom:2.2rem}.form-row .form-row{margin-bottom:.4rem}.form-row .form-label{display:block;font-weight:600;padding:.6rem 2.1em 0 0;text-align:right}.form-row .form-label.required{position:relative}.form-row .form-label.required:after{color:#eb5202;content:'*';font-size:1.15em;position:absolute;right:.7em;top:.5em}.form-row .form-el-checkbox+.form-label:before,.form-row .form-el-radio+.form-label:before{top:.7rem}.form-row .form-el-checkbox+.form-label:after,.form-row .form-el-radio+.form-label:after{top:1.1rem}.form-row.form-row-text{padding-top:.6rem}.form-row.form-row-text .action-sign-out{font-size:1.2rem;margin-left:1rem}.form-note{font-size:1.2rem;font-weight:600;margin-top:1rem}.form-el-dummy{display:none}.fieldset{border:0;margin:0;min-width:0;padding:0}input:not([disabled]):focus,textarea:not([disabled]):focus{box-shadow:none}.form-el-input{border:1px solid #adadad;color:#303030;padding:.35em .55em .5em}.form-el-input:hover{border-color:#949494}.form-el-input:focus{border-color:#008bdb}.form-el-input:required{box-shadow:none}.form-label{margin-bottom:.5em}[class*=form-label][for]{cursor:pointer}.form-el-insider-wrap{display:table;width:100%}.form-el-insider-input{display:table-cell;width:100%}.form-el-insider{border-radius:2px;display:table-cell;vertical-align:top;padding:.43em .55em .5em 0}.form-legend,.form-legend-expand,.form-legend-light{display:block;margin:0}.form-legend,.form-legend-expand{margin-bottom:2.5em;padding-top:1.5em;font-weight:600;font-size:1.25em}.form-legend{width:100%;border-top:1px solid #ccc}.form-legend-light{margin-bottom:1.5em;font-size:1em}.form-legend-expand{cursor:pointer;transition:opacity .2s linear}.form-legend-expand:hover{opacity:.85}.form-legend-expand.expanded:after{content:'\e615'}.form-legend-expand:after{margin-left:.5em;font-weight:400;font-size:1.15em;font-family:Icons;content:'\e616';vertical-align:sub}.form-el-checkbox,.form-el-radio{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.form-el-checkbox.disabled+.form-label,.form-el-checkbox.disabled+.form-label:before,.form-el-checkbox[disabled]+.form-label,.form-el-checkbox[disabled]+.form-label:before,.form-el-radio.disabled+.form-label,.form-el-radio.disabled+.form-label:before,.form-el-radio[disabled]+.form-label,.form-el-radio[disabled]+.form-label:before{cursor:default;opacity:.5;pointer-events:none}.form-el-checkbox:not(.disabled)+.form-label:hover:before,.form-el-checkbox:not([disabled])+.form-label:hover:before,.form-el-radio:not(.disabled)+.form-label:hover:before,.form-el-radio:not([disabled])+.form-label:hover:before{border-color:#514943}.form-el-checkbox+.form-label,.form-el-radio+.form-label{font-weight:400;padding-left:2em;padding-right:0;position:relative;text-align:left;transition:border-color .1s linear}.form-el-checkbox+.form-label:before,.form-el-radio+.form-label:before{border:1px solid;content:'';left:0;position:absolute;top:.1rem;transition:border-color .1s linear}.form-el-checkbox+.form-label:before{background-color:#fff;border-color:#adadad;border-radius:2px;height:1.6rem;line-height:1.2;width:1.6rem;font-size:1.2rem}.form-el-checkbox:checked+.form-label::before{content:'\e62d';font-family:Icons}.form-el-radio+.form-label:before{background-color:#fff;border:1px solid #adadad;border-radius:100%;height:1.8rem;width:1.8rem}.form-el-radio+.form-label:after{background:0 0;border:.5rem solid transparent;border-radius:100%;content:'';height:0;left:.4rem;position:absolute;top:.5rem;transition:background .3s linear;width:0}.form-el-radio:checked+.form-label{cursor:default}.form-el-radio:checked+.form-label:after{border-color:#514943}.form-select-label{border:1px solid #adadad;color:#303030;cursor:pointer;display:block;overflow:hidden;position:relative;z-index:0}.form-select-label:hover,.form-select-label:hover:after{border-color:#949494}.form-select-label:active,.form-select-label:active:after,.form-select-label:focus,.form-select-label:focus:after{border-color:#008bdb}.form-select-label:after{background:#e3e3e3;border-left:1px solid #adadad;bottom:0;content:'';position:absolute;right:0;top:0;width:2.36em;z-index:-2}.ie9 .form-select-label:after{display:none}.form-select-label:before{border-color:#303030 transparent transparent;border-style:solid;border-width:5px 4px 0;content:'';height:0;margin-right:-4px;margin-top:-2.5px;position:absolute;right:1.18em;top:50%;width:0;z-index:-1}.ie9 .form-select-label:before{display:none}.form-select-label .form-el-select{background:0 0;border:none;border-radius:0;content:'';display:block;margin:0;padding:.35em calc(2.36em + 10%) .5em .55em;width:110%}.ie9 .form-select-label .form-el-select{padding-right:.55em;width:100%}.form-el-select{background:#fff;border:1px solid #adadad;border-radius:2px;color:#303030;display:block;padding:.35em .55em}.multiselect-custom{position:relative;height:45.2rem;border:1px solid #adadad;overflow:auto;margin:0 0 1.5rem}.multiselect-custom ul{margin:0;padding:0;list-style:none;min-width:29rem}.multiselect-custom .item{padding:1rem 1.4rem}.multiselect-custom .selected{background-color:#e0f6fe}.multiselect-custom .form-label{margin-bottom:0}[class*=form-el-].invalid{border-color:#e22626}[class*=form-el-].invalid+.error-container{display:block}.error-container{background-color:#fffbbb;border:1px solid #ee7d7d;color:#514943;display:none;font-size:1.19rem;margin-top:.2rem;padding:.8rem 1rem .9rem}.check-result-message{margin-left:.5em;min-height:3.68rem;-webkit-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-flex;display:-ms-flexbox;display:flex}.check-result-text{margin-left:.5em}body:not([class]){min-width:0}.container{display:block;margin:0 auto 4rem;max-width:100rem;padding:0}.abs-action-delete,.action-close:before,.action-next:before,.action-previous:before,.admin-user .admin__action-dropdown:before,.admin__action-multiselect-search-label:before,.admin__control-checkbox+label:before,.admin__control-radio+label:before,.admin__control-table .action-delete:before,.admin__current-filters-list .action-remove:before,.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before,.admin__data-grid-action-bookmarks .admin__action-dropdown:before,.admin__data-grid-action-columns .admin__action-dropdown:before,.admin__data-grid-action-export .admin__action-dropdown:before,.admin__menu .level-0>a:before,.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon,.admin__page-nav-title._collapsible:after,.data-grid-filters-action-wrap .action-default:before,.data-grid-row-changed:after,.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before,.data-grid-search-control-wrap .action-submit:before,.icon-failed:before,.icon-success:before,.notifications-action:before,.notifications-close:before,.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before,.page-title-jumbo-success:before,.search-global-label:before,.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before,.setup-home-item:before,.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before,.store-switcher .dropdown-menu .dropdown-toolbar a:before,.tooltip .help a:before,.tooltip .help span:before{-webkit-font-smoothing:antialiased;font-family:Icons;line-height:1;font-style:normal;font-weight:400;speak:none}.text-stretch{margin-bottom:1.5em}.page-title-jumbo{font-size:4rem;font-weight:300;letter-spacing:-.05em;margin-bottom:2.9rem}.page-title-jumbo-success:before{color:#79a22e;content:'\e62d';font-size:3.9rem;margin-left:-.3rem;margin-right:2.4rem}.list{margin-bottom:3rem}.list-dot .list-item{display:list-item;list-style-position:inside;margin-bottom:1.2rem}.list-title{color:#333;font-size:1.4rem;font-weight:700;letter-spacing:.025em;margin-bottom:1.2rem}.list-item-failed:before,.list-item-success:before,.list-item-warning:before{font-family:Icons;font-size:1.6rem;top:0}.list-item-success:before{content:'\e62d';font-size:1.6rem}.list-item-failed:before{content:'\e632';font-size:1.4rem;left:.1rem;top:.2rem}.list-item-warning:before{content:'\e623';font-size:1.3rem;left:.2rem}.form-wrap{padding-top:2.1rem;margin-bottom:3.6rem}.form-el-label-horizontal{display:inline-block;font-size:1.3rem;font-weight:600;letter-spacing:.025em;margin-left:.4rem;margin-bottom:.4rem}.app-updater{min-width:768px}body._has-modal{height:100%;overflow:hidden;width:100%}.modals-overlay{z-index:899}.modal-popup,.modal-slide{bottom:0;min-width:0;pointer-events:none;position:fixed;right:0;top:0;visibility:hidden}.modal-popup._show,.modal-slide._show{visibility:visible}.modal-popup._show .modal-inner-wrap,.modal-slide._show .modal-inner-wrap{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-popup .modal-inner-wrap,.modal-slide .modal-inner-wrap{background-color:#fff;box-shadow:0 0 12px 2px rgba(0,0,0,.35);opacity:1;pointer-events:auto}.modal-slide{left:14.8rem;z-index:900}.modal-slide._show .modal-inner-wrap{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.modal-slide .modal-inner-wrap{height:100%;overflow-y:auto;position:static;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);transition-duration:.3s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease-in-out;width:auto}.modal-slide._inner-scroll .modal-inner-wrap{overflow-y:visible;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.modal-slide._inner-scroll .modal-footer,.modal-slide._inner-scroll .modal-header{-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.modal-slide._inner-scroll .modal-content{overflow-y:auto}.modal-slide._inner-scroll .modal-footer{margin-top:auto}.modal-slide .modal-content,.modal-slide .modal-footer,.modal-slide .modal-header{padding:0 2.6rem 2.6rem}.modal-slide .modal-header{padding-bottom:2.1rem;padding-top:2.1rem}.modal-popup{left:0;overflow-y:auto;z-index:900}.modal-popup._show .modal-inner-wrap{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}.modal-popup .modal-inner-wrap{box-sizing:border-box;height:auto;left:0;margin:5rem auto;position:absolute;right:0;-webkit-transform:translateY(-200%);-ms-transform:translateY(-200%);transform:translateY(-200%);transition-duration:.2s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:75%}.modal-popup._inner-scroll{overflow-y:visible}.ie10 .modal-popup._inner-scroll,.ie9 .modal-popup._inner-scroll{overflow-y:auto}.modal-popup._inner-scroll .modal-inner-wrap{max-height:90%}.ie10 .modal-popup._inner-scroll .modal-inner-wrap,.ie9 .modal-popup._inner-scroll .modal-inner-wrap{max-height:none}.modal-popup._inner-scroll .modal-content{overflow-y:auto}.modal-popup .modal-content,.modal-popup .modal-footer,.modal-popup .modal-header{padding-left:3rem;padding-right:3rem}.modal-popup .modal-footer,.modal-popup .modal-header{-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.modal-popup .modal-header{padding-bottom:3rem;padding-top:3rem}.modal-popup .modal-footer{margin-top:auto;padding-bottom:3rem;padding-top:3rem}.modal-popup .modal-footer-actions{text-align:right}.modal-popup.confirm .modal-inner-wrap{left:50%;margin-left:-25rem;width:50rem}.modal-popup.confirm .modal-footer{text-align:right}.modal-popup._image-box .modal-inner-wrap{margin:5rem auto;max-width:78rem;position:static}.modal-popup._image-box .thumbnail-preview{padding-bottom:3rem;text-align:center}.modal-popup._image-box .thumbnail-preview .thumbnail-preview-image-block{border:1px solid #ccc;margin:0 auto 2rem;max-width:58rem;padding:2rem}.modal-popup._image-box .thumbnail-preview .thumbnail-preview-image{max-height:54rem}@media (max-width:768px){.modal-popup.modal-slide{left:14.8rem;z-index:900}.modal-popup.modal-slide._show .modal-inner-wrap{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.modal-popup.modal-slide .modal-inner-wrap{height:100%;overflow-y:auto;position:static;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);transition-duration:.3s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease-in-out;width:auto;margin:0;max-height:none}}.admin__action-dropdown-wrap{display:inline-block;position:relative}.admin__action-dropdown-wrap .admin__action-dropdown-text:after{left:-6px;right:0}.admin__action-dropdown-wrap .admin__action-dropdown-menu{left:auto;right:0}.admin__action-dropdown-wrap._active .admin__action-dropdown,.admin__action-dropdown-wrap.active .admin__action-dropdown{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.admin__action-dropdown-wrap._active .admin__action-dropdown-text:after,.admin__action-dropdown-wrap.active .admin__action-dropdown-text:after{background-color:#fff;content:'';height:6px;position:absolute;top:100%}.admin__action-dropdown-wrap._active .admin__action-dropdown-menu,.admin__action-dropdown-wrap.active .admin__action-dropdown-menu{display:block}.admin__action-dropdown-wrap._disabled .admin__action-dropdown{cursor:default}.admin__action-dropdown-wrap._disabled:hover .admin__action-dropdown{color:#333}.admin__action-dropdown{background-color:#fff;border:1px solid transparent;border-bottom:none;border-radius:0;box-shadow:none;color:#333;display:inline-block;font-size:1.3rem;font-weight:400;letter-spacing:-.025em;padding:.7rem 3.3rem .8rem 1.5rem;position:relative;vertical-align:baseline;z-index:2}.admin__action-dropdown._active:after,.admin__action-dropdown.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin__action-dropdown:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;top:50%;transition:all .2s linear;width:0}._active .admin__action-dropdown:after,.active .admin__action-dropdown:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin__action-dropdown:hover:after{border-color:#000 transparent transparent}.admin__action-dropdown:focus,.admin__action-dropdown:hover{background-color:#fff;color:#000;text-decoration:none}.admin__action-dropdown:after{right:1.5rem}.admin__action-dropdown:before{margin-right:1rem}.admin__action-dropdown-menu{background-color:#fff;border:1px solid #007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);display:none;line-height:1.36;margin-top:-1px;min-width:120%;padding:.5rem 1rem;position:absolute;top:100%;transition:all .15s ease;z-index:1}.admin__action-dropdown-menu>li{display:block}.admin__action-dropdown-menu>li>a{color:#333;display:block;text-decoration:none;padding:.6rem .5rem}.selectmenu{display:inline-block;position:relative;text-align:left;z-index:1}.selectmenu._active{z-index:500;border-color:#007bdb}.selectmenu .action-delete,.selectmenu .action-edit,.selectmenu .action-save{background-color:transparent;border-color:transparent;box-shadow:none;padding:0 1rem}.selectmenu .action-delete:hover,.selectmenu .action-edit:hover,.selectmenu .action-save:hover{background-color:transparent;border-color:transparent;box-shadow:none}.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before{content:'\e630'}.selectmenu .action-delete,.selectmenu .action-edit{border:0 solid #fff;border-left-width:1px;bottom:0;position:absolute;right:0;top:0;z-index:1}.selectmenu .action-delete:hover,.selectmenu .action-edit:hover{border:0 solid #fff;border-left-width:1px}.selectmenu .action-save:before{content:'\e625'}.selectmenu .action-edit:before{content:'\e631'}.selectmenu-value{display:inline-block}.selectmenu-value input[type=text]{-moz-appearance:none;-webkit-appearance:none;appearance:none;border:0;display:inline;margin:0;width:6rem}body._keyfocus .selectmenu-value input[type=text]:focus{box-shadow:none}.selectmenu-toggle{padding-right:3rem;background:0 0;border-width:0;bottom:0;float:right;position:absolute;right:0;top:0;width:0}.selectmenu-toggle._active:after,.selectmenu-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.selectmenu-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.1rem;top:50%;transition:all .2s linear;width:0}._active .selectmenu-toggle:after,.active .selectmenu-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.selectmenu-toggle:hover:after{border-color:#000 transparent transparent}.selectmenu-toggle:active,.selectmenu-toggle:focus,.selectmenu-toggle:hover{background:0 0}.selectmenu._active .selectmenu-toggle:before{border-color:#007bdb}body._keyfocus .selectmenu-toggle:focus{box-shadow:none}.selectmenu-toggle:before{background:#e3e3e3;border-left:1px solid #adadad;bottom:0;content:'';display:block;position:absolute;right:0;top:0;width:3.2rem}.selectmenu-items{background:#fff;border:1px solid #007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);display:none;float:left;left:-1px;margin-top:3px;max-width:20rem;min-width:calc(100% + 2px);position:absolute;top:100%}.selectmenu-items._active{display:block}.selectmenu-items ul{float:left;list-style-type:none;margin:0;min-width:100%;padding:0}.selectmenu-items li{display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;transition:background .2s linear}.selectmenu-items li:hover{background:#e3e3e3}.selectmenu-items li:last-child .selectmenu-item-action,.selectmenu-items li:last-child .selectmenu-item-action:visited{color:#008bdb;text-decoration:none}.selectmenu-items li:last-child .selectmenu-item-action:hover{color:#0fa7ff;text-decoration:underline}.selectmenu-items li:last-child .selectmenu-item-action:active{color:#ff5501;text-decoration:underline}.selectmenu-item{position:relative;width:100%;z-index:1}li._edit>.selectmenu-item{display:none}.selectmenu-item-edit{display:none;padding:.3rem 4rem .3rem .4rem;position:relative;white-space:nowrap;z-index:1}li:last-child .selectmenu-item-edit{padding-right:.4rem}.selectmenu-item-edit .admin__control-text{width:5.4rem;margin:0}li._edit .selectmenu-item-edit{display:block}.selectmenu-item-action{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:0 0;border:0;color:#333;display:block;font-size:1.4rem;font-weight:400;min-width:100%;padding:1rem 6rem 1rem 1.5rem;text-align:left;transition:background .2s linear;width:5rem}.selectmenu-item-action:focus,.selectmenu-item-action:hover{background:#e3e3e3}.abs-actions-split-xl .action-default,.page-actions .actions-split .action-default{margin-right:4rem}.abs-actions-split-xl .action-toggle,.page-actions .actions-split .action-toggle{padding-right:4rem}.abs-actions-split-xl .action-toggle:after,.page-actions .actions-split .action-toggle:after{border-width:.9rem .6rem 0;margin-top:-.3rem;right:1.4rem}.actions-split{position:relative;z-index:200}.actions-split._active,.actions-split.active,.actions-split:hover{box-shadow:0 0 0 1px #007bdb}.actions-split._active .action-toggle.action-primary,.actions-split._active .action-toggle.primary,.actions-split.active .action-toggle.action-primary,.actions-split.active .action-toggle.primary{background-color:#ba4000;border-color:#ba4000}.actions-split._active .dropdown-menu,.actions-split.active .dropdown-menu{opacity:1;visibility:visible;display:block}.actions-split .action-default,.actions-split .action-toggle{float:left;margin:0}.actions-split .action-default._active,.actions-split .action-default.active,.actions-split .action-default:hover,.actions-split .action-toggle._active,.actions-split .action-toggle.active,.actions-split .action-toggle:hover{box-shadow:none}.actions-split .action-default{margin-right:3.2rem;min-width:9.3rem}.actions-split .action-toggle{padding-right:3.2rem;border-left-color:rgba(0,0,0,.2);bottom:0;padding-left:0;position:absolute;right:0;top:0}.actions-split .action-toggle._active:after,.actions-split .action-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.actions-split .action-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.2rem;top:50%;transition:all .2s linear;width:0}._active .actions-split .action-toggle:after,.active .actions-split .action-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.actions-split .action-toggle:hover:after{border-color:#000 transparent transparent}.actions-split .action-toggle.action-primary:after,.actions-split .action-toggle.action-secondary:after,.actions-split .action-toggle.primary:after,.actions-split .action-toggle.secondary:after{border-color:#fff transparent transparent}.actions-split .action-toggle>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-select-wrap{display:inline-block;position:relative}.action-select-wrap .action-select{padding-right:3.2rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:#fff;font-weight:400;text-align:left}.action-select-wrap .action-select._active:after,.action-select-wrap .action-select.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .action-select:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.2rem;top:50%;transition:all .2s linear;width:0}._active .action-select-wrap .action-select:after,.active .action-select-wrap .action-select:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .action-select:hover:after{border-color:#000 transparent transparent}.action-select-wrap .action-select:hover,.action-select-wrap .action-select:hover:before{border-color:#878787}.action-select-wrap .action-select:before{background-color:#e3e3e3;border:1px solid #adadad;bottom:0;content:'';position:absolute;right:0;top:0;width:3.2rem}.action-select-wrap .action-select._active{border-color:#007bdb}.action-select-wrap .action-select._active:before{border-color:#007bdb #007bdb #007bdb #adadad}.action-select-wrap .action-select[disabled]{color:#333}.action-select-wrap .action-select[disabled]:after{border-color:#333 transparent transparent}.action-select-wrap._active{z-index:500}.action-select-wrap._active .action-select,.action-select-wrap._active .action-select:before{border-color:#007bdb}.action-select-wrap._active .action-select:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .abs-action-menu .action-submenu,.action-select-wrap .abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu,.action-select-wrap .action-menu .action-submenu,.action-select-wrap .actions-split .action-menu .action-submenu,.action-select-wrap .actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .actions-split .dropdown-menu .action-submenu,.action-select-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{max-height:45rem;overflow-y:auto}.action-select-wrap .action-menu-items{left:0;position:absolute;right:0;top:100%}.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu,.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.action-menu,.action-select-wrap .action-menu-items>.action-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu{min-width:100%;position:static}.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.action-menu .action-submenu,.action-select-wrap .action-menu-items>.action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu{position:absolute}.action-multicheck-wrap{display:inline-block;height:1.6rem;padding-top:1px;position:relative;width:3.1rem;z-index:200}.action-multicheck-wrap:hover .action-multicheck-toggle,.action-multicheck-wrap:hover .admin__control-checkbox+label:before{border-color:#878787}.action-multicheck-wrap._active .action-multicheck-toggle,.action-multicheck-wrap._active .admin__control-checkbox+label:before{border-color:#007bdb}.action-multicheck-wrap._active .abs-action-menu .action-submenu,.action-multicheck-wrap._active .abs-action-menu .action-submenu .action-submenu,.action-multicheck-wrap._active .action-menu,.action-multicheck-wrap._active .action-menu .action-submenu,.action-multicheck-wrap._active .actions-split .action-menu .action-submenu,.action-multicheck-wrap._active .actions-split .action-menu .action-submenu .action-submenu,.action-multicheck-wrap._active .actions-split .dropdown-menu .action-submenu,.action-multicheck-wrap._active .actions-split .dropdown-menu .action-submenu .action-submenu{opacity:1;visibility:visible;display:block}.action-multicheck-wrap._disabled .admin__control-checkbox+label:before{background-color:#fff}.action-multicheck-wrap._disabled .action-multicheck-toggle,.action-multicheck-wrap._disabled .admin__control-checkbox+label:before{border-color:#adadad;opacity:1}.action-multicheck-wrap .action-multicheck-toggle,.action-multicheck-wrap .admin__control-checkbox,.action-multicheck-wrap .admin__control-checkbox+label{float:left}.action-multicheck-wrap .action-multicheck-toggle{border-radius:0 1px 1px 0;height:1.6rem;margin-left:-1px;padding:0;position:relative;transition:border-color .1s linear;width:1.6rem}.action-multicheck-wrap .action-multicheck-toggle._active:after,.action-multicheck-wrap .action-multicheck-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-multicheck-wrap .action-multicheck-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;top:50%;transition:all .2s linear;width:0}._active .action-multicheck-wrap .action-multicheck-toggle:after,.active .action-multicheck-wrap .action-multicheck-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-multicheck-wrap .action-multicheck-toggle:hover:after{border-color:#000 transparent transparent}.action-multicheck-wrap .action-multicheck-toggle:focus{border-color:#007bdb}.action-multicheck-wrap .action-multicheck-toggle:after{right:.3rem}.action-multicheck-wrap .action-multicheck-toggle>span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.action-multicheck-wrap .abs-action-menu .action-submenu,.action-multicheck-wrap .abs-action-menu .action-submenu .action-submenu,.action-multicheck-wrap .action-menu,.action-multicheck-wrap .action-menu .action-submenu,.action-multicheck-wrap .actions-split .action-menu .action-submenu,.action-multicheck-wrap .actions-split .action-menu .action-submenu .action-submenu,.action-multicheck-wrap .actions-split .dropdown-menu .action-submenu,.action-multicheck-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{left:-1.2rem;margin-top:1px;right:auto;text-align:left}.action-multicheck-wrap .action-menu-item{white-space:nowrap}.admin__action-multiselect-wrap{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.admin__action-multiselect-wrap.action-select-wrap:focus{box-shadow:none}.admin__action-multiselect-wrap.action-select-wrap .abs-action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .abs-action-menu .action-submenu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .action-menu,.admin__action-multiselect-wrap.action-select-wrap .action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .action-menu .action-submenu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .dropdown-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{max-height:none;overflow-y:inherit}.admin__action-multiselect-wrap .action-menu-item{transition:background-color .1s linear}.admin__action-multiselect-wrap .action-menu-item._selected{background-color:#e3e3e3}.admin__action-multiselect-wrap .action-menu-item._hover{background-color:#e0f6fe}.admin__action-multiselect-wrap .admin__action-multiselect{border:1px solid #adadad;cursor:pointer;min-height:3.2rem;padding:.7rem 3.6rem .6rem 1em;white-space:normal}.admin__action-multiselect-wrap .admin__action-multiselect:after{bottom:1.25rem;top:auto}.admin__action-multiselect-wrap .admin__action-multiselect:before{height:3.2rem;top:auto;width:3.2rem}.abs-action-menu .action-submenu,.abs-action-menu .action-submenu .action-submenu,.action-menu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{text-align:left}.admin__action-multiselect-label{position:relative;z-index:1}.admin__action-multiselect-label:before{margin-right:.5rem}.admin__action-multiselect-search-wrap{margin-bottom:1rem;padding:1rem;position:relative}.admin__action-multiselect-search-wrap+.admin__action-multiselect-menu-inner{border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;margin-bottom:1rem}.admin__action-multiselect-menu-inner{margin-bottom:0;max-height:17.2rem;overflow-y:auto}.admin__action-multiselect-search{padding-right:3rem;width:100%}.admin__action-multiselect-search-label{display:block;font-size:1.5rem;height:1em;overflow:hidden;position:absolute;right:2.2rem;top:1.7rem;width:1em}.admin__action-multiselect-search-label:before{content:'\e60c'}.admin__action-multiselect-actions-wrap{text-align:center}.admin__action-multiselect-actions-wrap .action-default{font-size:1.3rem;min-width:13rem}.admin__action-multiselect-crumb{background-color:#f5f5f5;border:1px solid #a79d95;border-radius:1px;display:inline-block;font-size:1.2rem;margin:-.3rem .9rem .5rem -1.1rem;padding:.3rem 2.4rem .4rem 1rem;position:relative;transition:border-color .1s linear}.admin__action-multiselect-crumb:hover{border-color:#908379}.admin__action-multiselect-crumb .action-close{bottom:0;font-size:.5em;position:absolute;right:0;top:0;width:2rem}.admin__action-multiselect-crumb .action-close:hover{color:#000}.admin__action-multiselect-crumb .action-close:active,.admin__action-multiselect-crumb .action-close:focus{background-color:transparent}.admin__action-multiselect-crumb .action-close:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.abs-action-delete,.abs-action-reset,.action-close,.notifications-close,.search-global-field._active .search-global-action{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:0}.abs-action-delete:hover,.abs-action-reset:hover,.action-close:hover,.notifications-close:hover,.search-global-field._active .search-global-action:hover{background-color:transparent;border:none;box-shadow:none}.abs-action-default,.abs-action-pattern,.abs-action-primary,.abs-action-quaternary,.abs-action-secondary,.abs-action-tertiary,.action-default,.action-primary,.action-quaternary,.action-secondary,.action-tertiary,.page-actions .page-actions-buttons>button,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button,.page-actions>button.action-primary,.page-actions>button.primary,button,button.primary,button.secondary,button.tertiary{border:1px solid;border-radius:0;display:inline-block;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:600;line-height:1.36;padding:.6rem 1em;text-align:center;vertical-align:baseline}.abs-action-default.disabled,.abs-action-default[disabled],.abs-action-pattern.disabled,.abs-action-pattern[disabled],.abs-action-primary.disabled,.abs-action-primary[disabled],.abs-action-quaternary.disabled,.abs-action-quaternary[disabled],.abs-action-secondary.disabled,.abs-action-secondary[disabled],.abs-action-tertiary.disabled,.abs-action-tertiary[disabled],.action-default.disabled,.action-default[disabled],.action-primary.disabled,.action-primary[disabled],.action-quaternary.disabled,.action-quaternary[disabled],.action-secondary.disabled,.action-secondary[disabled],.action-tertiary.disabled,.action-tertiary[disabled],.page-actions .page-actions-buttons>button.action-primary.disabled,.page-actions .page-actions-buttons>button.action-primary[disabled],.page-actions .page-actions-buttons>button.disabled,.page-actions .page-actions-buttons>button.primary.disabled,.page-actions .page-actions-buttons>button.primary[disabled],.page-actions .page-actions-buttons>button[disabled],.page-actions>button.action-primary.disabled,.page-actions>button.action-primary[disabled],.page-actions>button.disabled,.page-actions>button.primary.disabled,.page-actions>button.primary[disabled],.page-actions>button[disabled],button.disabled,button.primary.disabled,button.primary[disabled],button.secondary.disabled,button.secondary[disabled],button.tertiary.disabled,button.tertiary[disabled],button[disabled]{cursor:default;opacity:.5;pointer-events:none}.abs-action-l,.page-actions .page-actions-buttons>button,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions button,.page-actions>button.action-primary,.page-actions>button.primary{font-size:1.6rem;letter-spacing:.025em;padding-bottom:.6875em;padding-top:.6875em}.abs-action-delete{display:inline-block;font-size:1.6rem;margin-left:1.2rem;padding-top:.7rem;text-decoration:none;vertical-align:middle}.abs-action-delete:after{color:#666;content:'\e630'}.abs-action-delete:hover:after{color:#35302c}.abs-action-default,button{background:#e3e3e3;border-color:#adadad;color:#514943}.abs-action-default:active,.abs-action-default:focus,.abs-action-default:hover,button:active,button:focus,button:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.abs-action-primary,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button.action-primary,.page-actions>button.primary,button.primary{background-color:#eb5202;border-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.abs-action-primary:active,.abs-action-primary:focus,.abs-action-primary:hover,.page-actions .page-actions-buttons>button.action-primary:active,.page-actions .page-actions-buttons>button.action-primary:focus,.page-actions .page-actions-buttons>button.action-primary:hover,.page-actions .page-actions-buttons>button.primary:active,.page-actions .page-actions-buttons>button.primary:focus,.page-actions .page-actions-buttons>button.primary:hover,.page-actions>button.action-primary:active,.page-actions>button.action-primary:focus,.page-actions>button.action-primary:hover,.page-actions>button.primary:active,.page-actions>button.primary:focus,.page-actions>button.primary:hover,button.primary:active,button.primary:focus,button.primary:hover{background-color:#ba4000;border-color:#b84002;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.abs-action-primary.disabled,.abs-action-primary[disabled],.page-actions .page-actions-buttons>button.action-primary.disabled,.page-actions .page-actions-buttons>button.action-primary[disabled],.page-actions .page-actions-buttons>button.primary.disabled,.page-actions .page-actions-buttons>button.primary[disabled],.page-actions>button.action-primary.disabled,.page-actions>button.action-primary[disabled],.page-actions>button.primary.disabled,.page-actions>button.primary[disabled],button.primary.disabled,button.primary[disabled]{cursor:default;opacity:.5;pointer-events:none}.abs-action-secondary,button.secondary{background-color:#514943;border-color:#514943;color:#fff;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.abs-action-secondary:active,.abs-action-secondary:focus,.abs-action-secondary:hover,button.secondary:active,button.secondary:focus,button.secondary:hover{background-color:#35302c;border-color:#35302c;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.abs-action-secondary:active,button.secondary:active{background-color:#35302c}.abs-action-tertiary,button.tertiary{background-color:transparent;border-color:transparent;text-shadow:none;color:#008bdb}.abs-action-tertiary:active,.abs-action-tertiary:focus,.abs-action-tertiary:hover,button.tertiary:active,button.tertiary:focus,button.tertiary:hover{background-color:transparent;border-color:transparent;box-shadow:none;color:#0fa7ff;text-decoration:underline}.abs-action-quaternary,.page-actions .page-actions-buttons>button,.page-actions>button{background-color:transparent;border-color:transparent;text-shadow:none;color:#333}.abs-action-quaternary:active,.abs-action-quaternary:focus,.abs-action-quaternary:hover,.page-actions .page-actions-buttons>button:active,.page-actions .page-actions-buttons>button:focus,.page-actions .page-actions-buttons>button:hover,.page-actions>button:active,.page-actions>button:focus,.page-actions>button:hover{background-color:transparent;border-color:transparent;box-shadow:none;color:#1a1a1a}.abs-action-menu,.actions-split .abs-action-menu .action-submenu,.actions-split .abs-action-menu .action-submenu .action-submenu,.actions-split .action-menu,.actions-split .action-menu .action-submenu,.actions-split .actions-split .dropdown-menu .action-submenu,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu,.actions-split .dropdown-menu{text-align:left;background-color:#fff;border:1px solid #007bdb;border-radius:1px;box-shadow:1px 1px 5px rgba(0,0,0,.5);color:#333;display:none;font-weight:400;left:0;list-style:none;margin:2px 0 0;min-width:0;padding:0;position:absolute;right:0;top:100%}.abs-action-menu._active,.actions-split .abs-action-menu .action-submenu .action-submenu._active,.actions-split .abs-action-menu .action-submenu._active,.actions-split .action-menu .action-submenu._active,.actions-split .action-menu._active,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu._active,.actions-split .actions-split .dropdown-menu .action-submenu._active,.actions-split .dropdown-menu._active{display:block}.abs-action-menu>li,.actions-split .abs-action-menu .action-submenu .action-submenu>li,.actions-split .abs-action-menu .action-submenu>li,.actions-split .action-menu .action-submenu>li,.actions-split .action-menu>li,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li,.actions-split .actions-split .dropdown-menu .action-submenu>li,.actions-split .dropdown-menu>li{border:none;display:block;padding:0;transition:background-color .1s linear}.abs-action-menu>li>a:hover,.actions-split .abs-action-menu .action-submenu .action-submenu>li>a:hover,.actions-split .abs-action-menu .action-submenu>li>a:hover,.actions-split .action-menu .action-submenu>li>a:hover,.actions-split .action-menu>li>a:hover,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li>a:hover,.actions-split .actions-split .dropdown-menu .action-submenu>li>a:hover,.actions-split .dropdown-menu>li>a:hover{text-decoration:none}.abs-action-menu>li._visible,.abs-action-menu>li:hover,.actions-split .abs-action-menu .action-submenu .action-submenu>li._visible,.actions-split .abs-action-menu .action-submenu .action-submenu>li:hover,.actions-split .abs-action-menu .action-submenu>li._visible,.actions-split .abs-action-menu .action-submenu>li:hover,.actions-split .action-menu .action-submenu>li._visible,.actions-split .action-menu .action-submenu>li:hover,.actions-split .action-menu>li._visible,.actions-split .action-menu>li:hover,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._visible,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li:hover,.actions-split .actions-split .dropdown-menu .action-submenu>li._visible,.actions-split .actions-split .dropdown-menu .action-submenu>li:hover,.actions-split .dropdown-menu>li._visible,.actions-split .dropdown-menu>li:hover{background-color:#e3e3e3}.abs-action-menu>li:active,.actions-split .abs-action-menu .action-submenu .action-submenu>li:active,.actions-split .abs-action-menu .action-submenu>li:active,.actions-split .action-menu .action-submenu>li:active,.actions-split .action-menu>li:active,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li:active,.actions-split .actions-split .dropdown-menu .action-submenu>li:active,.actions-split .dropdown-menu>li:active{background-color:#cacaca}.abs-action-menu>li._parent,.actions-split .abs-action-menu .action-submenu .action-submenu>li._parent,.actions-split .abs-action-menu .action-submenu>li._parent,.actions-split .action-menu .action-submenu>li._parent,.actions-split .action-menu>li._parent,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._parent,.actions-split .actions-split .dropdown-menu .action-submenu>li._parent,.actions-split .dropdown-menu>li._parent{display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.abs-action-menu>li._parent>.action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .abs-action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu>li._parent>.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu>li._parent>.action-menu-item{min-width:100%}.abs-action-menu .action-menu-item,.abs-action-menu .item,.actions-split .abs-action-menu .action-submenu .action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu .action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu .item,.actions-split .abs-action-menu .action-submenu .item,.actions-split .action-menu .action-menu-item,.actions-split .action-menu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .item,.actions-split .action-menu .item,.actions-split .actions-split .dropdown-menu .action-submenu .action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .item,.actions-split .actions-split .dropdown-menu .action-submenu .item,.actions-split .dropdown-menu .action-menu-item,.actions-split .dropdown-menu .item{display:block;padding:.6875em 1em;cursor:pointer}.abs-action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu{bottom:auto;left:auto;margin-left:0;margin-top:-1px;position:absolute;right:auto;top:auto}.ie9 .abs-action-menu .action-submenu,.ie9 .actions-split .abs-action-menu .action-submenu .action-submenu,.ie9 .actions-split .abs-action-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu,.ie9 .actions-split .actions-split .dropdown-menu .action-submenu .action-submenu,.ie9 .actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu{margin-left:99%;margin-top:-3.5rem}.abs-action-menu a.action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .abs-action-menu .action-submenu a.action-menu-item,.actions-split .action-menu .action-submenu a.action-menu-item,.actions-split .action-menu a.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu a.action-menu-item,.actions-split .dropdown-menu a.action-menu-item{color:#333}.abs-action-menu a.action-menu-item:focus,.actions-split .abs-action-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .abs-action-menu .action-submenu a.action-menu-item:focus,.actions-split .action-menu .action-submenu a.action-menu-item:focus,.actions-split .action-menu a.action-menu-item:focus,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .actions-split .dropdown-menu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu a.action-menu-item:focus{background-color:#e3e3e3;box-shadow:none}.abs-action-wrap-triangle{position:relative}.abs-action-wrap-triangle .action-default{width:100%}.abs-action-wrap-triangle .action-default:after,.abs-action-wrap-triangle .action-default:before{border-style:solid;content:'';height:0;position:absolute;top:0;width:0}.abs-action-wrap-triangle .action-default:active,.abs-action-wrap-triangle .action-default:focus,.abs-action-wrap-triangle .action-default:hover{box-shadow:none}._keyfocus .abs-action-wrap-triangle .action-default:focus{box-shadow:0 0 0 1px #007bdb}.ie10 .abs-action-wrap-triangle .action-default.disabled,.ie10 .abs-action-wrap-triangle .action-default[disabled],.ie9 .abs-action-wrap-triangle .action-default.disabled,.ie9 .abs-action-wrap-triangle .action-default[disabled]{background-color:#fcfcfc;opacity:1;text-shadow:none}.abs-action-wrap-triangle-right{display:inline-block;padding-right:1.6rem;position:relative}.abs-action-wrap-triangle-right .action-default:after,.abs-action-wrap-triangle-right .action-default:before{border-color:transparent transparent transparent #e3e3e3;border-width:1.7rem 0 1.6rem 1.7rem;left:100%;margin-left:-1.7rem}.abs-action-wrap-triangle-right .action-default:before{border-left-color:#949494;right:-1px}.abs-action-wrap-triangle-right .action-default:active:after,.abs-action-wrap-triangle-right .action-default:focus:after,.abs-action-wrap-triangle-right .action-default:hover:after{border-left-color:#dbdbdb}.ie10 .abs-action-wrap-triangle-right .action-default.disabled:after,.ie10 .abs-action-wrap-triangle-right .action-default[disabled]:after,.ie9 .abs-action-wrap-triangle-right .action-default.disabled:after,.ie9 .abs-action-wrap-triangle-right .action-default[disabled]:after{border-color:transparent transparent transparent #fcfcfc}.abs-action-wrap-triangle-right .action-primary:after{border-color:transparent transparent transparent #eb5202}.abs-action-wrap-triangle-right .action-primary:active:after,.abs-action-wrap-triangle-right .action-primary:focus:after,.abs-action-wrap-triangle-right .action-primary:hover:after{border-left-color:#ba4000}.abs-action-wrap-triangle-left{display:inline-block;padding-left:1.6rem}.abs-action-wrap-triangle-left .action-default{text-indent:-.85rem}.abs-action-wrap-triangle-left .action-default:after,.abs-action-wrap-triangle-left .action-default:before{border-color:transparent #e3e3e3 transparent transparent;border-width:1.7rem 1.7rem 1.6rem 0;margin-right:-1.7rem;right:100%}.abs-action-wrap-triangle-left .action-default:before{border-right-color:#949494;left:-1px}.abs-action-wrap-triangle-left .action-default:active:after,.abs-action-wrap-triangle-left .action-default:focus:after,.abs-action-wrap-triangle-left .action-default:hover:after{border-right-color:#dbdbdb}.ie10 .abs-action-wrap-triangle-left .action-default.disabled:after,.ie10 .abs-action-wrap-triangle-left .action-default[disabled]:after,.ie9 .abs-action-wrap-triangle-left .action-default.disabled:after,.ie9 .abs-action-wrap-triangle-left .action-default[disabled]:after{border-color:transparent #fcfcfc transparent transparent}.abs-action-wrap-triangle-left .action-primary:after{border-color:transparent #eb5202 transparent transparent}.abs-action-wrap-triangle-left .action-primary:active:after,.abs-action-wrap-triangle-left .action-primary:focus:after,.abs-action-wrap-triangle-left .action-primary:hover:after{border-right-color:#ba4000}.action-default,button{background:#e3e3e3;border-color:#adadad;color:#514943}.action-default:active,.action-default:focus,.action-default:hover,button:active,button:focus,button:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.action-primary{background-color:#eb5202;border-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.action-primary:active,.action-primary:focus,.action-primary:hover{background-color:#ba4000;border-color:#b84002;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.action-primary.disabled,.action-primary[disabled]{cursor:default;opacity:.5;pointer-events:none}.action-secondary{background-color:#514943;border-color:#514943;color:#fff;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.action-secondary:active,.action-secondary:focus,.action-secondary:hover{background-color:#35302c;border-color:#35302c;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.action-secondary:active{background-color:#35302c}.action-quaternary,.action-tertiary{background-color:transparent;border-color:transparent;text-shadow:none}.action-quaternary:active,.action-quaternary:focus,.action-quaternary:hover,.action-tertiary:active,.action-tertiary:focus,.action-tertiary:hover{background-color:transparent;border-color:transparent;box-shadow:none}.action-tertiary{color:#008bdb}.action-tertiary:active,.action-tertiary:focus,.action-tertiary:hover{color:#0fa7ff;text-decoration:underline}.action-quaternary{color:#333}.action-quaternary:active,.action-quaternary:focus,.action-quaternary:hover{color:#1a1a1a}.action-close>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-close:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.action-close:before{content:'\e62f';transition:color .1s linear}.action-close:hover{cursor:pointer;text-decoration:none}.abs-action-menu .action-submenu,.abs-action-menu .action-submenu .action-submenu,.action-menu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{background-color:#fff;border:1px solid #007bdb;border-radius:1px;box-shadow:1px 1px 5px rgba(0,0,0,.5);color:#333;display:none;font-weight:400;left:0;list-style:none;margin:2px 0 0;min-width:0;padding:0;position:absolute;right:0;top:100%}.abs-action-menu .action-submenu .action-submenu._active,.abs-action-menu .action-submenu._active,.action-menu .action-submenu._active,.action-menu._active,.actions-split .action-menu .action-submenu .action-submenu._active,.actions-split .action-menu .action-submenu._active,.actions-split .dropdown-menu .action-submenu .action-submenu._active,.actions-split .dropdown-menu .action-submenu._active{display:block}.abs-action-menu .action-submenu .action-submenu>li,.abs-action-menu .action-submenu>li,.action-menu .action-submenu>li,.action-menu>li,.actions-split .action-menu .action-submenu .action-submenu>li,.actions-split .action-menu .action-submenu>li,.actions-split .dropdown-menu .action-submenu .action-submenu>li,.actions-split .dropdown-menu .action-submenu>li{border:none;display:block;padding:0;transition:background-color .1s linear}.abs-action-menu .action-submenu .action-submenu>li>a:hover,.abs-action-menu .action-submenu>li>a:hover,.action-menu .action-submenu>li>a:hover,.action-menu>li>a:hover,.actions-split .action-menu .action-submenu .action-submenu>li>a:hover,.actions-split .action-menu .action-submenu>li>a:hover,.actions-split .dropdown-menu .action-submenu .action-submenu>li>a:hover,.actions-split .dropdown-menu .action-submenu>li>a:hover{text-decoration:none}.abs-action-menu .action-submenu .action-submenu>li._visible,.abs-action-menu .action-submenu .action-submenu>li:hover,.abs-action-menu .action-submenu>li._visible,.abs-action-menu .action-submenu>li:hover,.action-menu .action-submenu>li._visible,.action-menu .action-submenu>li:hover,.action-menu>li._visible,.action-menu>li:hover,.actions-split .action-menu .action-submenu .action-submenu>li._visible,.actions-split .action-menu .action-submenu .action-submenu>li:hover,.actions-split .action-menu .action-submenu>li._visible,.actions-split .action-menu .action-submenu>li:hover,.actions-split .dropdown-menu .action-submenu .action-submenu>li._visible,.actions-split .dropdown-menu .action-submenu .action-submenu>li:hover,.actions-split .dropdown-menu .action-submenu>li._visible,.actions-split .dropdown-menu .action-submenu>li:hover{background-color:#e3e3e3}.abs-action-menu .action-submenu .action-submenu>li:active,.abs-action-menu .action-submenu>li:active,.action-menu .action-submenu>li:active,.action-menu>li:active,.actions-split .action-menu .action-submenu .action-submenu>li:active,.actions-split .action-menu .action-submenu>li:active,.actions-split .dropdown-menu .action-submenu .action-submenu>li:active,.actions-split .dropdown-menu .action-submenu>li:active{background-color:#cacaca}.abs-action-menu .action-submenu .action-submenu>li._parent,.abs-action-menu .action-submenu>li._parent,.action-menu .action-submenu>li._parent,.action-menu>li._parent,.actions-split .action-menu .action-submenu .action-submenu>li._parent,.actions-split .action-menu .action-submenu>li._parent,.actions-split .dropdown-menu .action-submenu .action-submenu>li._parent,.actions-split .dropdown-menu .action-submenu>li._parent{display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.abs-action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.abs-action-menu .action-submenu>li._parent>.action-menu-item,.action-menu .action-submenu>li._parent>.action-menu-item,.action-menu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu .action-submenu>li._parent>.action-menu-item{min-width:100%}.abs-action-menu .action-submenu .action-menu-item,.abs-action-menu .action-submenu .action-submenu .action-menu-item,.abs-action-menu .action-submenu .action-submenu .item,.abs-action-menu .action-submenu .item,.action-menu .action-menu-item,.action-menu .action-submenu .action-menu-item,.action-menu .action-submenu .item,.action-menu .item,.actions-split .action-menu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .action-submenu .item,.actions-split .action-menu .action-submenu .item,.actions-split .dropdown-menu .action-submenu .action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu .action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu .item,.actions-split .dropdown-menu .action-submenu .item{display:block;padding:.6875em 1em;cursor:pointer}.abs-action-menu .action-submenu .action-submenu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{bottom:auto;left:auto;margin-left:0;margin-top:-1px;position:absolute;right:auto;top:auto}.ie9 .abs-action-menu .action-submenu .action-submenu,.ie9 .abs-action-menu .action-submenu .action-submenu .action-submenu,.ie9 .action-menu .action-submenu,.ie9 .action-menu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu{margin-left:99%;margin-top:-3.5rem}.abs-action-menu .action-submenu .action-submenu a.action-menu-item,.abs-action-menu .action-submenu a.action-menu-item,.action-menu .action-submenu a.action-menu-item,.action-menu a.action-menu-item,.actions-split .action-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .action-menu .action-submenu a.action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .dropdown-menu .action-submenu a.action-menu-item{color:#333}.abs-action-menu .action-submenu .action-submenu a.action-menu-item:focus,.abs-action-menu .action-submenu a.action-menu-item:focus,.action-menu .action-submenu a.action-menu-item:focus,.action-menu a.action-menu-item:focus,.actions-split .action-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .action-menu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu .action-submenu a.action-menu-item:focus{background-color:#e3e3e3;box-shadow:none}.messages .message:last-child{margin:0 0 2rem}.message{background:#fffbbb;border:none;border-radius:0;color:#333;font-size:1.4rem;margin:0 0 1px;padding:1.8rem 4rem 1.8rem 5.5rem;position:relative;text-shadow:none}.message:before{background:0 0;border:0;color:#007bdb;content:'\e61a';font-family:Icons;font-size:1.9rem;font-style:normal;font-weight:400;height:auto;left:1.9rem;line-height:inherit;margin-top:-1.3rem;position:absolute;speak:none;text-shadow:none;top:50%;width:auto}.message-notice:before{color:#007bdb;content:'\e61a'}.message-warning:before{color:#eb5202;content:'\e623'}.message-error{background:#fcc}.message-error:before{color:#e22626;content:'\e632';font-size:1.5rem;left:2.2rem;margin-top:-1rem}.message-success:before{color:#79a22e;content:'\e62d'}.message-spinner:before{display:none}.message-spinner .spinner{font-size:2.5rem;left:1.5rem;position:absolute;top:1.5rem}.message-in-rating-edit{margin-left:1.8rem;margin-right:1.8rem}.modal-popup .action-close,.modal-slide .action-close{color:#736963;position:absolute;right:0;top:0}.modal-popup .action-close:active,.modal-slide .action-close:active{-webkit-transform:none;-ms-transform:none;transform:none}.modal-popup .action-close:active:before,.modal-slide .action-close:active:before{font-size:1.8rem}.modal-popup .action-close:hover:before,.modal-slide .action-close:hover:before{color:#58504b}.modal-popup .action-close:before,.modal-slide .action-close:before{font-size:2rem}.modal-popup .modal-title{font-size:2.4rem;margin-right:6.4rem}.modal-popup .action-close{padding:3rem}.modal-popup .action-close:active,.modal-popup .action-close:focus{background:0 0;padding-right:3.1rem;padding-top:3.1rem}.modal-slide .modal-title{font-size:2.1rem;margin-right:5.7rem}.modal-slide .action-close{padding:2.1rem 2.6rem}.modal-slide .action-close:active{padding-right:2.7rem;padding-top:2.2rem}.modal-slide .page-main-actions{margin-bottom:.6rem;margin-top:2.1rem}.modal-title{font-weight:400;margin-bottom:0;min-height:1em}.spinner{display:inline-block;font-size:4rem;height:1em;margin-right:1.5rem;position:relative;width:1em}.spinner>span:nth-child(1){-webkit-animation-delay:.27s;animation-delay:.27s;-webkit-transform:rotate(-315deg);-ms-transform:rotate(-315deg);transform:rotate(-315deg)}.spinner>span:nth-child(2){-webkit-animation-delay:.36s;animation-delay:.36s;-webkit-transform:rotate(-270deg);-ms-transform:rotate(-270deg);transform:rotate(-270deg)}.spinner>span:nth-child(3){-webkit-animation-delay:.45s;animation-delay:.45s;-webkit-transform:rotate(-225deg);-ms-transform:rotate(-225deg);transform:rotate(-225deg)}.spinner>span:nth-child(4){-webkit-animation-delay:.54s;animation-delay:.54s;-webkit-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.spinner>span:nth-child(5){-webkit-animation-delay:.63s;animation-delay:.63s;-webkit-transform:rotate(-135deg);-ms-transform:rotate(-135deg);transform:rotate(-135deg)}.spinner>span:nth-child(6){-webkit-animation-delay:.72s;animation-delay:.72s;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.spinner>span:nth-child(7){-webkit-animation-delay:.81s;animation-delay:.81s;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.spinner>span:nth-child(8){-webkit-animation-delay:.9;animation-delay:.9;-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}@-webkit-keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}@keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}.spinner>span{-webkit-transform:scale(0.4);-ms-transform:scale(0.4);transform:scale(0.4);-webkit-animation-name:fade;animation-name:fade;-webkit-animation-duration:.72s;animation-duration:.72s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-direction:linear;animation-direction:linear;background-color:#fff;border-radius:6px;clip:rect(0 .28571429em .1em 0);height:.1em;margin-top:.5em;position:absolute;width:1em}.ie9 .spinner{background:url(../images/ajax-loader.gif) center no-repeat}.ie9 .spinner>span{display:none}.popup-loading{background:rgba(255,255,255,.8);border-color:#ef672f;color:#ef672f;font-size:14px;font-weight:700;left:50%;margin-left:-100px;padding:100px 0 10px;position:fixed;text-align:center;top:40%;width:200px;z-index:1003}.popup-loading:after{background-image:url(../images/loader-1.gif);content:'';height:64px;left:50%;margin:-32px 0 0 -32px;position:absolute;top:40%;width:64px;z-index:2}.loading-mask,.loading-old{background:rgba(255,255,255,.4);bottom:0;left:0;position:fixed;right:0;top:0;z-index:2003}.loading-mask img,.loading-old img{display:none}.loading-mask p,.loading-old p{margin-top:118px}.loading-mask .loader,.loading-old .loader{background:url(../images/loader-1.gif) 50% 30% no-repeat #e5e2dd;border-radius:5px;bottom:0;color:#5e5b56;font-size:14px;font-weight:700;height:160px;left:0;margin:auto;opacity:.95;position:absolute;right:0;text-align:center;top:0;width:160px}.admin-user{float:right;line-height:1.36;margin-left:.3rem;z-index:390}.admin-user._active .admin__action-dropdown,.admin-user.active .admin__action-dropdown{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.admin-user .admin__action-dropdown{height:3.3rem;padding:.7rem 2.8rem .4rem 4rem}.admin-user .admin__action-dropdown._active:after,.admin-user .admin__action-dropdown.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin-user .admin__action-dropdown:after{border-color:#777 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.3rem;top:50%;transition:all .2s linear;width:0}._active .admin-user .admin__action-dropdown:after,.active .admin-user .admin__action-dropdown:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin-user .admin__action-dropdown:hover:after{border-color:#000 transparent transparent}.admin-user .admin__action-dropdown:before{color:#777;content:'\e600';font-size:2rem;left:1.1rem;margin-top:-1.1rem;position:absolute;top:50%}.admin-user .admin__action-dropdown:hover:before{color:#333}.admin-user .admin__action-dropdown-menu{min-width:20rem;padding-left:1rem;padding-right:1rem}.admin-user .admin__action-dropdown-menu>li>a{padding-right:1.8rem;padding-left:.5em;white-space:nowrap;transition:background-color .1s linear}.admin-user .admin__action-dropdown-menu>li>a:hover{background-color:#e0f6fe;color:#333}.admin-user .admin__action-dropdown-menu>li>a:active{background-color:#c7effd;bottom:-1px;position:relative}.admin-user .admin__action-dropdown-menu .admin-user-name{text-overflow:ellipsis;white-space:nowrap;display:inline-block;max-width:20rem;overflow:hidden;vertical-align:top}.admin-user-account-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;max-width:11.2rem}.search-global{float:right;margin-right:-.3rem;position:relative;z-index:380}.search-global-field{min-width:5rem}.search-global-field._active .search-global-input{background-color:#fff;border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);padding-right:4rem;width:25rem}.search-global-field._active .search-global-action{display:block;height:3.3rem;position:absolute;right:0;text-indent:-100%;top:0;width:5rem;z-index:3}.search-global-field .autocomplete-results{height:3.3rem;position:absolute;right:0;top:0;width:25rem}.search-global-field .search-global-menu{border:1px solid #007bdb;border-top-color:transparent;box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;margin-top:-2px;padding:0;position:absolute;right:0;top:100%;z-index:2}.search-global-field .search-global-menu:after{background-color:#fff;content:'';height:5px;left:0;position:absolute;right:0;top:-5px}.search-global-field .search-global-menu>li{background-color:#fff;border-top:1px solid #ddd;display:block;font-size:1.2rem;padding:.75rem 1.4rem .55rem}.search-global-field .search-global-menu>li._active{background-color:#e0f6fe}.search-global-field .search-global-menu .title{display:block;font-size:1.4rem}.search-global-field .search-global-menu .type{color:#1a1a1a;display:block}.search-global-label{cursor:pointer;height:3.3rem;padding:.75rem 1.4rem .55rem;position:absolute;right:0;top:0;z-index:2}.search-global-label:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.search-global-label:hover:before{color:#000}.search-global-label:before{color:#777;content:'\e60c';font-size:2rem}.search-global-input{background-color:transparent;border:1px solid transparent;font-size:1.4rem;height:3.3rem;padding:.75rem 1.4rem .55rem;position:absolute;right:0;top:0;transition:all .1s linear,width .3s linear;width:5rem;z-index:1}.search-global-action{display:none}.notifications-wrapper{float:right;line-height:1;position:relative}.notifications-wrapper.active{z-index:400}.notifications-wrapper.active .notifications-action{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.notifications-wrapper.active .notifications-action:after{border:none;background-color:#fff;content:'';display:block;height:6px;left:-6px;margin-top:0;position:absolute;right:0;top:100%;width:auto}.notifications-wrapper .admin__action-dropdown-menu{padding:1rem 0 0;width:32rem}.notifications-action{color:#777;height:3.3rem;padding:.75rem 2rem .65rem}.notifications-action:after{display:none}.notifications-action:before{content:'\e607';font-size:1.9rem;margin-right:0}.notifications-action:active:before{position:relative;top:1px}.notifications-action .notifications-counter{background-color:#e22626;border-radius:1em;color:#fff;display:inline-block;font-size:1.1rem;font-weight:700;left:50%;margin-left:.3em;margin-top:-1.1em;padding:.3em .5em;position:absolute;top:50%}.notifications-entry{line-height:1.36;padding:.6rem 2rem .8rem;position:relative;transition:background-color .1s linear}.notifications-entry:hover{background-color:#e0f6fe}.notifications-entry.notifications-entry-last{margin:0 2rem;padding:.3rem 0 1.3rem;text-align:center}.notifications-entry.notifications-entry-last:hover{background-color:transparent}.notifications-entry+.notifications-entry-last{border-top:1px solid #ddd;padding-bottom:.6rem}.notifications-entry ._cutted{cursor:pointer}.notifications-entry ._cutted .notifications-entry-description-start:after{content:'...'}.notifications-entry-title{color:#ef672f;display:block;font-size:1.1rem;font-weight:700;margin-bottom:.7rem;margin-right:1em}.notifications-entry-description{color:#333;font-size:1.1rem;margin-bottom:.8rem}.notifications-entry-description-end{display:none}.notifications-entry-description-end._show{display:inline}.notifications-entry-time{color:#777;font-size:1.1rem}.notifications-close{line-height:1;padding:1rem;position:absolute;right:0;top:.6rem}.notifications-close:before{color:#ccc;content:'\e620';transition:color .1s linear}.notifications-close:hover:before{color:#b3b3b3}.notifications-close:active{-webkit-transform:scale(0.95);-ms-transform:scale(0.95);transform:scale(0.95)}.page-header-actions{padding-top:1.1rem}.page-header-hgroup{padding-right:1.5rem}.page-title{color:#333;font-size:2.8rem;margin-bottom:0}.page-header{padding:1.5rem 3rem}.menu-wrapper{display:inline-block;position:relative;width:8.8rem;z-index:700}.menu-wrapper:before{background-color:#373330;bottom:0;content:'';left:0;position:fixed;top:0;width:8.8rem;z-index:699}.menu-wrapper._fixed{left:0;position:fixed;top:0}.menu-wrapper._fixed~.page-wrapper{margin-left:8.8rem}.menu-wrapper .logo{display:block;height:8.8rem;padding:2.4rem 0 2.2rem;position:relative;text-align:center;z-index:700}._keyfocus .menu-wrapper .logo:focus{background-color:#4a4542;box-shadow:none}._keyfocus .menu-wrapper .logo:focus+.admin__menu .level-0:first-child>a{background-color:#373330}._keyfocus .menu-wrapper .logo:focus+.admin__menu .level-0:first-child>a:after{display:none}.menu-wrapper .logo:hover .logo-img{-webkit-filter:brightness(1.1);filter:brightness(1.1)}.menu-wrapper .logo:active .logo-img{-webkit-transform:scale(0.95);-ms-transform:scale(0.95);transform:scale(0.95)}.menu-wrapper .logo .logo-img{height:4.2rem;transition:-webkit-filter .2s linear,filter .2s linear,transform .1s linear;width:3.5rem}.abs-menu-separator,.admin__menu .item-partners>a:after,.admin__menu .level-0:first-child>a:after{background-color:#736963;content:'';display:block;height:1px;left:0;margin-left:16%;position:absolute;top:0;width:68%}.admin__menu li{display:block}.admin__menu .level-0:first-child>a{position:relative}.admin__menu .level-0:first-child._active>a:after{display:none}.admin__menu .level-0._active>a,.admin__menu .level-0:hover>a{color:#f7f3eb}.admin__menu .level-0._active>a{background-color:#524d49}.admin__menu .level-0:hover>a{background-color:#4a4542}.admin__menu .level-0>a{color:#aaa6a0;display:block;font-size:1rem;letter-spacing:.025em;min-height:6.2rem;padding:1.2rem .5rem .5rem;position:relative;text-align:center;text-decoration:none;text-transform:uppercase;transition:background-color .1s linear;word-wrap:break-word;z-index:700}.admin__menu .level-0>a:focus{box-shadow:none}.admin__menu .level-0>a:before{content:'\e63a';display:block;font-size:2.2rem;height:2.2rem}.admin__menu .level-0>.submenu{background-color:#4a4542;box-shadow:0 0 3px #000;left:100%;min-height:calc(8.8rem + 2rem + 100%);padding:2rem 0 0;position:absolute;top:0;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%);transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-duration:.3s;transition-timing-function:ease-in-out;visibility:hidden;z-index:697}.admin__menu .level-0._show>.submenu{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);visibility:visible;z-index:698}.admin__menu .level-1{margin-left:1.5rem;margin-right:1.5rem}.admin__menu [class*=level-]:not(.level-0) a{display:block;padding:1.25rem 1.5rem}.admin__menu [class*=level-]:not(.level-0) a:hover{background-color:#403934}.admin__menu [class*=level-]:not(.level-0) a:active{padding-top:1.35rem;padding-bottom:1.15rem;background-color:#322c29}.admin__menu .submenu li{min-width:23.8rem}.admin__menu .submenu a{color:#fcfcfc;transition:background-color .1s linear}.admin__menu .submenu a:focus,.admin__menu .submenu a:hover{box-shadow:none;text-decoration:none}._keyfocus .admin__menu .submenu a:focus{background-color:#403934}._keyfocus .admin__menu .submenu a:active{background-color:#322c29}.admin__menu .submenu .parent{margin-bottom:4.5rem}.admin__menu .submenu .parent .submenu-group-title,.admin__menu .submenu .parent>a{color:#a79d95;display:block;font-size:1.6rem;font-weight:600;margin-bottom:.7rem;padding:1.25rem 1.5rem;pointer-events:none}.admin__menu .submenu .column{display:table-cell}.admin__menu .submenu-title{color:#fff;display:block;font-size:2.2rem;font-weight:600;margin-bottom:4.2rem;margin-left:3rem;margin-right:5.8rem}.admin__menu .submenu-sub-title{color:#fff;display:block;font-size:1.2rem;margin:-3.8rem 5.8rem 3.8rem 3rem}.admin__menu .action-close{padding:2.4rem 2.8rem;position:absolute;right:0;top:0}.admin__menu .action-close:before{color:#a79d95;font-size:1.7rem}.admin__menu .action-close:hover:before{color:#fff}.admin__menu .item-dashboard>a:before{content:'\e604';font-size:1.8rem;padding-top:.4rem}.admin__menu .item-sales>a:before{content:'\e60b'}.admin__menu .item-catalog>a:before{content:'\e608'}.admin__menu .item-customer>a:before{content:'\e603';font-size:2.6rem;position:relative;top:-.4rem}.admin__menu .item-marketing>a:before{content:'\e609';font-size:2rem;padding-top:.2rem}.admin__menu .item-content>a:before{content:'\e602';font-size:2.4rem;position:relative;top:-.2rem}.admin__menu .item-report>a:before{content:'\e60a'}.admin__menu .item-stores>a:before{content:'\e60d';font-size:1.9rem;padding-top:.3rem}.admin__menu .item-system>a:before{content:'\e60e'}.admin__menu .item-partners>a{padding-bottom:1rem}.admin__menu .item-partners>a:before{content:'\e612'}.admin__menu-overlay{bottom:0;left:0;position:fixed;right:0;top:0;z-index:697}.store-switcher{color:#333;float:left;font-size:1.3rem;margin-top:.7rem}.store-switcher .admin__action-dropdown{margin-left:.5em;background-color:#f8f8f8}.store-switcher .dropdown{display:inline-block;position:relative}.store-switcher .dropdown:after,.store-switcher .dropdown:before{content:'';display:table}.store-switcher .dropdown:after{clear:both}.store-switcher .dropdown .action.toggle{cursor:pointer;display:inline-block;text-decoration:none}.store-switcher .dropdown .action.toggle:after{-webkit-font-smoothing:antialiased;font-size:22px;line-height:2;color:#333;content:'\e607';font-family:icons-blank-theme;margin:0;vertical-align:top;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.store-switcher .dropdown .action.toggle:active:after,.store-switcher .dropdown .action.toggle:hover:after{color:#333}.store-switcher .dropdown .action.toggle.active{display:inline-block;text-decoration:none}.store-switcher .dropdown .action.toggle.active:after{-webkit-font-smoothing:antialiased;font-size:22px;line-height:2;color:#333;content:'\e618';font-family:icons-blank-theme;margin:0;vertical-align:top;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.store-switcher .dropdown .action.toggle.active:active:after,.store-switcher .dropdown .action.toggle.active:hover:after{color:#333}.store-switcher .dropdown .dropdown-menu{background:#fff;border:1px solid #ada89e;z-index:100;margin:4px 0 0;padding:0;list-style:none;box-sizing:border-box;position:absolute;top:100%;box-shadow:1px 1px 5px rgba(0,0,0,.5);min-width:19.5rem;display:none}.store-switcher .dropdown .dropdown-menu li{margin:0;padding:0}.store-switcher .dropdown .dropdown-menu li:hover{background:0 0;cursor:pointer}.store-switcher .dropdown.active{overflow:visible}.store-switcher .dropdown.active .dropdown-menu{display:block}.store-switcher .dropdown-menu{left:0;margin-top:.5em;padding-top:.25em}.store-switcher .dropdown-menu li{border:0;cursor:default}.store-switcher .dropdown-menu li:hover{cursor:default}.store-switcher .dropdown-menu li a,.store-switcher .dropdown-menu li span{color:#333;display:block;padding:.5rem 1.3rem}.store-switcher .dropdown-menu li a{text-decoration:none}.store-switcher .dropdown-menu li a:hover{background:#e9e9e9}.store-switcher .dropdown-menu li span{color:#adadad;cursor:default}.store-switcher .dropdown-menu li.current span{background:#eee;color:#333}.store-switcher .dropdown-menu .store-switcher-store a,.store-switcher .dropdown-menu .store-switcher-store span{padding-left:2.6rem}.store-switcher .dropdown-menu .store-switcher-store-view a,.store-switcher .dropdown-menu .store-switcher-store-view span{padding-left:3.9rem}.store-switcher .dropdown-menu .dropdown-toolbar{border-top:1px solid #ebebeb;margin-top:1rem}.store-switcher .dropdown-menu .dropdown-toolbar a:before{content:'\e60e';margin-right:.25em;position:relative;top:1px}.store-switcher-label{font-weight:700}.store-switcher-alt{display:inline-block;position:relative}.store-switcher-alt.active .dropdown-menu{display:block}.store-switcher-alt .dropdown-menu{margin-top:2px;white-space:nowrap}.store-switcher-alt .dropdown-menu ul{list-style:none;margin:0;padding:0}.store-switcher-alt strong{color:#a6a098;display:block;font-size:14px;font-weight:500;line-height:1.333;padding:5px 10px}.store-switcher-alt .store-selected{color:#676056;cursor:pointer;font-size:12px;font-weight:400;line-height:1.333}.store-switcher-alt .store-selected:after{color:#b3b0ad;content:'\e02c';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:400;margin:0 0 0 3px;speak:none;vertical-align:text-top}.store-switcher-alt .store-switcher-store,.store-switcher-alt .store-switcher-website{padding:0}.store-switcher-alt .store-switcher-store:hover,.store-switcher-alt .store-switcher-website:hover{background:0 0}.store-switcher-alt .manage-stores,.store-switcher-alt .store-switcher-all,.store-switcher-alt .store-switcher-store-view{padding:0}.store-switcher-alt .manage-stores>a,.store-switcher-alt .store-switcher-all>a{color:#676056;display:block;font-size:12px;padding:8px 15px;text-decoration:none}.store-switcher-website{margin:5px 0 0}.store-switcher-website>strong{padding-left:13px}.store-switcher-store{margin:1px 0 0}.store-switcher-store>strong{padding-left:20px}.store-switcher-store>ul{margin-top:1px}.store-switcher-store-view:first-child{border-top:1px solid #e5e5e5}.store-switcher-store-view>a{color:#333;display:block;font-size:13px;padding:5px 15px 5px 24px;text-decoration:none}.tooltip{margin-left:.5em}.tooltip .help a,.tooltip .help span{cursor:pointer;display:inline-block;height:22px;position:relative;vertical-align:middle;width:22px;z-index:2}.tooltip .help a:before,.tooltip .help span:before{color:#333;content:'\e633';font-size:1.7rem}.tooltip .help a span,.tooltip .help span span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tooltip .help a:hover{text-decoration:none}.tooltip .tooltip-content{background:#000;border-radius:3px;color:#fff;display:none;margin-left:-19px;margin-top:10px;max-width:200px;padding:4px 8px;position:absolute;text-shadow:none;z-index:20}.tooltip .tooltip-content:before{border-bottom:5px solid #000;border-left:5px solid transparent;border-right:5px solid transparent;content:'';height:0;left:20px;opacity:.8;position:absolute;top:-5px;width:0}.tooltip .tooltip-content.loading{position:absolute}.tooltip .tooltip-content.loading:before{border-bottom-color:rgba(0,0,0,.3)}.tooltip:hover>.tooltip-content{display:block}.page-actions._fixed,.page-main-actions:not(._hidden){background:#f8f8f8;border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;padding:1.5rem}.page-main-actions{margin:0 0 3rem}.page-main-actions._hidden .store-switcher{display:none}.page-actions{float:right}.page-main-actions .page-actions._fixed{left:8.8rem;position:fixed;right:0;top:0;z-index:400}.page-main-actions .page-actions._fixed .page-actions-inner:before{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333;content:attr(data-title);float:left;font-size:2.8rem;margin-top:.3rem;max-width:50%}.page-actions .page-actions-buttons>button,.page-actions>button{float:right;margin-left:1.3rem}.page-actions .page-actions-buttons>button.action-back,.page-actions .page-actions-buttons>button.back,.page-actions>button.action-back,.page-actions>button.back{float:left;-ms-flex-order:-1;-webkit-order:-1;order:-1}.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before{content:'\e626';margin-right:.5em;position:relative;top:1px}.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button.action-primary,.page-actions>button.primary{-ms-flex-order:2;-webkit-order:2;order:2}.page-actions .page-actions-buttons>button.save:not(.primary),.page-actions>button.save:not(.primary){-ms-flex-order:1;-webkit-order:1;order:1}.page-actions .page-actions-buttons>button.delete,.page-actions>button.delete{-ms-flex-order:-1;-webkit-order:-1;order:-1}.page-actions .actions-split{float:right;margin-left:1.3rem;-ms-flex-order:2;-webkit-order:2;order:2}.page-actions .actions-split .dropdown-menu .item{display:block}.page-actions-buttons{float:right;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;display:-webkit-flex;display:-ms-flexbox;display:flex}.customer-index-edit .page-actions-buttons{background-color:transparent}.admin__page-nav{background:#f1f1f1;border:1px solid #e3e3e3}.admin__page-nav._collapsed:first-child{border-bottom:none}.admin__page-nav._collapsed._show{border-bottom:1px solid #e3e3e3}.admin__page-nav._collapsed._show ._collapsible{background:#f1f1f1}.admin__page-nav._collapsed._show ._collapsible:after{content:'\e62b'}.admin__page-nav._collapsed._show ._collapsible+.admin__page-nav-items{display:block}.admin__page-nav._collapsed._hide .admin__page-nav-title-messages,.admin__page-nav._collapsed._hide .admin__page-nav-title-messages ._active{display:inline-block}.admin__page-nav+._collapsed{border-bottom:none;border-top:none}.admin__page-nav-title{border-bottom:1px solid #e3e3e3;color:#303030;display:block;font-size:1.4rem;line-height:1.2;margin:0 0 -1px;padding:1.8rem 1.5rem;position:relative;text-transform:uppercase}.admin__page-nav-title._collapsible{background:#fff;cursor:pointer;margin:0;padding-right:3.5rem;transition:border-color .1s ease-out,background-color .1s ease-out}.admin__page-nav-title._collapsible+.admin__page-nav-items{display:none;margin-top:-1px}.admin__page-nav-title._collapsible:after{content:'\e628';font-size:1.3rem;font-weight:700;position:absolute;right:1.8rem;top:2rem}.admin__page-nav-title._collapsible:hover{background:#f1f1f1}.admin__page-nav-title._collapsible:last-child{margin:0 0 -1px}.admin__page-nav-title strong{font-weight:700}.admin__page-nav-title .admin__page-nav-title-messages{display:none}.admin__page-nav-items{list-style-type:none;margin:0;padding:1rem 0 1.3rem}.admin__page-nav-item{border-left:3px solid transparent;margin-left:.7rem;padding:0;position:relative;transition:border-color .1s ease-out,background-color .1s ease-out}.admin__page-nav-item:hover{border-color:#e4e4e4}.admin__page-nav-item:hover .admin__page-nav-link{background:#e4e4e4;color:#303030;text-decoration:none}.admin__page-nav-item._active,.admin__page-nav-item.ui-state-active{border-color:#eb5202}.admin__page-nav-item._active .admin__page-nav-link,.admin__page-nav-item.ui-state-active .admin__page-nav-link{background:#fff;border-color:#e3e3e3;border-right:1px solid #fff;color:#303030;margin-right:-1px;font-weight:600}.admin__page-nav-item._loading:before,.admin__page-nav-item.ui-tabs-loading:before{display:none}.admin__page-nav-item._loading .admin__page-nav-item-message-loader,.admin__page-nav-item.ui-tabs-loading .admin__page-nav-item-message-loader{display:inline-block}.admin__page-nav-link{border:1px solid transparent;border-width:1px 0;color:#303030;display:block;font-weight:500;line-height:1.2;margin:0 0 -1px;padding:2rem 4rem 2rem 1rem;transition:border-color .1s ease-out,background-color .1s ease-out;word-wrap:break-word}.admin__page-nav-item-messages,.admin__page-nav-link._changed .admin__page-nav-item-message._changed,.admin__page-nav-link._error .admin__page-nav-item-message._error{display:inline-block}.admin__page-nav-item-messages .admin__page-nav-item-message{position:relative}.admin__page-nav-item-messages .admin__page-nav-item-message:hover{z-index:500}.admin__page-nav-item-messages .admin__page-nav-item-message:hover .admin__page-nav-item-message-tooltip{display:block}.admin__page-nav-item-messages .admin__page-nav-item-message._changed,.admin__page-nav-item-messages .admin__page-nav-item-message._error{display:none}.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon{display:inline-block;font-size:1.4rem;padding-left:.8em;vertical-align:top}.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon:after,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon:after{color:#666;content:'\e631'}.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon:after{color:#eb5202;content:'\e623'}.admin__page-nav-item-messages .admin__page-nav-item-message-loader{display:none;margin-top:-1rem;position:absolute;right:0;top:50%}.admin__page-nav-item-messages .admin__page-nav-item-message-loader .spinner{font-size:2rem;margin-right:1.5rem}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip{background:#f1f1f1;border:1px solid #f1f1f1;border-radius:1px;bottom:3.7rem;box-shadow:0 3px 9px 0 rgba(0,0,0,.3);display:none;font-weight:400;left:-1rem;line-height:1.36;padding:2rem;position:absolute;text-transform:none;width:27rem;word-break:normal;z-index:2}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:after,.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:before{border:15px solid transparent;height:0;width:0;border-top-color:#f1f1f1;content:'';display:block;left:2rem;position:absolute;top:100%;z-index:3}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:after{border-top-color:#f1f1f1;margin-top:-1px;z-index:4}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:before{border-top-color:#bfbfbf}.admin__data-grid-wrap-static .data-grid{box-sizing:border-box}.admin__data-grid-wrap-static .data-grid thead{color:#333}.admin__data-grid-wrap-static .data-grid tr:nth-child(even) td{background-color:#f5f5f5}.admin__data-grid-wrap-static .data-grid tr:nth-child(even) td._dragging{background-color:rgba(245,245,245,.95)}.admin__data-grid-wrap-static .data-grid ul{padding-left:1rem;margin-left:1rem}.admin__data-grid-wrap-static .admin__data-grid-loading-mask{background:rgba(255,255,255,.5);bottom:0;left:0;position:absolute;right:0;top:0;z-index:401}.admin__data-grid-wrap-static .admin__data-grid-loading-mask .grid-loader{background:url(../images/loader-2.gif) 50% 50% no-repeat;bottom:0;height:149px;left:0;margin:auto;position:absolute;right:0;top:0;width:218px}.data-grid-filters-actions-wrap{float:right}.data-grid-search-control-wrap{float:left;max-width:45.5rem;position:relative;width:50%}.data-grid-search-control-wrap :-ms-input-placeholder{font-style:italic}.data-grid-search-control-wrap ::-webkit-input-placeholder{font-style:italic}.data-grid-search-control-wrap ::-moz-placeholder{font-style:italic}.data-grid-search-control-wrap .action-submit{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:.6rem 2rem .2rem;position:absolute;right:0;top:1px}.data-grid-search-control-wrap .action-submit:hover{background-color:transparent;border:none;box-shadow:none}.data-grid-search-control-wrap .action-submit:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.data-grid-search-control-wrap .action-submit:hover:before{color:#1a1a1a}._keyfocus .data-grid-search-control-wrap .action-submit:focus{box-shadow:0 0 0 1px #008bdb}.data-grid-search-control-wrap .action-submit:before{content:'\e60c';font-size:2rem;transition:color .1s linear}.data-grid-search-control-wrap .action-submit>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.data-grid-search-control-wrap .abs-action-menu .action-submenu,.data-grid-search-control-wrap .abs-action-menu .action-submenu .action-submenu,.data-grid-search-control-wrap .action-menu,.data-grid-search-control-wrap .action-menu .action-submenu,.data-grid-search-control-wrap .actions-split .action-menu .action-submenu,.data-grid-search-control-wrap .actions-split .action-menu .action-submenu .action-submenu,.data-grid-search-control-wrap .actions-split .dropdown-menu .action-submenu,.data-grid-search-control-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{z-index:400;max-height:19.25rem;overflow-y:auto}.data-grid-search-control-wrap .action-menu-item._selected{background-color:#e0f6fe}.data-grid-search-control-wrap .data-grid-search-label{display:none}.data-grid-search-control{padding-right:6rem;width:100%}.data-grid-filters-action-wrap{float:left;padding-left:2rem}.data-grid-filters-action-wrap .action-default{font-size:1.3rem;margin-bottom:1rem;padding-left:1.7rem;padding-right:2.1rem;padding-top:.7rem}.data-grid-filters-action-wrap .action-default._active{background-color:#fff;border-bottom-color:#fff;border-right-color:#ccc;font-weight:600;margin:-.1rem 0 0;padding-bottom:1.6rem;padding-top:.8rem;position:relative;z-index:281}.data-grid-filters-action-wrap .action-default._active:after{background-color:#eb5202;bottom:100%;content:'';height:3px;left:-1px;position:absolute;right:-1px}.data-grid-filters-action-wrap .action-default:before{color:#333;content:'\e605';font-size:1.8rem;margin-right:.4rem;position:relative;top:-1px;vertical-align:top}.data-grid-filters-action-wrap .filters-active{display:none}.admin__data-grid-filters-wrap{opacity:0;visibility:hidden;clear:both;font-size:1.3rem;transition:opacity .3s ease}.admin__data-grid-filters-wrap._show{opacity:1;visibility:visible;border-bottom:1px solid #ccc;border-top:1px solid #ccc;margin-bottom:.7rem;padding:3.6rem 0 3rem;position:relative;top:-1px;z-index:280}.admin__data-grid-filters-wrap._show .admin__data-grid-filters,.admin__data-grid-filters-wrap._show .admin__data-grid-filters-footer{display:block}.admin__data-grid-filters-wrap .admin__form-field-label,.admin__data-grid-filters-wrap .admin__form-field-legend{display:block;font-weight:700;margin:0 0 .3rem;text-align:left}.admin__data-grid-filters-wrap .admin__form-field{display:inline-block;margin-bottom:2em;margin-left:0;padding-left:2rem;padding-right:2rem;vertical-align:top;width:calc(100% / 4 - 4px)}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field{display:block;float:none;margin-bottom:1.5rem;padding-left:0;padding-right:0;width:auto}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field:last-child{margin-bottom:0}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field .admin__form-field-label{border:1px solid transparent;float:left;font-weight:400;line-height:1.36;margin-bottom:0;padding-bottom:.6rem;padding-right:1em;padding-top:.6rem;width:25%}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field .admin__form-field-control{margin-left:25%}.admin__data-grid-filters-wrap .admin__action-multiselect,.admin__data-grid-filters-wrap .admin__control-select,.admin__data-grid-filters-wrap .admin__control-text,.admin__data-grid-filters-wrap .admin__form-field-label{font-size:1.3rem}.admin__data-grid-filters-wrap .admin__control-select{padding-top:.5rem;height:3.2rem}.admin__data-grid-filters-wrap .admin__control-select,.admin__data-grid-filters-wrap .admin__control-text.hasDatepicker{width:100%}.admin__data-grid-filters{display:none;margin-left:-2rem;margin-right:-2rem}.admin__filters-legend{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__data-grid-filters-footer{display:none;font-size:1.4rem}.admin__data-grid-filters-footer .admin__footer-main-actions{margin-left:25%;text-align:right}.admin__data-grid-filters-footer .admin__footer-secondary-actions{float:left;width:50%}.admin__data-grid-filters-current{border-bottom:.1rem solid #ccc;border-top:.1rem solid #ccc;display:none;font-size:1.3rem;margin-bottom:.9rem;padding-bottom:.8rem;padding-top:1.1rem;width:100%}.admin__data-grid-filters-current._show{display:table;position:relative;top:-1px;z-index:3}.admin__data-grid-filters-current._show+.admin__data-grid-filters-wrap._show{margin-top:-1rem}.admin__current-filters-actions-wrap,.admin__current-filters-list-wrap,.admin__current-filters-title-wrap{display:table-cell;vertical-align:top}.admin__current-filters-title{margin-right:1em;white-space:nowrap}.admin__current-filters-list-wrap{width:100%}.admin__current-filters-list{margin-bottom:0}.admin__current-filters-list>li{display:inline-block;font-weight:600;margin:0 1rem .5rem;padding-right:2.6rem;position:relative}.admin__current-filters-list .action-remove{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:0;line-height:1;position:absolute;right:0;top:1px}.admin__current-filters-list .action-remove:hover{background-color:transparent;border:none;box-shadow:none}.admin__current-filters-list .action-remove:hover:before{color:#949494}.admin__current-filters-list .action-remove:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.admin__current-filters-list .action-remove:before{color:#adadad;content:'\e620';font-size:1.6rem;transition:color .1s linear}.admin__current-filters-list .action-remove>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__current-filters-actions-wrap .action-clear{border:none;padding-bottom:0;padding-top:0;white-space:nowrap}.admin__data-grid-pager-wrap{text-align:right}.admin__data-grid-pager{display:inline-block;margin-left:3rem}.admin__data-grid-pager .admin__control-text::-webkit-inner-spin-button,.admin__data-grid-pager .admin__control-text::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.admin__data-grid-pager .admin__control-text{-moz-appearance:textfield;text-align:center;width:4.4rem}.action-next,.action-previous{width:4.4rem}.action-next:before,.action-previous:before{font-weight:700}.action-next>span,.action-previous>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-previous{margin-right:2.5rem;text-indent:-.25em}.action-previous:before{content:'\e629'}.action-next{margin-left:1.5rem;text-indent:.1em}.action-next:before{content:'\e62a'}.admin__data-grid-action-bookmarks{opacity:.98}.admin__data-grid-action-bookmarks .admin__action-dropdown-text:after{right:-6px;left:0}.admin__data-grid-action-bookmarks._active{z-index:290}.admin__data-grid-action-bookmarks .admin__action-dropdown .admin__action-dropdown-text{display:inline-block;max-width:15rem;min-width:4.9rem;vertical-align:top;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin__data-grid-action-bookmarks .admin__action-dropdown:before{content:'\e60f'}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu{font-size:1.3rem;left:0;padding:1rem 0;right:auto}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li{padding:0 5rem 0 0;position:relative;white-space:nowrap}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li:not(.action-dropdown-menu-action){transition:background-color .1s linear}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li:not(.action-dropdown-menu-action):hover{background-color:#e3e3e3}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item{max-width:23rem;min-width:18rem;white-space:normal;word-break:break-all}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-edit{display:none;padding-bottom:1rem;padding-left:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-edit .action-dropdown-menu-item-actions{padding-bottom:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action{padding-left:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action+.action-dropdown-menu-item-last{padding-top:.5rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action>a{color:#008bdb;text-decoration:none;display:inline-block;padding-left:1.1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action>a:hover{color:#0fa7ff;text-decoration:underline}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-last{padding-bottom:0}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._edit .action-dropdown-menu-item{display:none}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._edit .action-dropdown-menu-item-edit{display:block}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._active .action-dropdown-menu-link{font-weight:600}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .admin__control-text{font-size:1.3rem;min-width:15rem;width:calc(100% - 4rem)}.ie9 .admin__data-grid-action-bookmarks .admin__action-dropdown-menu .admin__control-text{width:15rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-actions{border-left:1px solid #fff;bottom:0;position:absolute;right:0;top:0;width:5rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-link{color:#333;display:block;text-decoration:none;padding:1rem 1rem 1rem 2.1rem}.admin__data-grid-action-bookmarks .action-delete,.admin__data-grid-action-bookmarks .action-edit,.admin__data-grid-action-bookmarks .action-submit{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;vertical-align:top}.admin__data-grid-action-bookmarks .action-delete:hover,.admin__data-grid-action-bookmarks .action-edit:hover,.admin__data-grid-action-bookmarks .action-submit:hover{background-color:transparent;border:none;box-shadow:none}.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before{font-size:1.7rem}.admin__data-grid-action-bookmarks .action-delete>span,.admin__data-grid-action-bookmarks .action-edit>span,.admin__data-grid-action-bookmarks .action-submit>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__data-grid-action-bookmarks .action-delete,.admin__data-grid-action-bookmarks .action-edit{padding:.6rem 1.4rem}.admin__data-grid-action-bookmarks .action-delete:active,.admin__data-grid-action-bookmarks .action-edit:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.admin__data-grid-action-bookmarks .action-submit{padding:.6rem 1rem .6rem .8rem}.admin__data-grid-action-bookmarks .action-submit:active{position:relative;right:-1px}.admin__data-grid-action-bookmarks .action-submit:before{content:'\e625'}.admin__data-grid-action-bookmarks .action-delete:before{content:'\e630'}.admin__data-grid-action-bookmarks .action-edit{padding-top:.8rem}.admin__data-grid-action-bookmarks .action-edit:before{content:'\e631'}.admin__data-grid-action-columns._active{opacity:.98;z-index:290}.admin__data-grid-action-columns .admin__action-dropdown:before{content:'\e60e';font-size:1.8rem;margin-right:.7rem;vertical-align:top}.admin__data-grid-action-columns-menu{color:#303030;font-size:1.3rem;overflow:hidden;padding:2.2rem 3.5rem 1rem;z-index:1}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-header{border-bottom:1px solid #d1d1d1}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-content{width:49.2rem}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-footer{border-top:1px solid #d1d1d1;padding-top:2.5rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content{max-height:22.85rem;overflow-y:auto;padding-top:1.5rem;position:relative;width:47.4rem}.admin__data-grid-action-columns-menu .admin__field-option{height:1.9rem;float:left;margin-bottom:1.5rem;padding:0 1rem 0 0;width:15.8rem}.admin__data-grid-action-columns-menu .admin__field-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-header{padding-bottom:1.5rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-footer{padding:1rem 0 2rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-footer-main-actions{margin-left:25%;text-align:right}.admin__data-grid-action-columns-menu .admin__action-dropdown-footer-secondary-actions{float:left;margin-left:-1em}.admin__data-grid-action-export._active{opacity:.98;z-index:290}.admin__data-grid-action-export .admin__action-dropdown:before{content:'\e635';font-size:1.7rem;left:.3rem;margin-right:.7rem;vertical-align:top}.admin__data-grid-action-export-menu{padding-left:2rem;padding-right:2rem;padding-top:1rem}.admin__data-grid-action-export-menu .admin__action-dropdown-footer-main-actions{padding-bottom:2rem;padding-top:2.5rem;white-space:nowrap}.sticky-header{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;box-shadow:0 5px 5px 0 rgba(0,0,0,.25);left:8.8rem;right:0;margin-top:-1px;padding:.5rem 3rem 0;position:fixed;top:77px;z-index:400}.sticky-header .admin__data-grid-wrap{margin-bottom:0;overflow-x:visible;padding-bottom:0}.sticky-header .admin__data-grid-header-row{position:relative;text-align:right}.sticky-header .admin__data-grid-header-row:last-child{margin:0}.sticky-header .admin__data-grid-actions-wrap,.sticky-header .admin__data-grid-filters-wrap,.sticky-header .admin__data-grid-pager-wrap,.sticky-header .data-grid-filters-actions-wrap,.sticky-header .data-grid-search-control-wrap{display:inline-block;float:none;vertical-align:top}.sticky-header .action-select-wrap{float:left;margin-right:1.5rem;width:16.66666667%}.sticky-header .admin__control-support-text{float:left}.sticky-header .data-grid-search-control-wrap{margin:-.5rem 0 0 1.1rem;width:auto}.sticky-header .data-grid-search-control-wrap .data-grid-search-label{box-sizing:border-box;cursor:pointer;display:block;min-width:3.8rem;padding:1.2rem .6rem 1.7rem;position:relative;text-align:center}.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before{color:#333;content:'\e60c';font-size:2rem;transition:color .1s linear}.sticky-header .data-grid-search-control-wrap .data-grid-search-label:hover:before{color:#000}.sticky-header .data-grid-search-control-wrap .data-grid-search-label span{display:none}.sticky-header .data-grid-filters-actions-wrap{margin:-.5rem 0 0 1.1rem;padding-left:0;position:relative}.sticky-header .data-grid-filters-actions-wrap .action-default{background-color:transparent;border:1px solid transparent;box-sizing:border-box;min-width:3.8rem;padding:1.2rem .6rem 1.7rem;text-align:center;transition:all .15s ease}.sticky-header .data-grid-filters-actions-wrap .action-default span{display:none}.sticky-header .data-grid-filters-actions-wrap .action-default:before{margin:0}.sticky-header .data-grid-filters-actions-wrap .action-default._active{background-color:#fff;border-color:#adadad #adadad #fff;box-shadow:1px 1px 5px rgba(0,0,0,.5);z-index:210}.sticky-header .data-grid-filters-actions-wrap .action-default._active:after{background-color:#fff;content:'';height:6px;left:-2px;position:absolute;right:-6px;top:100%}.sticky-header .data-grid-filters-action-wrap{padding:0}.sticky-header .admin__data-grid-filters-wrap{background-color:#fff;border:1px solid #adadad;box-shadow:0 5px 5px 0 rgba(0,0,0,.25);left:0;padding-left:3.5rem;padding-right:3.5rem;position:absolute;top:100%;width:100%;z-index:209}.sticky-header .admin__data-grid-filters-current+.admin__data-grid-filters-wrap._show{margin-top:-6px}.sticky-header .filters-active{background-color:#e04f00;border-radius:10px;color:#fff;display:block;font-size:1.4rem;font-weight:700;padding:.1rem .7rem;position:absolute;right:-7px;top:0;z-index:211}.sticky-header .filters-active:empty{padding-top:0;padding-bottom:0}.sticky-header .admin__data-grid-actions-wrap{margin:-.5rem 0 0 1.1rem;padding-right:.3rem}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown{background-color:transparent;box-sizing:border-box;min-width:3.8rem;padding-left:.6rem;padding-right:.6rem;text-align:center}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown .admin__action-dropdown-text{display:inline-block;min-width:0;max-width:0;overflow:hidden}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown:before{margin:0}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown-wrap{margin-right:1.1rem}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown-wrap:after,.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown:after{display:none}.sticky-header .admin__data-grid-actions-wrap ._active .admin__action-dropdown{background-color:#fff}.sticky-header .admin__data-grid-action-bookmarks .admin__action-dropdown:before{position:relative;top:-3px}.sticky-header .admin__data-grid-filters-current{border-top:0;border-bottom:0;margin-bottom:0;padding-bottom:0;padding-top:0}.sticky-header .admin__data-grid-pager .admin__control-text,.sticky-header .admin__data-grid-pager-wrap .admin__control-support-text,.sticky-header .data-grid-search-control-wrap .action-submit,.sticky-header .data-grid-search-control-wrap .data-grid-search-control{display:none}.sticky-header .action-next{margin:0}.sticky-header .data-grid{margin-bottom:-1px}.data-grid-cap-left,.data-grid-cap-right{background-color:#f8f8f8;bottom:-2px;position:absolute;top:6rem;width:3rem;z-index:201}.data-grid-cap-left{left:0}.data-grid-cap-right{right:0}.admin__data-grid-header{font-size:1.4rem}.admin__data-grid-header-row+.admin__data-grid-header-row{margin-top:1.1rem}.admin__data-grid-header-row:last-child{margin-bottom:0}.admin__data-grid-header-row .action-select-wrap{display:block}.admin__data-grid-header-row .action-select{width:100%}.admin__data-grid-actions-wrap{float:right;margin-left:1.1rem;margin-top:-.5rem;text-align:right}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap{position:relative;text-align:left}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active+.admin__action-dropdown-wrap:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._hide+.admin__action-dropdown-wrap:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap:first-child:after{display:none}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active .admin__action-dropdown,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active .admin__action-dropdown-menu{border-color:#adadad}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap:after{border-left:1px solid #ccc;content:'';height:3.2rem;left:0;position:absolute;top:.5rem;z-index:3}.admin__data-grid-actions-wrap .admin__action-dropdown{padding-bottom:1.7rem;padding-top:1.2rem}.admin__data-grid-actions-wrap .admin__action-dropdown:after{margin-top:-.4rem}.admin__data-grid-outer-wrap{min-height:8rem;position:relative}.admin__data-grid-wrap{margin-bottom:2rem;max-width:100%;overflow-x:auto;padding-bottom:1rem;padding-top:2rem}.admin__data-grid-loading-mask{background:rgba(255,255,255,.5);bottom:0;left:-3rem;position:absolute;right:-3rem;top:0;z-index:401}.admin__data-grid-loading-mask .spinner{font-size:4rem;left:50%;margin-left:-2rem;margin-top:-2rem;position:absolute;top:50%}.ie9 .admin__data-grid-loading-mask .spinner{background:url(../images/loader-2.gif) 50% 50% no-repeat;bottom:0;height:149px;left:0;margin:auto;position:absolute;right:0;top:0;width:218px}.data-grid-cell-content{overflow:hidden;width:100%;display:inline-block}body._in-resize{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:col-resize}body._in-resize *,body._in-resize .data-grid-th,body._in-resize .data-grid-th._draggable,body._in-resize .data-grid-th._sortable{cursor:col-resize!important}._layout-fixed{table-layout:fixed}.data-grid{border:none;font-size:1.3rem;margin-bottom:0;max-width:100%;width:100%}.data-grid:not(._dragging-copy) ._odd-row td._dragging{background-color:#d0d0d0}.data-grid:not(._dragging-copy) ._dragging{background-color:#d9d9d9;color:rgba(48,48,48,.95)}.data-grid:not(._dragging-copy) ._dragging a{color:rgba(0,139,219,.95)}.data-grid:not(._dragging-copy) ._dragging a:hover{color:rgba(15,167,255,.95)}.data-grid thead{background-color:transparent}.data-grid tfoot th{padding:1rem}.data-grid tr._odd-row td{background-color:#f5f5f5}.data-grid tr.data-grid-tr-no-data:hover td{background-color:#fff;cursor:default}.data-grid tr:active td{background-color:#e0f6fe}.data-grid tr:hover td{background-color:#e5f7fe}.data-grid tr:not(.data-grid-editable-row):last-child td{border-bottom:.1rem solid #d6d6d6}.data-grid tr ._clickable,.data-grid tr._clickable{cursor:pointer}.data-grid td,.data-grid th{font-size:1.3rem;line-height:1.36;transition:background-color .1s linear;vertical-align:top}.data-grid td._resizing,.data-grid th._resizing{border-left:1px solid #007bdb;border-right:1px solid #007bdb}.data-grid td{background-color:#fff;border-left:.1rem dashed #d6d6d6;border-right:.1rem dashed #d6d6d6;color:#303030;padding:1rem}.data-grid td:first-child{border-left-style:solid}.data-grid td:last-child{border-right-style:solid}.data-grid td .action-select-wrap{position:static}.data-grid td .action-select{background-color:transparent;border:none;font-size:1.3rem;position:relative;color:#008bdb;text-decoration:none;padding:0 3rem 0 0}.data-grid td .action-select:hover{color:#0fa7ff;text-decoration:underline}.data-grid td .action-select:hover:after{border-color:#0fa7ff transparent transparent}.data-grid td .action-select:after{border-color:#008bdb transparent transparent;margin:.6rem 0 0 .7rem;right:auto;top:auto}.data-grid td .action-select:before{display:none}.data-grid td .abs-action-menu .action-submenu,.data-grid td .abs-action-menu .action-submenu .action-submenu,.data-grid td .action-menu,.data-grid td .action-menu .action-submenu,.data-grid td .actions-split .action-menu .action-submenu,.data-grid td .actions-split .action-menu .action-submenu .action-submenu,.data-grid td .actions-split .dropdown-menu .action-submenu,.data-grid td .actions-split .dropdown-menu .action-submenu .action-submenu{left:auto;min-width:10rem;right:0;text-align:left;top:auto;z-index:1}.data-grid th{background-color:#514943;border:.1rem solid #8a837f;border-left-color:transparent;color:#fff;font-weight:600;padding:0;text-align:left}.data-grid th:first-child{border-left-color:#8a837f}.data-grid th._dragover-left{box-shadow:inset 3px 0 0 0 #fff;z-index:2}.data-grid th._dragover-right{box-shadow:inset -3px 0 0 0 #fff}.data-grid .shadow-div{cursor:col-resize;height:100%;margin-right:-5px;position:absolute;right:0;top:0;width:10px}.data-grid .data-grid-th{background-clip:padding-box;color:#fff;padding:1rem;position:relative;vertical-align:middle}.data-grid .data-grid-th._resize-visible .shadow-div{cursor:auto;display:none}.data-grid .data-grid-th._draggable{cursor:-webkit-grab;cursor:grab}.data-grid .data-grid-th._sortable{cursor:pointer;transition:background-color .1s linear;z-index:1}.data-grid .data-grid-th._sortable:focus,.data-grid .data-grid-th._sortable:hover{background-color:#5f564f}.data-grid .data-grid-th._sortable:active{padding-bottom:.9rem;padding-top:1.1rem}.data-grid .data-grid-th.required>span:after{color:#f38a5e;content:'*';margin-left:.3rem}.data-grid .data-grid-checkbox-cell{padding:0;vertical-align:top;width:5.2rem}.data-grid .data-grid-checkbox-cell:hover{cursor:default}.data-grid .data-grid-thumbnail-cell{text-align:center;width:7rem}.data-grid .data-grid-thumbnail-cell img{border:1px solid #d6d6d6;max-width:5rem}.data-grid .data-grid-multicheck-cell{padding:1rem 1rem .9rem;text-align:center;vertical-align:middle}.data-grid .data-grid-actions-cell{padding-left:2rem;padding-right:2rem;text-align:center;width:1%}.data-grid._hidden{display:none}.data-grid._dragging-copy{box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;opacity:.95;position:fixed;top:0;z-index:1000}.data-grid._dragging-copy .data-grid-th{border:1px solid #007bdb;border-bottom:none}.data-grid._dragging-copy .data-grid-th,.data-grid._dragging-copy .data-grid-th._sortable{cursor:-webkit-grabbing;cursor:grabbing}.data-grid._dragging-copy tr:last-child td{border-bottom:1px solid #007bdb}.data-grid._dragging-copy td{border-left:1px solid #007bdb;border-right:1px solid #007bdb}.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel td,.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel td:before,.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel:hover td{background-color:rgba(255,251,230,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td,.data-grid._dragging-copy._in-edit .data-grid-editable-row:hover td{background-color:rgba(255,255,255,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:after,.data-grid._dragging-copy._in-edit .data-grid-editable-row td:before{left:0;right:0}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:before{background-color:rgba(255,255,255,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:only-child{border-left:1px solid #007bdb;border-right:1px solid #007bdb;left:0}.data-grid._dragging-copy._in-edit .data-grid-editable-row .admin__control-select,.data-grid._dragging-copy._in-edit .data-grid-editable-row .admin__control-text{opacity:.5}.data-grid._in-edit tr:hover td{background-color:#e6e6e6}.data-grid._in-edit ._odd-row.data-grid-editable-row td,.data-grid._in-edit ._odd-row.data-grid-editable-row:hover td{background-color:#fff}.data-grid._in-edit ._odd-row td,.data-grid._in-edit ._odd-row:hover td{background-color:#dcdcdc}.data-grid._in-edit .data-grid-editable-row-actions td,.data-grid._in-edit .data-grid-editable-row-actions:hover td{background-color:#fff}.data-grid._in-edit td{background-color:#e6e6e6;pointer-events:none}.data-grid._in-edit .data-grid-checkbox-cell{pointer-events:auto}.data-grid._in-edit .data-grid-editable-row{border:.1rem solid #adadad;border-bottom-color:#c2c2c2}.data-grid._in-edit .data-grid-editable-row:hover td{background-color:#fff}.data-grid._in-edit .data-grid-editable-row td{background-color:#fff;border-bottom-color:#fff;border-left-style:hidden;border-right-style:hidden;border-top-color:#fff;pointer-events:auto;vertical-align:middle}.data-grid._in-edit .data-grid-editable-row td:first-child{border-left-color:#adadad;border-left-style:solid}.data-grid._in-edit .data-grid-editable-row td:first-child:after,.data-grid._in-edit .data-grid-editable-row td:first-child:before{left:0}.data-grid._in-edit .data-grid-editable-row td:last-child{border-right-color:#adadad;border-right-style:solid;left:-.1rem}.data-grid._in-edit .data-grid-editable-row td:last-child:after,.data-grid._in-edit .data-grid-editable-row td:last-child:before{right:0}.data-grid._in-edit .data-grid-editable-row .admin__control-select,.data-grid._in-edit .data-grid-editable-row .admin__control-text{width:100%}.data-grid._in-edit .data-grid-bulk-edit-panel td{vertical-align:bottom}.data-grid .data-grid-editable-row td{border-left-color:#fff;border-left-style:solid;position:relative;z-index:1}.data-grid .data-grid-editable-row td:after{bottom:0;box-shadow:0 5px 5px rgba(0,0,0,.25);content:'';height:.9rem;left:0;margin-top:-1rem;position:absolute;right:0}.data-grid .data-grid-editable-row td:before{background-color:#fff;bottom:0;content:'';height:1rem;left:-10px;position:absolute;right:-10px;z-index:1}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td,.data-grid .data-grid-editable-row.data-grid-editable-row-actions:hover td{background-color:#fff}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td:first-child{border-left-color:#fff;border-right-color:#fff}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td:last-child{left:0}.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel td,.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel td:before,.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel:hover td{background-color:#fffbe6}.data-grid .data-grid-editable-row-actions{left:50%;margin-left:-12.5rem;margin-top:-2px;position:absolute;text-align:center}.data-grid .data-grid-editable-row-actions td{width:25rem}.data-grid .data-grid-editable-row-actions [class*=action-]{min-width:9rem}.data-grid-th._sortable._ascend,.data-grid-th._sortable._descend{padding-right:2.7rem}.data-grid-th._sortable._ascend:before,.data-grid-th._sortable._descend:before{margin-top:-1em;position:absolute;right:1rem;top:50%}.data-grid-th._sortable._ascend:before{content:'\2193'}.data-grid-th._sortable._descend:before{content:'\2191'}.data-grid-checkbox-cell-inner{display:block;padding:1.1rem 1.8rem .9rem;text-align:right}.data-grid-checkbox-cell-inner:hover{cursor:pointer}.data-grid-row-parent._active>td .data-grid-checkbox-cell-inner:before{content:'\e62b'}.data-grid-row-parent>td .data-grid-checkbox-cell-inner{padding-left:3.7rem;position:relative}.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before{content:'\e628';font-size:1rem;font-weight:700;left:1.35rem;position:absolute;top:1.6rem}.data-grid-th._col-xs{width:1%}.data-grid-info-panel{box-shadow:0 0 5px rgba(0,0,0,.5);margin:2rem .1rem -2rem;padding:1rem}.data-grid-info-panel .messages{margin-bottom:1rem}.data-grid-info-panel-actions{text-align:right}.data-grid-editable-row .admin__field-control{position:relative}.data-grid-editable-row .admin__field-control._error:after{border-color:transparent #ee7d7d transparent transparent;border-style:solid;border-width:0 12px 12px 0;content:'';position:absolute;right:0;top:0}.data-grid-editable-row .admin__field-control._error .admin__control-text{border-color:#ee7d7d}.data-grid-editable-row .admin__field-control._focus:after{display:none}.data-grid-editable-row .admin__field-error{bottom:100%;box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;margin:0 auto 1.5rem;max-width:32rem;position:absolute;right:0}.data-grid-editable-row .admin__field-error:after,.data-grid-editable-row .admin__field-error:before{border-style:solid;content:'';left:50%;position:absolute;top:100%}.data-grid-editable-row .admin__field-error:after{border-color:#fffbbb transparent transparent;border-width:10px 10px 0;margin-left:-10px;z-index:1}.data-grid-editable-row .admin__field-error:before{border-color:#ee7d7d transparent transparent;border-width:11px 12px 0;margin-left:-12px}.data-grid-bulk-edit-panel .admin__field-label-vertical{display:block;font-size:1.2rem;margin-bottom:.5rem;text-align:left}.data-grid-row-changed{cursor:default;display:block;opacity:.5;position:relative;width:100%;z-index:1}.data-grid-row-changed:after{content:'\e631';display:inline-block}.data-grid-row-changed .data-grid-row-changed-tooltip{background:#f1f1f1;border-radius:1px;border:1px solid #f1f1f1;bottom:100%;box-shadow:0 3px 9px 0 rgba(0,0,0,.3);display:none;font-weight:400;line-height:1.36;margin-bottom:1.5rem;padding:1rem;position:absolute;right:-1rem;text-transform:none;width:27rem;word-break:normal;z-index:2}.data-grid-row-changed._changed{opacity:1;z-index:3}.data-grid-row-changed._changed:hover .data-grid-row-changed-tooltip{display:block}.data-grid-row-changed._changed:hover:before{background:#f1f1f1;border:1px solid #f1f1f1;bottom:100%;box-shadow:4px 4px 3px -1px rgba(0,0,0,.15);content:'';display:block;height:1.6rem;left:50%;margin:0 0 .7rem -.8rem;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:1.6rem;z-index:3}.ie9 .data-grid-row-changed._changed:hover:before{display:none}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]:before,.admin__control-file-label :before,.admin__control-multiselect,.admin__control-select,.admin__control-text,.admin__control-textarea,.selectmenu{background-color:#fff;border-radius:1px;border:1px solid #adadad;color:#303030;font-size:1.4rem;font-weight:400;line-height:1.36;height:auto;width:auto;padding:.6rem 1rem;transition:border-color .1s linear;vertical-align:baseline}.admin__control-multiselect:hover,.admin__control-select:hover,.admin__control-text:hover,.admin__control-textarea:hover,.selectmenu:hover,.selectmenu:hover .selectmenu-toggle:before{border-color:#878787}.admin__control-addon [class*=admin__control-][type]:focus+[class*=admin__addon-]:before,.admin__control-file:active+.admin__control-file-label :before,.admin__control-file:focus+.admin__control-file-label :before,.admin__control-multiselect:focus,.admin__control-select:focus,.admin__control-text:focus,.admin__control-textarea:focus,.selectmenu._focus,.selectmenu._focus .selectmenu-toggle:before{border-color:#007bdb;box-shadow:none;outline:0}.admin__control-addon [class*=admin__control-][type][disabled]+[class*=admin__addon-]:before,.admin__control-file[disabled]+.admin__control-file-label :before,.admin__control-multiselect[disabled],.admin__control-select[disabled],.admin__control-text[disabled],.admin__control-textarea[disabled]{background-color:#e9e9e9;border-color:#adadad;color:#303030;opacity:.5;cursor:not-allowed}.admin__fieldset>.admin__field.admin__field-wide[class]>.admin__field-control{float:none;clear:left;text-align:left;width:auto}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)>.admin__field-label{display:block;line-height:1.4rem;margin-bottom:.86rem;margin-top:-.14rem;text-align:left;width:auto}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)>.admin__field-label:before{display:none}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)._required>.admin__field-label span{padding-left:1.5rem}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)._required>.admin__field-label span:after{left:0;margin-left:30px;top:.2rem}.admin__legend{font-size:1.8rem;font-weight:600;margin-bottom:3rem}.admin__control-checkbox,.admin__control-radio{cursor:pointer;opacity:.01;overflow:hidden;position:absolute;vertical-align:top}.admin__control-checkbox:after,.admin__control-radio:after{display:none}.admin__control-checkbox+label,.admin__control-radio+label{cursor:pointer;display:inline-block}.admin__control-checkbox+label:before,.admin__control-radio+label:before{background-color:#fff;border:1px solid #adadad;color:transparent;float:left;height:1.6rem;text-align:center;vertical-align:top;width:1.6rem}.admin__control-checkbox+.admin__field-label,.admin__control-radio+.admin__field-label{padding-left:2.6rem}.admin__control-checkbox+.admin__field-label:before,.admin__control-radio+.admin__field-label:before{margin:1px 1rem 0 -2.6rem}.admin__control-checkbox:checked+label:before,.admin__control-radio:checked+label:before{color:#514943}.admin__control-checkbox.disabled+label,.admin__control-checkbox[disabled]+label,.admin__control-radio.disabled+label,.admin__control-radio[disabled]+label{cursor:default;color:#303030;opacity:.5}.admin__control-checkbox.disabled+label:before,.admin__control-checkbox[disabled]+label:before,.admin__control-radio.disabled+label:before,.admin__control-radio[disabled]+label:before{background-color:#e9e9e9;border-color:#adadad;cursor:default}._keyfocus .admin__control-checkbox:not(.disabled):focus+label:before,._keyfocus .admin__control-checkbox:not([disabled]):focus+label:before,._keyfocus .admin__control-radio:not(.disabled):focus+label:before,._keyfocus .admin__control-radio:not([disabled]):focus+label:before{border-color:#007bdb}.admin__control-checkbox:not(.disabled):hover+label:before,.admin__control-checkbox:not([disabled]):hover+label:before,.admin__control-radio:not(.disabled):hover+label:before,.admin__control-radio:not([disabled]):hover+label:before{border-color:#878787}.admin__control-radio+label:before{border-radius:1.6rem;content:'\e637';font-size:1rem;transition:border-color .1s linear,color .1s ease-in}.admin__control-radio.admin__control-radio+label:before{line-height:140%}.admin__control-radio:checked:not(.disabled):hover,.admin__control-radio:checked:not(.disabled):hover+label,.admin__control-radio:checked:not([disabled]):hover,.admin__control-radio:checked:not([disabled]):hover+label{cursor:default}.admin__control-radio:checked:not(.disabled):hover+label:before,.admin__control-radio:checked:not([disabled]):hover+label:before{border-color:#adadad}.admin__control-checkbox+label:before{border-radius:1px;content:'';font-size:0;transition:font-size .1s ease-out,color .1s ease-out,border-color .1s linear}.admin__control-checkbox:checked+label:before{content:'\e62d';font-size:1.1rem;line-height:125%}.admin__control-checkbox:not(:checked)._indeterminate+label:before,.admin__control-checkbox:not(:checked):indeterminate+label:before{color:#514943;content:'-';font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:700}input[type=checkbox].admin__control-checkbox,input[type=radio].admin__control-checkbox{position:absolute;margin:0}.admin__control-select{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background-repeat:no-repeat;background-image:url(../images/arrows-bg.svg),linear-gradient(#e3e3e3,#e3e3e3),linear-gradient(#adadad,#adadad);background-position:calc(100% - 12px) -34px,100%,calc(100% - 3.2rem) 0;background-size:auto,3.2rem 100%,1px 100%;padding-bottom:.5rem;padding-right:4.4rem;padding-top:.5rem;transition:border-color .1s linear}.admin__control-select:hover{border-color:#878787;cursor:pointer}.admin__control-select:focus{background-image:url(../images/arrows-bg.svg),linear-gradient(#e3e3e3,#e3e3e3),linear-gradient(#007bdb,#007bdb);background-position:calc(100% - 12px) 13px,100%,calc(100% - 3.2rem) 0;border-color:#007bdb}.admin__control-select::-ms-expand{display:none}.ie9 .admin__control-select{background-image:none;padding-right:1rem}option:empty{display:none}.admin__control-multiselect{height:auto;padding:.6rem 1rem}.admin__control-file-wrapper{display:inline-block;padding:.5rem 1rem;position:relative;z-index:1}.admin__control-file-label :before{content:'';left:0;position:absolute;top:0;width:100%;z-index:0}.admin__control-file{position:relative;z-index:1;background:0 0;border:0;width:auto}.admin__control-support-text{border:1px solid transparent;display:inline-block;font-size:1.4rem;line-height:1.36;padding-top:.6rem;padding-bottom:.6rem}.admin__control-support-text+[class*=admin__control-],[class*=admin__control-]+.admin__control-support-text{margin-left:.7rem}.admin__control-textarea{height:8.48rem;line-height:1.18;padding-top:.8rem;resize:vertical}.admin__control-addon{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;display:inline-flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;position:relative;width:100%;z-index:1}.admin__control-addon>[class*=admin__addon-],.admin__control-addon>[class*=admin__control-]{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;position:relative;z-index:1}.admin__control-addon [class*=admin__control-][type]{appearence:none;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;box-shadow:none;background-color:transparent;border-color:transparent;-webkit-order:1;-ms-flex-order:1;order:1;vertical-align:top;width:auto}.admin__control-addon [class*=admin__control-][type] :focus{box-shadow:0}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]{padding-left:1rem;position:static!important;z-index:0}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]>*{position:relative;vertical-align:top;z-index:2}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]:before{bottom:0;box-sizing:border-box;content:'';left:0;position:absolute;top:0;width:100%;z-index:0}.admin__addon-prefix,.admin__addon-suffix{border:0;box-sizing:border-box;color:#858585;display:inline-block;font-size:1.4rem;font-weight:400;height:3.2rem;line-height:3.2rem;padding:0}.admin__addon-suffix{-webkit-order:3;-ms-flex-order:3;order:3}.admin__addon-suffix:last-child{padding-right:1rem}.admin__addon-prefix{-webkit-order:0;-ms-flex-order:0;order:0}.ie9 .admin__control-addon:after{clear:both;content:'';display:block;height:0;overflow:hidden}.ie9 .admin__addon{min-width:0;overflow:hidden;text-align:right;white-space:nowrap;width:auto}.ie9 .admin__addon [class*=admin__control-]{display:inline}.ie9 .admin__addon-prefix{float:left}.ie9 .admin__addon-suffix{float:right}.admin__control-table-wrapper{max-width:100%;overflow-x:auto;overflow-y:hidden}.admin__control-table{width:100%}.admin__control-table thead{background-color:transparent}.admin__control-table tbody td{vertical-align:middle}.admin__control-table tfoot th{padding-bottom:1.3rem}.admin__control-table tr:last-child td,.admin__control-table tr:last-child th{border-bottom:none}.admin__control-table td,.admin__control-table th{background-color:#efefef;border:0;border-bottom:1px solid #fff;padding:1.3rem 2.5rem 1.3rem 0;text-align:left;vertical-align:top}.admin__control-table td:first-child,.admin__control-table th:first-child{padding-left:1.5rem}.admin__control-table th{border:0;vertical-align:bottom;color:#303030;font-size:1.4rem;font-weight:600;padding-bottom:0}.admin__control-table th._required span:after{color:#eb5202;content:'*'}.admin__control-table .control-table-actions-th{white-space:nowrap}.admin__control-table .control-table-actions-cell{padding-top:1.8rem;text-align:center;width:1%}.admin__control-table .col-draggable{padding-top:2.2rem;width:1%}.admin__control-table .action-delete,.admin__control-table .action-delete:hover{background-color:transparent;border-color:transparent;box-shadow:none}.admin__control-table .action-delete:before{content:'\e630'}.admin__control-table .action-delete>span{display:none}.admin__field-tooltip{display:inline-block;margin-top:5px;overflow:visible;vertical-align:top;width:0}.admin__field-tooltip:hover{position:relative;z-index:500}.admin__field-option .admin__field-tooltip{margin-top:10px}.admin__field-tooltip .admin__field-tooltip-action{margin-left:20px;display:inline-block;text-decoration:none}.admin__field-tooltip .admin__field-tooltip-action:before{-webkit-font-smoothing:antialiased;font-size:2.2rem;line-height:1;color:#514943;content:'\e633';font-family:Icons;vertical-align:middle;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.admin__field-tooltip .admin__control-text:focus+.admin__field-tooltip-content,.admin__field-tooltip:hover .admin__field-tooltip-content{display:block}.admin__field-tooltip .admin__field-tooltip-content{bottom:42px;display:none;right:-70px}.admin__field-tooltip .admin__field-tooltip-content:after,.admin__field-tooltip .admin__field-tooltip-content:before{border:16px solid transparent;height:0;width:0;border-top-color:#afadac;content:"";display:block;position:absolute;right:20px;top:100%;z-index:3}.admin__field-tooltip .admin__field-tooltip-content:after{border-top-color:#fffbbb;margin-top:-1px;z-index:4}.abs-admin__field-tooltip-content,.admin__field-tooltip .admin__field-tooltip-content{box-shadow:0 2px 8px 0 rgba(0,0,0,.3);background:#fffbbb;border-radius:1px;border:1px solid #afadac;padding:15px 25px;position:absolute;width:320px;z-index:1}.admin__fieldset{border:0;margin:0;min-width:0;padding:0}.admin__fieldset>.admin__field{border:0;margin:0 0 0 -30px;padding:0}.admin__fieldset>.admin__field:after{clear:both;content:'';display:table}.admin__fieldset>.admin__field>.admin__field-control{width:calc((100%) * .4444444444444444 - 30px);float:left;margin-left:30px}.admin__fieldset>.admin__field>.admin__field-label{width:calc((100%) * .3333333333333333 - 30px);float:left;margin-left:30px}.admin__form-field{border:0;margin:0;padding:0}.admin__field-control .admin__control-text,.admin__field-control .admin__control-textarea,.admin__form-field-control .admin__control-text,.admin__form-field-control .admin__control-textarea{width:100%}.admin__field-label{color:#303030;margin:0;text-align:right}.admin__field-label+br{display:none}.admin__field:not(.admin__field-option)>.admin__field-label{font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:600;line-height:3.2rem;padding:0;white-space:nowrap;word-wrap:break-word}.admin__field:not(.admin__field-option)>.admin__field-label:before{opacity:0;visibility:hidden;content:'.';margin-left:-7px;overflow:hidden}.admin__field:not(.admin__field-option)>.admin__field-label span{display:inline-block;line-height:1.2;vertical-align:middle;white-space:normal}._required>.admin__field-label span:after{color:#eb5202;content:'*';display:inline-block;font-size:1.6rem;font-weight:500;line-height:1;margin-left:10px;position:absolute;top:1.2rem;z-index:1}._disabled>.admin__field-label{color:#999}.admin__field{margin-bottom:0}.admin__field+.admin__field{margin-top:1.5rem}.admin__field:not(.admin__field-option)~.admin__field-option{margin-top:.5rem}.admin__field.admin__field-option~.admin__field-option{margin-top:.9rem}.admin__field~.admin__field-option:last-child{margin-bottom:.8rem}.admin__fieldset>.admin__field{margin-bottom:3rem;position:relative}.admin__field[data-config-scope]:before{color:gray;content:attr(data-config-scope);display:inline-block;font-size:1.2rem;left:calc((100%) * .7777777777777778 - 30px);line-height:3.2rem;margin-left:60px;position:absolute;width:calc((100%) * .2222222222222222 - 30px)}.admin__field-control .admin__field[data-config-scope]:nth-child(n+2):before{content:''}.admin__field._error .admin__field-control [class*=admin__addon-]:before,.admin__field._error .admin__field-control>[class*=admin__control-]{border-color:#e22626}.admin__field-control+.admin__field-control{margin-top:1.5rem}.admin__field-error{background:#fffbbb;border:1px solid #ee7d7d;box-sizing:border-box;color:#555;display:block;font-size:1.2rem;font-weight:400;line-height:1.2;margin:.2rem 0 0;padding:.8rem 1rem .9rem}.admin__field-note{color:#303030;font-size:1.2rem;margin:10px 0 0;padding:0}.admin__field-option{padding-top:.8rem}.admin__field-option .admin__field-label{text-align:left}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2),.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1){display:inline-block}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2)+.admin__field-option,.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1)+.admin__field-option{display:inline-block;margin-left:41px;margin-top:0}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2)+.admin__field-option:before,.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1)+.admin__field-option:before{background:#cacaca;content:'';display:inline-block;height:20px;margin-left:-20px;position:absolute;width:1px}.admin__field-value{padding-top:.8rem}.admin__control-fields>.admin__field:first-child,[class*=admin__control-grouped]>.admin__field:first-child{position:static}.admin__control-fields>.admin__field:first-child>.admin__field-label,[class*=admin__control-grouped]>.admin__field:first-child>.admin__field-label{width:calc((100%) * .3333333333333333 - 30px);float:left;margin-left:30px;cursor:pointer;left:0;opacity:0;position:absolute;top:0}.admin__control-fields .admin__field-label~.admin__field-control{width:100%}[class*=admin__control-grouped]{box-sizing:border-box;display:table;table-layout:fixed;width:100%}[class*=admin__control-grouped]>.admin__field{display:table-cell;vertical-align:top;width:50%}[class*=admin__control-grouped]>.admin__field>.admin__field-control{float:none;width:100%}[class*=admin__control-grouped]>.admin__field:nth-child(n+2){padding-left:20px}[class*=admin__control-grouped]>.admin__field:nth-child(n+2):not(.admin__field-option) .admin__field-label{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.admin__field-control-group{margin-top:.8rem}.admin__field-control-group>.admin__field{padding:0}.admin__legend{float:left;position:static;width:100%}.admin__legend+br{display:block;height:0;overflow:hidden;clear:left}.message{margin-bottom:3rem}.message-icon-top:before{margin-top:0;top:1.8rem}.nav{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;display:none;margin-bottom:3rem;padding:2.2rem 1.5rem 0 0}.nav .btn-group,.nav-bar-outer-actions{float:right;margin-bottom:1.7rem}.nav .btn-group .btn-wrap,.nav-bar-outer-actions .btn-wrap{float:right;margin-left:.5rem;margin-right:.5rem}.nav .btn-group .btn-wrap .btn,.nav-bar-outer-actions .btn-wrap .btn{padding-left:.5rem;padding-right:.5rem}.nav-bar-outer-actions{margin-top:-10.6rem;padding-right:1.5rem}.btn-wrap-try-again{width:9.5rem}.btn-wrap-next,.btn-wrap-prev{width:8.5rem}.nav-bar{counter-reset:i;float:left;margin:0 1rem 1.7rem 0;padding:0;position:relative;white-space:nowrap}.nav-bar:before{background-color:#d4d4d4;background-repeat:repeat-x;background-image:linear-gradient(to bottom,#d1d1d1 0,#d4d4d4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d1d1d1', endColorstr='#d4d4d4', GradientType=0);border-bottom:1px solid #d9d9d9;border-top:1px solid #bfbfbf;content:'';height:1rem;left:5.15rem;position:absolute;right:5.15rem;top:.7rem}.nav-bar>li{display:inline-block;font-size:0;position:relative;vertical-align:top;width:10.3rem}.nav-bar>li:first-child:after{display:none}.nav-bar>li:after{background-color:#514943;content:'';height:.5rem;left:calc(-50% + .25rem);position:absolute;right:calc(50% + .7rem);top:.9rem}.nav-bar>li.disabled:before,.nav-bar>li.ui-state-disabled:before{bottom:0;content:'';left:0;position:absolute;right:0;top:0;z-index:1}.nav-bar>li.active~li:after,.nav-bar>li.ui-state-active~li:after{display:none}.nav-bar>li.active~li a:after,.nav-bar>li.ui-state-active~li a:after{background-color:transparent;border-color:transparent;color:#a6a6a6}.nav-bar>li.active a,.nav-bar>li.ui-state-active a{color:#000}.nav-bar>li.active a:hover,.nav-bar>li.ui-state-active a:hover{cursor:default}.nav-bar>li.active a:after,.nav-bar>li.ui-state-active a:after{background-color:#fff;content:''}.nav-bar a{color:#514943;display:block;font-size:1.2rem;font-weight:600;line-height:1.2;overflow:hidden;padding:3rem .5em 0;position:relative;text-align:center;text-overflow:ellipsis}.nav-bar a:hover{text-decoration:none}.nav-bar a:after{background-color:#514943;border:.4rem solid #514943;border-radius:100%;color:#fff;content:counter(i);counter-increment:i;height:1.5rem;left:50%;line-height:.6;margin-left:-.8rem;position:absolute;right:auto;text-align:center;top:.4rem;width:1.5rem}.nav-bar a:before{background-color:#d6d6d6;border:1px solid transparent;border-bottom-color:#d9d9d9;border-radius:100%;border-top-color:#bfbfbf;content:'';height:2.3rem;left:50%;line-height:1;margin-left:-1.2rem;position:absolute;top:0;width:2.3rem}.tooltip{display:block;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.19rem;font-weight:400;line-height:1.4;opacity:0;position:absolute;visibility:visible;z-index:10}.tooltip.in{opacity:.9}.tooltip.top{margin-top:-4px;padding:8px 0}.tooltip.right{margin-left:4px;padding:0 8px}.tooltip.bottom{margin-top:4px;padding:8px 0}.tooltip.left{margin-left:-4px;padding:0 8px}.tooltip p:last-child{margin-bottom:0}.tooltip-inner{background-color:#fff;border:1px solid #adadad;border-radius:0;box-shadow:1px 1px 1px #ccc;color:#41362f;max-width:20rem;padding:.5em 1em;text-decoration:none}.tooltip-arrow,.tooltip-arrow:after{border:solid transparent;height:0;position:absolute;width:0}.tooltip-arrow:after{content:'';position:absolute}.tooltip.top .tooltip-arrow,.tooltip.top .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:50%;margin-left:-8px}.tooltip.top-left .tooltip-arrow,.tooltip.top-left .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;margin-bottom:-8px;right:8px}.tooltip.top-right .tooltip-arrow,.tooltip.top-right .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:8px;margin-bottom:-8px}.tooltip.right .tooltip-arrow,.tooltip.right .tooltip-arrow:after{border-right-color:#949494;border-width:8px 8px 8px 0;left:1px;margin-top:-8px;top:50%}.tooltip.right .tooltip-arrow:after{border-right-color:#fff;border-width:6px 7px 6px 0;margin-left:0;margin-top:-6px}.tooltip.left .tooltip-arrow,.tooltip.left .tooltip-arrow:after{border-left-color:#949494;border-width:8px 0 8px 8px;margin-top:-8px;right:0;top:50%}.tooltip.bottom .tooltip-arrow,.tooltip.bottom .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:50%;margin-left:-8px;top:0}.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;margin-top:-8px;right:8px;top:0}.tooltip.bottom-right .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:8px;margin-top:-8px;top:0}.password-strength{display:block;margin:0 -.3rem 1em;white-space:nowrap}.password-strength.password-strength-too-short .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child+.password-strength-item{background-color:#e22626}.password-strength.password-strength-fair .password-strength-item:first-child,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item+.password-strength-item{background-color:#ef672f}.password-strength.password-strength-good .password-strength-item:first-child,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item+.password-strength-item,.password-strength.password-strength-strong .password-strength-item{background-color:#79a22e}.password-strength .password-strength-item{background-color:#ccc;display:inline-block;font-size:0;height:1.4rem;margin-right:.3rem;width:calc(20% - .6rem)}@-webkit-keyframes progress-bar-stripes{from{background-position:4rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:4rem 0}to{background-position:0 0}}.progress{background-color:#fafafa;border:1px solid #ccc;clear:left;height:3rem;margin-bottom:3rem;overflow:hidden}.progress-bar{background-color:#79a22e;color:#fff;float:left;font-size:1.19rem;height:100%;line-height:3rem;text-align:center;transition:width .6s ease;width:0}.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-text-description{margin-bottom:1.6rem}.progress-bar-text-progress{text-align:right}.page-columns .page-inner-sidebar{margin:0 0 3rem}.page-header{margin-bottom:2.7rem;padding-bottom:2.9rem;position:relative}.page-header:before{border-bottom:1px solid #e3e3e3;bottom:0;content:'';display:block;height:1px;left:3rem;position:absolute;right:3rem}.container .page-header:before{content:normal}.page-header .message{margin-bottom:1.8rem}.page-header .message+.message{margin-top:-1.5rem}.page-header .admin__action-dropdown,.page-header .search-global-input{transition:none}.container .page-header{margin-bottom:0}.page-title-wrapper{margin-top:1.1rem}.container .page-title-wrapper{background:url(../../pub/images/logo.svg) no-repeat;min-height:41px;padding:4px 0 0 45px}.admin__menu .level-0:first-child>a{margin-top:1.6rem}.admin__menu .level-0:first-child>a:after{top:-1.6rem}.admin__menu .level-0>a{padding-top:1.3rem;padding-bottom:1.3rem}.admin__menu .level-0>a:before{margin-bottom:.7rem}.admin__menu .item-home>a:before{content:'\e611';font-size:2.3rem;padding-top:-.1rem}.admin__menu .item-component>a:before{content:'\e612'}.admin__menu .item-upgrade>a:before{content:'\e614'}.admin__menu .item-system-config>a:before{content:'\e610'}.admin__menu .item-tools>a:before{content:'\e613'}.modal-sub-title{font-size:1.7rem;font-weight:600}.modal-connect-signin .modal-inner-wrap{max-width:80rem}@-webkit-keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@-webkit-keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}@keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}.ngdialog{-webkit-overflow-scrolling:touch;bottom:0;box-sizing:border-box;left:0;overflow:auto;position:fixed;right:0;top:0;z-index:999}.ngdialog *,.ngdialog:after,.ngdialog:before{box-sizing:inherit}.ngdialog.ngdialog-disabled-animation *{-webkit-animation:none!important;animation:none!important}.ngdialog.ngdialog-closing .ngdialog-content,.ngdialog.ngdialog-closing .ngdialog-overlay{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadeout .5s;animation:ngdialog-fadeout .5s}.ngdialog-overlay{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadein .5s;animation:ngdialog-fadein .5s;background:rgba(0,0,0,.4);bottom:0;left:0;position:fixed;right:0;top:0}.ngdialog-content{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadein .5s;animation:ngdialog-fadein .5s}body.ngdialog-open{overflow:hidden}.component-indicator{border-radius:50%;cursor:help;display:inline-block;height:20px;text-align:center;width:20px}.component-indicator::after,.component-indicator::before{background:#fff;display:block;opacity:0;position:absolute;transition:opacity .2s linear .1s;visibility:hidden}.component-indicator::before{border-radius:1px;border:1px solid #adadad;box-shadow:0 0 2px rgba(0,0,0,.4);content:attr(data-label);font-size:1.2rem;margin:34px 0 0 -10px;min-width:50px;padding:4px 5px}.component-indicator::after{border:1px solid #999;border-width:1px 0 0 1px;box-shadow:-1px -1px 1px rgba(0,0,0,.1);content:'';height:10px;margin:9px 0 0 5px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:10px}.component-indicator:hover::after,.component-indicator:hover::before{opacity:1;transition:opacity .2s linear;visibility:visible}.component-indicator span{display:block;height:20px;overflow:hidden;width:20px}.component-indicator span:before{content:'';display:block;font-family:Icons;font-size:20px;height:100%;line-height:20px;width:100%}.component-indicator._on{background:#79a22e}.component-indicator._off{background:#e22626}.component-indicator._off span:before{background:#fff;height:4px;margin:8px auto 20px;width:12px}.component-indicator._info{background:0 0}.component-indicator._info span{width:21px}.component-indicator._info span:before{color:#008bdb;content:'\e61a';font-family:Icons;font-size:21px}.app-updater .nav{display:block;margin-bottom:3.1rem;margin-top:-2.8rem}.app-updater .nav-bar-outer-actions{margin-top:1rem;padding-right:0}.app-updater .nav-bar-outer-actions .btn-wrap-cancel{margin-right:2.6rem}.main{padding-bottom:2rem;padding-top:3rem}.header{display:none}.header .logo{float:left;height:4.1rem;width:3.5rem}.header-title{font-size:2.8rem;letter-spacing:.02em;line-height:1.4;margin:2.5rem 0 3.5rem 5rem}.page-sub-title{font-size:2rem}.accent-box{margin-bottom:2rem}.accent-box .btn-prime{margin-top:1.5rem}.page-landing{margin:7.6% auto 0;max-width:44rem;text-align:center}.page-landing .logo{height:5.6rem;margin-bottom:2rem;width:19.2rem}.page-landing .text-version{margin-bottom:3rem}.page-landing .text-welcome{margin-bottom:6.5rem}.page-landing .text-terms{margin-bottom:2.5rem;text-align:center}.page-landing .btn-submit,.page-license .license-text{margin-bottom:2rem}.page-license .page-license-footer{text-align:right}.readiness-check-item{margin-bottom:4rem;min-height:2.5rem}.readiness-check-item .spinner{font-size:2.5rem;float:left;margin:-.4rem 0 0 1.7rem}.readiness-check-title{font-size:1.4rem;font-weight:700;margin-bottom:.1rem;margin-left:5.7rem}.readiness-check-content{margin-left:5.7rem;margin-right:22rem}.readiness-check-content .readiness-check-title{margin-left:0}.readiness-check-content .list{margin-top:-.3rem}.readiness-check-side{float:right;padding-left:2.4rem;width:22rem}.readiness-check-side .side-title{margin-bottom:0}.readiness-check-icon{float:left;margin-left:1.7rem;margin-top:.7rem}.page-web-configuration .form-el-insider-wrap{width:auto}.page-web-configuration .form-el-insider{width:15.4rem}.page-web-configuration .form-el-insider-input .form-el-input{width:16.5rem}.customize-your-store .customize-your-store-default .legend{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.customize-your-store .advanced-modules-count,.customize-your-store .advanced-modules-select{padding-left:1.5rem}.customize-your-store .customize-your-store-advanced{min-width:0}.customize-your-store .message-error:before{margin-top:0;top:1.8rem}.customize-your-store .message-error a{color:#333;text-decoration:underline}.customize-your-store .message-error .form-label:before{background:#fff}.customize-your-store .customize-database-clean p{margin-top:2.5rem}.content-install{margin-bottom:2rem}.console{border:1px solid #ccc;font-family:'Courier New',Courier,monospace;font-weight:300;height:20rem;margin:1rem 0 2rem;overflow-y:auto;padding:1.5rem 2rem 2rem;resize:vertical}.console .text-danger{color:#e22626}.console .text-success{color:#090}.console .hidden{display:none}.content-success .btn-prime{margin-top:1.5rem}.jumbo-title{font-size:3.6rem}.jumbo-title .jumbo-icon{font-size:3.8rem;margin-right:.25em;position:relative;top:.15em}.install-database-clean{margin-top:4rem}.install-database-clean .btn{margin-right:1rem}.page-sub-title{margin-bottom:2.1rem}.multiselect-custom{max-width:71.1rem}.content-install{margin-top:3.7rem}.home-page-inner-wrap{margin:0 auto;max-width:91rem}.setup-home-title{margin-bottom:3.9rem;padding-top:1.8rem;text-align:center}.setup-home-item{background-color:#fafafa;border:1px solid #ccc;color:#333;display:block;margin-bottom:2rem;margin-left:1.3rem;margin-right:1.3rem;min-height:30rem;padding:2rem;text-align:center}.setup-home-item:hover{border-color:#8c8c8c;color:#333;text-decoration:none;transition:border-color .1s linear}.setup-home-item:active{-webkit-transform:scale(0.99);-ms-transform:scale(0.99);transform:scale(0.99)}.setup-home-item:before{display:block;font-size:7rem;margin-bottom:3.3rem;margin-top:4rem}.setup-home-item-component:before{content:'\e612'}.setup-home-item-upgrade:before{content:'\e614'}.setup-home-item-configuration:before{content:'\e610'}.setup-home-item-title{display:block;font-size:1.8rem;letter-spacing:.025em;margin-bottom:1rem}.setup-home-item-description{display:block}.componenet-manager-wrap{border:1px solid #bbb;margin:0 0 4rem}.componenet-manager-wrap .componenet-manager-account{font-size:1.4rem;float:right;padding:.6rem 0 0}.componenet-manager-wrap .componenet-manager-account .sign-in-out{margin-left:2rem}.component-manager-title{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;color:#41362f;font-size:2rem;line-height:1.2;padding:2rem}.component-manager-content{padding:2.5rem 2rem 2rem}.componenet-manager-items{list-style:none;margin:0;text-align:center}.componenet-manager-items .btn{border:1px solid #adadad}.componenet-manager-items .item-title{margin:0 0 1.5rem}.componenet-manager-items .item-number{font-size:6rem;line-height:.8;margin:0 0 1.5rem}.componenet-manager-items .item-date{margin:0 0 3.7rem}.componenet-manager-items .item-install{margin:0 0 2rem}.componenet-manager-items .item-install .btn{line-height:1.36;margin:0;padding:0;color:#008bdb;text-decoration:none;background:0 0;border:0;display:inline;font-size:1.4rem;font-weight:400}.componenet-manager-items .item-install .btn:visited{color:#008bdb;text-decoration:none}.componenet-manager-items .item-install .btn:hover{text-decoration:underline}.componenet-manager-items .item-install .btn:active{color:#ff5501;text-decoration:underline}.componenet-manager-items .item-install .btn:hover{color:#0fa7ff}.componenet-manager-items .item-install .btn:active,.componenet-manager-items .item-install .btn:focus,.componenet-manager-items .item-install .btn:hover{background:0 0;border:0}.componenet-manager-items .item-install .btn.disabled,.componenet-manager-items .item-install .btn[disabled],fieldset[disabled] .componenet-manager-items .item-install .btn{color:#008bdb;opacity:.5;cursor:default;pointer-events:none;text-decoration:underline}.componenet-manager-items .item-install .btn.disabled{text-decoration:none}.sync-login-wrap{margin:-2.5rem 0 0;padding:0 10% 4rem}.sync-login-wrap .legend{font-size:2.6rem;color:#eb5202;float:left;font-weight:300;line-height:1.2;margin:-1rem 0 2.5rem;position:static;width:100%}.sync-login-wrap .legend._hidden{display:none}.sync-login-wrap .login-header{font-size:3.4rem;font-weight:300;margin:0 0 2rem}.sync-login-wrap .login-header span{display:inline-block;padding:.9rem 0 0;vertical-align:top}.sync-login-wrap .form-row .form-label{display:inline-block}.sync-login-wrap .form-row .form-label.required{padding-left:1.5rem}.sync-login-wrap .form-row .form-label.required:after{left:0;position:absolute;right:auto}.sync-login-wrap .form-row{max-width:28rem}.sync-login-wrap .form-actions{display:table;margin-top:-1.3rem}.sync-login-wrap .form-actions .links{display:table-header-group}.sync-login-wrap .form-actions .actions{padding:3rem 0 0}@media all and (max-width:1047px){.admin__menu .submenu li{min-width:19.8rem}.nav{padding-bottom:5.38rem;padding-left:1.5rem;text-align:center}.nav-bar{display:inline-block;float:none;margin-right:0;vertical-align:top}.nav .btn-group,.nav-bar-outer-actions{display:inline-block;float:none;margin-top:-8.48rem;text-align:center;vertical-align:top;width:100%}.nav-bar-outer-actions{padding-right:0}.nav-bar-outer-actions .outer-actions-inner-wrap{display:inline-block}.app-updater .nav{padding-bottom:1.7rem}.app-updater .nav-bar-outer-actions{margin-top:2rem}}@media all and (min-width:768px){.page-layout-admin-2columns-left .page-columns{margin-left:-30px}.page-layout-admin-2columns-left .page-columns:after{clear:both;content:'';display:table}.page-layout-admin-2columns-left .page-columns .main-col{width:calc((100%) * .75 - 30px);float:right}.page-layout-admin-2columns-left .page-columns .side-col{width:calc((100%) * .25 - 30px);float:left;margin-left:30px}.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9{float:left}.col-m-12{width:100%}.col-m-11{width:91.66666667%}.col-m-10{width:83.33333333%}.col-m-9{width:75%}.col-m-8{width:66.66666667%}.col-m-7{width:58.33333333%}.col-m-6{width:50%}.col-m-5{width:41.66666667%}.col-m-4{width:33.33333333%}.col-m-3{width:25%}.col-m-2{width:16.66666667%}.col-m-1{width:8.33333333%}.col-m-pull-12{right:100%}.col-m-pull-11{right:91.66666667%}.col-m-pull-10{right:83.33333333%}.col-m-pull-9{right:75%}.col-m-pull-8{right:66.66666667%}.col-m-pull-7{right:58.33333333%}.col-m-pull-6{right:50%}.col-m-pull-5{right:41.66666667%}.col-m-pull-4{right:33.33333333%}.col-m-pull-3{right:25%}.col-m-pull-2{right:16.66666667%}.col-m-pull-1{right:8.33333333%}.col-m-pull-0{right:auto}.col-m-push-12{left:100%}.col-m-push-11{left:91.66666667%}.col-m-push-10{left:83.33333333%}.col-m-push-9{left:75%}.col-m-push-8{left:66.66666667%}.col-m-push-7{left:58.33333333%}.col-m-push-6{left:50%}.col-m-push-5{left:41.66666667%}.col-m-push-4{left:33.33333333%}.col-m-push-3{left:25%}.col-m-push-2{left:16.66666667%}.col-m-push-1{left:8.33333333%}.col-m-push-0{left:auto}.col-m-offset-12{margin-left:100%}.col-m-offset-11{margin-left:91.66666667%}.col-m-offset-10{margin-left:83.33333333%}.col-m-offset-9{margin-left:75%}.col-m-offset-8{margin-left:66.66666667%}.col-m-offset-7{margin-left:58.33333333%}.col-m-offset-6{margin-left:50%}.col-m-offset-5{margin-left:41.66666667%}.col-m-offset-4{margin-left:33.33333333%}.col-m-offset-3{margin-left:25%}.col-m-offset-2{margin-left:16.66666667%}.col-m-offset-1{margin-left:8.33333333%}.col-m-offset-0{margin-left:0}.page-columns{margin-left:-30px}.page-columns:after{clear:both;content:'';display:table}.page-columns .page-inner-content{width:calc((100%) * .75 - 30px);float:right}.page-columns .page-inner-sidebar{width:calc((100%) * .25 - 30px);float:left;margin-left:30px}}@media all and (min-width:1048px){.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9{float:left}.col-l-12{width:100%}.col-l-11{width:91.66666667%}.col-l-10{width:83.33333333%}.col-l-9{width:75%}.col-l-8{width:66.66666667%}.col-l-7{width:58.33333333%}.col-l-6{width:50%}.col-l-5{width:41.66666667%}.col-l-4{width:33.33333333%}.col-l-3{width:25%}.col-l-2{width:16.66666667%}.col-l-1{width:8.33333333%}.col-l-pull-12{right:100%}.col-l-pull-11{right:91.66666667%}.col-l-pull-10{right:83.33333333%}.col-l-pull-9{right:75%}.col-l-pull-8{right:66.66666667%}.col-l-pull-7{right:58.33333333%}.col-l-pull-6{right:50%}.col-l-pull-5{right:41.66666667%}.col-l-pull-4{right:33.33333333%}.col-l-pull-3{right:25%}.col-l-pull-2{right:16.66666667%}.col-l-pull-1{right:8.33333333%}.col-l-pull-0{right:auto}.col-l-push-12{left:100%}.col-l-push-11{left:91.66666667%}.col-l-push-10{left:83.33333333%}.col-l-push-9{left:75%}.col-l-push-8{left:66.66666667%}.col-l-push-7{left:58.33333333%}.col-l-push-6{left:50%}.col-l-push-5{left:41.66666667%}.col-l-push-4{left:33.33333333%}.col-l-push-3{left:25%}.col-l-push-2{left:16.66666667%}.col-l-push-1{left:8.33333333%}.col-l-push-0{left:auto}.col-l-offset-12{margin-left:100%}.col-l-offset-11{margin-left:91.66666667%}.col-l-offset-10{margin-left:83.33333333%}.col-l-offset-9{margin-left:75%}.col-l-offset-8{margin-left:66.66666667%}.col-l-offset-7{margin-left:58.33333333%}.col-l-offset-6{margin-left:50%}.col-l-offset-5{margin-left:41.66666667%}.col-l-offset-4{margin-left:33.33333333%}.col-l-offset-3{margin-left:25%}.col-l-offset-2{margin-left:16.66666667%}.col-l-offset-1{margin-left:8.33333333%}.col-l-offset-0{margin-left:0}}@media all and (min-width:1440px){.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9{float:left}.col-xl-12{width:100%}.col-xl-11{width:91.66666667%}.col-xl-10{width:83.33333333%}.col-xl-9{width:75%}.col-xl-8{width:66.66666667%}.col-xl-7{width:58.33333333%}.col-xl-6{width:50%}.col-xl-5{width:41.66666667%}.col-xl-4{width:33.33333333%}.col-xl-3{width:25%}.col-xl-2{width:16.66666667%}.col-xl-1{width:8.33333333%}.col-xl-pull-12{right:100%}.col-xl-pull-11{right:91.66666667%}.col-xl-pull-10{right:83.33333333%}.col-xl-pull-9{right:75%}.col-xl-pull-8{right:66.66666667%}.col-xl-pull-7{right:58.33333333%}.col-xl-pull-6{right:50%}.col-xl-pull-5{right:41.66666667%}.col-xl-pull-4{right:33.33333333%}.col-xl-pull-3{right:25%}.col-xl-pull-2{right:16.66666667%}.col-xl-pull-1{right:8.33333333%}.col-xl-pull-0{right:auto}.col-xl-push-12{left:100%}.col-xl-push-11{left:91.66666667%}.col-xl-push-10{left:83.33333333%}.col-xl-push-9{left:75%}.col-xl-push-8{left:66.66666667%}.col-xl-push-7{left:58.33333333%}.col-xl-push-6{left:50%}.col-xl-push-5{left:41.66666667%}.col-xl-push-4{left:33.33333333%}.col-xl-push-3{left:25%}.col-xl-push-2{left:16.66666667%}.col-xl-push-1{left:8.33333333%}.col-xl-push-0{left:auto}.col-xl-offset-12{margin-left:100%}.col-xl-offset-11{margin-left:91.66666667%}.col-xl-offset-10{margin-left:83.33333333%}.col-xl-offset-9{margin-left:75%}.col-xl-offset-8{margin-left:66.66666667%}.col-xl-offset-7{margin-left:58.33333333%}.col-xl-offset-6{margin-left:50%}.col-xl-offset-5{margin-left:41.66666667%}.col-xl-offset-4{margin-left:33.33333333%}.col-xl-offset-3{margin-left:25%}.col-xl-offset-2{margin-left:16.66666667%}.col-xl-offset-1{margin-left:8.33333333%}.col-xl-offset-0{margin-left:0}}@media all and (max-width:767px){.list-definition>dt{float:none}.list-definition>dd{margin-left:0}.form-row .form-label{text-align:left}.form-row .form-label.required:after{position:static}.nav{padding-bottom:0;padding-left:0;padding-right:0}.nav-bar-outer-actions{margin-top:0}.nav-bar{display:block;margin-bottom:0;margin-left:auto;margin-right:auto;width:30.9rem}.nav-bar:before{display:none}.nav-bar>li{float:left;min-height:9rem}.nav-bar>li:after{display:none}.nav-bar>li:nth-child(4n){clear:both}.nav-bar a{line-height:1.4}.tooltip{display:none!important}.readiness-check-content{margin-right:2rem}.form-el-insider,.form-el-insider-wrap,.page-web-configuration .form-el-insider-input,.page-web-configuration .form-el-insider-input .form-el-input{display:block;width:100%}}@media all and (max-width:479px){.nav-bar{width:23.175rem}.nav-bar>li{width:7.725rem}.nav .btn-group .btn-wrap-try-again,.nav-bar-outer-actions .btn-wrap-try-again{clear:both;display:block;float:none;margin-left:auto;margin-right:auto;margin-top:1rem;padding-top:1rem}}
\ No newline at end of file
+.abs-action-delete,.abs-icon,.action-close:before,.action-next:before,.action-previous:before,.admin-user .admin__action-dropdown:before,.admin__action-multiselect-search-label:before,.admin__control-checkbox+label:before,.admin__control-radio+label:before,.admin__control-table .action-delete:before,.admin__current-filters-list .action-remove:before,.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before,.admin__data-grid-action-bookmarks .admin__action-dropdown:before,.admin__data-grid-action-columns .admin__action-dropdown:before,.admin__data-grid-action-export .admin__action-dropdown:before,.admin__menu .level-0>a:before,.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon,.admin__page-nav-title._collapsible:after,.data-grid-filters-action-wrap .action-default:before,.data-grid-row-changed:after,.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before,.data-grid-search-control-wrap .action-submit:before,.icon-failed:before,.icon-success:before,.notifications-action:before,.notifications-close:before,.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before,.page-title-jumbo-success:before,.search-global-label:before,.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before,.setup-home-item:before,.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before,.store-switcher .dropdown-menu .dropdown-toolbar a:before,.tooltip .help a:before,.tooltip .help span:before{-webkit-font-smoothing:antialiased;font-family:Icons;line-height:1;font-style:normal;font-weight:400;speak:none}.validation-symbol:after{content:'*';color:#e22626;font-weight:400;margin-left:3px}.abs-modal-overlay,.modals-overlay{background:rgba(0,0,0,.35);bottom:0;left:0;position:fixed;right:0;top:0}.abs-action-delete>span,.abs-visually-hidden,.admin__control-fields .admin__field:nth-child(n+2):not(.admin__field-option)>.admin__field-label,.admin__field-tooltip .admin__field-tooltip-action span,.selectmenu .action-delete>span,.selectmenu .action-edit>span,.selectmenu .action-save>span,.selectmenu-toggle span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.abs-visually-hidden-reset{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.abs-clearfix:after,.abs-clearfix:before,.action-multicheck-wrap:after,.action-multicheck-wrap:before,.actions-split:after,.actions-split:before,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:after,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:before,.admin__data-grid-filters-footer:after,.admin__data-grid-filters-footer:before,.admin__data-grid-filters:after,.admin__data-grid-filters:before,.admin__data-grid-header-row:after,.admin__data-grid-header-row:before,.page-actions._fixed:after,.page-actions._fixed:before,.page-content:after,.page-content:before,.page-header-actions:after,.page-header-actions:before,.page-main-actions:not(._hidden):after,.page-main-actions:not(._hidden):before{content:'';display:table}.abs-clearfix:after,.action-multicheck-wrap:after,.actions-split:after,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:after,.admin__data-grid-filters-footer:after,.admin__data-grid-filters:after,.admin__data-grid-header-row:after,.page-actions._fixed:after,.page-content:after,.page-header-actions:after,.page-main-actions:not(._hidden):after{clear:both}.abs-list-reset-styles{margin:0;padding:0;list-style:none}.abs-draggable-handle{cursor:-webkit-grab;cursor:move;font-size:0;margin-top:-4px;padding:0 1rem 0 0;vertical-align:middle;display:inline-block;text-decoration:none}.abs-draggable-handle:before{-webkit-font-smoothing:antialiased;font-size:1.8rem;line-height:inherit;color:#9e9e9e;content:'\e617';font-family:Icons;vertical-align:middle;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.abs-draggable-handle:hover:before{color:#858585}html{box-sizing:border-box;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}*,:after,:before{box-sizing:inherit}:focus{box-shadow:none;outline:0}._keyfocus :focus{box-shadow:0 0 0 1px #008bdb}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}embed,img,object,video{max-width:100%}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/light/opensans-300.eot);src:url(../fonts/opensans/light/opensans-300.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/light/opensans-300.woff2) format('woff2'),url(../fonts/opensans/light/opensans-300.woff) format('woff'),url(../fonts/opensans/light/opensans-300.ttf) format('truetype'),url('../fonts/opensans/light/opensans-300.svg#Open Sans') format('svg');font-weight:300;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/regular/opensans-400.eot);src:url(../fonts/opensans/regular/opensans-400.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/regular/opensans-400.woff2) format('woff2'),url(../fonts/opensans/regular/opensans-400.woff) format('woff'),url(../fonts/opensans/regular/opensans-400.ttf) format('truetype'),url('../fonts/opensans/regular/opensans-400.svg#Open Sans') format('svg');font-weight:400;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/semibold/opensans-600.eot);src:url(../fonts/opensans/semibold/opensans-600.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/semibold/opensans-600.woff2) format('woff2'),url(../fonts/opensans/semibold/opensans-600.woff) format('woff'),url(../fonts/opensans/semibold/opensans-600.ttf) format('truetype'),url('../fonts/opensans/semibold/opensans-600.svg#Open Sans') format('svg');font-weight:600;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/bold/opensans-700.eot);src:url(../fonts/opensans/bold/opensans-700.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/bold/opensans-700.woff2) format('woff2'),url(../fonts/opensans/bold/opensans-700.woff) format('woff'),url(../fonts/opensans/bold/opensans-700.ttf) format('truetype'),url('../fonts/opensans/bold/opensans-700.svg#Open Sans') format('svg');font-weight:700;font-style:normal}html{font-size:62.5%}body{color:#333;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.36;font-size:1.4rem}h1{margin:0 0 2rem;color:#41362f;font-weight:400;line-height:1.2;font-size:2.8rem}h2{margin:0 0 2rem;color:#41362f;font-weight:400;line-height:1.2;font-size:2rem}h3{margin:0 0 2rem;color:#41362f;font-weight:600;line-height:1.2;font-size:1.7rem}h4,h5,h6{font-weight:600;margin-top:0}p{margin:0 0 1em}small{font-size:1.2rem}a{color:#008bdb;text-decoration:none}a:hover{color:#0fa7ff;text-decoration:underline}dl,ol,ul{padding-left:0}nav ol,nav ul{list-style:none;margin:0;padding:0}html{height:100%}body{background-color:#fff;min-height:100%;min-width:102.4rem}.page-wrapper{background-color:#fff;display:inline-block;margin-left:-4px;vertical-align:top;width:calc(100% - 8.8rem)}.page-content{padding-bottom:3rem;padding-left:3rem;padding-right:3rem}.notices-wrapper{margin:0 3rem}.notices-wrapper .messages{margin-bottom:0}@media (min-width:1024px){html{width:100vw}body{overflow-x:hidden}}.row{margin-left:0;margin-right:0}.row:after{clear:both;content:'';display:table}.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9,.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:0;padding-right:0}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}.row-gutter{margin-left:-1.5rem;margin-right:-1.5rem}.row-gutter>[class*=col-]{padding-left:1.5rem;padding-right:1.5rem}.abs-clearer:after,.component-manager-content:after,.component-manager-title:after,.form-row:after,.header:after,.nav:after,body:after{clear:both;content:'';display:table}.ng-cloak{display:none!important}.hide.hide{display:none}.show.show{display:block}.text-center{text-align:center}.text-right{text-align:right}@font-face{font-family:Icons;src:url(../fonts/icons/icons.eot);src:url(../fonts/icons/icons.eot?#iefix) format('embedded-opentype'),url(../fonts/icons/icons.woff2) format('woff2'),url(../fonts/icons/icons.woff) format('woff'),url(../fonts/icons/icons.ttf) format('truetype'),url(../fonts/icons/icons.svg#Icons) format('svg');font-weight:400;font-style:normal}[class*=icon-]{display:inline-block;line-height:1}.icon-failed:before,.icon-success:before,[class*=icon-]:after{font-family:Icons}.icon-success{color:#79a22e}.icon-success:before{content:'\e62d'}.icon-failed{color:#e22626}.icon-failed:before{content:'\e632'}.icon-success-thick:after{content:'\e62d'}.icon-collapse:after{content:'\e615'}.icon-failed-thick:after{content:'\e632'}.icon-expand:after{content:'\e616'}.icon-warning:after{content:'\e623'}.icon-failed-round,.icon-success-round{border-radius:100%;color:#fff;font-size:2.5rem;height:1em;position:relative;text-align:center;width:1em}.icon-failed-round:after,.icon-success-round:after{bottom:0;font-size:.5em;left:0;position:absolute;right:0;top:.45em}.icon-success-round{background-color:#79a22e}.icon-success-round:after{content:'\e62d'}.icon-failed-round{background-color:#e22626}.icon-failed-round:after{content:'\e632'}dl,ol,ul{margin-top:0}.list{padding-left:0}.list>li{display:block;margin-bottom:.75em;position:relative}.list>li>.icon-failed,.list>li>.icon-success{font-size:1.6em;left:-.1em;position:absolute;top:0}.list>li>.icon-success{color:#79a22e}.list>li>.icon-failed{color:#e22626}.list-item-failed,.list-item-icon,.list-item-success,.list-item-warning{padding-left:3.5rem}.list-item-failed:before,.list-item-success:before,.list-item-warning:before{left:-.1em;position:absolute}.list-item-success:before{color:#79a22e}.list-item-failed:before{color:#e22626}.list-item-warning:before{color:#ef672f}.list-definition{margin:0 0 3rem;padding:0}.list-definition>dt{clear:left;float:left}.list-definition>dd{margin-bottom:1em;margin-left:20rem}.btn-wrap{margin:0 auto}.btn-wrap .btn{width:100%}.btn{background:#e3e3e3;border:none;color:#514943;display:inline-block;font-size:1.6rem;font-weight:600;padding:.45em .9em;text-align:center}.btn:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.btn:active{background-color:#d6d6d6}.btn.disabled,.btn[disabled]{cursor:default;opacity:.5;pointer-events:none}.ie9 .btn.disabled,.ie9 .btn[disabled]{background-color:#f0f0f0;opacity:1;text-shadow:none}.btn-large{padding:.75em 1.25em}.btn-medium{font-size:1.4rem;padding:.5em 1.5em .6em}.btn-link{background-color:transparent;border:none;color:#008bdb;font-family:1.6rem;font-size:1.5rem}.btn-link:active,.btn-link:focus,.btn-link:hover{background-color:transparent;color:#0fa7ff}.btn-prime{background-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.btn-prime:focus,.btn-prime:hover{background-color:#f65405;background-repeat:repeat-x;background-image:linear-gradient(to right,#e04f00 0,#f65405 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e04f00', endColorstr='#f65405', GradientType=1);color:#fff}.btn-prime:active{background-color:#e04f00;background-repeat:repeat-x;background-image:linear-gradient(to right,#f65405 0,#e04f00 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f65405', endColorstr='#e04f00', GradientType=1);color:#fff}.ie9 .btn-prime.disabled,.ie9 .btn-prime[disabled]{background-color:#fd6e23}.ie9 .btn-prime.disabled:active,.ie9 .btn-prime.disabled:hover,.ie9 .btn-prime[disabled]:active,.ie9 .btn-prime[disabled]:hover{background-color:#fd6e23;-webkit-filter:none;filter:none}.btn-secondary{background-color:#514943;color:#fff}.btn-secondary:hover{background-color:#5f564f;color:#fff}.btn-secondary:active,.btn-secondary:focus{background-color:#574e48;color:#fff}.ie9 .btn-secondary.disabled,.ie9 .btn-secondary[disabled]{background-color:#514943}.ie9 .btn-secondary.disabled:active,.ie9 .btn-secondary[disabled]:active{background-color:#514943;-webkit-filter:none;filter:none}[class*=btn-wrap-triangle]{overflow:hidden;position:relative}[class*=btn-wrap-triangle] .btn:after{border-style:solid;content:'';height:0;position:absolute;top:0;width:0}.btn-wrap-triangle-right{display:inline-block;padding-right:1.74rem;position:relative}.btn-wrap-triangle-right .btn{text-indent:.92rem}.btn-wrap-triangle-right .btn:after{border-color:transparent transparent transparent #e3e3e3;border-width:1.84rem 0 1.84rem 1.84rem;left:100%;margin-left:-1.74rem}.btn-wrap-triangle-right .btn:focus:after,.btn-wrap-triangle-right .btn:hover:after{border-left-color:#dbdbdb}.btn-wrap-triangle-right .btn:active:after{border-left-color:#d6d6d6}.btn-wrap-triangle-right .btn:not(.disabled):active,.btn-wrap-triangle-right .btn:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn.disabled:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:after{border-color:transparent transparent transparent #f0f0f0}.ie9 .btn-wrap-triangle-right .btn.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn.disabled:focus:after,.ie9 .btn-wrap-triangle-right .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:focus:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:hover:after{border-left-color:#f0f0f0}.btn-wrap-triangle-right .btn-prime:after{border-color:transparent transparent transparent #eb5202}.btn-wrap-triangle-right .btn-prime:focus:after,.btn-wrap-triangle-right .btn-prime:hover:after{border-left-color:#f65405}.btn-wrap-triangle-right .btn-prime:active:after{border-left-color:#e04f00}.btn-wrap-triangle-right .btn-prime:not(.disabled):active,.btn-wrap-triangle-right .btn-prime:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:after{border-color:transparent transparent transparent #fd6e23}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:hover:after{border-left-color:#fd6e23}.btn-wrap-triangle-left{display:inline-block;padding-left:1.74rem}.btn-wrap-triangle-left .btn{text-indent:-.92rem}.btn-wrap-triangle-left .btn:after{border-color:transparent #e3e3e3 transparent transparent;border-width:1.84rem 1.84rem 1.84rem 0;margin-right:-1.74rem;right:100%}.btn-wrap-triangle-left .btn:focus:after,.btn-wrap-triangle-left .btn:hover:after{border-right-color:#dbdbdb}.btn-wrap-triangle-left .btn:active:after{border-right-color:#d6d6d6}.btn-wrap-triangle-left .btn:not(.disabled):active,.btn-wrap-triangle-left .btn:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn.disabled:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:after{border-color:transparent #f0f0f0 transparent transparent}.ie9 .btn-wrap-triangle-left .btn.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:hover:after{border-right-color:#f0f0f0}.btn-wrap-triangle-left .btn-prime:after{border-color:transparent #eb5202 transparent transparent}.btn-wrap-triangle-left .btn-prime:focus:after,.btn-wrap-triangle-left .btn-prime:hover:after{border-right-color:#e04f00}.btn-wrap-triangle-left .btn-prime:active:after{border-right-color:#f65405}.btn-wrap-triangle-left .btn-prime:not(.disabled):active,.btn-wrap-triangle-left .btn-prime:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:after{border-color:transparent #fd6e23 transparent transparent}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:hover:after{border-right-color:#fd6e23}.btn-expand{background-color:transparent;border:none;color:#303030;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:700;padding:0;position:relative}.btn-expand.expanded:after{border-color:transparent transparent #303030;border-width:0 .285em .36em}.btn-expand.expanded:hover:after{border-color:transparent transparent #3d3d3d}.btn-expand:hover{background-color:transparent;border:none;color:#3d3d3d}.btn-expand:hover:after{border-color:#3d3d3d transparent transparent}.btn-expand:after{border-color:#303030 transparent transparent;border-style:solid;border-width:.36em .285em 0;content:'';height:0;left:100%;margin-left:.5em;margin-top:-.18em;position:absolute;top:50%;width:0}[class*=col-] .form-el-input,[class*=col-] .form-el-select{width:100%}.form-fieldset{border:none;margin:0 0 1em;padding:0}.form-row{margin-bottom:2.2rem}.form-row .form-row{margin-bottom:.4rem}.form-row .form-label{display:block;font-weight:600;padding:.6rem 2.1em 0 0;text-align:right}.form-row .form-label.required{position:relative}.form-row .form-label.required:after{color:#eb5202;content:'*';font-size:1.15em;position:absolute;right:.7em;top:.5em}.form-row .form-el-checkbox+.form-label:before,.form-row .form-el-radio+.form-label:before{top:.7rem}.form-row .form-el-checkbox+.form-label:after,.form-row .form-el-radio+.form-label:after{top:1.1rem}.form-row.form-row-text{padding-top:.6rem}.form-row.form-row-text .action-sign-out{font-size:1.2rem;margin-left:1rem}.form-note{font-size:1.2rem;font-weight:600;margin-top:1rem}.form-el-dummy{display:none}.fieldset{border:0;margin:0;min-width:0;padding:0}input:not([disabled]):focus,textarea:not([disabled]):focus{box-shadow:none}.form-el-input{border:1px solid #adadad;color:#303030;padding:.35em .55em .5em}.form-el-input:hover{border-color:#949494}.form-el-input:focus{border-color:#008bdb}.form-el-input:required{box-shadow:none}.form-label{margin-bottom:.5em}[class*=form-label][for]{cursor:pointer}.form-el-insider-wrap{display:table;width:100%}.form-el-insider-input{display:table-cell;width:100%}.form-el-insider{border-radius:2px;display:table-cell;vertical-align:top;padding:.43em .55em .5em 0}.form-legend,.form-legend-expand,.form-legend-light{display:block;margin:0}.form-legend,.form-legend-expand{margin-bottom:2.5em;padding-top:1.5em;font-weight:600;font-size:1.25em}.form-legend{width:100%;border-top:1px solid #ccc}.form-legend-light{margin-bottom:1.5em;font-size:1em}.form-legend-expand{cursor:pointer;transition:opacity .2s linear}.form-legend-expand:hover{opacity:.85}.form-legend-expand.expanded:after{content:'\e615'}.form-legend-expand:after{margin-left:.5em;font-weight:400;font-size:1.15em;font-family:Icons;content:'\e616';vertical-align:sub}.form-el-checkbox,.form-el-radio{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.form-el-checkbox.disabled+.form-label,.form-el-checkbox.disabled+.form-label:before,.form-el-checkbox[disabled]+.form-label,.form-el-checkbox[disabled]+.form-label:before,.form-el-radio.disabled+.form-label,.form-el-radio.disabled+.form-label:before,.form-el-radio[disabled]+.form-label,.form-el-radio[disabled]+.form-label:before{cursor:default;opacity:.5;pointer-events:none}.form-el-checkbox:not(.disabled)+.form-label:hover:before,.form-el-checkbox:not([disabled])+.form-label:hover:before,.form-el-radio:not(.disabled)+.form-label:hover:before,.form-el-radio:not([disabled])+.form-label:hover:before{border-color:#514943}.form-el-checkbox+.form-label,.form-el-radio+.form-label{font-weight:400;padding-left:2em;padding-right:0;position:relative;text-align:left;transition:border-color .1s linear}.form-el-checkbox+.form-label:before,.form-el-radio+.form-label:before{border:1px solid;content:'';left:0;position:absolute;top:.1rem;transition:border-color .1s linear}.form-el-checkbox+.form-label:before{background-color:#fff;border-color:#adadad;border-radius:2px;height:1.6rem;line-height:1.2;width:1.6rem;font-size:1.2rem}.form-el-checkbox:checked+.form-label::before{content:'\e62d';font-family:Icons}.form-el-radio+.form-label:before{background-color:#fff;border:1px solid #adadad;border-radius:100%;height:1.8rem;width:1.8rem}.form-el-radio+.form-label:after{background:0 0;border:.5rem solid transparent;border-radius:100%;content:'';height:0;left:.4rem;position:absolute;top:.5rem;transition:background .3s linear;width:0}.form-el-radio:checked+.form-label{cursor:default}.form-el-radio:checked+.form-label:after{border-color:#514943}.form-select-label{border:1px solid #adadad;color:#303030;cursor:pointer;display:block;overflow:hidden;position:relative;z-index:0}.form-select-label:hover,.form-select-label:hover:after{border-color:#949494}.form-select-label:active,.form-select-label:active:after,.form-select-label:focus,.form-select-label:focus:after{border-color:#008bdb}.form-select-label:after{background:#e3e3e3;border-left:1px solid #adadad;bottom:0;content:'';position:absolute;right:0;top:0;width:2.36em;z-index:-2}.ie9 .form-select-label:after{display:none}.form-select-label:before{border-color:#303030 transparent transparent;border-style:solid;border-width:5px 4px 0;content:'';height:0;margin-right:-4px;margin-top:-2.5px;position:absolute;right:1.18em;top:50%;width:0;z-index:-1}.ie9 .form-select-label:before{display:none}.form-select-label .form-el-select{background:0 0;border:none;border-radius:0;content:'';display:block;margin:0;padding:.35em calc(2.36em + 10%) .5em .55em;width:110%}.ie9 .form-select-label .form-el-select{padding-right:.55em;width:100%}.form-el-select{background:#fff;border:1px solid #adadad;border-radius:2px;color:#303030;display:block;padding:.35em .55em}.multiselect-custom{position:relative;height:45.2rem;border:1px solid #adadad;overflow:auto;margin:0 0 1.5rem}.multiselect-custom ul{margin:0;padding:0;list-style:none;min-width:29rem}.multiselect-custom .item{padding:1rem 1.4rem}.multiselect-custom .selected{background-color:#e0f6fe}.multiselect-custom .form-label{margin-bottom:0}[class*=form-el-].invalid{border-color:#e22626}[class*=form-el-].invalid+.error-container{display:block}.error-container{background-color:#fffbbb;border:1px solid #ee7d7d;color:#514943;display:none;font-size:1.19rem;margin-top:.2rem;padding:.8rem 1rem .9rem}.check-result-message{margin-left:.5em;min-height:3.68rem;-webkit-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-flex;display:-ms-flexbox;display:flex}.check-result-text{margin-left:.5em}body:not([class]){min-width:0}.container{display:block;margin:0 auto 4rem;max-width:100rem;padding:0}.abs-action-delete,.action-close:before,.action-next:before,.action-previous:before,.admin-user .admin__action-dropdown:before,.admin__action-multiselect-search-label:before,.admin__control-checkbox+label:before,.admin__control-radio+label:before,.admin__control-table .action-delete:before,.admin__current-filters-list .action-remove:before,.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before,.admin__data-grid-action-bookmarks .admin__action-dropdown:before,.admin__data-grid-action-columns .admin__action-dropdown:before,.admin__data-grid-action-export .admin__action-dropdown:before,.admin__menu .level-0>a:before,.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon,.admin__page-nav-title._collapsible:after,.data-grid-filters-action-wrap .action-default:before,.data-grid-row-changed:after,.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before,.data-grid-search-control-wrap .action-submit:before,.icon-failed:before,.icon-success:before,.notifications-action:before,.notifications-close:before,.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before,.page-title-jumbo-success:before,.search-global-label:before,.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before,.setup-home-item:before,.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before,.store-switcher .dropdown-menu .dropdown-toolbar a:before,.tooltip .help a:before,.tooltip .help span:before{-webkit-font-smoothing:antialiased;font-family:Icons;line-height:1;font-style:normal;font-weight:400;speak:none}.text-stretch{margin-bottom:1.5em}.page-title-jumbo{font-size:4rem;font-weight:300;letter-spacing:-.05em;margin-bottom:2.9rem}.page-title-jumbo-success:before{color:#79a22e;content:'\e62d';font-size:3.9rem;margin-left:-.3rem;margin-right:2.4rem}.list{margin-bottom:3rem}.list-dot .list-item{display:list-item;list-style-position:inside;margin-bottom:1.2rem}.list-title{color:#333;font-size:1.4rem;font-weight:700;letter-spacing:.025em;margin-bottom:1.2rem}.list-item-failed:before,.list-item-success:before,.list-item-warning:before{font-family:Icons;font-size:1.6rem;top:0}.list-item-success:before{content:'\e62d';font-size:1.6rem}.list-item-failed:before{content:'\e632';font-size:1.4rem;left:.1rem;top:.2rem}.list-item-warning:before{content:'\e623';font-size:1.3rem;left:.2rem}.form-wrap{padding-top:2.1rem;margin-bottom:3.6rem}.form-el-label-horizontal{display:inline-block;font-size:1.3rem;font-weight:600;letter-spacing:.025em;margin-left:.4rem;margin-bottom:.4rem}.app-updater{min-width:768px}body._has-modal{height:100%;overflow:hidden;width:100%}.modals-overlay{z-index:899}.modal-popup,.modal-slide{bottom:0;min-width:0;pointer-events:none;position:fixed;right:0;top:0;visibility:hidden}.modal-popup._show,.modal-slide._show{visibility:visible}.modal-popup._show .modal-inner-wrap,.modal-slide._show .modal-inner-wrap{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-popup .modal-inner-wrap,.modal-slide .modal-inner-wrap{background-color:#fff;box-shadow:0 0 12px 2px rgba(0,0,0,.35);opacity:1;pointer-events:auto}.modal-slide{left:14.8rem;z-index:900}.modal-slide._show .modal-inner-wrap{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.modal-slide .modal-inner-wrap{height:100%;overflow-y:auto;position:static;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);transition-duration:.3s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease-in-out;width:auto}.modal-slide._inner-scroll .modal-inner-wrap{overflow-y:visible;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.modal-slide._inner-scroll .modal-footer,.modal-slide._inner-scroll .modal-header{-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.modal-slide._inner-scroll .modal-content{overflow-y:auto}.modal-slide._inner-scroll .modal-footer{margin-top:auto}.modal-slide .modal-content,.modal-slide .modal-footer,.modal-slide .modal-header{padding:0 2.6rem 2.6rem}.modal-slide .modal-header{padding-bottom:2.1rem;padding-top:2.1rem}.modal-popup{left:0;overflow-y:auto;z-index:900}.modal-popup._show .modal-inner-wrap{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}.modal-popup .modal-inner-wrap{box-sizing:border-box;height:auto;left:0;margin:5rem auto;position:absolute;right:0;-webkit-transform:translateY(-200%);-ms-transform:translateY(-200%);transform:translateY(-200%);transition-duration:.2s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:75%}.modal-popup._inner-scroll{overflow-y:visible}.ie10 .modal-popup._inner-scroll,.ie9 .modal-popup._inner-scroll{overflow-y:auto}.modal-popup._inner-scroll .modal-inner-wrap{max-height:90%}.ie10 .modal-popup._inner-scroll .modal-inner-wrap,.ie9 .modal-popup._inner-scroll .modal-inner-wrap{max-height:none}.modal-popup._inner-scroll .modal-content{overflow-y:auto}.modal-popup .modal-content,.modal-popup .modal-footer,.modal-popup .modal-header{padding-left:3rem;padding-right:3rem}.modal-popup .modal-footer,.modal-popup .modal-header{-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.modal-popup .modal-header{padding-bottom:3rem;padding-top:3rem}.modal-popup .modal-footer{margin-top:auto;padding-bottom:3rem;padding-top:3rem}.modal-popup .modal-footer-actions{text-align:right}.modal-popup.confirm .modal-inner-wrap{left:50%;margin-left:-25rem;width:50rem}.modal-popup.confirm .modal-footer{text-align:right}.modal-popup._image-box .modal-inner-wrap{margin:5rem auto;max-width:78rem;position:static}.modal-popup._image-box .thumbnail-preview{padding-bottom:3rem;text-align:center}.modal-popup._image-box .thumbnail-preview .thumbnail-preview-image-block{border:1px solid #ccc;margin:0 auto 2rem;max-width:58rem;padding:2rem}.modal-popup._image-box .thumbnail-preview .thumbnail-preview-image{max-height:54rem}@media (max-width:768px){.modal-popup.modal-slide{left:14.8rem;z-index:900}.modal-popup.modal-slide._show .modal-inner-wrap{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.modal-popup.modal-slide .modal-inner-wrap{height:100%;overflow-y:auto;position:static;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);transition-duration:.3s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease-in-out;width:auto;margin:0;max-height:none}}.admin__action-dropdown-wrap{display:inline-block;position:relative}.admin__action-dropdown-wrap .admin__action-dropdown-text:after{left:-6px;right:0}.admin__action-dropdown-wrap .admin__action-dropdown-menu{left:auto;right:0}.admin__action-dropdown-wrap._active .admin__action-dropdown,.admin__action-dropdown-wrap.active .admin__action-dropdown{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.admin__action-dropdown-wrap._active .admin__action-dropdown-text:after,.admin__action-dropdown-wrap.active .admin__action-dropdown-text:after{background-color:#fff;content:'';height:6px;position:absolute;top:100%}.admin__action-dropdown-wrap._active .admin__action-dropdown-menu,.admin__action-dropdown-wrap.active .admin__action-dropdown-menu{display:block}.admin__action-dropdown-wrap._disabled .admin__action-dropdown{cursor:default}.admin__action-dropdown-wrap._disabled:hover .admin__action-dropdown{color:#333}.admin__action-dropdown{background-color:#fff;border:1px solid transparent;border-bottom:none;border-radius:0;box-shadow:none;color:#333;display:inline-block;font-size:1.3rem;font-weight:400;letter-spacing:-.025em;padding:.7rem 3.3rem .8rem 1.5rem;position:relative;vertical-align:baseline;z-index:2}.admin__action-dropdown._active:after,.admin__action-dropdown.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin__action-dropdown:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;top:50%;transition:all .2s linear;width:0}._active .admin__action-dropdown:after,.active .admin__action-dropdown:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin__action-dropdown:hover:after{border-color:#000 transparent transparent}.admin__action-dropdown:focus,.admin__action-dropdown:hover{background-color:#fff;color:#000;text-decoration:none}.admin__action-dropdown:after{right:1.5rem}.admin__action-dropdown:before{margin-right:1rem}.admin__action-dropdown-menu{background-color:#fff;border:1px solid #007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);display:none;line-height:1.36;margin-top:-1px;min-width:120%;padding:.5rem 1rem;position:absolute;top:100%;transition:all .15s ease;z-index:1}.admin__action-dropdown-menu>li{display:block}.admin__action-dropdown-menu>li>a{color:#333;display:block;text-decoration:none;padding:.6rem .5rem}.selectmenu{display:inline-block;position:relative;text-align:left;z-index:1}.selectmenu._active{z-index:500;border-color:#007bdb}.selectmenu .action-delete,.selectmenu .action-edit,.selectmenu .action-save{background-color:transparent;border-color:transparent;box-shadow:none;padding:0 1rem}.selectmenu .action-delete:hover,.selectmenu .action-edit:hover,.selectmenu .action-save:hover{background-color:transparent;border-color:transparent;box-shadow:none}.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before{content:'\e630'}.selectmenu .action-delete,.selectmenu .action-edit{border:0 solid #fff;border-left-width:1px;bottom:0;position:absolute;right:0;top:0;z-index:1}.selectmenu .action-delete:hover,.selectmenu .action-edit:hover{border:0 solid #fff;border-left-width:1px}.selectmenu .action-save:before{content:'\e625'}.selectmenu .action-edit:before{content:'\e631'}.selectmenu-value{display:inline-block}.selectmenu-value input[type=text]{-moz-appearance:none;-webkit-appearance:none;appearance:none;border:0;display:inline;margin:0;width:6rem}body._keyfocus .selectmenu-value input[type=text]:focus{box-shadow:none}.selectmenu-toggle{padding-right:3rem;background:0 0;border-width:0;bottom:0;float:right;position:absolute;right:0;top:0;width:0}.selectmenu-toggle._active:after,.selectmenu-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.selectmenu-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.1rem;top:50%;transition:all .2s linear;width:0}._active .selectmenu-toggle:after,.active .selectmenu-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.selectmenu-toggle:hover:after{border-color:#000 transparent transparent}.selectmenu-toggle:active,.selectmenu-toggle:focus,.selectmenu-toggle:hover{background:0 0}.selectmenu._active .selectmenu-toggle:before{border-color:#007bdb}body._keyfocus .selectmenu-toggle:focus{box-shadow:none}.selectmenu-toggle:before{background:#e3e3e3;border-left:1px solid #adadad;bottom:0;content:'';display:block;position:absolute;right:0;top:0;width:3.2rem}.selectmenu-items{background:#fff;border:1px solid #007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);display:none;float:left;left:-1px;margin-top:3px;max-width:20rem;min-width:calc(100% + 2px);position:absolute;top:100%}.selectmenu-items._active{display:block}.selectmenu-items ul{float:left;list-style-type:none;margin:0;min-width:100%;padding:0}.selectmenu-items li{display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;transition:background .2s linear}.selectmenu-items li:hover{background:#e3e3e3}.selectmenu-items li:last-child .selectmenu-item-action,.selectmenu-items li:last-child .selectmenu-item-action:visited{color:#008bdb;text-decoration:none}.selectmenu-items li:last-child .selectmenu-item-action:hover{color:#0fa7ff;text-decoration:underline}.selectmenu-items li:last-child .selectmenu-item-action:active{color:#ff5501;text-decoration:underline}.selectmenu-item{position:relative;width:100%;z-index:1}li._edit>.selectmenu-item{display:none}.selectmenu-item-edit{display:none;padding:.3rem 4rem .3rem .4rem;position:relative;white-space:nowrap;z-index:1}li:last-child .selectmenu-item-edit{padding-right:.4rem}.selectmenu-item-edit .admin__control-text{width:5.4rem;margin:0}li._edit .selectmenu-item-edit{display:block}.selectmenu-item-action{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:0 0;border:0;color:#333;display:block;font-size:1.4rem;font-weight:400;min-width:100%;padding:1rem 6rem 1rem 1.5rem;text-align:left;transition:background .2s linear;width:5rem}.selectmenu-item-action:focus,.selectmenu-item-action:hover{background:#e3e3e3}.abs-actions-split-xl .action-default,.page-actions .actions-split .action-default{margin-right:4rem}.abs-actions-split-xl .action-toggle,.page-actions .actions-split .action-toggle{padding-right:4rem}.abs-actions-split-xl .action-toggle:after,.page-actions .actions-split .action-toggle:after{border-width:.9rem .6rem 0;margin-top:-.3rem;right:1.4rem}.actions-split{position:relative;z-index:200}.actions-split._active,.actions-split.active,.actions-split:hover{box-shadow:0 0 0 1px #007bdb}.actions-split._active .action-toggle.action-primary,.actions-split._active .action-toggle.primary,.actions-split.active .action-toggle.action-primary,.actions-split.active .action-toggle.primary{background-color:#ba4000;border-color:#ba4000}.actions-split._active .dropdown-menu,.actions-split.active .dropdown-menu{opacity:1;visibility:visible;display:block}.actions-split .action-default,.actions-split .action-toggle{float:left;margin:0}.actions-split .action-default._active,.actions-split .action-default.active,.actions-split .action-default:hover,.actions-split .action-toggle._active,.actions-split .action-toggle.active,.actions-split .action-toggle:hover{box-shadow:none}.actions-split .action-default{margin-right:3.2rem;min-width:9.3rem}.actions-split .action-toggle{padding-right:3.2rem;border-left-color:rgba(0,0,0,.2);bottom:0;padding-left:0;position:absolute;right:0;top:0}.actions-split .action-toggle._active:after,.actions-split .action-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.actions-split .action-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.2rem;top:50%;transition:all .2s linear;width:0}._active .actions-split .action-toggle:after,.active .actions-split .action-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.actions-split .action-toggle:hover:after{border-color:#000 transparent transparent}.actions-split .action-toggle.action-primary:after,.actions-split .action-toggle.action-secondary:after,.actions-split .action-toggle.primary:after,.actions-split .action-toggle.secondary:after{border-color:#fff transparent transparent}.actions-split .action-toggle>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-select-wrap{display:inline-block;position:relative}.action-select-wrap .action-select{padding-right:3.2rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:#fff;font-weight:400;text-align:left}.action-select-wrap .action-select._active:after,.action-select-wrap .action-select.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .action-select:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.2rem;top:50%;transition:all .2s linear;width:0}._active .action-select-wrap .action-select:after,.active .action-select-wrap .action-select:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .action-select:hover:after{border-color:#000 transparent transparent}.action-select-wrap .action-select:hover,.action-select-wrap .action-select:hover:before{border-color:#878787}.action-select-wrap .action-select:before{background-color:#e3e3e3;border:1px solid #adadad;bottom:0;content:'';position:absolute;right:0;top:0;width:3.2rem}.action-select-wrap .action-select._active{border-color:#007bdb}.action-select-wrap .action-select._active:before{border-color:#007bdb #007bdb #007bdb #adadad}.action-select-wrap .action-select[disabled]{color:#333}.action-select-wrap .action-select[disabled]:after{border-color:#333 transparent transparent}.action-select-wrap._active{z-index:500}.action-select-wrap._active .action-select,.action-select-wrap._active .action-select:before{border-color:#007bdb}.action-select-wrap._active .action-select:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .abs-action-menu .action-submenu,.action-select-wrap .abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu,.action-select-wrap .action-menu .action-submenu,.action-select-wrap .actions-split .action-menu .action-submenu,.action-select-wrap .actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .actions-split .dropdown-menu .action-submenu,.action-select-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{max-height:45rem;overflow-y:auto}.action-select-wrap .action-menu-items{left:0;position:absolute;right:0;top:100%}.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu,.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.action-menu,.action-select-wrap .action-menu-items>.action-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu{min-width:100%;position:static}.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.action-menu .action-submenu,.action-select-wrap .action-menu-items>.action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu{position:absolute}.action-multicheck-wrap{display:inline-block;height:1.6rem;padding-top:1px;position:relative;width:3.1rem;z-index:200}.action-multicheck-wrap:hover .action-multicheck-toggle,.action-multicheck-wrap:hover .admin__control-checkbox+label:before{border-color:#878787}.action-multicheck-wrap._active .action-multicheck-toggle,.action-multicheck-wrap._active .admin__control-checkbox+label:before{border-color:#007bdb}.action-multicheck-wrap._active .abs-action-menu .action-submenu,.action-multicheck-wrap._active .abs-action-menu .action-submenu .action-submenu,.action-multicheck-wrap._active .action-menu,.action-multicheck-wrap._active .action-menu .action-submenu,.action-multicheck-wrap._active .actions-split .action-menu .action-submenu,.action-multicheck-wrap._active .actions-split .action-menu .action-submenu .action-submenu,.action-multicheck-wrap._active .actions-split .dropdown-menu .action-submenu,.action-multicheck-wrap._active .actions-split .dropdown-menu .action-submenu .action-submenu{opacity:1;visibility:visible;display:block}.action-multicheck-wrap._disabled .admin__control-checkbox+label:before{background-color:#fff}.action-multicheck-wrap._disabled .action-multicheck-toggle,.action-multicheck-wrap._disabled .admin__control-checkbox+label:before{border-color:#adadad;opacity:1}.action-multicheck-wrap .action-multicheck-toggle,.action-multicheck-wrap .admin__control-checkbox,.action-multicheck-wrap .admin__control-checkbox+label{float:left}.action-multicheck-wrap .action-multicheck-toggle{border-radius:0 1px 1px 0;height:1.6rem;margin-left:-1px;padding:0;position:relative;transition:border-color .1s linear;width:1.6rem}.action-multicheck-wrap .action-multicheck-toggle._active:after,.action-multicheck-wrap .action-multicheck-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-multicheck-wrap .action-multicheck-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;top:50%;transition:all .2s linear;width:0}._active .action-multicheck-wrap .action-multicheck-toggle:after,.active .action-multicheck-wrap .action-multicheck-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-multicheck-wrap .action-multicheck-toggle:hover:after{border-color:#000 transparent transparent}.action-multicheck-wrap .action-multicheck-toggle:focus{border-color:#007bdb}.action-multicheck-wrap .action-multicheck-toggle:after{right:.3rem}.action-multicheck-wrap .action-multicheck-toggle>span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.action-multicheck-wrap .abs-action-menu .action-submenu,.action-multicheck-wrap .abs-action-menu .action-submenu .action-submenu,.action-multicheck-wrap .action-menu,.action-multicheck-wrap .action-menu .action-submenu,.action-multicheck-wrap .actions-split .action-menu .action-submenu,.action-multicheck-wrap .actions-split .action-menu .action-submenu .action-submenu,.action-multicheck-wrap .actions-split .dropdown-menu .action-submenu,.action-multicheck-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{left:-1.2rem;margin-top:1px;right:auto;text-align:left}.action-multicheck-wrap .action-menu-item{white-space:nowrap}.admin__action-multiselect-wrap{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.admin__action-multiselect-wrap.action-select-wrap:focus{box-shadow:none}.admin__action-multiselect-wrap.action-select-wrap .abs-action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .abs-action-menu .action-submenu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .action-menu,.admin__action-multiselect-wrap.action-select-wrap .action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .action-menu .action-submenu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .dropdown-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{max-height:none;overflow-y:inherit}.admin__action-multiselect-wrap .action-menu-item{transition:background-color .1s linear}.admin__action-multiselect-wrap .action-menu-item._selected{background-color:#e3e3e3}.admin__action-multiselect-wrap .action-menu-item._hover{background-color:#e0f6fe}.admin__action-multiselect-wrap .admin__action-multiselect{border:1px solid #adadad;cursor:pointer;min-height:3.2rem;padding:.7rem 3.6rem .6rem 1em;white-space:normal}.admin__action-multiselect-wrap .admin__action-multiselect:after{bottom:1.25rem;top:auto}.admin__action-multiselect-wrap .admin__action-multiselect:before{height:3.2rem;top:auto;width:3.2rem}.abs-action-menu .action-submenu,.abs-action-menu .action-submenu .action-submenu,.action-menu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{text-align:left}.admin__action-multiselect-label{position:relative;z-index:1}.admin__action-multiselect-label:before{margin-right:.5rem}.admin__action-multiselect-search-wrap{margin-bottom:1rem;padding:1rem;position:relative}.admin__action-multiselect-search-wrap+.admin__action-multiselect-menu-inner{border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;margin-bottom:1rem}.admin__action-multiselect-menu-inner{margin-bottom:0;max-height:17.2rem;overflow-y:auto}.admin__action-multiselect-search{padding-right:3rem;width:100%}.admin__action-multiselect-search-label{display:block;font-size:1.5rem;height:1em;overflow:hidden;position:absolute;right:2.2rem;top:1.7rem;width:1em}.admin__action-multiselect-search-label:before{content:'\e60c'}.admin__action-multiselect-actions-wrap{text-align:center}.admin__action-multiselect-actions-wrap .action-default{font-size:1.3rem;min-width:13rem}.admin__action-multiselect-crumb{background-color:#f5f5f5;border:1px solid #a79d95;border-radius:1px;display:inline-block;font-size:1.2rem;margin:-.3rem .9rem .5rem -1.1rem;padding:.3rem 2.4rem .4rem 1rem;position:relative;transition:border-color .1s linear}.admin__action-multiselect-crumb:hover{border-color:#908379}.admin__action-multiselect-crumb .action-close{bottom:0;font-size:.5em;position:absolute;right:0;top:0;width:2rem}.admin__action-multiselect-crumb .action-close:hover{color:#000}.admin__action-multiselect-crumb .action-close:active,.admin__action-multiselect-crumb .action-close:focus{background-color:transparent}.admin__action-multiselect-crumb .action-close:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.abs-action-delete,.abs-action-reset,.action-close,.notifications-close,.search-global-field._active .search-global-action{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:0}.abs-action-delete:hover,.abs-action-reset:hover,.action-close:hover,.notifications-close:hover,.search-global-field._active .search-global-action:hover{background-color:transparent;border:none;box-shadow:none}.abs-action-default,.abs-action-pattern,.abs-action-primary,.abs-action-quaternary,.abs-action-secondary,.abs-action-tertiary,.action-default,.action-primary,.action-quaternary,.action-secondary,.action-tertiary,.page-actions .page-actions-buttons>button,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button,.page-actions>button.action-primary,.page-actions>button.primary,button,button.primary,button.secondary,button.tertiary{border:1px solid;border-radius:0;display:inline-block;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:600;line-height:1.36;padding:.6rem 1em;text-align:center;vertical-align:baseline}.abs-action-default.disabled,.abs-action-default[disabled],.abs-action-pattern.disabled,.abs-action-pattern[disabled],.abs-action-primary.disabled,.abs-action-primary[disabled],.abs-action-quaternary.disabled,.abs-action-quaternary[disabled],.abs-action-secondary.disabled,.abs-action-secondary[disabled],.abs-action-tertiary.disabled,.abs-action-tertiary[disabled],.action-default.disabled,.action-default[disabled],.action-primary.disabled,.action-primary[disabled],.action-quaternary.disabled,.action-quaternary[disabled],.action-secondary.disabled,.action-secondary[disabled],.action-tertiary.disabled,.action-tertiary[disabled],.page-actions .page-actions-buttons>button.action-primary.disabled,.page-actions .page-actions-buttons>button.action-primary[disabled],.page-actions .page-actions-buttons>button.disabled,.page-actions .page-actions-buttons>button.primary.disabled,.page-actions .page-actions-buttons>button.primary[disabled],.page-actions .page-actions-buttons>button[disabled],.page-actions>button.action-primary.disabled,.page-actions>button.action-primary[disabled],.page-actions>button.disabled,.page-actions>button.primary.disabled,.page-actions>button.primary[disabled],.page-actions>button[disabled],button.disabled,button.primary.disabled,button.primary[disabled],button.secondary.disabled,button.secondary[disabled],button.tertiary.disabled,button.tertiary[disabled],button[disabled]{cursor:default;opacity:.5;pointer-events:none}.abs-action-l,.page-actions .page-actions-buttons>button,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions button,.page-actions>button.action-primary,.page-actions>button.primary{font-size:1.6rem;letter-spacing:.025em;padding-bottom:.6875em;padding-top:.6875em}.abs-action-delete{display:inline-block;font-size:1.6rem;margin-left:1.2rem;padding-top:.7rem;text-decoration:none;vertical-align:middle}.abs-action-delete:after{color:#666;content:'\e630'}.abs-action-delete:hover:after{color:#35302c}.abs-action-default,button{background:#e3e3e3;border-color:#adadad;color:#514943}.abs-action-default:active,.abs-action-default:focus,.abs-action-default:hover,button:active,button:focus,button:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.abs-action-primary,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button.action-primary,.page-actions>button.primary,button.primary{background-color:#eb5202;border-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.abs-action-primary:active,.abs-action-primary:focus,.abs-action-primary:hover,.page-actions .page-actions-buttons>button.action-primary:active,.page-actions .page-actions-buttons>button.action-primary:focus,.page-actions .page-actions-buttons>button.action-primary:hover,.page-actions .page-actions-buttons>button.primary:active,.page-actions .page-actions-buttons>button.primary:focus,.page-actions .page-actions-buttons>button.primary:hover,.page-actions>button.action-primary:active,.page-actions>button.action-primary:focus,.page-actions>button.action-primary:hover,.page-actions>button.primary:active,.page-actions>button.primary:focus,.page-actions>button.primary:hover,button.primary:active,button.primary:focus,button.primary:hover{background-color:#ba4000;border-color:#b84002;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.abs-action-primary.disabled,.abs-action-primary[disabled],.page-actions .page-actions-buttons>button.action-primary.disabled,.page-actions .page-actions-buttons>button.action-primary[disabled],.page-actions .page-actions-buttons>button.primary.disabled,.page-actions .page-actions-buttons>button.primary[disabled],.page-actions>button.action-primary.disabled,.page-actions>button.action-primary[disabled],.page-actions>button.primary.disabled,.page-actions>button.primary[disabled],button.primary.disabled,button.primary[disabled]{cursor:default;opacity:.5;pointer-events:none}.abs-action-secondary,button.secondary{background-color:#514943;border-color:#514943;color:#fff;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.abs-action-secondary:active,.abs-action-secondary:focus,.abs-action-secondary:hover,button.secondary:active,button.secondary:focus,button.secondary:hover{background-color:#35302c;border-color:#35302c;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.abs-action-secondary:active,button.secondary:active{background-color:#35302c}.abs-action-tertiary,button.tertiary{background-color:transparent;border-color:transparent;text-shadow:none;color:#008bdb}.abs-action-tertiary:active,.abs-action-tertiary:focus,.abs-action-tertiary:hover,button.tertiary:active,button.tertiary:focus,button.tertiary:hover{background-color:transparent;border-color:transparent;box-shadow:none;color:#0fa7ff;text-decoration:underline}.abs-action-quaternary,.page-actions .page-actions-buttons>button,.page-actions>button{background-color:transparent;border-color:transparent;text-shadow:none;color:#333}.abs-action-quaternary:active,.abs-action-quaternary:focus,.abs-action-quaternary:hover,.page-actions .page-actions-buttons>button:active,.page-actions .page-actions-buttons>button:focus,.page-actions .page-actions-buttons>button:hover,.page-actions>button:active,.page-actions>button:focus,.page-actions>button:hover{background-color:transparent;border-color:transparent;box-shadow:none;color:#1a1a1a}.abs-action-menu,.actions-split .abs-action-menu .action-submenu,.actions-split .abs-action-menu .action-submenu .action-submenu,.actions-split .action-menu,.actions-split .action-menu .action-submenu,.actions-split .actions-split .dropdown-menu .action-submenu,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu,.actions-split .dropdown-menu{text-align:left;background-color:#fff;border:1px solid #007bdb;border-radius:1px;box-shadow:1px 1px 5px rgba(0,0,0,.5);color:#333;display:none;font-weight:400;left:0;list-style:none;margin:2px 0 0;min-width:0;padding:0;position:absolute;right:0;top:100%}.abs-action-menu._active,.actions-split .abs-action-menu .action-submenu .action-submenu._active,.actions-split .abs-action-menu .action-submenu._active,.actions-split .action-menu .action-submenu._active,.actions-split .action-menu._active,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu._active,.actions-split .actions-split .dropdown-menu .action-submenu._active,.actions-split .dropdown-menu._active{display:block}.abs-action-menu>li,.actions-split .abs-action-menu .action-submenu .action-submenu>li,.actions-split .abs-action-menu .action-submenu>li,.actions-split .action-menu .action-submenu>li,.actions-split .action-menu>li,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li,.actions-split .actions-split .dropdown-menu .action-submenu>li,.actions-split .dropdown-menu>li{border:none;display:block;padding:0;transition:background-color .1s linear}.abs-action-menu>li>a:hover,.actions-split .abs-action-menu .action-submenu .action-submenu>li>a:hover,.actions-split .abs-action-menu .action-submenu>li>a:hover,.actions-split .action-menu .action-submenu>li>a:hover,.actions-split .action-menu>li>a:hover,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li>a:hover,.actions-split .actions-split .dropdown-menu .action-submenu>li>a:hover,.actions-split .dropdown-menu>li>a:hover{text-decoration:none}.abs-action-menu>li._visible,.abs-action-menu>li:hover,.actions-split .abs-action-menu .action-submenu .action-submenu>li._visible,.actions-split .abs-action-menu .action-submenu .action-submenu>li:hover,.actions-split .abs-action-menu .action-submenu>li._visible,.actions-split .abs-action-menu .action-submenu>li:hover,.actions-split .action-menu .action-submenu>li._visible,.actions-split .action-menu .action-submenu>li:hover,.actions-split .action-menu>li._visible,.actions-split .action-menu>li:hover,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._visible,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li:hover,.actions-split .actions-split .dropdown-menu .action-submenu>li._visible,.actions-split .actions-split .dropdown-menu .action-submenu>li:hover,.actions-split .dropdown-menu>li._visible,.actions-split .dropdown-menu>li:hover{background-color:#e3e3e3}.abs-action-menu>li:active,.actions-split .abs-action-menu .action-submenu .action-submenu>li:active,.actions-split .abs-action-menu .action-submenu>li:active,.actions-split .action-menu .action-submenu>li:active,.actions-split .action-menu>li:active,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li:active,.actions-split .actions-split .dropdown-menu .action-submenu>li:active,.actions-split .dropdown-menu>li:active{background-color:#cacaca}.abs-action-menu>li._parent,.actions-split .abs-action-menu .action-submenu .action-submenu>li._parent,.actions-split .abs-action-menu .action-submenu>li._parent,.actions-split .action-menu .action-submenu>li._parent,.actions-split .action-menu>li._parent,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._parent,.actions-split .actions-split .dropdown-menu .action-submenu>li._parent,.actions-split .dropdown-menu>li._parent{display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.abs-action-menu>li._parent>.action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .abs-action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu>li._parent>.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu>li._parent>.action-menu-item{min-width:100%}.abs-action-menu .action-menu-item,.abs-action-menu .item,.actions-split .abs-action-menu .action-submenu .action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu .action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu .item,.actions-split .abs-action-menu .action-submenu .item,.actions-split .action-menu .action-menu-item,.actions-split .action-menu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .item,.actions-split .action-menu .item,.actions-split .actions-split .dropdown-menu .action-submenu .action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .item,.actions-split .actions-split .dropdown-menu .action-submenu .item,.actions-split .dropdown-menu .action-menu-item,.actions-split .dropdown-menu .item{display:block;padding:.6875em 1em;cursor:pointer}.abs-action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu{bottom:auto;left:auto;margin-left:0;margin-top:-1px;position:absolute;right:auto;top:auto}.ie9 .abs-action-menu .action-submenu,.ie9 .actions-split .abs-action-menu .action-submenu .action-submenu,.ie9 .actions-split .abs-action-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu,.ie9 .actions-split .actions-split .dropdown-menu .action-submenu .action-submenu,.ie9 .actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu{margin-left:99%;margin-top:-3.5rem}.abs-action-menu a.action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .abs-action-menu .action-submenu a.action-menu-item,.actions-split .action-menu .action-submenu a.action-menu-item,.actions-split .action-menu a.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu a.action-menu-item,.actions-split .dropdown-menu a.action-menu-item{color:#333}.abs-action-menu a.action-menu-item:focus,.actions-split .abs-action-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .abs-action-menu .action-submenu a.action-menu-item:focus,.actions-split .action-menu .action-submenu a.action-menu-item:focus,.actions-split .action-menu a.action-menu-item:focus,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .actions-split .dropdown-menu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu a.action-menu-item:focus{background-color:#e3e3e3;box-shadow:none}.abs-action-wrap-triangle{position:relative}.abs-action-wrap-triangle .action-default{width:100%}.abs-action-wrap-triangle .action-default:after,.abs-action-wrap-triangle .action-default:before{border-style:solid;content:'';height:0;position:absolute;top:0;width:0}.abs-action-wrap-triangle .action-default:active,.abs-action-wrap-triangle .action-default:focus,.abs-action-wrap-triangle .action-default:hover{box-shadow:none}._keyfocus .abs-action-wrap-triangle .action-default:focus{box-shadow:0 0 0 1px #007bdb}.ie10 .abs-action-wrap-triangle .action-default.disabled,.ie10 .abs-action-wrap-triangle .action-default[disabled],.ie9 .abs-action-wrap-triangle .action-default.disabled,.ie9 .abs-action-wrap-triangle .action-default[disabled]{background-color:#fcfcfc;opacity:1;text-shadow:none}.abs-action-wrap-triangle-right{display:inline-block;padding-right:1.6rem;position:relative}.abs-action-wrap-triangle-right .action-default:after,.abs-action-wrap-triangle-right .action-default:before{border-color:transparent transparent transparent #e3e3e3;border-width:1.7rem 0 1.6rem 1.7rem;left:100%;margin-left:-1.7rem}.abs-action-wrap-triangle-right .action-default:before{border-left-color:#949494;right:-1px}.abs-action-wrap-triangle-right .action-default:active:after,.abs-action-wrap-triangle-right .action-default:focus:after,.abs-action-wrap-triangle-right .action-default:hover:after{border-left-color:#dbdbdb}.ie10 .abs-action-wrap-triangle-right .action-default.disabled:after,.ie10 .abs-action-wrap-triangle-right .action-default[disabled]:after,.ie9 .abs-action-wrap-triangle-right .action-default.disabled:after,.ie9 .abs-action-wrap-triangle-right .action-default[disabled]:after{border-color:transparent transparent transparent #fcfcfc}.abs-action-wrap-triangle-right .action-primary:after{border-color:transparent transparent transparent #eb5202}.abs-action-wrap-triangle-right .action-primary:active:after,.abs-action-wrap-triangle-right .action-primary:focus:after,.abs-action-wrap-triangle-right .action-primary:hover:after{border-left-color:#ba4000}.abs-action-wrap-triangle-left{display:inline-block;padding-left:1.6rem}.abs-action-wrap-triangle-left .action-default{text-indent:-.85rem}.abs-action-wrap-triangle-left .action-default:after,.abs-action-wrap-triangle-left .action-default:before{border-color:transparent #e3e3e3 transparent transparent;border-width:1.7rem 1.7rem 1.6rem 0;margin-right:-1.7rem;right:100%}.abs-action-wrap-triangle-left .action-default:before{border-right-color:#949494;left:-1px}.abs-action-wrap-triangle-left .action-default:active:after,.abs-action-wrap-triangle-left .action-default:focus:after,.abs-action-wrap-triangle-left .action-default:hover:after{border-right-color:#dbdbdb}.ie10 .abs-action-wrap-triangle-left .action-default.disabled:after,.ie10 .abs-action-wrap-triangle-left .action-default[disabled]:after,.ie9 .abs-action-wrap-triangle-left .action-default.disabled:after,.ie9 .abs-action-wrap-triangle-left .action-default[disabled]:after{border-color:transparent #fcfcfc transparent transparent}.abs-action-wrap-triangle-left .action-primary:after{border-color:transparent #eb5202 transparent transparent}.abs-action-wrap-triangle-left .action-primary:active:after,.abs-action-wrap-triangle-left .action-primary:focus:after,.abs-action-wrap-triangle-left .action-primary:hover:after{border-right-color:#ba4000}.action-default,button{background:#e3e3e3;border-color:#adadad;color:#514943}.action-default:active,.action-default:focus,.action-default:hover,button:active,button:focus,button:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.action-primary{background-color:#eb5202;border-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.action-primary:active,.action-primary:focus,.action-primary:hover{background-color:#ba4000;border-color:#b84002;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.action-primary.disabled,.action-primary[disabled]{cursor:default;opacity:.5;pointer-events:none}.action-secondary{background-color:#514943;border-color:#514943;color:#fff;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.action-secondary:active,.action-secondary:focus,.action-secondary:hover{background-color:#35302c;border-color:#35302c;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.action-secondary:active{background-color:#35302c}.action-quaternary,.action-tertiary{background-color:transparent;border-color:transparent;text-shadow:none}.action-quaternary:active,.action-quaternary:focus,.action-quaternary:hover,.action-tertiary:active,.action-tertiary:focus,.action-tertiary:hover{background-color:transparent;border-color:transparent;box-shadow:none}.action-tertiary{color:#008bdb}.action-tertiary:active,.action-tertiary:focus,.action-tertiary:hover{color:#0fa7ff;text-decoration:underline}.action-quaternary{color:#333}.action-quaternary:active,.action-quaternary:focus,.action-quaternary:hover{color:#1a1a1a}.action-close>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-close:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.action-close:before{content:'\e62f';transition:color .1s linear}.action-close:hover{cursor:pointer;text-decoration:none}.abs-action-menu .action-submenu,.abs-action-menu .action-submenu .action-submenu,.action-menu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{background-color:#fff;border:1px solid #007bdb;border-radius:1px;box-shadow:1px 1px 5px rgba(0,0,0,.5);color:#333;display:none;font-weight:400;left:0;list-style:none;margin:2px 0 0;min-width:0;padding:0;position:absolute;right:0;top:100%}.abs-action-menu .action-submenu .action-submenu._active,.abs-action-menu .action-submenu._active,.action-menu .action-submenu._active,.action-menu._active,.actions-split .action-menu .action-submenu .action-submenu._active,.actions-split .action-menu .action-submenu._active,.actions-split .dropdown-menu .action-submenu .action-submenu._active,.actions-split .dropdown-menu .action-submenu._active{display:block}.abs-action-menu .action-submenu .action-submenu>li,.abs-action-menu .action-submenu>li,.action-menu .action-submenu>li,.action-menu>li,.actions-split .action-menu .action-submenu .action-submenu>li,.actions-split .action-menu .action-submenu>li,.actions-split .dropdown-menu .action-submenu .action-submenu>li,.actions-split .dropdown-menu .action-submenu>li{border:none;display:block;padding:0;transition:background-color .1s linear}.abs-action-menu .action-submenu .action-submenu>li>a:hover,.abs-action-menu .action-submenu>li>a:hover,.action-menu .action-submenu>li>a:hover,.action-menu>li>a:hover,.actions-split .action-menu .action-submenu .action-submenu>li>a:hover,.actions-split .action-menu .action-submenu>li>a:hover,.actions-split .dropdown-menu .action-submenu .action-submenu>li>a:hover,.actions-split .dropdown-menu .action-submenu>li>a:hover{text-decoration:none}.abs-action-menu .action-submenu .action-submenu>li._visible,.abs-action-menu .action-submenu .action-submenu>li:hover,.abs-action-menu .action-submenu>li._visible,.abs-action-menu .action-submenu>li:hover,.action-menu .action-submenu>li._visible,.action-menu .action-submenu>li:hover,.action-menu>li._visible,.action-menu>li:hover,.actions-split .action-menu .action-submenu .action-submenu>li._visible,.actions-split .action-menu .action-submenu .action-submenu>li:hover,.actions-split .action-menu .action-submenu>li._visible,.actions-split .action-menu .action-submenu>li:hover,.actions-split .dropdown-menu .action-submenu .action-submenu>li._visible,.actions-split .dropdown-menu .action-submenu .action-submenu>li:hover,.actions-split .dropdown-menu .action-submenu>li._visible,.actions-split .dropdown-menu .action-submenu>li:hover{background-color:#e3e3e3}.abs-action-menu .action-submenu .action-submenu>li:active,.abs-action-menu .action-submenu>li:active,.action-menu .action-submenu>li:active,.action-menu>li:active,.actions-split .action-menu .action-submenu .action-submenu>li:active,.actions-split .action-menu .action-submenu>li:active,.actions-split .dropdown-menu .action-submenu .action-submenu>li:active,.actions-split .dropdown-menu .action-submenu>li:active{background-color:#cacaca}.abs-action-menu .action-submenu .action-submenu>li._parent,.abs-action-menu .action-submenu>li._parent,.action-menu .action-submenu>li._parent,.action-menu>li._parent,.actions-split .action-menu .action-submenu .action-submenu>li._parent,.actions-split .action-menu .action-submenu>li._parent,.actions-split .dropdown-menu .action-submenu .action-submenu>li._parent,.actions-split .dropdown-menu .action-submenu>li._parent{display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.abs-action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.abs-action-menu .action-submenu>li._parent>.action-menu-item,.action-menu .action-submenu>li._parent>.action-menu-item,.action-menu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu .action-submenu>li._parent>.action-menu-item{min-width:100%}.abs-action-menu .action-submenu .action-menu-item,.abs-action-menu .action-submenu .action-submenu .action-menu-item,.abs-action-menu .action-submenu .action-submenu .item,.abs-action-menu .action-submenu .item,.action-menu .action-menu-item,.action-menu .action-submenu .action-menu-item,.action-menu .action-submenu .item,.action-menu .item,.actions-split .action-menu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .action-submenu .item,.actions-split .action-menu .action-submenu .item,.actions-split .dropdown-menu .action-submenu .action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu .action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu .item,.actions-split .dropdown-menu .action-submenu .item{display:block;padding:.6875em 1em;cursor:pointer}.abs-action-menu .action-submenu .action-submenu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{bottom:auto;left:auto;margin-left:0;margin-top:-1px;position:absolute;right:auto;top:auto}.ie9 .abs-action-menu .action-submenu .action-submenu,.ie9 .abs-action-menu .action-submenu .action-submenu .action-submenu,.ie9 .action-menu .action-submenu,.ie9 .action-menu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu{margin-left:99%;margin-top:-3.5rem}.abs-action-menu .action-submenu .action-submenu a.action-menu-item,.abs-action-menu .action-submenu a.action-menu-item,.action-menu .action-submenu a.action-menu-item,.action-menu a.action-menu-item,.actions-split .action-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .action-menu .action-submenu a.action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .dropdown-menu .action-submenu a.action-menu-item{color:#333}.abs-action-menu .action-submenu .action-submenu a.action-menu-item:focus,.abs-action-menu .action-submenu a.action-menu-item:focus,.action-menu .action-submenu a.action-menu-item:focus,.action-menu a.action-menu-item:focus,.actions-split .action-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .action-menu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu .action-submenu a.action-menu-item:focus{background-color:#e3e3e3;box-shadow:none}.actions-switch{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;height:20px;margin-right:30px;position:relative;width:37px}.actions-switch-label{background:#e3e3e3;border-radius:12px;border:1px solid #aaa6a0;cursor:pointer;display:block;overflow:hidden}.actions-switch-inner{display:block;width:200%;margin-left:-100%;transition:margin .3s ease-in 0s}.actions-switch-inner:after,.actions-switch-inner:before{color:#fff;border-radius:12px;display:block;float:left;height:20px;line-height:22px;padding:0;width:50%}.actions-switch-inner:before{background-color:#79a22e;content:""}.actions-switch-inner:after{content:"";text-align:right}.actions-switch-indicator{background:#fff;border-radius:12px;border:1px solid #aaa6a0;bottom:-2px;display:block;position:absolute;right:15px;top:0;transition:all .3s ease-in 0s;width:22px}.actions-switch-text:after{content:attr(data-label-no);display:block;left:32px;margin-left:12px;position:absolute}.actions-switch-checkbox{display:none}.actions-switch-checkbox:checked+.actions-switch-label .actions-switch-inner{margin-left:0}.actions-switch-checkbox:checked+.actions-switch-label .actions-switch-indicator{right:0}.actions-switch-checkbox:checked+.actions-switch-label .actions-switch-text:after{content:attr(data-label-yes)}.messages .message:last-child{margin:0 0 2rem}.message{background:#fffbbb;border:none;border-radius:0;color:#333;font-size:1.4rem;margin:0 0 1px;padding:1.8rem 4rem 1.8rem 5.5rem;position:relative;text-shadow:none}.message:before{background:0 0;border:0;color:#007bdb;content:'\e61a';font-family:Icons;font-size:1.9rem;font-style:normal;font-weight:400;height:auto;left:1.9rem;line-height:inherit;margin-top:-1.3rem;position:absolute;speak:none;text-shadow:none;top:50%;width:auto}.message-notice:before{color:#007bdb;content:'\e61a'}.message-warning:before{color:#eb5202;content:'\e623'}.message-error{background:#fcc}.message-error:before{color:#e22626;content:'\e632';font-size:1.5rem;left:2.2rem;margin-top:-1rem}.message-success:before{color:#79a22e;content:'\e62d'}.message-spinner:before{display:none}.message-spinner .spinner{font-size:2.5rem;left:1.5rem;position:absolute;top:1.5rem}.message-in-rating-edit{margin-left:1.8rem;margin-right:1.8rem}.modal-popup .action-close,.modal-slide .action-close{color:#736963;position:absolute;right:0;top:0}.modal-popup .action-close:active,.modal-slide .action-close:active{-webkit-transform:none;-ms-transform:none;transform:none}.modal-popup .action-close:active:before,.modal-slide .action-close:active:before{font-size:1.8rem}.modal-popup .action-close:hover:before,.modal-slide .action-close:hover:before{color:#58504b}.modal-popup .action-close:before,.modal-slide .action-close:before{font-size:2rem}.modal-popup .modal-title{font-size:2.4rem;margin-right:6.4rem}.modal-popup .action-close{padding:3rem}.modal-popup .action-close:active,.modal-popup .action-close:focus{background:0 0;padding-right:3.1rem;padding-top:3.1rem}.modal-slide .modal-title{font-size:2.1rem;margin-right:5.7rem}.modal-slide .action-close{padding:2.1rem 2.6rem}.modal-slide .action-close:active{padding-right:2.7rem;padding-top:2.2rem}.modal-slide .page-main-actions{margin-bottom:.6rem;margin-top:2.1rem}.modal-title{font-weight:400;margin-bottom:0;min-height:1em}.spinner{display:inline-block;font-size:4rem;height:1em;margin-right:1.5rem;position:relative;width:1em}.spinner>span:nth-child(1){-webkit-animation-delay:.27s;animation-delay:.27s;-webkit-transform:rotate(-315deg);-ms-transform:rotate(-315deg);transform:rotate(-315deg)}.spinner>span:nth-child(2){-webkit-animation-delay:.36s;animation-delay:.36s;-webkit-transform:rotate(-270deg);-ms-transform:rotate(-270deg);transform:rotate(-270deg)}.spinner>span:nth-child(3){-webkit-animation-delay:.45s;animation-delay:.45s;-webkit-transform:rotate(-225deg);-ms-transform:rotate(-225deg);transform:rotate(-225deg)}.spinner>span:nth-child(4){-webkit-animation-delay:.54s;animation-delay:.54s;-webkit-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.spinner>span:nth-child(5){-webkit-animation-delay:.63s;animation-delay:.63s;-webkit-transform:rotate(-135deg);-ms-transform:rotate(-135deg);transform:rotate(-135deg)}.spinner>span:nth-child(6){-webkit-animation-delay:.72s;animation-delay:.72s;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.spinner>span:nth-child(7){-webkit-animation-delay:.81s;animation-delay:.81s;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.spinner>span:nth-child(8){-webkit-animation-delay:.9;animation-delay:.9;-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}@-webkit-keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}@keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}.spinner>span{-webkit-transform:scale(0.4);-ms-transform:scale(0.4);transform:scale(0.4);-webkit-animation-name:fade;animation-name:fade;-webkit-animation-duration:.72s;animation-duration:.72s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-direction:linear;animation-direction:linear;background-color:#fff;border-radius:6px;clip:rect(0 .28571429em .1em 0);height:.1em;margin-top:.5em;position:absolute;width:1em}.ie9 .spinner{background:url(../images/ajax-loader.gif) center no-repeat}.ie9 .spinner>span{display:none}.popup-loading{background:rgba(255,255,255,.8);border-color:#ef672f;color:#ef672f;font-size:14px;font-weight:700;left:50%;margin-left:-100px;padding:100px 0 10px;position:fixed;text-align:center;top:40%;width:200px;z-index:1003}.popup-loading:after{background-image:url(../images/loader-1.gif);content:'';height:64px;left:50%;margin:-32px 0 0 -32px;position:absolute;top:40%;width:64px;z-index:2}.loading-mask,.loading-old{background:rgba(255,255,255,.4);bottom:0;left:0;position:fixed;right:0;top:0;z-index:2003}.loading-mask img,.loading-old img{display:none}.loading-mask p,.loading-old p{margin-top:118px}.loading-mask .loader,.loading-old .loader{background:url(../images/loader-1.gif) 50% 30% no-repeat #e5e2dd;border-radius:5px;bottom:0;color:#5e5b56;font-size:14px;font-weight:700;height:160px;left:0;margin:auto;opacity:.95;position:absolute;right:0;text-align:center;top:0;width:160px}.admin-user{float:right;line-height:1.36;margin-left:.3rem;z-index:390}.admin-user._active .admin__action-dropdown,.admin-user.active .admin__action-dropdown{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.admin-user .admin__action-dropdown{height:3.3rem;padding:.7rem 2.8rem .4rem 4rem}.admin-user .admin__action-dropdown._active:after,.admin-user .admin__action-dropdown.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin-user .admin__action-dropdown:after{border-color:#777 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.3rem;top:50%;transition:all .2s linear;width:0}._active .admin-user .admin__action-dropdown:after,.active .admin-user .admin__action-dropdown:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin-user .admin__action-dropdown:hover:after{border-color:#000 transparent transparent}.admin-user .admin__action-dropdown:before{color:#777;content:'\e600';font-size:2rem;left:1.1rem;margin-top:-1.1rem;position:absolute;top:50%}.admin-user .admin__action-dropdown:hover:before{color:#333}.admin-user .admin__action-dropdown-menu{min-width:20rem;padding-left:1rem;padding-right:1rem}.admin-user .admin__action-dropdown-menu>li>a{padding-right:1.8rem;padding-left:.5em;white-space:nowrap;transition:background-color .1s linear}.admin-user .admin__action-dropdown-menu>li>a:hover{background-color:#e0f6fe;color:#333}.admin-user .admin__action-dropdown-menu>li>a:active{background-color:#c7effd;bottom:-1px;position:relative}.admin-user .admin__action-dropdown-menu .admin-user-name{text-overflow:ellipsis;white-space:nowrap;display:inline-block;max-width:20rem;overflow:hidden;vertical-align:top}.admin-user-account-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;max-width:11.2rem}.search-global{float:right;margin-right:-.3rem;position:relative;z-index:380}.search-global-field{min-width:5rem}.search-global-field._active .search-global-input{background-color:#fff;border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);padding-right:4rem;width:25rem}.search-global-field._active .search-global-action{display:block;height:3.3rem;position:absolute;right:0;text-indent:-100%;top:0;width:5rem;z-index:3}.search-global-field .autocomplete-results{height:3.3rem;position:absolute;right:0;top:0;width:25rem}.search-global-field .search-global-menu{border:1px solid #007bdb;border-top-color:transparent;box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;margin-top:-2px;padding:0;position:absolute;right:0;top:100%;z-index:2}.search-global-field .search-global-menu:after{background-color:#fff;content:'';height:5px;left:0;position:absolute;right:0;top:-5px}.search-global-field .search-global-menu>li{background-color:#fff;border-top:1px solid #ddd;display:block;font-size:1.2rem;padding:.75rem 1.4rem .55rem}.search-global-field .search-global-menu>li._active{background-color:#e0f6fe}.search-global-field .search-global-menu .title{display:block;font-size:1.4rem}.search-global-field .search-global-menu .type{color:#1a1a1a;display:block}.search-global-label{cursor:pointer;height:3.3rem;padding:.75rem 1.4rem .55rem;position:absolute;right:0;top:0;z-index:2}.search-global-label:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.search-global-label:hover:before{color:#000}.search-global-label:before{color:#777;content:'\e60c';font-size:2rem}.search-global-input{background-color:transparent;border:1px solid transparent;font-size:1.4rem;height:3.3rem;padding:.75rem 1.4rem .55rem;position:absolute;right:0;top:0;transition:all .1s linear,width .3s linear;width:5rem;z-index:1}.search-global-action{display:none}.notifications-wrapper{float:right;line-height:1;position:relative}.notifications-wrapper.active{z-index:400}.notifications-wrapper.active .notifications-action{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.notifications-wrapper.active .notifications-action:after{border:none;background-color:#fff;content:'';display:block;height:6px;left:-6px;margin-top:0;position:absolute;right:0;top:100%;width:auto}.notifications-wrapper .admin__action-dropdown-menu{padding:1rem 0 0;width:32rem}.notifications-action{color:#777;height:3.3rem;padding:.75rem 2rem .65rem}.notifications-action:after{display:none}.notifications-action:before{content:'\e607';font-size:1.9rem;margin-right:0}.notifications-action:active:before{position:relative;top:1px}.notifications-action .notifications-counter{background-color:#e22626;border-radius:1em;color:#fff;display:inline-block;font-size:1.1rem;font-weight:700;left:50%;margin-left:.3em;margin-top:-1.1em;padding:.3em .5em;position:absolute;top:50%}.notifications-entry{line-height:1.36;padding:.6rem 2rem .8rem;position:relative;transition:background-color .1s linear}.notifications-entry:hover{background-color:#e0f6fe}.notifications-entry.notifications-entry-last{margin:0 2rem;padding:.3rem 0 1.3rem;text-align:center}.notifications-entry.notifications-entry-last:hover{background-color:transparent}.notifications-entry+.notifications-entry-last{border-top:1px solid #ddd;padding-bottom:.6rem}.notifications-entry ._cutted{cursor:pointer}.notifications-entry ._cutted .notifications-entry-description-start:after{content:'...'}.notifications-entry-title{color:#ef672f;display:block;font-size:1.1rem;font-weight:700;margin-bottom:.7rem;margin-right:1em}.notifications-entry-description{color:#333;font-size:1.1rem;margin-bottom:.8rem}.notifications-entry-description-end{display:none}.notifications-entry-description-end._show{display:inline}.notifications-entry-time{color:#777;font-size:1.1rem}.notifications-close{line-height:1;padding:1rem;position:absolute;right:0;top:.6rem}.notifications-close:before{color:#ccc;content:'\e620';transition:color .1s linear}.notifications-close:hover:before{color:#b3b3b3}.notifications-close:active{-webkit-transform:scale(0.95);-ms-transform:scale(0.95);transform:scale(0.95)}.page-header-actions{padding-top:1.1rem}.page-header-hgroup{padding-right:1.5rem}.page-title{color:#333;font-size:2.8rem}.page-header{padding:1.5rem 3rem}.menu-wrapper{display:inline-block;position:relative;width:8.8rem;z-index:700}.menu-wrapper:before{background-color:#373330;bottom:0;content:'';left:0;position:fixed;top:0;width:8.8rem;z-index:699}.menu-wrapper._fixed{left:0;position:fixed;top:0}.menu-wrapper._fixed~.page-wrapper{margin-left:8.8rem}.menu-wrapper .logo{display:block;height:8.8rem;padding:2.4rem 0 2.2rem;position:relative;text-align:center;z-index:700}._keyfocus .menu-wrapper .logo:focus{background-color:#4a4542;box-shadow:none}._keyfocus .menu-wrapper .logo:focus+.admin__menu .level-0:first-child>a{background-color:#373330}._keyfocus .menu-wrapper .logo:focus+.admin__menu .level-0:first-child>a:after{display:none}.menu-wrapper .logo:hover .logo-img{-webkit-filter:brightness(1.1);filter:brightness(1.1)}.menu-wrapper .logo:active .logo-img{-webkit-transform:scale(0.95);-ms-transform:scale(0.95);transform:scale(0.95)}.menu-wrapper .logo .logo-img{height:4.2rem;transition:-webkit-filter .2s linear,filter .2s linear,transform .1s linear;width:3.5rem}.abs-menu-separator,.admin__menu .item-partners>a:after,.admin__menu .level-0:first-child>a:after{background-color:#736963;content:'';display:block;height:1px;left:0;margin-left:16%;position:absolute;top:0;width:68%}.admin__menu li{display:block}.admin__menu .level-0:first-child>a{position:relative}.admin__menu .level-0._active>a,.admin__menu .level-0:hover>a{color:#f7f3eb}.admin__menu .level-0._active>a{background-color:#524d49}.admin__menu .level-0:hover>a{background-color:#4a4542}.admin__menu .level-0>a{color:#aaa6a0;display:block;font-size:1rem;letter-spacing:.025em;min-height:6.2rem;padding:1.2rem .5rem .5rem;position:relative;text-align:center;text-decoration:none;text-transform:uppercase;transition:background-color .1s linear;word-wrap:break-word;z-index:700}.admin__menu .level-0>a:focus{box-shadow:none}.admin__menu .level-0>a:before{content:'\e63a';display:block;font-size:2.2rem;height:2.2rem}.admin__menu .level-0>.submenu{background-color:#4a4542;box-shadow:0 0 3px #000;left:100%;min-height:calc(8.8rem + 2rem + 100%);padding:2rem 0 0;position:absolute;top:0;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%);transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-duration:.3s;transition-timing-function:ease-in-out;visibility:hidden;z-index:697}.admin__menu .level-0._show>.submenu{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);visibility:visible;z-index:698}.admin__menu .level-1{margin-left:1.5rem;margin-right:1.5rem}.admin__menu [class*=level-]:not(.level-0) a{display:block;padding:1.25rem 1.5rem}.admin__menu [class*=level-]:not(.level-0) a:hover{background-color:#403934}.admin__menu [class*=level-]:not(.level-0) a:active{padding-top:1.35rem;padding-bottom:1.15rem;background-color:#322c29}.admin__menu .submenu li{min-width:23.8rem}.admin__menu .submenu a{color:#fcfcfc;transition:background-color .1s linear}.admin__menu .submenu a:focus,.admin__menu .submenu a:hover{box-shadow:none;text-decoration:none}._keyfocus .admin__menu .submenu a:focus{background-color:#403934}._keyfocus .admin__menu .submenu a:active{background-color:#322c29}.admin__menu .submenu .parent{margin-bottom:4.5rem}.admin__menu .submenu .parent .submenu-group-title,.admin__menu .submenu .parent>a{color:#a79d95;display:block;font-size:1.6rem;font-weight:600;margin-bottom:.7rem;padding:1.25rem 1.5rem;pointer-events:none}.admin__menu .submenu .column{display:table-cell}.admin__menu .submenu-title{color:#fff;display:block;font-size:2.2rem;font-weight:600;margin-bottom:4.2rem;margin-left:3rem;margin-right:5.8rem}.admin__menu .submenu-sub-title{color:#fff;display:block;font-size:1.2rem;margin:-3.8rem 5.8rem 3.8rem 3rem}.admin__menu .action-close{padding:2.4rem 2.8rem;position:absolute;right:0;top:0}.admin__menu .action-close:before{color:#a79d95;font-size:1.7rem}.admin__menu .action-close:hover:before{color:#fff}.admin__menu .item-dashboard>a:before{content:'\e604';font-size:1.8rem;padding-top:.4rem}.admin__menu .item-sales>a:before{content:'\e60b'}.admin__menu .item-catalog>a:before{content:'\e608'}.admin__menu .item-customer>a:before{content:'\e603';font-size:2.6rem;position:relative;top:-.4rem}.admin__menu .item-marketing>a:before{content:'\e609';font-size:2rem;padding-top:.2rem}.admin__menu .item-content>a:before{content:'\e602';font-size:2.4rem;position:relative;top:-.2rem}.admin__menu .item-report>a:before{content:'\e60a'}.admin__menu .item-stores>a:before{content:'\e60d';font-size:1.9rem;padding-top:.3rem}.admin__menu .item-system>a:before{content:'\e60e'}.admin__menu .item-partners>a{padding-bottom:1rem}.admin__menu .item-partners>a:before{content:'\e612'}.admin__menu-overlay{bottom:0;left:0;position:fixed;right:0;top:0;z-index:697}.store-switcher{color:#333;float:left;font-size:1.3rem;margin-top:.7rem}.store-switcher .admin__action-dropdown{margin-left:.5em;background-color:#f8f8f8}.store-switcher .dropdown{display:inline-block;position:relative}.store-switcher .dropdown:after,.store-switcher .dropdown:before{content:'';display:table}.store-switcher .dropdown:after{clear:both}.store-switcher .dropdown .action.toggle{cursor:pointer;display:inline-block;text-decoration:none}.store-switcher .dropdown .action.toggle:after{-webkit-font-smoothing:antialiased;font-size:22px;line-height:2;color:#333;content:'\e607';font-family:icons-blank-theme;margin:0;vertical-align:top;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.store-switcher .dropdown .action.toggle:active:after,.store-switcher .dropdown .action.toggle:hover:after{color:#333}.store-switcher .dropdown .action.toggle.active{display:inline-block;text-decoration:none}.store-switcher .dropdown .action.toggle.active:after{-webkit-font-smoothing:antialiased;font-size:22px;line-height:2;color:#333;content:'\e618';font-family:icons-blank-theme;margin:0;vertical-align:top;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.store-switcher .dropdown .action.toggle.active:active:after,.store-switcher .dropdown .action.toggle.active:hover:after{color:#333}.store-switcher .dropdown .dropdown-menu{background:#fff;border:1px solid #ada89e;z-index:100;margin:4px 0 0;padding:0;list-style:none;box-sizing:border-box;position:absolute;top:100%;box-shadow:1px 1px 5px rgba(0,0,0,.5);min-width:19.5rem;display:none}.store-switcher .dropdown .dropdown-menu li{margin:0;padding:0}.store-switcher .dropdown .dropdown-menu li:hover{background:0 0;cursor:pointer}.store-switcher .dropdown.active{overflow:visible}.store-switcher .dropdown.active .dropdown-menu{display:block}.store-switcher .dropdown-menu{left:0;margin-top:.5em;padding-top:.25em}.store-switcher .dropdown-menu li{border:0;cursor:default}.store-switcher .dropdown-menu li:hover{cursor:default}.store-switcher .dropdown-menu li a,.store-switcher .dropdown-menu li span{color:#333;display:block;padding:.5rem 1.3rem}.store-switcher .dropdown-menu li a{text-decoration:none}.store-switcher .dropdown-menu li a:hover{background:#e9e9e9}.store-switcher .dropdown-menu li span{color:#adadad;cursor:default}.store-switcher .dropdown-menu li.current span{background:#eee;color:#333}.store-switcher .dropdown-menu .store-switcher-store a,.store-switcher .dropdown-menu .store-switcher-store span{padding-left:2.6rem}.store-switcher .dropdown-menu .store-switcher-store-view a,.store-switcher .dropdown-menu .store-switcher-store-view span{padding-left:3.9rem}.store-switcher .dropdown-menu .dropdown-toolbar{border-top:1px solid #ebebeb;margin-top:1rem}.store-switcher .dropdown-menu .dropdown-toolbar a:before{content:'\e60e';margin-right:.25em;position:relative;top:1px}.store-switcher-label{font-weight:700}.store-switcher-alt{display:inline-block;position:relative}.store-switcher-alt.active .dropdown-menu{display:block}.store-switcher-alt .dropdown-menu{margin-top:2px;white-space:nowrap}.store-switcher-alt .dropdown-menu ul{list-style:none;margin:0;padding:0}.store-switcher-alt strong{color:#a6a098;display:block;font-size:14px;font-weight:500;line-height:1.333;padding:5px 10px}.store-switcher-alt .store-selected{color:#676056;cursor:pointer;font-size:12px;font-weight:400;line-height:1.333}.store-switcher-alt .store-selected:after{color:#b3b0ad;content:'\e02c';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:400;margin:0 0 0 3px;speak:none;vertical-align:text-top}.store-switcher-alt .store-switcher-store,.store-switcher-alt .store-switcher-website{padding:0}.store-switcher-alt .store-switcher-store:hover,.store-switcher-alt .store-switcher-website:hover{background:0 0}.store-switcher-alt .manage-stores,.store-switcher-alt .store-switcher-all,.store-switcher-alt .store-switcher-store-view{padding:0}.store-switcher-alt .manage-stores>a,.store-switcher-alt .store-switcher-all>a{color:#676056;display:block;font-size:12px;padding:8px 15px;text-decoration:none}.store-switcher-website{margin:5px 0 0}.store-switcher-website>strong{padding-left:13px}.store-switcher-store{margin:1px 0 0}.store-switcher-store>strong{padding-left:20px}.store-switcher-store>ul{margin-top:1px}.store-switcher-store-view:first-child{border-top:1px solid #e5e5e5}.store-switcher-store-view>a{color:#333;display:block;font-size:13px;padding:5px 15px 5px 24px;text-decoration:none}.tooltip{margin-left:.5em}.tooltip .help a,.tooltip .help span{cursor:pointer;display:inline-block;height:22px;position:relative;vertical-align:middle;width:22px;z-index:2}.tooltip .help a:before,.tooltip .help span:before{color:#333;content:'\e633';font-size:1.7rem}.tooltip .help a span,.tooltip .help span span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tooltip .help a:hover{text-decoration:none}.tooltip .tooltip-content{background:#000;border-radius:3px;color:#fff;display:none;margin-left:-19px;margin-top:10px;max-width:200px;padding:4px 8px;position:absolute;text-shadow:none;z-index:20}.tooltip .tooltip-content:before{border-bottom:5px solid #000;border-left:5px solid transparent;border-right:5px solid transparent;content:'';height:0;left:20px;opacity:.8;position:absolute;top:-5px;width:0}.tooltip .tooltip-content.loading{position:absolute}.tooltip .tooltip-content.loading:before{border-bottom-color:rgba(0,0,0,.3)}.tooltip:hover>.tooltip-content{display:block}.page-actions._fixed,.page-main-actions:not(._hidden){background:#f8f8f8;border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;padding:1.5rem}.page-main-actions{margin:0 0 3rem}.page-main-actions._hidden .store-switcher{display:none}.page-actions{float:right}.page-main-actions .page-actions._fixed{left:8.8rem;position:fixed;right:0;top:0;z-index:400}.page-main-actions .page-actions._fixed .page-actions-inner:before{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333;content:attr(data-title);float:left;font-size:2.8rem;margin-top:.3rem;max-width:50%}.page-actions .page-actions-buttons>button,.page-actions>button{float:right;margin-left:1.3rem}.page-actions .page-actions-buttons>button.action-back,.page-actions .page-actions-buttons>button.back,.page-actions>button.action-back,.page-actions>button.back{float:left;-ms-flex-order:-1;-webkit-order:-1;order:-1}.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before{content:'\e626';margin-right:.5em;position:relative;top:1px}.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button.action-primary,.page-actions>button.primary{-ms-flex-order:2;-webkit-order:2;order:2}.page-actions .page-actions-buttons>button.save:not(.primary),.page-actions>button.save:not(.primary){-ms-flex-order:1;-webkit-order:1;order:1}.page-actions .page-actions-buttons>button.delete,.page-actions>button.delete{-ms-flex-order:-1;-webkit-order:-1;order:-1}.page-actions .actions-split{float:right;margin-left:1.3rem;-ms-flex-order:2;-webkit-order:2;order:2}.page-actions .actions-split .dropdown-menu .item{display:block}.page-actions-buttons{float:right;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;display:-webkit-flex;display:-ms-flexbox;display:flex}.customer-index-edit .page-actions-buttons{background-color:transparent}.admin__page-nav{background:#f1f1f1;border:1px solid #e3e3e3}.admin__page-nav._collapsed:first-child{border-bottom:none}.admin__page-nav._collapsed._show{border-bottom:1px solid #e3e3e3}.admin__page-nav._collapsed._show ._collapsible{background:#f1f1f1}.admin__page-nav._collapsed._show ._collapsible:after{content:'\e62b'}.admin__page-nav._collapsed._show ._collapsible+.admin__page-nav-items{display:block}.admin__page-nav._collapsed._hide .admin__page-nav-title-messages,.admin__page-nav._collapsed._hide .admin__page-nav-title-messages ._active{display:inline-block}.admin__page-nav+._collapsed{border-bottom:none;border-top:none}.admin__page-nav-title{border-bottom:1px solid #e3e3e3;color:#303030;display:block;font-size:1.4rem;line-height:1.2;margin:0 0 -1px;padding:1.8rem 1.5rem;position:relative;text-transform:uppercase}.admin__page-nav-title._collapsible{background:#fff;cursor:pointer;margin:0;padding-right:3.5rem;transition:border-color .1s ease-out,background-color .1s ease-out}.admin__page-nav-title._collapsible+.admin__page-nav-items{display:none;margin-top:-1px}.admin__page-nav-title._collapsible:after{content:'\e628';font-size:1.3rem;font-weight:700;position:absolute;right:1.8rem;top:2rem}.admin__page-nav-title._collapsible:hover{background:#f1f1f1}.admin__page-nav-title._collapsible:last-child{margin:0 0 -1px}.admin__page-nav-title strong{font-weight:700}.admin__page-nav-title .admin__page-nav-title-messages{display:none}.admin__page-nav-items{list-style-type:none;margin:0;padding:1rem 0 1.3rem}.admin__page-nav-item{border-left:3px solid transparent;margin-left:.7rem;padding:0;position:relative;transition:border-color .1s ease-out,background-color .1s ease-out}.admin__page-nav-item:hover{border-color:#e4e4e4}.admin__page-nav-item:hover .admin__page-nav-link{background:#e4e4e4;color:#303030;text-decoration:none}.admin__page-nav-item._active,.admin__page-nav-item.ui-state-active{border-color:#eb5202}.admin__page-nav-item._active .admin__page-nav-link,.admin__page-nav-item.ui-state-active .admin__page-nav-link{background:#fff;border-color:#e3e3e3;border-right:1px solid #fff;color:#303030;margin-right:-1px;font-weight:600}.admin__page-nav-item._loading:before,.admin__page-nav-item.ui-tabs-loading:before{display:none}.admin__page-nav-item._loading .admin__page-nav-item-message-loader,.admin__page-nav-item.ui-tabs-loading .admin__page-nav-item-message-loader{display:inline-block}.admin__page-nav-link{border:1px solid transparent;border-width:1px 0;color:#303030;display:block;font-weight:500;line-height:1.2;margin:0 0 -1px;padding:2rem 4rem 2rem 1rem;transition:border-color .1s ease-out,background-color .1s ease-out;word-wrap:break-word}.admin__page-nav-item-messages,.admin__page-nav-link._changed .admin__page-nav-item-message._changed,.admin__page-nav-link._error .admin__page-nav-item-message._error{display:inline-block}.admin__page-nav-item-messages .admin__page-nav-item-message{position:relative}.admin__page-nav-item-messages .admin__page-nav-item-message:hover{z-index:500}.admin__page-nav-item-messages .admin__page-nav-item-message:hover .admin__page-nav-item-message-tooltip{display:block}.admin__page-nav-item-messages .admin__page-nav-item-message._changed,.admin__page-nav-item-messages .admin__page-nav-item-message._error{display:none}.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon{display:inline-block;font-size:1.4rem;padding-left:.8em;vertical-align:top}.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon:after,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon:after{color:#666;content:'\e631'}.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon:after{color:#eb5202;content:'\e623'}.admin__page-nav-item-messages .admin__page-nav-item-message-loader{display:none;margin-top:-1rem;position:absolute;right:0;top:50%}.admin__page-nav-item-messages .admin__page-nav-item-message-loader .spinner{font-size:2rem;margin-right:1.5rem}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip{background:#f1f1f1;border:1px solid #f1f1f1;border-radius:1px;bottom:3.7rem;box-shadow:0 3px 9px 0 rgba(0,0,0,.3);display:none;font-weight:400;left:-1rem;line-height:1.36;padding:2rem;position:absolute;text-transform:none;width:27rem;word-break:normal;z-index:2}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:after,.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:before{border:15px solid transparent;height:0;width:0;border-top-color:#f1f1f1;content:'';display:block;left:2rem;position:absolute;top:100%;z-index:3}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:after{border-top-color:#f1f1f1;margin-top:-1px;z-index:4}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:before{border-top-color:#bfbfbf}.admin__data-grid-wrap-static .data-grid{box-sizing:border-box}.admin__data-grid-wrap-static .data-grid thead{color:#333}.admin__data-grid-wrap-static .data-grid tr:nth-child(even) td{background-color:#f5f5f5}.admin__data-grid-wrap-static .data-grid tr:nth-child(even) td._dragging{background-color:rgba(245,245,245,.95)}.admin__data-grid-wrap-static .data-grid ul{padding-left:1rem;margin-left:1rem}.admin__data-grid-wrap-static .admin__data-grid-loading-mask{background:rgba(255,255,255,.5);bottom:0;left:0;position:absolute;right:0;top:0;z-index:401}.admin__data-grid-wrap-static .admin__data-grid-loading-mask .grid-loader{background:url(../images/loader-2.gif) 50% 50% no-repeat;bottom:0;height:149px;left:0;margin:auto;position:absolute;right:0;top:0;width:218px}.data-grid-filters-actions-wrap{float:right}.data-grid-search-control-wrap{float:left;max-width:45.5rem;position:relative;width:50%}.data-grid-search-control-wrap :-ms-input-placeholder{font-style:italic}.data-grid-search-control-wrap ::-webkit-input-placeholder{font-style:italic}.data-grid-search-control-wrap ::-moz-placeholder{font-style:italic}.data-grid-search-control-wrap .action-submit{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:.6rem 2rem .2rem;position:absolute;right:0;top:1px}.data-grid-search-control-wrap .action-submit:hover{background-color:transparent;border:none;box-shadow:none}.data-grid-search-control-wrap .action-submit:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.data-grid-search-control-wrap .action-submit:hover:before{color:#1a1a1a}._keyfocus .data-grid-search-control-wrap .action-submit:focus{box-shadow:0 0 0 1px #008bdb}.data-grid-search-control-wrap .action-submit:before{content:'\e60c';font-size:2rem;transition:color .1s linear}.data-grid-search-control-wrap .action-submit>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.data-grid-search-control-wrap .abs-action-menu .action-submenu,.data-grid-search-control-wrap .abs-action-menu .action-submenu .action-submenu,.data-grid-search-control-wrap .action-menu,.data-grid-search-control-wrap .action-menu .action-submenu,.data-grid-search-control-wrap .actions-split .action-menu .action-submenu,.data-grid-search-control-wrap .actions-split .action-menu .action-submenu .action-submenu,.data-grid-search-control-wrap .actions-split .dropdown-menu .action-submenu,.data-grid-search-control-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{z-index:400;max-height:19.25rem;overflow-y:auto}.data-grid-search-control-wrap .action-menu-item._selected{background-color:#e0f6fe}.data-grid-search-control-wrap .data-grid-search-label{display:none}.data-grid-search-control{padding-right:6rem;width:100%}.data-grid-filters-action-wrap{float:left;padding-left:2rem}.data-grid-filters-action-wrap .action-default{font-size:1.3rem;margin-bottom:1rem;padding-left:1.7rem;padding-right:2.1rem;padding-top:.7rem}.data-grid-filters-action-wrap .action-default._active{background-color:#fff;border-bottom-color:#fff;border-right-color:#ccc;font-weight:600;margin:-.1rem 0 0;padding-bottom:1.6rem;padding-top:.8rem;position:relative;z-index:281}.data-grid-filters-action-wrap .action-default._active:after{background-color:#eb5202;bottom:100%;content:'';height:3px;left:-1px;position:absolute;right:-1px}.data-grid-filters-action-wrap .action-default:before{color:#333;content:'\e605';font-size:1.8rem;margin-right:.4rem;position:relative;top:-1px;vertical-align:top}.data-grid-filters-action-wrap .filters-active{display:none}.admin__data-grid-filters-wrap{opacity:0;visibility:hidden;clear:both;font-size:1.3rem;transition:opacity .3s ease}.admin__data-grid-filters-wrap._show{opacity:1;visibility:visible;border-bottom:1px solid #ccc;border-top:1px solid #ccc;margin-bottom:.7rem;padding:3.6rem 0 3rem;position:relative;top:-1px;z-index:280}.admin__data-grid-filters-wrap._show .admin__data-grid-filters,.admin__data-grid-filters-wrap._show .admin__data-grid-filters-footer{display:block}.admin__data-grid-filters-wrap .admin__form-field-label,.admin__data-grid-filters-wrap .admin__form-field-legend{display:block;font-weight:700;margin:0 0 .3rem;text-align:left}.admin__data-grid-filters-wrap .admin__form-field{display:inline-block;margin-bottom:2em;margin-left:0;padding-left:2rem;padding-right:2rem;vertical-align:top;width:calc(100% / 4 - 4px)}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field{display:block;float:none;margin-bottom:1.5rem;padding-left:0;padding-right:0;width:auto}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field:last-child{margin-bottom:0}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field .admin__form-field-label{border:1px solid transparent;float:left;font-weight:400;line-height:1.36;margin-bottom:0;padding-bottom:.6rem;padding-right:1em;padding-top:.6rem;width:25%}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field .admin__form-field-control{margin-left:25%}.admin__data-grid-filters-wrap .admin__action-multiselect,.admin__data-grid-filters-wrap .admin__control-select,.admin__data-grid-filters-wrap .admin__control-text,.admin__data-grid-filters-wrap .admin__form-field-label{font-size:1.3rem}.admin__data-grid-filters-wrap .admin__control-select{padding-top:.5rem;height:3.2rem}.admin__data-grid-filters-wrap .admin__control-select,.admin__data-grid-filters-wrap .admin__control-text.hasDatepicker{width:100%}.admin__data-grid-filters{display:none;margin-left:-2rem;margin-right:-2rem}.admin__filters-legend{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__data-grid-filters-footer{display:none;font-size:1.4rem}.admin__data-grid-filters-footer .admin__footer-main-actions{margin-left:25%;text-align:right}.admin__data-grid-filters-footer .admin__footer-secondary-actions{float:left;width:50%}.admin__data-grid-filters-current{border-bottom:.1rem solid #ccc;border-top:.1rem solid #ccc;display:none;font-size:1.3rem;margin-bottom:.9rem;padding-bottom:.8rem;padding-top:1.1rem;width:100%}.admin__data-grid-filters-current._show{display:table;position:relative;top:-1px;z-index:3}.admin__data-grid-filters-current._show+.admin__data-grid-filters-wrap._show{margin-top:-1rem}.admin__current-filters-actions-wrap,.admin__current-filters-list-wrap,.admin__current-filters-title-wrap{display:table-cell;vertical-align:top}.admin__current-filters-title{margin-right:1em;white-space:nowrap}.admin__current-filters-list-wrap{width:100%}.admin__current-filters-list{margin-bottom:0}.admin__current-filters-list>li{display:inline-block;font-weight:600;margin:0 1rem .5rem;padding-right:2.6rem;position:relative}.admin__current-filters-list .action-remove{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:0;line-height:1;position:absolute;right:0;top:1px}.admin__current-filters-list .action-remove:hover{background-color:transparent;border:none;box-shadow:none}.admin__current-filters-list .action-remove:hover:before{color:#949494}.admin__current-filters-list .action-remove:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.admin__current-filters-list .action-remove:before{color:#adadad;content:'\e620';font-size:1.6rem;transition:color .1s linear}.admin__current-filters-list .action-remove>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__current-filters-actions-wrap .action-clear{border:none;padding-bottom:0;padding-top:0;white-space:nowrap}.admin__data-grid-pager-wrap{text-align:right}.admin__data-grid-pager{display:inline-block;margin-left:3rem}.admin__data-grid-pager .admin__control-text::-webkit-inner-spin-button,.admin__data-grid-pager .admin__control-text::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.admin__data-grid-pager .admin__control-text{-moz-appearance:textfield;text-align:center;width:4.4rem}.action-next,.action-previous{width:4.4rem}.action-next:before,.action-previous:before{font-weight:700}.action-next>span,.action-previous>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-previous{margin-right:2.5rem;text-indent:-.25em}.action-previous:before{content:'\e629'}.action-next{margin-left:1.5rem;text-indent:.1em}.action-next:before{content:'\e62a'}.admin__data-grid-action-bookmarks{opacity:.98}.admin__data-grid-action-bookmarks .admin__action-dropdown-text:after{right:-6px;left:0}.admin__data-grid-action-bookmarks._active{z-index:290}.admin__data-grid-action-bookmarks .admin__action-dropdown .admin__action-dropdown-text{display:inline-block;max-width:15rem;min-width:4.9rem;vertical-align:top;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin__data-grid-action-bookmarks .admin__action-dropdown:before{content:'\e60f'}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu{font-size:1.3rem;left:0;padding:1rem 0;right:auto}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li{padding:0 5rem 0 0;position:relative;white-space:nowrap}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li:not(.action-dropdown-menu-action){transition:background-color .1s linear}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li:not(.action-dropdown-menu-action):hover{background-color:#e3e3e3}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item{max-width:23rem;min-width:18rem;white-space:normal;word-break:break-all}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-edit{display:none;padding-bottom:1rem;padding-left:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-edit .action-dropdown-menu-item-actions{padding-bottom:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action{padding-left:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action+.action-dropdown-menu-item-last{padding-top:.5rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action>a{color:#008bdb;text-decoration:none;display:inline-block;padding-left:1.1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action>a:hover{color:#0fa7ff;text-decoration:underline}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-last{padding-bottom:0}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._edit .action-dropdown-menu-item{display:none}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._edit .action-dropdown-menu-item-edit{display:block}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._active .action-dropdown-menu-link{font-weight:600}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .admin__control-text{font-size:1.3rem;min-width:15rem;width:calc(100% - 4rem)}.ie9 .admin__data-grid-action-bookmarks .admin__action-dropdown-menu .admin__control-text{width:15rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-actions{border-left:1px solid #fff;bottom:0;position:absolute;right:0;top:0;width:5rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-link{color:#333;display:block;text-decoration:none;padding:1rem 1rem 1rem 2.1rem}.admin__data-grid-action-bookmarks .action-delete,.admin__data-grid-action-bookmarks .action-edit,.admin__data-grid-action-bookmarks .action-submit{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;vertical-align:top}.admin__data-grid-action-bookmarks .action-delete:hover,.admin__data-grid-action-bookmarks .action-edit:hover,.admin__data-grid-action-bookmarks .action-submit:hover{background-color:transparent;border:none;box-shadow:none}.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before{font-size:1.7rem}.admin__data-grid-action-bookmarks .action-delete>span,.admin__data-grid-action-bookmarks .action-edit>span,.admin__data-grid-action-bookmarks .action-submit>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__data-grid-action-bookmarks .action-delete,.admin__data-grid-action-bookmarks .action-edit{padding:.6rem 1.4rem}.admin__data-grid-action-bookmarks .action-delete:active,.admin__data-grid-action-bookmarks .action-edit:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.admin__data-grid-action-bookmarks .action-submit{padding:.6rem 1rem .6rem .8rem}.admin__data-grid-action-bookmarks .action-submit:active{position:relative;right:-1px}.admin__data-grid-action-bookmarks .action-submit:before{content:'\e625'}.admin__data-grid-action-bookmarks .action-delete:before{content:'\e630'}.admin__data-grid-action-bookmarks .action-edit{padding-top:.8rem}.admin__data-grid-action-bookmarks .action-edit:before{content:'\e631'}.admin__data-grid-action-columns._active{opacity:.98;z-index:290}.admin__data-grid-action-columns .admin__action-dropdown:before{content:'\e60e';font-size:1.8rem;margin-right:.7rem;vertical-align:top}.admin__data-grid-action-columns-menu{color:#303030;font-size:1.3rem;overflow:hidden;padding:2.2rem 3.5rem 1rem;z-index:1}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-header{border-bottom:1px solid #d1d1d1}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-content{width:49.2rem}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-footer{border-top:1px solid #d1d1d1;padding-top:2.5rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content{max-height:22.85rem;overflow-y:auto;padding-top:1.5rem;position:relative;width:47.4rem}.admin__data-grid-action-columns-menu .admin__field-option{height:1.9rem;float:left;margin-bottom:1.5rem;padding:0 1rem 0 0;width:15.8rem}.admin__data-grid-action-columns-menu .admin__field-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-header{padding-bottom:1.5rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-footer{padding:1rem 0 2rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-footer-main-actions{margin-left:25%;text-align:right}.admin__data-grid-action-columns-menu .admin__action-dropdown-footer-secondary-actions{float:left;margin-left:-1em}.admin__data-grid-action-export._active{opacity:.98;z-index:290}.admin__data-grid-action-export .admin__action-dropdown:before{content:'\e635';font-size:1.7rem;left:.3rem;margin-right:.7rem;vertical-align:top}.admin__data-grid-action-export-menu{padding-left:2rem;padding-right:2rem;padding-top:1rem}.admin__data-grid-action-export-menu .admin__action-dropdown-footer-main-actions{padding-bottom:2rem;padding-top:2.5rem;white-space:nowrap}.sticky-header{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;box-shadow:0 5px 5px 0 rgba(0,0,0,.25);left:8.8rem;right:0;margin-top:-1px;padding:.5rem 3rem 0;position:fixed;top:77px;z-index:400}.sticky-header .admin__data-grid-wrap{margin-bottom:0;overflow-x:visible;padding-bottom:0}.sticky-header .admin__data-grid-header-row{position:relative;text-align:right}.sticky-header .admin__data-grid-header-row:last-child{margin:0}.sticky-header .admin__data-grid-actions-wrap,.sticky-header .admin__data-grid-filters-wrap,.sticky-header .admin__data-grid-pager-wrap,.sticky-header .data-grid-filters-actions-wrap,.sticky-header .data-grid-search-control-wrap{display:inline-block;float:none;vertical-align:top}.sticky-header .action-select-wrap{float:left;margin-right:1.5rem;width:16.66666667%}.sticky-header .admin__control-support-text{float:left}.sticky-header .data-grid-search-control-wrap{margin:-.5rem 0 0 1.1rem;width:auto}.sticky-header .data-grid-search-control-wrap .data-grid-search-label{box-sizing:border-box;cursor:pointer;display:block;min-width:3.8rem;padding:1.2rem .6rem 1.7rem;position:relative;text-align:center}.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before{color:#333;content:'\e60c';font-size:2rem;transition:color .1s linear}.sticky-header .data-grid-search-control-wrap .data-grid-search-label:hover:before{color:#000}.sticky-header .data-grid-search-control-wrap .data-grid-search-label span{display:none}.sticky-header .data-grid-filters-actions-wrap{margin:-.5rem 0 0 1.1rem;padding-left:0;position:relative}.sticky-header .data-grid-filters-actions-wrap .action-default{background-color:transparent;border:1px solid transparent;box-sizing:border-box;min-width:3.8rem;padding:1.2rem .6rem 1.7rem;text-align:center;transition:all .15s ease}.sticky-header .data-grid-filters-actions-wrap .action-default span{display:none}.sticky-header .data-grid-filters-actions-wrap .action-default:before{margin:0}.sticky-header .data-grid-filters-actions-wrap .action-default._active{background-color:#fff;border-color:#adadad #adadad #fff;box-shadow:1px 1px 5px rgba(0,0,0,.5);z-index:210}.sticky-header .data-grid-filters-actions-wrap .action-default._active:after{background-color:#fff;content:'';height:6px;left:-2px;position:absolute;right:-6px;top:100%}.sticky-header .data-grid-filters-action-wrap{padding:0}.sticky-header .admin__data-grid-filters-wrap{background-color:#fff;border:1px solid #adadad;box-shadow:0 5px 5px 0 rgba(0,0,0,.25);left:0;padding-left:3.5rem;padding-right:3.5rem;position:absolute;top:100%;width:100%;z-index:209}.sticky-header .admin__data-grid-filters-current+.admin__data-grid-filters-wrap._show{margin-top:-6px}.sticky-header .filters-active{background-color:#e04f00;border-radius:10px;color:#fff;display:block;font-size:1.4rem;font-weight:700;padding:.1rem .7rem;position:absolute;right:-7px;top:0;z-index:211}.sticky-header .filters-active:empty{padding-top:0;padding-bottom:0}.sticky-header .admin__data-grid-actions-wrap{margin:-.5rem 0 0 1.1rem;padding-right:.3rem}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown{background-color:transparent;box-sizing:border-box;min-width:3.8rem;padding-left:.6rem;padding-right:.6rem;text-align:center}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown .admin__action-dropdown-text{display:inline-block;min-width:0;max-width:0;overflow:hidden}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown:before{margin:0}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown-wrap{margin-right:1.1rem}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown-wrap:after,.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown:after{display:none}.sticky-header .admin__data-grid-actions-wrap ._active .admin__action-dropdown{background-color:#fff}.sticky-header .admin__data-grid-action-bookmarks .admin__action-dropdown:before{position:relative;top:-3px}.sticky-header .admin__data-grid-filters-current{border-top:0;border-bottom:0;margin-bottom:0;padding-bottom:0;padding-top:0}.sticky-header .admin__data-grid-pager .admin__control-text,.sticky-header .admin__data-grid-pager-wrap .admin__control-support-text,.sticky-header .data-grid-search-control-wrap .action-submit,.sticky-header .data-grid-search-control-wrap .data-grid-search-control{display:none}.sticky-header .action-next{margin:0}.sticky-header .data-grid{margin-bottom:-1px}.data-grid-cap-left,.data-grid-cap-right{background-color:#f8f8f8;bottom:-2px;position:absolute;top:6rem;width:3rem;z-index:201}.data-grid-cap-left{left:0}.data-grid-cap-right{right:0}.admin__data-grid-header{font-size:1.4rem}.admin__data-grid-header-row+.admin__data-grid-header-row{margin-top:1.1rem}.admin__data-grid-header-row:last-child{margin-bottom:0}.admin__data-grid-header-row .action-select-wrap{display:block}.admin__data-grid-header-row .action-select{width:100%}.admin__data-grid-actions-wrap{float:right;margin-left:1.1rem;margin-top:-.5rem;text-align:right}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap{position:relative;text-align:left}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active+.admin__action-dropdown-wrap:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._hide+.admin__action-dropdown-wrap:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap:first-child:after{display:none}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active .admin__action-dropdown,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active .admin__action-dropdown-menu{border-color:#adadad}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap:after{border-left:1px solid #ccc;content:'';height:3.2rem;left:0;position:absolute;top:.5rem;z-index:3}.admin__data-grid-actions-wrap .admin__action-dropdown{padding-bottom:1.7rem;padding-top:1.2rem}.admin__data-grid-actions-wrap .admin__action-dropdown:after{margin-top:-.4rem}.admin__data-grid-outer-wrap{min-height:8rem;position:relative}.admin__data-grid-wrap{margin-bottom:2rem;max-width:100%;overflow-x:auto;padding-bottom:1rem;padding-top:2rem}.admin__data-grid-loading-mask{background:rgba(255,255,255,.5);bottom:0;left:-3rem;position:absolute;right:-3rem;top:0;z-index:401}.admin__data-grid-loading-mask .spinner{font-size:4rem;left:50%;margin-left:-2rem;margin-top:-2rem;position:absolute;top:50%}.ie9 .admin__data-grid-loading-mask .spinner{background:url(../images/loader-2.gif) 50% 50% no-repeat;bottom:0;height:149px;left:0;margin:auto;position:absolute;right:0;top:0;width:218px}.data-grid-cell-content{overflow:hidden;width:100%;display:inline-block}body._in-resize{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:col-resize}body._in-resize *,body._in-resize .data-grid-th,body._in-resize .data-grid-th._draggable,body._in-resize .data-grid-th._sortable{cursor:col-resize!important}._layout-fixed{table-layout:fixed}.data-grid{border:none;font-size:1.3rem;margin-bottom:0;max-width:100%;width:100%}.data-grid:not(._dragging-copy) ._odd-row td._dragging{background-color:#d0d0d0}.data-grid:not(._dragging-copy) ._dragging{background-color:#d9d9d9;color:rgba(48,48,48,.95)}.data-grid:not(._dragging-copy) ._dragging a{color:rgba(0,139,219,.95)}.data-grid:not(._dragging-copy) ._dragging a:hover{color:rgba(15,167,255,.95)}.data-grid thead{background-color:transparent}.data-grid tfoot th{padding:1rem}.data-grid tr._odd-row td{background-color:#f5f5f5}.data-grid tr.data-grid-tr-no-data:hover td{background-color:#fff;cursor:default}.data-grid tr:active td{background-color:#e0f6fe}.data-grid tr:hover td{background-color:#e5f7fe}.data-grid tr:not(.data-grid-editable-row):last-child td{border-bottom:.1rem solid #d6d6d6}.data-grid tr ._clickable,.data-grid tr._clickable{cursor:pointer}.data-grid td,.data-grid th{font-size:1.3rem;line-height:1.36;transition:background-color .1s linear;vertical-align:top}.data-grid td._resizing,.data-grid th._resizing{border-left:1px solid #007bdb;border-right:1px solid #007bdb}.data-grid td{background-color:#fff;border-left:.1rem dashed #d6d6d6;border-right:.1rem dashed #d6d6d6;color:#303030;padding:1rem}.data-grid td:first-child{border-left-style:solid}.data-grid td:last-child{border-right-style:solid}.data-grid td .action-select-wrap{position:static}.data-grid td .action-select{background-color:transparent;border:none;font-size:1.3rem;position:relative;color:#008bdb;text-decoration:none;padding:0 3rem 0 0}.data-grid td .action-select:hover{color:#0fa7ff;text-decoration:underline}.data-grid td .action-select:hover:after{border-color:#0fa7ff transparent transparent}.data-grid td .action-select:after{border-color:#008bdb transparent transparent;margin:.6rem 0 0 .7rem;right:auto;top:auto}.data-grid td .action-select:before{display:none}.data-grid td .abs-action-menu .action-submenu,.data-grid td .abs-action-menu .action-submenu .action-submenu,.data-grid td .action-menu,.data-grid td .action-menu .action-submenu,.data-grid td .actions-split .action-menu .action-submenu,.data-grid td .actions-split .action-menu .action-submenu .action-submenu,.data-grid td .actions-split .dropdown-menu .action-submenu,.data-grid td .actions-split .dropdown-menu .action-submenu .action-submenu{left:auto;min-width:10rem;right:0;text-align:left;top:auto;z-index:1}.data-grid th{background-color:#514943;border:.1rem solid #8a837f;border-left-color:transparent;color:#fff;font-weight:600;padding:0;text-align:left}.data-grid th:first-child{border-left-color:#8a837f}.data-grid th._dragover-left{box-shadow:inset 3px 0 0 0 #fff;z-index:2}.data-grid th._dragover-right{box-shadow:inset -3px 0 0 0 #fff}.data-grid .shadow-div{cursor:col-resize;height:100%;margin-right:-5px;position:absolute;right:0;top:0;width:10px}.data-grid .data-grid-th{background-clip:padding-box;color:#fff;padding:1rem;position:relative;vertical-align:middle}.data-grid .data-grid-th._resize-visible .shadow-div{cursor:auto;display:none}.data-grid .data-grid-th._draggable{cursor:-webkit-grab;cursor:grab}.data-grid .data-grid-th._sortable{cursor:pointer;transition:background-color .1s linear;z-index:1}.data-grid .data-grid-th._sortable:focus,.data-grid .data-grid-th._sortable:hover{background-color:#5f564f}.data-grid .data-grid-th._sortable:active{padding-bottom:.9rem;padding-top:1.1rem}.data-grid .data-grid-th.required>span:after{color:#f38a5e;content:'*';margin-left:.3rem}.data-grid .data-grid-checkbox-cell{padding:0;vertical-align:top;width:5.2rem}.data-grid .data-grid-checkbox-cell:hover{cursor:default}.data-grid .data-grid-thumbnail-cell{text-align:center;width:7rem}.data-grid .data-grid-thumbnail-cell img{border:1px solid #d6d6d6;max-width:5rem}.data-grid .data-grid-multicheck-cell{padding:1rem 1rem .9rem;text-align:center;vertical-align:middle}.data-grid .data-grid-onoff-label>span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.data-grid .data-grid-actions-cell{padding-left:2rem;padding-right:2rem;text-align:center;width:1%}.data-grid._hidden{display:none}.data-grid._dragging-copy{box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;opacity:.95;position:fixed;top:0;z-index:1000}.data-grid._dragging-copy .data-grid-th{border:1px solid #007bdb;border-bottom:none}.data-grid._dragging-copy .data-grid-th,.data-grid._dragging-copy .data-grid-th._sortable{cursor:-webkit-grabbing;cursor:grabbing}.data-grid._dragging-copy tr:last-child td{border-bottom:1px solid #007bdb}.data-grid._dragging-copy td{border-left:1px solid #007bdb;border-right:1px solid #007bdb}.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel td,.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel td:before,.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel:hover td{background-color:rgba(255,251,230,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td,.data-grid._dragging-copy._in-edit .data-grid-editable-row:hover td{background-color:rgba(255,255,255,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:after,.data-grid._dragging-copy._in-edit .data-grid-editable-row td:before{left:0;right:0}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:before{background-color:rgba(255,255,255,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:only-child{border-left:1px solid #007bdb;border-right:1px solid #007bdb;left:0}.data-grid._dragging-copy._in-edit .data-grid-editable-row .admin__control-select,.data-grid._dragging-copy._in-edit .data-grid-editable-row .admin__control-text{opacity:.5}.data-grid._in-edit tr:hover td{background-color:#e6e6e6}.data-grid._in-edit ._odd-row.data-grid-editable-row td,.data-grid._in-edit ._odd-row.data-grid-editable-row:hover td{background-color:#fff}.data-grid._in-edit ._odd-row td,.data-grid._in-edit ._odd-row:hover td{background-color:#dcdcdc}.data-grid._in-edit .data-grid-editable-row-actions td,.data-grid._in-edit .data-grid-editable-row-actions:hover td{background-color:#fff}.data-grid._in-edit td{background-color:#e6e6e6;pointer-events:none}.data-grid._in-edit .data-grid-checkbox-cell{pointer-events:auto}.data-grid._in-edit .data-grid-editable-row{border:.1rem solid #adadad;border-bottom-color:#c2c2c2}.data-grid._in-edit .data-grid-editable-row:hover td{background-color:#fff}.data-grid._in-edit .data-grid-editable-row td{background-color:#fff;border-bottom-color:#fff;border-left-style:hidden;border-right-style:hidden;border-top-color:#fff;pointer-events:auto;vertical-align:middle}.data-grid._in-edit .data-grid-editable-row td:first-child{border-left-color:#adadad;border-left-style:solid}.data-grid._in-edit .data-grid-editable-row td:first-child:after,.data-grid._in-edit .data-grid-editable-row td:first-child:before{left:0}.data-grid._in-edit .data-grid-editable-row td:last-child{border-right-color:#adadad;border-right-style:solid;left:-.1rem}.data-grid._in-edit .data-grid-editable-row td:last-child:after,.data-grid._in-edit .data-grid-editable-row td:last-child:before{right:0}.data-grid._in-edit .data-grid-editable-row .admin__control-select,.data-grid._in-edit .data-grid-editable-row .admin__control-text{width:100%}.data-grid._in-edit .data-grid-bulk-edit-panel td{vertical-align:bottom}.data-grid .data-grid-editable-row td{border-left-color:#fff;border-left-style:solid;position:relative;z-index:1}.data-grid .data-grid-editable-row td:after{bottom:0;box-shadow:0 5px 5px rgba(0,0,0,.25);content:'';height:.9rem;left:0;margin-top:-1rem;position:absolute;right:0}.data-grid .data-grid-editable-row td:before{background-color:#fff;bottom:0;content:'';height:1rem;left:-10px;position:absolute;right:-10px;z-index:1}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td,.data-grid .data-grid-editable-row.data-grid-editable-row-actions:hover td{background-color:#fff}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td:first-child{border-left-color:#fff;border-right-color:#fff}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td:last-child{left:0}.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel td,.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel td:before,.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel:hover td{background-color:#fffbe6}.data-grid .data-grid-editable-row-actions{left:50%;margin-left:-12.5rem;margin-top:-2px;position:absolute;text-align:center}.data-grid .data-grid-editable-row-actions td{width:25rem}.data-grid .data-grid-editable-row-actions [class*=action-]{min-width:9rem}.data-grid-th._sortable._ascend,.data-grid-th._sortable._descend{padding-right:2.7rem}.data-grid-th._sortable._ascend:before,.data-grid-th._sortable._descend:before{margin-top:-1em;position:absolute;right:1rem;top:50%}.data-grid-th._sortable._ascend:before{content:'\2193'}.data-grid-th._sortable._descend:before{content:'\2191'}.data-grid-checkbox-cell-inner{display:block;padding:1.1rem 1.8rem .9rem;text-align:right}.data-grid-checkbox-cell-inner:hover{cursor:pointer}.data-grid-row-parent._active>td .data-grid-checkbox-cell-inner:before{content:'\e62b'}.data-grid-row-parent>td .data-grid-checkbox-cell-inner{padding-left:3.7rem;position:relative}.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before{content:'\e628';font-size:1rem;font-weight:700;left:1.35rem;position:absolute;top:1.6rem}.data-grid-th._col-xs{width:1%}.data-grid-info-panel{box-shadow:0 0 5px rgba(0,0,0,.5);margin:2rem .1rem -2rem;padding:1rem}.data-grid-info-panel .messages{margin-bottom:1rem}.data-grid-info-panel-actions{text-align:right}.data-grid-editable-row .admin__field-control{position:relative}.data-grid-editable-row .admin__field-control._error:after{border-color:transparent #ee7d7d transparent transparent;border-style:solid;border-width:0 12px 12px 0;content:'';position:absolute;right:0;top:0}.data-grid-editable-row .admin__field-control._error .admin__control-text{border-color:#ee7d7d}.data-grid-editable-row .admin__field-control._focus:after{display:none}.data-grid-editable-row .admin__field-error{bottom:100%;box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;margin:0 auto 1.5rem;max-width:32rem;position:absolute;right:0}.data-grid-editable-row .admin__field-error:after,.data-grid-editable-row .admin__field-error:before{border-style:solid;content:'';left:50%;position:absolute;top:100%}.data-grid-editable-row .admin__field-error:after{border-color:#fffbbb transparent transparent;border-width:10px 10px 0;margin-left:-10px;z-index:1}.data-grid-editable-row .admin__field-error:before{border-color:#ee7d7d transparent transparent;border-width:11px 12px 0;margin-left:-12px}.data-grid-bulk-edit-panel .admin__field-label-vertical{display:block;font-size:1.2rem;margin-bottom:.5rem;text-align:left}.data-grid-row-changed{cursor:default;display:block;opacity:.5;position:relative;width:100%;z-index:1}.data-grid-row-changed:after{content:'\e631';display:inline-block}.data-grid-row-changed .data-grid-row-changed-tooltip{background:#f1f1f1;border-radius:1px;border:1px solid #f1f1f1;bottom:100%;box-shadow:0 3px 9px 0 rgba(0,0,0,.3);display:none;font-weight:400;line-height:1.36;margin-bottom:1.5rem;padding:1rem;position:absolute;right:-1rem;text-transform:none;width:27rem;word-break:normal;z-index:2}.data-grid-row-changed._changed{opacity:1;z-index:3}.data-grid-row-changed._changed:hover .data-grid-row-changed-tooltip{display:block}.data-grid-row-changed._changed:hover:before{background:#f1f1f1;border:1px solid #f1f1f1;bottom:100%;box-shadow:4px 4px 3px -1px rgba(0,0,0,.15);content:'';display:block;height:1.6rem;left:50%;margin:0 0 .7rem -.8rem;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:1.6rem;z-index:3}.ie9 .data-grid-row-changed._changed:hover:before{display:none}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]:before,.admin__control-file-label :before,.admin__control-multiselect,.admin__control-select,.admin__control-text,.admin__control-textarea,.selectmenu{background-color:#fff;border-radius:1px;border:1px solid #adadad;color:#303030;font-size:1.4rem;font-weight:400;line-height:1.36;height:auto;width:auto;padding:.6rem 1rem;transition:border-color .1s linear;vertical-align:baseline}.admin__control-multiselect:hover,.admin__control-select:hover,.admin__control-text:hover,.admin__control-textarea:hover,.selectmenu:hover,.selectmenu:hover .selectmenu-toggle:before{border-color:#878787}.admin__control-addon [class*=admin__control-][type]:focus+[class*=admin__addon-]:before,.admin__control-file:active+.admin__control-file-label :before,.admin__control-file:focus+.admin__control-file-label :before,.admin__control-multiselect:focus,.admin__control-select:focus,.admin__control-text:focus,.admin__control-textarea:focus,.selectmenu._focus,.selectmenu._focus .selectmenu-toggle:before{border-color:#007bdb;box-shadow:none;outline:0}.admin__control-addon [class*=admin__control-][type][disabled]+[class*=admin__addon-]:before,.admin__control-file[disabled]+.admin__control-file-label :before,.admin__control-multiselect[disabled],.admin__control-select[disabled],.admin__control-text[disabled],.admin__control-textarea[disabled]{background-color:#e9e9e9;border-color:#adadad;color:#303030;opacity:.5;cursor:not-allowed}.admin__fieldset>.admin__field.admin__field-wide[class]>.admin__field-control{float:none;clear:left;text-align:left;width:auto}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)>.admin__field-label{display:block;line-height:1.4rem;margin-bottom:.86rem;margin-top:-.14rem;text-align:left;width:auto}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)>.admin__field-label:before{display:none}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)._required>.admin__field-label span{padding-left:1.5rem}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)._required>.admin__field-label span:after{left:0;margin-left:30px;top:.2rem}.admin__legend{font-size:1.8rem;font-weight:600;margin-bottom:3rem}.admin__control-checkbox,.admin__control-radio{cursor:pointer;opacity:.01;overflow:hidden;position:absolute;vertical-align:top}.admin__control-checkbox:after,.admin__control-radio:after{display:none}.admin__control-checkbox+label,.admin__control-radio+label{cursor:pointer;display:inline-block}.admin__control-checkbox+label:before,.admin__control-radio+label:before{background-color:#fff;border:1px solid #adadad;color:transparent;float:left;height:1.6rem;text-align:center;vertical-align:top;width:1.6rem}.admin__control-checkbox+.admin__field-label,.admin__control-radio+.admin__field-label{padding-left:2.6rem}.admin__control-checkbox+.admin__field-label:before,.admin__control-radio+.admin__field-label:before{margin:1px 1rem 0 -2.6rem}.admin__control-checkbox:checked+label:before,.admin__control-radio:checked+label:before{color:#514943}.admin__control-checkbox.disabled+label,.admin__control-checkbox[disabled]+label,.admin__control-radio.disabled+label,.admin__control-radio[disabled]+label{cursor:default;color:#303030;opacity:.5}.admin__control-checkbox.disabled+label:before,.admin__control-checkbox[disabled]+label:before,.admin__control-radio.disabled+label:before,.admin__control-radio[disabled]+label:before{background-color:#e9e9e9;border-color:#adadad;cursor:default}._keyfocus .admin__control-checkbox:not(.disabled):focus+label:before,._keyfocus .admin__control-checkbox:not([disabled]):focus+label:before,._keyfocus .admin__control-radio:not(.disabled):focus+label:before,._keyfocus .admin__control-radio:not([disabled]):focus+label:before{border-color:#007bdb}.admin__control-checkbox:not(.disabled):hover+label:before,.admin__control-checkbox:not([disabled]):hover+label:before,.admin__control-radio:not(.disabled):hover+label:before,.admin__control-radio:not([disabled]):hover+label:before{border-color:#878787}.admin__control-radio+label:before{border-radius:1.6rem;content:'\e637';font-size:1rem;transition:border-color .1s linear,color .1s ease-in}.admin__control-radio.admin__control-radio+label:before{line-height:140%}.admin__control-radio:checked:not(.disabled):hover,.admin__control-radio:checked:not(.disabled):hover+label,.admin__control-radio:checked:not([disabled]):hover,.admin__control-radio:checked:not([disabled]):hover+label{cursor:default}.admin__control-radio:checked:not(.disabled):hover+label:before,.admin__control-radio:checked:not([disabled]):hover+label:before{border-color:#adadad}.admin__control-checkbox+label:before{border-radius:1px;content:'';font-size:0;transition:font-size .1s ease-out,color .1s ease-out,border-color .1s linear}.admin__control-checkbox:checked+label:before{content:'\e62d';font-size:1.1rem;line-height:125%}.admin__control-checkbox:not(:checked)._indeterminate+label:before,.admin__control-checkbox:not(:checked):indeterminate+label:before{color:#514943;content:'-';font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:700}input[type=checkbox].admin__control-checkbox,input[type=radio].admin__control-checkbox{position:absolute;margin:0}.admin__control-select{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background-repeat:no-repeat;background-image:url(../images/arrows-bg.svg),linear-gradient(#e3e3e3,#e3e3e3),linear-gradient(#adadad,#adadad);background-position:calc(100% - 12px) -34px,100%,calc(100% - 3.2rem) 0;background-size:auto,3.2rem 100%,1px 100%;padding-bottom:.5rem;padding-right:4.4rem;padding-top:.5rem;transition:border-color .1s linear}.admin__control-select:hover{border-color:#878787;cursor:pointer}.admin__control-select:focus{background-image:url(../images/arrows-bg.svg),linear-gradient(#e3e3e3,#e3e3e3),linear-gradient(#007bdb,#007bdb);background-position:calc(100% - 12px) 13px,100%,calc(100% - 3.2rem) 0;border-color:#007bdb}.admin__control-select::-ms-expand{display:none}.ie9 .admin__control-select{background-image:none;padding-right:1rem}option:empty{display:none}.admin__control-multiselect{height:auto;padding:.6rem 1rem}.admin__control-file-wrapper{display:inline-block;padding:.5rem 1rem;position:relative;z-index:1}.admin__control-file-label :before{content:'';left:0;position:absolute;top:0;width:100%;z-index:0}.admin__control-file{position:relative;z-index:1;background:0 0;border:0;width:auto}.admin__control-support-text{border:1px solid transparent;display:inline-block;font-size:1.4rem;line-height:1.36;padding-top:.6rem;padding-bottom:.6rem}.admin__control-support-text+[class*=admin__control-],[class*=admin__control-]+.admin__control-support-text{margin-left:.7rem}.admin__control-textarea{height:8.48rem;line-height:1.18;padding-top:.8rem;resize:vertical}.admin__control-addon{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;display:inline-flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;position:relative;width:100%;z-index:1}.admin__control-addon>[class*=admin__addon-],.admin__control-addon>[class*=admin__control-]{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;position:relative;z-index:1}.admin__control-addon [class*=admin__control-][type]{appearence:none;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;box-shadow:none;background-color:transparent;border-color:transparent;-webkit-order:1;-ms-flex-order:1;order:1;vertical-align:top;width:auto}.admin__control-addon [class*=admin__control-][type] :focus{box-shadow:0}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]{padding-left:1rem;position:static!important;z-index:0}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]>*{position:relative;vertical-align:top;z-index:2}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]:before{bottom:0;box-sizing:border-box;content:'';left:0;position:absolute;top:0;width:100%;z-index:0}.admin__addon-prefix,.admin__addon-suffix{border:0;box-sizing:border-box;color:#858585;display:inline-block;font-size:1.4rem;font-weight:400;height:3.2rem;line-height:3.2rem;padding:0}.admin__addon-suffix{-webkit-order:3;-ms-flex-order:3;order:3}.admin__addon-suffix:last-child{padding-right:1rem}.admin__addon-prefix{-webkit-order:0;-ms-flex-order:0;order:0}.ie9 .admin__control-addon:after{clear:both;content:'';display:block;height:0;overflow:hidden}.ie9 .admin__addon{min-width:0;overflow:hidden;text-align:right;white-space:nowrap;width:auto}.ie9 .admin__addon [class*=admin__control-]{display:inline}.ie9 .admin__addon-prefix{float:left}.ie9 .admin__addon-suffix{float:right}.admin__control-table-wrapper{max-width:100%;overflow-x:auto;overflow-y:hidden}.admin__control-table{width:100%}.admin__control-table thead{background-color:transparent}.admin__control-table tbody td{vertical-align:middle}.admin__control-table tfoot th{padding-bottom:1.3rem}.admin__control-table tr:last-child td,.admin__control-table tr:last-child th{border-bottom:none}.admin__control-table td,.admin__control-table th{background-color:#efefef;border:0;border-bottom:1px solid #fff;padding:1.3rem 2.5rem 1.3rem 0;text-align:left;vertical-align:top}.admin__control-table td:first-child,.admin__control-table th:first-child{padding-left:1.5rem}.admin__control-table th{border:0;vertical-align:bottom;color:#303030;font-size:1.4rem;font-weight:600;padding-bottom:0}.admin__control-table th._required span:after{color:#eb5202;content:'*'}.admin__control-table .control-table-actions-th{white-space:nowrap}.admin__control-table .control-table-actions-cell{padding-top:1.8rem;text-align:center;width:1%}.admin__control-table .col-draggable{padding-top:2.2rem;width:1%}.admin__control-table .action-delete,.admin__control-table .action-delete:hover{background-color:transparent;border-color:transparent;box-shadow:none}.admin__control-table .action-delete:before{content:'\e630'}.admin__control-table .action-delete>span{display:none}.admin__field-tooltip{display:inline-block;margin-top:5px;overflow:visible;vertical-align:top;width:0}.admin__field-tooltip:hover{position:relative;z-index:500}.admin__field-option .admin__field-tooltip{margin-top:10px}.admin__field-tooltip .admin__field-tooltip-action{margin-left:20px;display:inline-block;text-decoration:none}.admin__field-tooltip .admin__field-tooltip-action:before{-webkit-font-smoothing:antialiased;font-size:2.2rem;line-height:1;color:#514943;content:'\e633';font-family:Icons;vertical-align:middle;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.admin__field-tooltip .admin__control-text:focus+.admin__field-tooltip-content,.admin__field-tooltip:hover .admin__field-tooltip-content{display:block}.admin__field-tooltip .admin__field-tooltip-content{bottom:42px;display:none;right:-70px}.admin__field-tooltip .admin__field-tooltip-content:after,.admin__field-tooltip .admin__field-tooltip-content:before{border:16px solid transparent;height:0;width:0;border-top-color:#afadac;content:"";display:block;position:absolute;right:20px;top:100%;z-index:3}.admin__field-tooltip .admin__field-tooltip-content:after{border-top-color:#fffbbb;margin-top:-1px;z-index:4}.abs-admin__field-tooltip-content,.admin__field-tooltip .admin__field-tooltip-content{box-shadow:0 2px 8px 0 rgba(0,0,0,.3);background:#fffbbb;border-radius:1px;border:1px solid #afadac;padding:15px 25px;position:absolute;width:320px;z-index:1}.admin__fieldset{border:0;margin:0;min-width:0;padding:0}.admin__fieldset>.admin__field{border:0;margin:0 0 0 -30px;padding:0}.admin__fieldset>.admin__field:after{clear:both;content:'';display:table}.admin__fieldset>.admin__field>.admin__field-control{width:calc((100%) * .4444444444444444 - 30px);float:left;margin-left:30px}.admin__fieldset>.admin__field>.admin__field-label{width:calc((100%) * .3333333333333333 - 30px);float:left;margin-left:30px}.admin__form-field{border:0;margin:0;padding:0}.admin__field-control .admin__control-text,.admin__field-control .admin__control-textarea,.admin__form-field-control .admin__control-text,.admin__form-field-control .admin__control-textarea{width:100%}.admin__field-label{color:#303030;margin:0;text-align:right}.admin__field-label+br{display:none}.admin__field:not(.admin__field-option)>.admin__field-label{font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:600;line-height:3.2rem;padding:0;white-space:nowrap;word-wrap:break-word}.admin__field:not(.admin__field-option)>.admin__field-label:before{opacity:0;visibility:hidden;content:'.';margin-left:-7px;overflow:hidden}.admin__field:not(.admin__field-option)>.admin__field-label span{display:inline-block;line-height:1.2;vertical-align:middle;white-space:normal}._required>.admin__field-label span:after{color:#eb5202;content:'*';display:inline-block;font-size:1.6rem;font-weight:500;line-height:1;margin-left:10px;position:absolute;top:1.2rem;z-index:1}._disabled>.admin__field-label{color:#999}.admin__field{margin-bottom:0}.admin__field+.admin__field{margin-top:1.5rem}.admin__field:not(.admin__field-option)~.admin__field-option{margin-top:.5rem}.admin__field.admin__field-option~.admin__field-option{margin-top:.9rem}.admin__field~.admin__field-option:last-child{margin-bottom:.8rem}.admin__fieldset>.admin__field{margin-bottom:3rem;position:relative}.admin__field[data-config-scope]:before{color:gray;content:attr(data-config-scope);display:inline-block;font-size:1.2rem;left:calc((100%) * .7777777777777778 - 30px);line-height:3.2rem;margin-left:60px;position:absolute;width:calc((100%) * .2222222222222222 - 30px)}.admin__field-control .admin__field[data-config-scope]:nth-child(n+2):before{content:''}.admin__field._error .admin__field-control [class*=admin__addon-]:before,.admin__field._error .admin__field-control>[class*=admin__control-]{border-color:#e22626}.admin__field-control+.admin__field-control{margin-top:1.5rem}.admin__field-error{background:#fffbbb;border:1px solid #ee7d7d;box-sizing:border-box;color:#555;display:block;font-size:1.2rem;font-weight:400;line-height:1.2;margin:.2rem 0 0;padding:.8rem 1rem .9rem}.admin__field-note{color:#303030;font-size:1.2rem;margin:10px 0 0;padding:0}.admin__field-option{padding-top:.8rem}.admin__field-option .admin__field-label{text-align:left}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2),.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1){display:inline-block}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2)+.admin__field-option,.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1)+.admin__field-option{display:inline-block;margin-left:41px;margin-top:0}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2)+.admin__field-option:before,.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1)+.admin__field-option:before{background:#cacaca;content:'';display:inline-block;height:20px;margin-left:-20px;position:absolute;width:1px}.admin__field-value{padding-top:.8rem}.admin__control-fields>.admin__field:first-child,[class*=admin__control-grouped]>.admin__field:first-child{position:static}.admin__control-fields>.admin__field:first-child>.admin__field-label,[class*=admin__control-grouped]>.admin__field:first-child>.admin__field-label{width:calc((100%) * .3333333333333333 - 30px);float:left;margin-left:30px;cursor:pointer;left:0;opacity:0;position:absolute;top:0}.admin__control-fields .admin__field-label~.admin__field-control{width:100%}[class*=admin__control-grouped]{box-sizing:border-box;display:table;table-layout:fixed;width:100%}[class*=admin__control-grouped]>.admin__field{display:table-cell;vertical-align:top;width:50%}[class*=admin__control-grouped]>.admin__field>.admin__field-control{float:none;width:100%}[class*=admin__control-grouped]>.admin__field:nth-child(n+2){padding-left:20px}[class*=admin__control-grouped]>.admin__field:nth-child(n+2):not(.admin__field-option) .admin__field-label{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.admin__field-control-group{margin-top:.8rem}.admin__field-control-group>.admin__field{padding:0}.admin__legend{float:left;position:static;width:100%}.admin__legend+br{display:block;height:0;overflow:hidden;clear:left}.message{margin-bottom:3rem}.message-icon-top:before{margin-top:0;top:1.8rem}.nav{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;display:none;margin-bottom:3rem;padding:2.2rem 1.5rem 0 0}.nav .btn-group,.nav-bar-outer-actions{float:right;margin-bottom:1.7rem}.nav .btn-group .btn-wrap,.nav-bar-outer-actions .btn-wrap{float:right;margin-left:.5rem;margin-right:.5rem}.nav .btn-group .btn-wrap .btn,.nav-bar-outer-actions .btn-wrap .btn{padding-left:.5rem;padding-right:.5rem}.nav-bar-outer-actions{margin-top:-10.6rem;padding-right:1.5rem}.btn-wrap-try-again{width:9.5rem}.btn-wrap-next,.btn-wrap-prev{width:8.5rem}.nav-bar{counter-reset:i;float:left;margin:0 1rem 1.7rem 0;padding:0;position:relative;white-space:nowrap}.nav-bar:before{background-color:#d4d4d4;background-repeat:repeat-x;background-image:linear-gradient(to bottom,#d1d1d1 0,#d4d4d4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d1d1d1', endColorstr='#d4d4d4', GradientType=0);border-bottom:1px solid #d9d9d9;border-top:1px solid #bfbfbf;content:'';height:1rem;left:5.15rem;position:absolute;right:5.15rem;top:.7rem}.nav-bar>li{display:inline-block;font-size:0;position:relative;vertical-align:top;width:10.3rem}.nav-bar>li:first-child:after{display:none}.nav-bar>li:after{background-color:#514943;content:'';height:.5rem;left:calc(-50% + .25rem);position:absolute;right:calc(50% + .7rem);top:.9rem}.nav-bar>li.disabled:before,.nav-bar>li.ui-state-disabled:before{bottom:0;content:'';left:0;position:absolute;right:0;top:0;z-index:1}.nav-bar>li.active~li:after,.nav-bar>li.ui-state-active~li:after{display:none}.nav-bar>li.active~li a:after,.nav-bar>li.ui-state-active~li a:after{background-color:transparent;border-color:transparent;color:#a6a6a6}.nav-bar>li.active a,.nav-bar>li.ui-state-active a{color:#000}.nav-bar>li.active a:hover,.nav-bar>li.ui-state-active a:hover{cursor:default}.nav-bar>li.active a:after,.nav-bar>li.ui-state-active a:after{background-color:#fff;content:''}.nav-bar a{color:#514943;display:block;font-size:1.2rem;font-weight:600;line-height:1.2;overflow:hidden;padding:3rem .5em 0;position:relative;text-align:center;text-overflow:ellipsis}.nav-bar a:hover{text-decoration:none}.nav-bar a:after{background-color:#514943;border:.4rem solid #514943;border-radius:100%;color:#fff;content:counter(i);counter-increment:i;height:1.5rem;left:50%;line-height:.6;margin-left:-.8rem;position:absolute;right:auto;text-align:center;top:.4rem;width:1.5rem}.nav-bar a:before{background-color:#d6d6d6;border:1px solid transparent;border-bottom-color:#d9d9d9;border-radius:100%;border-top-color:#bfbfbf;content:'';height:2.3rem;left:50%;line-height:1;margin-left:-1.2rem;position:absolute;top:0;width:2.3rem}.tooltip{display:block;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.19rem;font-weight:400;line-height:1.4;opacity:0;position:absolute;visibility:visible;z-index:10}.tooltip.in{opacity:.9}.tooltip.top{margin-top:-4px;padding:8px 0}.tooltip.right{margin-left:4px;padding:0 8px}.tooltip.bottom{margin-top:4px;padding:8px 0}.tooltip.left{margin-left:-4px;padding:0 8px}.tooltip p:last-child{margin-bottom:0}.tooltip-inner{background-color:#fff;border:1px solid #adadad;border-radius:0;box-shadow:1px 1px 1px #ccc;color:#41362f;max-width:20rem;padding:.5em 1em;text-decoration:none}.tooltip-arrow,.tooltip-arrow:after{border:solid transparent;height:0;position:absolute;width:0}.tooltip-arrow:after{content:'';position:absolute}.tooltip.top .tooltip-arrow,.tooltip.top .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:50%;margin-left:-8px}.tooltip.top-left .tooltip-arrow,.tooltip.top-left .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;margin-bottom:-8px;right:8px}.tooltip.top-right .tooltip-arrow,.tooltip.top-right .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:8px;margin-bottom:-8px}.tooltip.right .tooltip-arrow,.tooltip.right .tooltip-arrow:after{border-right-color:#949494;border-width:8px 8px 8px 0;left:1px;margin-top:-8px;top:50%}.tooltip.right .tooltip-arrow:after{border-right-color:#fff;border-width:6px 7px 6px 0;margin-left:0;margin-top:-6px}.tooltip.left .tooltip-arrow,.tooltip.left .tooltip-arrow:after{border-left-color:#949494;border-width:8px 0 8px 8px;margin-top:-8px;right:0;top:50%}.tooltip.bottom .tooltip-arrow,.tooltip.bottom .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:50%;margin-left:-8px;top:0}.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;margin-top:-8px;right:8px;top:0}.tooltip.bottom-right .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:8px;margin-top:-8px;top:0}.password-strength{display:block;margin:0 -.3rem 1em;white-space:nowrap}.password-strength.password-strength-too-short .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child+.password-strength-item{background-color:#e22626}.password-strength.password-strength-fair .password-strength-item:first-child,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item+.password-strength-item{background-color:#ef672f}.password-strength.password-strength-good .password-strength-item:first-child,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item+.password-strength-item,.password-strength.password-strength-strong .password-strength-item{background-color:#79a22e}.password-strength .password-strength-item{background-color:#ccc;display:inline-block;font-size:0;height:1.4rem;margin-right:.3rem;width:calc(20% - .6rem)}@-webkit-keyframes progress-bar-stripes{from{background-position:4rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:4rem 0}to{background-position:0 0}}.progress{background-color:#fafafa;border:1px solid #ccc;clear:left;height:3rem;margin-bottom:3rem;overflow:hidden}.progress-bar{background-color:#79a22e;color:#fff;float:left;font-size:1.19rem;height:100%;line-height:3rem;text-align:center;transition:width .6s ease;width:0}.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-text-description{margin-bottom:1.6rem}.progress-bar-text-progress{text-align:right}.page-columns .page-inner-sidebar{margin:0 0 3rem}.page-header{margin-bottom:2.7rem;padding-bottom:2.9rem;position:relative}.page-header:before{border-bottom:1px solid #e3e3e3;bottom:0;content:'';display:block;height:1px;left:3rem;position:absolute;right:3rem}.container .page-header:before{content:normal}.page-header .message{margin-bottom:1.8rem}.page-header .message+.message{margin-top:-1.5rem}.page-header .admin__action-dropdown,.page-header .search-global-input{transition:none}.container .page-header{margin-bottom:0}.page-title-wrapper{margin-top:1.1rem}.container .page-title-wrapper{background:url(../../pub/images/logo.svg) no-repeat;min-height:41px;padding:4px 0 0 45px}.admin__menu .level-0:first-child>a{margin-top:1.6rem}.admin__menu .level-0:first-child>a:after{top:-1.6rem}.admin__menu .level-0:first-child._active>a:after{display:block}.admin__menu .level-0>a{padding-top:1.3rem;padding-bottom:1.3rem}.admin__menu .level-0>a:before{margin-bottom:.7rem}.admin__menu .item-home>a:before{content:'\e611';font-size:2.3rem;padding-top:-.1rem}.admin__menu .item-component>a:before{content:'\e612'}.admin__menu .item-upgrade>a:before{content:'\e614'}.admin__menu .item-system-config>a:before{content:'\e610'}.admin__menu .item-tools>a:before{content:'\e613'}.modal-sub-title{font-size:1.7rem;font-weight:600}.modal-connect-signin .modal-inner-wrap{max-width:80rem}@-webkit-keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@-webkit-keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}@keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}.ngdialog{-webkit-overflow-scrolling:touch;bottom:0;box-sizing:border-box;left:0;overflow:auto;position:fixed;right:0;top:0;z-index:999}.ngdialog *,.ngdialog:after,.ngdialog:before{box-sizing:inherit}.ngdialog.ngdialog-disabled-animation *{-webkit-animation:none!important;animation:none!important}.ngdialog.ngdialog-closing .ngdialog-content,.ngdialog.ngdialog-closing .ngdialog-overlay{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadeout .5s;animation:ngdialog-fadeout .5s}.ngdialog-overlay{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadein .5s;animation:ngdialog-fadein .5s;background:rgba(0,0,0,.4);bottom:0;left:0;position:fixed;right:0;top:0}.ngdialog-content{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadein .5s;animation:ngdialog-fadein .5s}body.ngdialog-open{overflow:hidden}.component-indicator{border-radius:50%;cursor:help;display:inline-block;height:20px;text-align:center;width:20px}.component-indicator::after,.component-indicator::before{background:#fff;display:block;opacity:0;position:absolute;transition:opacity .2s linear .1s;visibility:hidden}.component-indicator::before{border-radius:1px;border:1px solid #adadad;box-shadow:0 0 2px rgba(0,0,0,.4);content:attr(data-label);font-size:1.2rem;margin:34px 0 0 -10px;min-width:50px;padding:4px 5px}.component-indicator::after{border:1px solid #999;border-width:1px 0 0 1px;box-shadow:-1px -1px 1px rgba(0,0,0,.1);content:'';height:10px;margin:9px 0 0 5px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:10px}.component-indicator:hover::after,.component-indicator:hover::before{opacity:1;transition:opacity .2s linear;visibility:visible}.component-indicator span{display:block;height:20px;overflow:hidden;width:20px}.component-indicator span:before{content:'';display:block;font-family:Icons;font-size:20px;height:100%;line-height:20px;width:100%}.component-indicator._on{background:#79a22e}.component-indicator._off{background:#e22626}.component-indicator._off span:before{background:#fff;height:4px;margin:8px auto 20px;width:12px}.component-indicator._info{background:0 0}.component-indicator._info span{width:21px}.component-indicator._info span:before{color:#008bdb;content:'\e61a';font-family:Icons;font-size:21px}.app-updater .nav{display:block;margin-bottom:3.1rem;margin-top:-2.8rem}.app-updater .nav-bar-outer-actions{margin-top:1rem;padding-right:0}.app-updater .nav-bar-outer-actions .btn-wrap-cancel{margin-right:2.6rem}.main{padding-bottom:2rem;padding-top:3rem}.menu-wrapper .logo-static{pointer-events:none}.header{display:none}.header .logo{float:left;height:4.1rem;width:3.5rem}.header-title{font-size:2.8rem;letter-spacing:.02em;line-height:1.4;margin:2.5rem 0 3.5rem 5rem}.page-title{margin-bottom:1rem}.page-sub-title{font-size:2rem}.accent-box{margin-bottom:2rem}.accent-box .btn-prime{margin-top:1.5rem}.spinner.side{float:left;font-size:2.4rem;margin-left:2rem;margin-top:-5px}.page-landing{margin:7.6% auto 0;max-width:44rem;text-align:center}.page-landing .logo{height:5.6rem;margin-bottom:2rem;width:19.2rem}.page-landing .text-version{margin-bottom:3rem}.page-landing .text-welcome{margin-bottom:6.5rem}.page-landing .text-terms{margin-bottom:2.5rem;text-align:center}.page-landing .btn-submit,.page-license .license-text{margin-bottom:2rem}.page-license .page-license-footer{text-align:right}.readiness-check-item{margin-bottom:4rem;min-height:2.5rem}.readiness-check-item .spinner{font-size:2.5rem;float:left;margin:-.4rem 0 0 1.7rem}.readiness-check-title{font-size:1.4rem;font-weight:700;margin-bottom:.1rem;margin-left:5.7rem}.readiness-check-content{margin-left:5.7rem;margin-right:22rem}.readiness-check-content .readiness-check-title{margin-left:0}.readiness-check-content .list{margin-top:-.3rem}.readiness-check-side{float:right;padding-left:2.4rem;width:22rem}.readiness-check-side .side-title{margin-bottom:0}.readiness-check-icon{float:left;margin-left:1.7rem;margin-top:.3rem}.page-web-configuration .form-el-insider-wrap{width:auto}.page-web-configuration .form-el-insider{width:15.4rem}.page-web-configuration .form-el-insider-input .form-el-input{width:16.5rem}.customize-your-store .customize-your-store-default .legend{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.customize-your-store .advanced-modules-count,.customize-your-store .advanced-modules-select{padding-left:1.5rem}.customize-your-store .customize-your-store-advanced{min-width:0}.customize-your-store .message-error:before{margin-top:0;top:1.8rem}.customize-your-store .message-error a{color:#333;text-decoration:underline}.customize-your-store .message-error .form-label:before{background:#fff}.customize-your-store .customize-database-clean p{margin-top:2.5rem}.content-install{margin-bottom:2rem}.console{border:1px solid #ccc;font-family:'Courier New',Courier,monospace;font-weight:300;height:20rem;margin:1rem 0 2rem;overflow-y:auto;padding:1.5rem 2rem 2rem;resize:vertical}.console .text-danger{color:#e22626}.console .text-success{color:#090}.console .hidden{display:none}.content-success .btn-prime{margin-top:1.5rem}.jumbo-title{font-size:3.6rem}.jumbo-title .jumbo-icon{font-size:3.8rem;margin-right:.25em;position:relative;top:.15em}.install-database-clean{margin-top:4rem}.install-database-clean .btn{margin-right:1rem}.page-sub-title{margin-bottom:2.1rem;margin-top:3rem}.multiselect-custom{max-width:71.1rem}.content-install{margin-top:3.7rem}.home-page-inner-wrap{margin:0 auto;max-width:91rem}.setup-home-title{margin-bottom:3.9rem;padding-top:1.8rem;text-align:center}.setup-home-item{background-color:#fafafa;border:1px solid #ccc;color:#333;display:block;margin-bottom:2rem;margin-left:1.3rem;margin-right:1.3rem;min-height:30rem;padding:2rem;text-align:center}.setup-home-item:hover{border-color:#8c8c8c;color:#333;text-decoration:none;transition:border-color .1s linear}.setup-home-item:active{-webkit-transform:scale(0.99);-ms-transform:scale(0.99);transform:scale(0.99)}.setup-home-item:before{display:block;font-size:7rem;margin-bottom:3.3rem;margin-top:4rem}.setup-home-item-component:before{content:'\e612'}.setup-home-item-upgrade:before{content:'\e614'}.setup-home-item-configuration:before{content:'\e610'}.setup-home-item-title{display:block;font-size:1.8rem;letter-spacing:.025em;margin-bottom:1rem}.setup-home-item-description{display:block}.componenet-manager-wrap{border:1px solid #bbb;margin:0 0 4rem}.componenet-manager-wrap .componenet-manager-account{font-size:1.4rem;float:right;padding:.6rem 0 0}.componenet-manager-wrap .componenet-manager-account .sign-in-out{margin-left:2rem}.component-manager-title{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;color:#41362f;font-size:2rem;line-height:1.2;padding:2rem}.component-manager-content{padding:2.5rem 2rem 2rem}.componenet-manager-items{list-style:none;margin:0;text-align:center}.componenet-manager-items .btn{border:1px solid #adadad}.componenet-manager-items .item-title{margin:0 0 1.5rem}.componenet-manager-items .item-number{font-size:6rem;line-height:.8;margin:0 0 1.5rem}.componenet-manager-items .item-date{margin:0 0 3.7rem}.componenet-manager-items .item-install{margin:0 0 2rem}.componenet-manager-items .item-install .btn{line-height:1.36;margin:0;padding:0;color:#008bdb;text-decoration:none;background:0 0;border:0;display:inline;font-size:1.4rem;font-weight:400}.componenet-manager-items .item-install .btn:visited{color:#008bdb;text-decoration:none}.componenet-manager-items .item-install .btn:hover{text-decoration:underline}.componenet-manager-items .item-install .btn:active{color:#ff5501;text-decoration:underline}.componenet-manager-items .item-install .btn:hover{color:#0fa7ff}.componenet-manager-items .item-install .btn:active,.componenet-manager-items .item-install .btn:focus,.componenet-manager-items .item-install .btn:hover{background:0 0;border:0}.componenet-manager-items .item-install .btn.disabled,.componenet-manager-items .item-install .btn[disabled],fieldset[disabled] .componenet-manager-items .item-install .btn{color:#008bdb;opacity:.5;cursor:default;pointer-events:none;text-decoration:underline}.componenet-manager-items .item-install .btn.disabled{text-decoration:none}.sync-login-wrap{margin:-2.5rem 0 0;padding:0 10% 4rem}.sync-login-wrap .legend{font-size:2.6rem;color:#eb5202;float:left;font-weight:300;line-height:1.2;margin:-1rem 0 2.5rem;position:static;width:100%}.sync-login-wrap .legend._hidden{display:none}.sync-login-wrap .login-header{font-size:3.4rem;font-weight:300;margin:0 0 2rem}.sync-login-wrap .login-header span{display:inline-block;padding:.9rem 0 0;vertical-align:top}.sync-login-wrap .form-row .form-label{display:inline-block}.sync-login-wrap .form-row .form-label.required{padding-left:1.5rem}.sync-login-wrap .form-row .form-label.required:after{left:0;position:absolute;right:auto}.sync-login-wrap .form-row{max-width:28rem}.sync-login-wrap .form-actions{display:table;margin-top:-1.3rem}.sync-login-wrap .form-actions .links{display:table-header-group}.sync-login-wrap .form-actions .actions{padding:3rem 0 0}@media all and (max-width:1047px){.admin__menu .submenu li{min-width:19.8rem}.nav{padding-bottom:5.38rem;padding-left:1.5rem;text-align:center}.nav-bar{display:inline-block;float:none;margin-right:0;vertical-align:top}.nav .btn-group,.nav-bar-outer-actions{display:inline-block;float:none;margin-top:-8.48rem;text-align:center;vertical-align:top;width:100%}.nav-bar-outer-actions{padding-right:0}.nav-bar-outer-actions .outer-actions-inner-wrap{display:inline-block}.app-updater .nav{padding-bottom:1.7rem}.app-updater .nav-bar-outer-actions{margin-top:2rem}}@media all and (min-width:768px){.page-layout-admin-2columns-left .page-columns{margin-left:-30px}.page-layout-admin-2columns-left .page-columns:after{clear:both;content:'';display:table}.page-layout-admin-2columns-left .page-columns .main-col{width:calc((100%) * .75 - 30px);float:right}.page-layout-admin-2columns-left .page-columns .side-col{width:calc((100%) * .25 - 30px);float:left;margin-left:30px}.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9{float:left}.col-m-12{width:100%}.col-m-11{width:91.66666667%}.col-m-10{width:83.33333333%}.col-m-9{width:75%}.col-m-8{width:66.66666667%}.col-m-7{width:58.33333333%}.col-m-6{width:50%}.col-m-5{width:41.66666667%}.col-m-4{width:33.33333333%}.col-m-3{width:25%}.col-m-2{width:16.66666667%}.col-m-1{width:8.33333333%}.col-m-pull-12{right:100%}.col-m-pull-11{right:91.66666667%}.col-m-pull-10{right:83.33333333%}.col-m-pull-9{right:75%}.col-m-pull-8{right:66.66666667%}.col-m-pull-7{right:58.33333333%}.col-m-pull-6{right:50%}.col-m-pull-5{right:41.66666667%}.col-m-pull-4{right:33.33333333%}.col-m-pull-3{right:25%}.col-m-pull-2{right:16.66666667%}.col-m-pull-1{right:8.33333333%}.col-m-pull-0{right:auto}.col-m-push-12{left:100%}.col-m-push-11{left:91.66666667%}.col-m-push-10{left:83.33333333%}.col-m-push-9{left:75%}.col-m-push-8{left:66.66666667%}.col-m-push-7{left:58.33333333%}.col-m-push-6{left:50%}.col-m-push-5{left:41.66666667%}.col-m-push-4{left:33.33333333%}.col-m-push-3{left:25%}.col-m-push-2{left:16.66666667%}.col-m-push-1{left:8.33333333%}.col-m-push-0{left:auto}.col-m-offset-12{margin-left:100%}.col-m-offset-11{margin-left:91.66666667%}.col-m-offset-10{margin-left:83.33333333%}.col-m-offset-9{margin-left:75%}.col-m-offset-8{margin-left:66.66666667%}.col-m-offset-7{margin-left:58.33333333%}.col-m-offset-6{margin-left:50%}.col-m-offset-5{margin-left:41.66666667%}.col-m-offset-4{margin-left:33.33333333%}.col-m-offset-3{margin-left:25%}.col-m-offset-2{margin-left:16.66666667%}.col-m-offset-1{margin-left:8.33333333%}.col-m-offset-0{margin-left:0}.page-columns{margin-left:-30px}.page-columns:after{clear:both;content:'';display:table}.page-columns .page-inner-content{width:calc((100%) * .75 - 30px);float:right}.page-columns .page-inner-sidebar{width:calc((100%) * .25 - 30px);float:left;margin-left:30px}}@media all and (min-width:1048px){.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9{float:left}.col-l-12{width:100%}.col-l-11{width:91.66666667%}.col-l-10{width:83.33333333%}.col-l-9{width:75%}.col-l-8{width:66.66666667%}.col-l-7{width:58.33333333%}.col-l-6{width:50%}.col-l-5{width:41.66666667%}.col-l-4{width:33.33333333%}.col-l-3{width:25%}.col-l-2{width:16.66666667%}.col-l-1{width:8.33333333%}.col-l-pull-12{right:100%}.col-l-pull-11{right:91.66666667%}.col-l-pull-10{right:83.33333333%}.col-l-pull-9{right:75%}.col-l-pull-8{right:66.66666667%}.col-l-pull-7{right:58.33333333%}.col-l-pull-6{right:50%}.col-l-pull-5{right:41.66666667%}.col-l-pull-4{right:33.33333333%}.col-l-pull-3{right:25%}.col-l-pull-2{right:16.66666667%}.col-l-pull-1{right:8.33333333%}.col-l-pull-0{right:auto}.col-l-push-12{left:100%}.col-l-push-11{left:91.66666667%}.col-l-push-10{left:83.33333333%}.col-l-push-9{left:75%}.col-l-push-8{left:66.66666667%}.col-l-push-7{left:58.33333333%}.col-l-push-6{left:50%}.col-l-push-5{left:41.66666667%}.col-l-push-4{left:33.33333333%}.col-l-push-3{left:25%}.col-l-push-2{left:16.66666667%}.col-l-push-1{left:8.33333333%}.col-l-push-0{left:auto}.col-l-offset-12{margin-left:100%}.col-l-offset-11{margin-left:91.66666667%}.col-l-offset-10{margin-left:83.33333333%}.col-l-offset-9{margin-left:75%}.col-l-offset-8{margin-left:66.66666667%}.col-l-offset-7{margin-left:58.33333333%}.col-l-offset-6{margin-left:50%}.col-l-offset-5{margin-left:41.66666667%}.col-l-offset-4{margin-left:33.33333333%}.col-l-offset-3{margin-left:25%}.col-l-offset-2{margin-left:16.66666667%}.col-l-offset-1{margin-left:8.33333333%}.col-l-offset-0{margin-left:0}}@media all and (min-width:1440px){.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9{float:left}.col-xl-12{width:100%}.col-xl-11{width:91.66666667%}.col-xl-10{width:83.33333333%}.col-xl-9{width:75%}.col-xl-8{width:66.66666667%}.col-xl-7{width:58.33333333%}.col-xl-6{width:50%}.col-xl-5{width:41.66666667%}.col-xl-4{width:33.33333333%}.col-xl-3{width:25%}.col-xl-2{width:16.66666667%}.col-xl-1{width:8.33333333%}.col-xl-pull-12{right:100%}.col-xl-pull-11{right:91.66666667%}.col-xl-pull-10{right:83.33333333%}.col-xl-pull-9{right:75%}.col-xl-pull-8{right:66.66666667%}.col-xl-pull-7{right:58.33333333%}.col-xl-pull-6{right:50%}.col-xl-pull-5{right:41.66666667%}.col-xl-pull-4{right:33.33333333%}.col-xl-pull-3{right:25%}.col-xl-pull-2{right:16.66666667%}.col-xl-pull-1{right:8.33333333%}.col-xl-pull-0{right:auto}.col-xl-push-12{left:100%}.col-xl-push-11{left:91.66666667%}.col-xl-push-10{left:83.33333333%}.col-xl-push-9{left:75%}.col-xl-push-8{left:66.66666667%}.col-xl-push-7{left:58.33333333%}.col-xl-push-6{left:50%}.col-xl-push-5{left:41.66666667%}.col-xl-push-4{left:33.33333333%}.col-xl-push-3{left:25%}.col-xl-push-2{left:16.66666667%}.col-xl-push-1{left:8.33333333%}.col-xl-push-0{left:auto}.col-xl-offset-12{margin-left:100%}.col-xl-offset-11{margin-left:91.66666667%}.col-xl-offset-10{margin-left:83.33333333%}.col-xl-offset-9{margin-left:75%}.col-xl-offset-8{margin-left:66.66666667%}.col-xl-offset-7{margin-left:58.33333333%}.col-xl-offset-6{margin-left:50%}.col-xl-offset-5{margin-left:41.66666667%}.col-xl-offset-4{margin-left:33.33333333%}.col-xl-offset-3{margin-left:25%}.col-xl-offset-2{margin-left:16.66666667%}.col-xl-offset-1{margin-left:8.33333333%}.col-xl-offset-0{margin-left:0}}@media all and (max-width:767px){.list-definition>dt{float:none}.list-definition>dd{margin-left:0}.form-row .form-label{text-align:left}.form-row .form-label.required:after{position:static}.nav{padding-bottom:0;padding-left:0;padding-right:0}.nav-bar-outer-actions{margin-top:0}.nav-bar{display:block;margin-bottom:0;margin-left:auto;margin-right:auto;width:30.9rem}.nav-bar:before{display:none}.nav-bar>li{float:left;min-height:9rem}.nav-bar>li:after{display:none}.nav-bar>li:nth-child(4n){clear:both}.nav-bar a{line-height:1.4}.tooltip{display:none!important}.readiness-check-content{margin-right:2rem}.form-el-insider,.form-el-insider-wrap,.page-web-configuration .form-el-insider-input,.page-web-configuration .form-el-insider-input .form-el-input{display:block;width:100%}}@media all and (max-width:479px){.nav-bar{width:23.175rem}.nav-bar>li{width:7.725rem}.nav .btn-group .btn-wrap-try-again,.nav-bar-outer-actions .btn-wrap-try-again{clear:both;display:block;float:none;margin-left:auto;margin-right:auto;margin-top:1rem;padding-top:1rem}}
\ No newline at end of file
diff --git a/setup/view/magento/setup/select-version.phtml b/setup/view/magento/setup/select-version.phtml
index b1a8367978e..eb981f49151 100644
--- a/setup/view/magento/setup/select-version.phtml
+++ b/setup/view/magento/setup/select-version.phtml
@@ -186,14 +186,15 @@
                 <tbody>
             <tr ng-repeat="component in displayComponents | limitTo:rowLimit">
                     <td class="data-grid-indicator-cell">
-                        <div class="onoffswitch">
+                        <div class="actions-switch">
                             <input type="checkbox" name="{{component.checkboxId}}"
-                                   class="onoffswitch-checkbox" id="{{component.checkboxId}}"
+                                   class="actions-switch-checkbox" id="{{component.checkboxId}}"
                                    ng-click="AddRemoveComponentOnSliderMove(component)"
                                    ng-checked="isSelected(component.name)">
-                            <label class="onoffswitch-label" for="{{component.checkboxId}}">
-                                <span class="onoffswitch-inner"></span>
-                                <span class="onoffswitch-switch"></span>
+                            <label class="actions-switch-label" for="{{component.checkboxId}}">
+                                <span class="actions-switch-inner"></span>
+                                <span class="actions-switch-indicator"></span>
+                                <span class="actions-switch-text" data-label-yes="Yes" data-label-no="No"></span>
                             </label>
                         </div>
                     </td>
-- 
GitLab


From 68b427e74ebfe31af82c0e042fe4a9369bf40afe Mon Sep 17 00:00:00 2001
From: Michail Slabko <mslabko@ebay.com>
Date: Tue, 13 Oct 2015 17:13:23 +0300
Subject: [PATCH 026/370] MAGETWO-42486: [GITHUB] Adding product configurations
 shows wrong currency #1737

---
 .../Block/Adminhtml/Product/Steps/Bulk.php                | 8 --------
 .../catalog/product/edit/attribute/steps/bulk.phtml       | 1 -
 .../templates/catalog/product/edit/super/matrix.phtml     | 5 +++--
 .../view/adminhtml/web/js/variations/steps/bulk.js        | 2 +-
 .../view/adminhtml/web/js/variations/steps/summary.js     | 2 +-
 .../view/adminhtml/web/js/variations/variations.js        | 8 ++++++++
 6 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Steps/Bulk.php b/app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Steps/Bulk.php
index 69960ac40a6..d440b7347b6 100644
--- a/app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Steps/Bulk.php
+++ b/app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Steps/Bulk.php
@@ -39,12 +39,4 @@ class Bulk extends \Magento\Ui\Block\Component\StepsWizard\StepAbstract
     {
         return $this->image->getDefaultPlaceholderUrl('thumbnail');
     }
-
-    /**
-     * @return string
-     */
-    public function getCurrencySymbol()
-    {
-        return $this->_storeManager->getStore()->getCurrentCurrency()->getCurrencySymbol();
-    }
 }
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/attribute/steps/bulk.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/attribute/steps/bulk.phtml
index 9c58b7a7fb6..4a02eae8088 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/attribute/steps/bulk.phtml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/attribute/steps/bulk.phtml
@@ -671,7 +671,6 @@
                     "component": "Magento_ConfigurableProduct/js/variations/steps/bulk",
                     "appendTo": "<?= /* @escapeNotVerified */  $block->getParentComponentName()?>",
                     "noImage": "<?= /* @escapeNotVerified */  $block->getNoImageUrl() ?>",
-                    "currencySymbol": "<?= /* @escapeNotVerified */  $block->getCurrencySymbol() ?>",
                     "variationsComponent": "configurableVariations"
                 }
             }
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/super/matrix.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/super/matrix.phtml
index e962963ccac..a56ee49266f 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/super/matrix.phtml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/super/matrix.phtml
@@ -144,7 +144,7 @@ $currencySymbol = $block->getCurrencySymbol();
                                 </td>
                                 <td class="col-price" data-column="price">
                                     <!-- ko ifnot: variation.editable -->
-                                        <!-- ko text: '<?= /* @noEscape */ $currencySymbol?>' + variation.price --><!--/ko-->
+                                        <!-- ko text: $parent.getCurrencySymbol() + variation.price --><!--/ko-->
                                     <!-- /ko -->
                                     <!-- ko if: variation.editable -->
                                         <div class="addon">
@@ -156,7 +156,7 @@ $currencySymbol = $block->getCurrencySymbol();
                                                      value: variation.price}"/>
                                             <label class="addafter"
                                                    data-bind="attr: {for: $parent.getRowId(variation, 'price')">
-                                                <strong>$</strong>
+                                                <strong data-bind="text: $parent.getCurrencySymbol()"></strong>
                                             </label>
                                         </div>
                                     <!-- /ko -->
@@ -255,6 +255,7 @@ $currencySymbol = $block->getCurrencySymbol();
                         "variations": <?= /* @noEscape */ $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($productMatrix) ?>,
                         "productAttributes": <?= /* @noEscape */ $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($attributes) ?>,
                         "productUrl": "<?= /* @noEscape */ $block->getUrl('catalog/product/edit', ['id' => '%id%']) ?>",
+                        "currencySymbol": "<?= /* @noEscape */ $currencySymbol ?>",
                         "configurableProductGrid": "configurableProductGrid"
                     }
                 }
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js
index 435a7ace214..20151bb4aef 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js
@@ -54,7 +54,7 @@ define([
                     type: ko.observable('none'),
                     value: ko.observable(),
                     attribute: ko.observable(),
-                    currencySymbol: this.currencySymbol
+                    currencySymbol: this.variationsComponent().getCurrencySymbol()
                 },
                 quantity: {
                     label: 'quantity',
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/summary.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/summary.js
index 9a0d4b2dab0..0a1088393c0 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/summary.js
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/summary.js
@@ -129,7 +129,7 @@ define([
             _.each(variation.options, function (option) {
                 row.push(option.label);
             });
-            row.push('$ ' + variation.price);
+            row.push(this.variationsComponent().getCurrencySymbol() +  ' ' + variation.price);
 
             return row;
         },
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js
index 43c040facf5..dbe6fdb3c46 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js
@@ -365,6 +365,14 @@ define([
                     .addClass('disabled-configurable-elements')
                     .prop('disabled', true);
             });
+        },
+
+        /**
+         * Get currency symbol
+         * @returns {*}
+         */
+        getCurrencySymbol: function () {
+            return this.currencySymbol;
         }
     });
 });
-- 
GitLab


From 9dd412dbccd06abcecf03d5294f34e52b2f6f390 Mon Sep 17 00:00:00 2001
From: Ivan Gavryshko <igavryshko@ebay.com>
Date: Tue, 13 Oct 2015 09:38:03 -0500
Subject: [PATCH 027/370] MAGETWO-43906: Long database prefix length breaks
 setup

- changes according to CR
---
 .../Setup/Test/Unit/Validator/DbValidatorTest.php      |  2 +-
 setup/src/Magento/Setup/Validator/DbValidator.php      | 10 ++++++++--
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/setup/src/Magento/Setup/Test/Unit/Validator/DbValidatorTest.php b/setup/src/Magento/Setup/Test/Unit/Validator/DbValidatorTest.php
index 3822e9fd2ea..60de1e4f236 100644
--- a/setup/src/Magento/Setup/Test/Unit/Validator/DbValidatorTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Validator/DbValidatorTest.php
@@ -89,7 +89,7 @@ class DbValidatorTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage Table prefix length can't be more then
+     * @expectedExceptionMessage Table prefix length can't be more than
      */
     public function testCheckDatabaseTablePrefixWrongLength()
     {
diff --git a/setup/src/Magento/Setup/Validator/DbValidator.php b/setup/src/Magento/Setup/Validator/DbValidator.php
index d74c5e60863..645710fde9e 100644
--- a/setup/src/Magento/Setup/Validator/DbValidator.php
+++ b/setup/src/Magento/Setup/Validator/DbValidator.php
@@ -16,6 +16,9 @@ use Magento\Setup\Module\ConnectionFactory;
 class DbValidator
 {
 
+    /**
+     * Db prefix max length
+     */
     const DB_PREFIX_LENGTH = 10;
 
     /**
@@ -47,12 +50,15 @@ class DbValidator
         //The table prefix should contain only letters (a-z), numbers (0-9) or underscores (_);
         // the first character should be a letter.
         if ($prefix !== '' && !preg_match('/^([a-zA-Z])([[:alnum:]_]+)$/', $prefix)) {
-            throw new \InvalidArgumentException('Please correct the table prefix format.');
+            throw new \InvalidArgumentException(
+                'Please correct the table prefix format, should contain only numbers, letters or underscores.'
+                .' The first character should be a letter.'
+            );
         }
 
         if (strlen($prefix) > self::DB_PREFIX_LENGTH) {
             throw new \InvalidArgumentException(
-                'Table prefix length can\'t be more then ' . self::DB_PREFIX_LENGTH . ' characters.'
+                'Table prefix length can\'t be more than ' . self::DB_PREFIX_LENGTH . ' characters.'
             );
         }
 
-- 
GitLab


From c6034ce9dfdcddac9d31e0cf97cad9fecf2506c2 Mon Sep 17 00:00:00 2001
From: Ivan Gavryshko <igavryshko@ebay.com>
Date: Tue, 13 Oct 2015 11:00:28 -0500
Subject: [PATCH 028/370] MAGETWO-43906: Long database prefix length breaks
 setup

- modified max lenght for db prefix
---
 setup/src/Magento/Setup/Validator/DbValidator.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/setup/src/Magento/Setup/Validator/DbValidator.php b/setup/src/Magento/Setup/Validator/DbValidator.php
index 645710fde9e..be90f6eadef 100644
--- a/setup/src/Magento/Setup/Validator/DbValidator.php
+++ b/setup/src/Magento/Setup/Validator/DbValidator.php
@@ -19,7 +19,7 @@ class DbValidator
     /**
      * Db prefix max length
      */
-    const DB_PREFIX_LENGTH = 10;
+    const DB_PREFIX_LENGTH = 5;
 
     /**
      * DB connection factory
-- 
GitLab


From 6510322da93d5e1673d69b3cb79281b227230cfd Mon Sep 17 00:00:00 2001
From: Dubovyk Oleksandr <odubovyk@ebay.com>
Date: Tue, 13 Oct 2015 19:59:21 +0300
Subject: [PATCH 029/370] MAGETWO-38963: Storefront "Layered Navigation" menu
 items' titles are overlapped by "Expand" button

- Removed overlapping
---
 .../luma/Magento_LayeredNavigation/web/css/source/_module.less | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/app/design/frontend/Magento/luma/Magento_LayeredNavigation/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_LayeredNavigation/web/css/source/_module.less
index 898ddc99afd..dfdb366f731 100644
--- a/app/design/frontend/Magento/luma/Magento_LayeredNavigation/web/css/source/_module.less
+++ b/app/design/frontend/Magento/luma/Magento_LayeredNavigation/web/css/source/_module.less
@@ -102,10 +102,11 @@
             font-weight: @font-weight__semibold;
             margin: 0;
             overflow: hidden;
-            padding: @indent__s 20px+@indent__s 0 @indent__s;
+            padding: @indent__s 30px+@indent__s 0 @indent__s;
             position: relative;
             z-index: 1;
             text-transform: uppercase;
+            word-break: break-all;
 
             .lib-icon-font(
                 @_icon-font-content: @icon-down,
-- 
GitLab


From 797556ac477b63bbc0369df9cfd0b525881a7341 Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Tue, 13 Oct 2015 13:08:19 -0500
Subject: [PATCH 030/370] MAGETWO-43857: [github] cache types don't properly
 invalidate all the time #1844

---
 .../Backup/Model/Config/Backend/Cron.php      |  7 +-
 .../Config/Backend/Countrycreditcard.php      |  4 +-
 .../Catalog/Model/Config/Backend/Category.php |  6 +-
 .../Model/Config/CatalogClone/Media/Image.php |  4 +-
 .../Category/Flat/System/Config/Mode.php      |  6 +-
 .../Product/Flat/System/Config/Mode.php       |  6 +-
 .../Price/System/Config/PriceScope.php        |  8 ++-
 .../Backend/Catalog/Url/Rewrite/Suffix.php    |  8 ++-
 .../Model/Config/Backend/AbstractValue.php    |  4 +-
 .../Model/Config/Backend/Backorders.php       |  2 +-
 .../Model/Config/Backend/Managestock.php      |  2 +-
 .../System/Config/Backend/Minsaleqty.php      |  4 +-
 .../System/Config/Backend/Engine.php          |  4 +-
 .../Model/Config/Backend/Admin/Custom.php     |  6 +-
 .../Model/Config/Backend/Admin/Robots.php     |  4 +-
 .../Model/Config/Backend/Admin/Usecustom.php  |  6 +-
 .../Config/Backend/Admin/Usesecretkey.php     |  6 +-
 .../Config/Model/Config/Backend/Baseurl.php   |  7 +-
 .../Backend/Currency/AbstractCurrency.php     | 33 +--------
 .../Model/Config/Backend/Currency/Allow.php   |  8 +--
 .../Model/Config/Backend/Currency/Base.php    |  8 +--
 .../Model/Config/Backend/Currency/Cron.php    |  7 +-
 .../Backend/Currency/DefaultCurrency.php      |  2 +-
 .../Config/Model/Config/Backend/Encrypted.php |  4 +-
 .../Config/Model/Config/Backend/File.php      |  5 +-
 .../Model/Config/Backend/Image/Adapter.php    |  4 +-
 .../Config/Model/Config/Backend/Locale.php    |  6 +-
 .../Config/Model/Config/Backend/Log/Cron.php  |  7 +-
 .../Config/Model/Config/Backend/Secure.php    |  7 +-
 .../Model/Config/Backend/Serialized.php       |  3 +-
 .../Backend/Serialized/ArraySerialized.php    |  4 +-
 .../Config/Model/Config/Backend/Store.php     |  7 +-
 .../Config/Model/Config/Backend/Translate.php | 67 ++-----------------
 .../Unit/Model/Config/Backend/BaseurlTest.php | 30 +++------
 .../Unit/Model/Config/Backend/SecureTest.php  | 30 +++------
 .../Model/System/Config/Backend/LinksTest.php | 10 +--
 .../Cookie/Model/Config/Backend/Domain.php    |  4 +-
 .../Cookie/Model/Config/Backend/Lifetime.php  |  7 +-
 .../Cookie/Model/Config/Backend/Path.php      |  4 +-
 .../Model/Config/Backend/Product/Alert.php    | 10 ++-
 .../Cron/Model/Config/Backend/Sitemap.php     |  7 +-
 .../Model/Config/Backend/Address/Street.php   |  6 +-
 .../DisableAutoGroupAssignDefault.php         |  4 +-
 .../Model/Config/Backend/Show/Customer.php    |  4 +-
 .../Magento/Customer/Model/Config/Share.php   |  4 +-
 .../Model/Config/Backend/AllowedIps.php       |  4 +-
 .../Config/Backend/AbstractConversion.php     |  4 +-
 .../Config/Backend/Storage/Media/Database.php |  6 +-
 .../Model/Config/Backend/Tablerate.php        |  7 +-
 .../Model/System/Config/Backend/Cert.php      |  6 +-
 .../Model/System/Config/Backend/Cron.php      |  4 +-
 .../System/Config/Backend/MerchantCountry.php |  4 +-
 .../Rss/Model/System/Config/Backend/Links.php | 32 +--------
 .../Magento/Tax/Model/Config/Notification.php |  8 ++-
 .../Magento/Tax/Model/Config/TaxClass.php     | 10 +--
 .../Theme/Model/Design/Backend/Exceptions.php |  4 +-
 .../Theme/Model/Design/Backend/Theme.php      | 37 +++++++++-
 .../Model/Design/Backend/ExceptionsTest.php   | 56 ++++------------
 .../Unit/Model/Design/Backend/ThemeTest.php   | 56 ++++------------
 app/code/Magento/Theme/etc/config.xml         |  5 ++
 .../Magento/Framework/App/Config/Value.php    | 24 +++++++
 61 files changed, 312 insertions(+), 341 deletions(-)

diff --git a/app/code/Magento/Backup/Model/Config/Backend/Cron.php b/app/code/Magento/Backup/Model/Config/Backend/Cron.php
index e4204f26879..ed8ae69bbf0 100644
--- a/app/code/Magento/Backup/Model/Config/Backend/Cron.php
+++ b/app/code/Magento/Backup/Model/Config/Backend/Cron.php
@@ -32,6 +32,7 @@ class Cron extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -42,6 +43,7 @@ class Cron extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\App\Config\ValueFactory $configValueFactory,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
@@ -50,13 +52,13 @@ class Cron extends \Magento\Framework\App\Config\Value
     ) {
         $this->_runModelPath = $runModelPath;
         $this->_configValueFactory = $configValueFactory;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
      * Cron settings after save
      *
-     * @return void
+     * @return $this
      * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function afterSave()
@@ -102,5 +104,6 @@ class Cron extends \Magento\Framework\App\Config\Value
         } catch (\Exception $e) {
             throw new \Magento\Framework\Exception\LocalizedException(__('We can\'t save the Cron expression.'));
         }
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/Braintree/Model/System/Config/Backend/Countrycreditcard.php b/app/code/Magento/Braintree/Model/System/Config/Backend/Countrycreditcard.php
index 17291f11bc9..f88ad1f405d 100644
--- a/app/code/Magento/Braintree/Model/System/Config/Backend/Countrycreditcard.php
+++ b/app/code/Magento/Braintree/Model/System/Config/Backend/Countrycreditcard.php
@@ -16,6 +16,7 @@ class Countrycreditcard extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\Math\Random $mathRandom
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -25,13 +26,14 @@ class Countrycreditcard extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\Math\Random $mathRandom,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->mathRandom = $mathRandom;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Model/Config/Backend/Category.php b/app/code/Magento/Catalog/Model/Config/Backend/Category.php
index 31baf9603a0..70e2937bc4e 100644
--- a/app/code/Magento/Catalog/Model/Config/Backend/Category.php
+++ b/app/code/Magento/Catalog/Model/Config/Backend/Category.php
@@ -25,6 +25,7 @@ class Category extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Catalog\Model\Category $catalogCategory
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -34,13 +35,14 @@ class Category extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Catalog\Model\Category $catalogCategory,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->_catalogCategory = $catalogCategory;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
@@ -67,6 +69,6 @@ class Category extends \Magento\Framework\App\Config\Value
                 $this->_catalogCategory->setStoreId($storeId)->save();
             }
         }
-        return $this;
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/Catalog/Model/Config/CatalogClone/Media/Image.php b/app/code/Magento/Catalog/Model/Config/CatalogClone/Media/Image.php
index 2fd92365d14..3df22c0bfa5 100644
--- a/app/code/Magento/Catalog/Model/Config/CatalogClone/Media/Image.php
+++ b/app/code/Magento/Catalog/Model/Config/CatalogClone/Media/Image.php
@@ -30,6 +30,7 @@ class Image extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeCollectionFactory
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
@@ -40,6 +41,7 @@ class Image extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeCollectionFactory,
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
@@ -48,7 +50,7 @@ class Image extends \Magento\Framework\App\Config\Value
     ) {
         $this->_attributeCollectionFactory = $attributeCollectionFactory;
         $this->_eavConfig = $eavConfig;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/System/Config/Mode.php b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/System/Config/Mode.php
index 3d6eb24ce7d..d3d499d7d8f 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/System/Config/Mode.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/System/Config/Mode.php
@@ -20,6 +20,7 @@ class Mode extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
      * @param \Magento\Indexer\Model\Indexer\State $indexerState
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
@@ -30,13 +31,14 @@ class Mode extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
         \Magento\Indexer\Model\Indexer\State $indexerState,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
         $this->indexerRegistry = $indexerRegistry;
         $this->indexerState = $indexerState;
     }
@@ -49,7 +51,7 @@ class Mode extends \Magento\Framework\App\Config\Value
     public function afterSave()
     {
         $this->_getResource()->addCommitCallback([$this, 'processValue']);
-        return $this;
+        return parent::afterSave();
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/System/Config/Mode.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/System/Config/Mode.php
index e35b88dc0e7..977ed6ed73f 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/System/Config/Mode.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/System/Config/Mode.php
@@ -24,6 +24,7 @@ class Mode extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Catalog\Model\Indexer\Product\Flat\Processor $productFlatIndexerProcessor
      * @param \Magento\Indexer\Model\Indexer\State $indexerState
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
@@ -34,6 +35,7 @@ class Mode extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Catalog\Model\Indexer\Product\Flat\Processor $productFlatIndexerProcessor,
         \Magento\Indexer\Model\Indexer\State $indexerState,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
@@ -42,7 +44,7 @@ class Mode extends \Magento\Framework\App\Config\Value
     ) {
         $this->_productFlatIndexerProcessor = $productFlatIndexerProcessor;
         $this->indexerState = $indexerState;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
@@ -53,7 +55,7 @@ class Mode extends \Magento\Framework\App\Config\Value
     public function afterSave()
     {
         $this->_getResource()->addCommitCallback([$this, 'processValue']);
-        return $this;
+        return parent::afterSave();
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Price/System/Config/PriceScope.php b/app/code/Magento/Catalog/Model/Indexer/Product/Price/System/Config/PriceScope.php
index f66ac598d46..c19ee05a358 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Price/System/Config/PriceScope.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Price/System/Config/PriceScope.php
@@ -17,6 +17,7 @@ class PriceScope extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -26,24 +27,25 @@ class PriceScope extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
         $this->indexerRegistry = $indexerRegistry;
     }
 
     /**
      * Set after commit callback
      *
-     * @return \Magento\Catalog\Model\Indexer\Product\Price\System\Config\PriceScope
+     * @return $this
      */
     public function afterSave()
     {
         $this->_getResource()->addCommitCallback([$this, 'processValue']);
-        return $this;
+        return parent::afterSave();
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Model/System/Config/Backend/Catalog/Url/Rewrite/Suffix.php b/app/code/Magento/Catalog/Model/System/Config/Backend/Catalog/Url/Rewrite/Suffix.php
index 42ddbde393f..b4ea3dd8c5b 100644
--- a/app/code/Magento/Catalog/Model/System/Config/Backend/Catalog/Url/Rewrite/Suffix.php
+++ b/app/code/Magento/Catalog/Model/System/Config/Backend/Catalog/Url/Rewrite/Suffix.php
@@ -39,12 +39,13 @@ class Suffix extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
-     * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\UrlRewrite\Helper\UrlRewrite $urlRewriteHelper
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\App\ResourceConnection $appResource
      * @param \Magento\UrlRewrite\Model\UrlFinderInterface $urlFinder
+     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
+     * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
@@ -52,6 +53,7 @@ class Suffix extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\UrlRewrite\Helper\UrlRewrite $urlRewriteHelper,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\App\ResourceConnection $appResource,
@@ -60,7 +62,7 @@ class Suffix extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
         $this->urlRewriteHelper = $urlRewriteHelper;
         $this->connection = $appResource->getConnection();
         $this->urlFinder = $urlFinder;
diff --git a/app/code/Magento/CatalogInventory/Model/Config/Backend/AbstractValue.php b/app/code/Magento/CatalogInventory/Model/Config/Backend/AbstractValue.php
index 58c52b89377..ffe4998c15a 100644
--- a/app/code/Magento/CatalogInventory/Model/Config/Backend/AbstractValue.php
+++ b/app/code/Magento/CatalogInventory/Model/Config/Backend/AbstractValue.php
@@ -25,6 +25,7 @@ abstract class AbstractValue extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\CatalogInventory\Api\StockIndexInterface $stockIndex
      * @param \Magento\CatalogInventory\Model\Indexer\Stock\Processor $stockIndexerProcessor
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
@@ -35,6 +36,7 @@ abstract class AbstractValue extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\CatalogInventory\Api\StockIndexInterface $stockIndex,
         \Magento\CatalogInventory\Model\Indexer\Stock\Processor $stockIndexerProcessor,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
@@ -43,6 +45,6 @@ abstract class AbstractValue extends \Magento\Framework\App\Config\Value
     ) {
         $this->_stockIndexerProcessor = $stockIndexerProcessor;
         $this->stockIndex = $stockIndex;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 }
diff --git a/app/code/Magento/CatalogInventory/Model/Config/Backend/Backorders.php b/app/code/Magento/CatalogInventory/Model/Config/Backend/Backorders.php
index d5a890c3d54..383a8b911d8 100644
--- a/app/code/Magento/CatalogInventory/Model/Config/Backend/Backorders.php
+++ b/app/code/Magento/CatalogInventory/Model/Config/Backend/Backorders.php
@@ -28,6 +28,6 @@ class Backorders extends AbstractValue
             $this->stockIndex->rebuild();
             $this->_stockIndexerProcessor->markIndexerAsInvalid();
         }
-        return $this;
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/CatalogInventory/Model/Config/Backend/Managestock.php b/app/code/Magento/CatalogInventory/Model/Config/Backend/Managestock.php
index 4b377112acc..efbc166208a 100644
--- a/app/code/Magento/CatalogInventory/Model/Config/Backend/Managestock.php
+++ b/app/code/Magento/CatalogInventory/Model/Config/Backend/Managestock.php
@@ -23,6 +23,6 @@ class Managestock extends AbstractValue
             $this->stockIndex->rebuild();
             $this->_stockIndexerProcessor->markIndexerAsInvalid();
         }
-        return $this;
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/CatalogInventory/Model/System/Config/Backend/Minsaleqty.php b/app/code/Magento/CatalogInventory/Model/System/Config/Backend/Minsaleqty.php
index ea89069d8c5..19a6877e505 100644
--- a/app/code/Magento/CatalogInventory/Model/System/Config/Backend/Minsaleqty.php
+++ b/app/code/Magento/CatalogInventory/Model/System/Config/Backend/Minsaleqty.php
@@ -21,6 +21,7 @@ class Minsaleqty extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\CatalogInventory\Helper\Minsaleqty $catalogInventoryMinsaleqty
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -30,13 +31,14 @@ class Minsaleqty extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\CatalogInventory\Helper\Minsaleqty $catalogInventoryMinsaleqty,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->_catalogInventoryMinsaleqty = $catalogInventoryMinsaleqty;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
diff --git a/app/code/Magento/CatalogSearch/Model/Adminhtml/System/Config/Backend/Engine.php b/app/code/Magento/CatalogSearch/Model/Adminhtml/System/Config/Backend/Engine.php
index cf56ff5dc49..831a0ee8040 100644
--- a/app/code/Magento/CatalogSearch/Model/Adminhtml/System/Config/Backend/Engine.php
+++ b/app/code/Magento/CatalogSearch/Model/Adminhtml/System/Config/Backend/Engine.php
@@ -17,6 +17,7 @@ class Engine extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -26,13 +27,14 @@ class Engine extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->indexerRegistry = $indexerRegistry;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
diff --git a/app/code/Magento/Config/Model/Config/Backend/Admin/Custom.php b/app/code/Magento/Config/Model/Config/Backend/Admin/Custom.php
index 21ce20f6174..59bb6074d69 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Admin/Custom.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Admin/Custom.php
@@ -58,6 +58,7 @@ class Custom extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\App\Config\Storage\WriterInterface $configWriter
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -67,13 +68,14 @@ class Custom extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\App\Config\Storage\WriterInterface $configWriter,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->_configWriter = $configWriter;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
@@ -122,6 +124,6 @@ class Custom extends \Magento\Framework\App\Config\Value
             );
         }
 
-        return $this;
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/Config/Model/Config/Backend/Admin/Robots.php b/app/code/Magento/Config/Model/Config/Backend/Admin/Robots.php
index 0fe5834b863..31df36606c6 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Admin/Robots.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Admin/Robots.php
@@ -27,6 +27,7 @@ class Robots extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -36,12 +37,13 @@ class Robots extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
         $this->_directory = $filesystem->getDirectoryWrite(DirectoryList::ROOT);
         $this->_file = 'robots.txt';
     }
diff --git a/app/code/Magento/Config/Model/Config/Backend/Admin/Usecustom.php b/app/code/Magento/Config/Model/Config/Backend/Admin/Usecustom.php
index 2b2de392e7d..6b7a585dd35 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Admin/Usecustom.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Admin/Usecustom.php
@@ -22,6 +22,7 @@ class Usecustom extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\App\Config\Storage\WriterInterface $configWriter
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -31,13 +32,14 @@ class Usecustom extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\App\Config\Storage\WriterInterface $configWriter,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->_configWriter = $configWriter;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
@@ -81,6 +83,6 @@ class Usecustom extends \Magento\Framework\App\Config\Value
             );
         }
 
-        return $this;
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/Config/Model/Config/Backend/Admin/Usesecretkey.php b/app/code/Magento/Config/Model/Config/Backend/Admin/Usesecretkey.php
index 49298cb9288..283cfc3eb63 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Admin/Usesecretkey.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Admin/Usesecretkey.php
@@ -20,6 +20,7 @@ class Usesecretkey extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Backend\Model\UrlInterface $backendUrl
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -29,13 +30,14 @@ class Usesecretkey extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Backend\Model\UrlInterface $backendUrl,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->_backendUrl = $backendUrl;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
@@ -44,6 +46,6 @@ class Usesecretkey extends \Magento\Framework\App\Config\Value
     public function afterSave()
     {
         $this->_backendUrl->renewSecretUrls();
-        return $this;
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/Config/Model/Config/Backend/Baseurl.php b/app/code/Magento/Config/Model/Config/Backend/Baseurl.php
index 9f9db6d0a99..b066e0669d9 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Baseurl.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Baseurl.php
@@ -16,6 +16,7 @@ class Baseurl extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\View\Asset\MergeService $mergeService
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -25,13 +26,14 @@ class Baseurl extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\View\Asset\MergeService $mergeService,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->_mergeService = $mergeService;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
@@ -198,7 +200,7 @@ class Baseurl extends \Magento\Framework\App\Config\Value
     /**
      * Clean compiled JS/CSS when updating url configuration settings
      *
-     * @return void
+     * @return $this
      */
     public function afterSave()
     {
@@ -212,5 +214,6 @@ class Baseurl extends \Magento\Framework\App\Config\Value
                     break;
             }
         }
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/Config/Model/Config/Backend/Currency/AbstractCurrency.php b/app/code/Magento/Config/Model/Config/Backend/Currency/AbstractCurrency.php
index 02ffa58b6b2..42c589c06a9 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Currency/AbstractCurrency.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Currency/AbstractCurrency.php
@@ -15,37 +15,6 @@ namespace Magento\Config\Model\Config\Backend\Currency;
 
 abstract class AbstractCurrency extends \Magento\Framework\App\Config\Value
 {
-    /**
-     * Core store config
-     *
-     * @var \Magento\Framework\App\Config\ScopeConfigInterface
-     */
-    protected $_scopeConfig;
-
-    /**
-     * Constructor
-     *
-     * @param \Magento\Framework\Model\Context $context
-     * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
-     * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
-     * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
-     * @param array $data
-     */
-    public function __construct(
-        \Magento\Framework\Model\Context $context,
-        \Magento\Framework\Registry $registry,
-        \Magento\Framework\App\Config\ScopeConfigInterface $config,
-        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
-        \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
-        array $data = []
-    ) {
-        $this->_scopeConfig = $scopeConfig;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
-    }
-
     /**
      * Retrieve allowed currencies for current scope
      *
@@ -75,7 +44,7 @@ abstract class AbstractCurrency extends \Magento\Framework\App\Config\Value
     {
         return explode(
             ',',
-            $this->_scopeConfig->getValue(
+            $this->_config->getValue(
                 'system/currency/installed',
                 \Magento\Store\Model\ScopeInterface::SCOPE_STORE
             )
diff --git a/app/code/Magento/Config/Model/Config/Backend/Currency/Allow.php b/app/code/Magento/Config/Model/Config/Backend/Currency/Allow.php
index f38db8cc6dd..fecb0710472 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Currency/Allow.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Currency/Allow.php
@@ -21,7 +21,7 @@ class Allow extends AbstractCurrency
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
-     * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\Locale\CurrencyInterface $localeCurrency
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -31,14 +31,14 @@ class Allow extends AbstractCurrency
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
-        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\Locale\CurrencyInterface $localeCurrency,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->_localeCurrency = $localeCurrency;
-        parent::__construct($context, $registry, $config, $scopeConfig, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resourceCollection, $resource, $data);
     }
 
     /**
@@ -71,6 +71,6 @@ class Allow extends AbstractCurrency
             throw new \Magento\Framework\Exception\LocalizedException(__(join("\n", $exceptions)));
         }
 
-        return $this;
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/Config/Model/Config/Backend/Currency/Base.php b/app/code/Magento/Config/Model/Config/Backend/Currency/Base.php
index 8b000db0117..fe32b71564f 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Currency/Base.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Currency/Base.php
@@ -19,7 +19,7 @@ class Base extends AbstractCurrency
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
-     * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -29,13 +29,13 @@ class Base extends AbstractCurrency
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
-        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Directory\Model\CurrencyFactory $currencyFactory,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
-        parent::__construct($context, $registry, $config, $scopeConfig, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resourceCollection, $resource, $data);
         $this->currencyFactory = $currencyFactory;
     }
 
@@ -55,6 +55,6 @@ class Base extends AbstractCurrency
         }
 
         $this->currencyFactory->create()->saveRates([$value =>[$value => 1]]);
-        return $this;
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/Config/Model/Config/Backend/Currency/Cron.php b/app/code/Magento/Config/Model/Config/Backend/Currency/Cron.php
index 2575a80ec73..273a8accec1 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Currency/Cron.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Currency/Cron.php
@@ -21,6 +21,7 @@ class Cron extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -30,17 +31,18 @@ class Cron extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\App\Config\ValueFactory $configValueFactory,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->_configValueFactory = $configValueFactory;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
-     * @return void
+     * @return $this
      * @throws \Exception
      */
     public function afterSave()
@@ -69,5 +71,6 @@ class Cron extends \Magento\Framework\App\Config\Value
         } catch (\Exception $e) {
             throw new \Exception(__('We can\'t save the Cron expression.'));
         }
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/Config/Model/Config/Backend/Currency/DefaultCurrency.php b/app/code/Magento/Config/Model/Config/Backend/Currency/DefaultCurrency.php
index 35e8e5688ca..a086a674570 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Currency/DefaultCurrency.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Currency/DefaultCurrency.php
@@ -33,6 +33,6 @@ class DefaultCurrency extends AbstractCurrency
             );
         }
 
-        return $this;
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/Config/Model/Config/Backend/Encrypted.php b/app/code/Magento/Config/Model/Config/Backend/Encrypted.php
index 51a78e6f188..d12edd3ffdb 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Encrypted.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Encrypted.php
@@ -22,6 +22,7 @@ class Encrypted extends \Magento\Framework\App\Config\Value implements
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -31,13 +32,14 @@ class Encrypted extends \Magento\Framework\App\Config\Value implements
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\Encryption\EncryptorInterface $encryptor,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->_encryptor = $encryptor;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
diff --git a/app/code/Magento/Config/Model/Config/Backend/File.php b/app/code/Magento/Config/Model/Config/Backend/File.php
index 1b03ae15671..9496bc6ab3a 100644
--- a/app/code/Magento/Config/Model/Config/Backend/File.php
+++ b/app/code/Magento/Config/Model/Config/Backend/File.php
@@ -13,6 +13,7 @@ use Magento\Framework\Filesystem;
  * System config file field backend model
  *
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ * @SuppressWarnings(PHPMD.ExcessiveParameterList)
  */
 class File extends \Magento\Framework\App\Config\Value
 {
@@ -47,6 +48,7 @@ class File extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\MediaStorage\Model\File\UploaderFactory $uploaderFactory
      * @param \Magento\Config\Model\Config\Backend\File\RequestData\RequestDataInterface $requestData
      * @param Filesystem $filesystem
@@ -58,6 +60,7 @@ class File extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\MediaStorage\Model\File\UploaderFactory $uploaderFactory,
         \Magento\Config\Model\Config\Backend\File\RequestData\RequestDataInterface $requestData,
         Filesystem $filesystem,
@@ -69,7 +72,7 @@ class File extends \Magento\Framework\App\Config\Value
         $this->_requestData = $requestData;
         $this->_filesystem = $filesystem;
         $this->_mediaDirectory = $filesystem->getDirectoryWrite(DirectoryList::MEDIA);
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
diff --git a/app/code/Magento/Config/Model/Config/Backend/Image/Adapter.php b/app/code/Magento/Config/Model/Config/Backend/Image/Adapter.php
index 486df64d2fc..a1f1fc2f8e9 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Image/Adapter.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Image/Adapter.php
@@ -22,6 +22,7 @@ class Adapter extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\Image\AdapterFactory $imageFactory
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -31,12 +32,13 @@ class Adapter extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\Image\AdapterFactory $imageFactory,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
         $this->_imageFactory = $imageFactory;
     }
 
diff --git a/app/code/Magento/Config/Model/Config/Backend/Locale.php b/app/code/Magento/Config/Model/Config/Backend/Locale.php
index 6c7fca6df42..bed8303d776 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Locale.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Locale.php
@@ -37,6 +37,7 @@ class Locale extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Config\Model\ResourceModel\Config\Data\CollectionFactory $configsFactory
      * @param \Magento\Store\Model\WebsiteFactory $websiteFactory
      * @param \Magento\Store\Model\StoreFactory $storeFactory
@@ -51,6 +52,7 @@ class Locale extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Config\Model\ResourceModel\Config\Data\CollectionFactory $configsFactory,
         \Magento\Store\Model\WebsiteFactory $websiteFactory,
         \Magento\Store\Model\StoreFactory $storeFactory,
@@ -63,7 +65,7 @@ class Locale extends \Magento\Framework\App\Config\Value
         $this->_websiteFactory = $websiteFactory;
         $this->_storeFactory = $storeFactory;
         $this->_localeCurrency = $localeCurrency;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
@@ -120,6 +122,6 @@ class Locale extends \Magento\Framework\App\Config\Value
             throw new \Magento\Framework\Exception\LocalizedException(__(join("\n", $exceptions)));
         }
 
-        return $this;
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/Config/Model/Config/Backend/Log/Cron.php b/app/code/Magento/Config/Model/Config/Backend/Log/Cron.php
index 83ae49a6cf7..01eebb5ce2b 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Log/Cron.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Log/Cron.php
@@ -29,6 +29,7 @@ class Cron extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -39,6 +40,7 @@ class Cron extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\App\Config\ValueFactory $configValueFactory,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
@@ -47,13 +49,13 @@ class Cron extends \Magento\Framework\App\Config\Value
     ) {
         $this->_configValueFactory = $configValueFactory;
         $this->_runModelPath = $runModelPath;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
      * Cron settings after save
      *
-     * @return void
+     * @return $this
      * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function afterSave()
@@ -91,5 +93,6 @@ class Cron extends \Magento\Framework\App\Config\Value
         } catch (\Exception $e) {
             throw new \Magento\Framework\Exception\LocalizedException(__('We can\'t save the Cron expression.'));
         }
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/Config/Model/Config/Backend/Secure.php b/app/code/Magento/Config/Model/Config/Backend/Secure.php
index 7eab9b7846f..25ccf26b560 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Secure.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Secure.php
@@ -15,6 +15,7 @@ class Secure extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\View\Asset\MergeService $mergeService
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -24,24 +25,26 @@ class Secure extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\View\Asset\MergeService $mergeService,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->_mergeService = $mergeService;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
      * Clean compiled JS/CSS when updating configuration settings
      *
-     * @return void
+     * @return $this
      */
     public function afterSave()
     {
         if ($this->isValueChanged()) {
             $this->_mergeService->cleanMergedJsCss();
         }
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/Config/Model/Config/Backend/Serialized.php b/app/code/Magento/Config/Model/Config/Backend/Serialized.php
index 28353119f97..08cb7030742 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Serialized.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Serialized.php
@@ -19,12 +19,13 @@ class Serialized extends \Magento\Framework\App\Config\Value
     }
 
     /**
-     * @return void
+     * @return $this
      */
     public function beforeSave()
     {
         if (is_array($this->getValue())) {
             $this->setValue(serialize($this->getValue()));
         }
+        return parent::beforeSave();
     }
 }
diff --git a/app/code/Magento/Config/Model/Config/Backend/Serialized/ArraySerialized.php b/app/code/Magento/Config/Model/Config/Backend/Serialized/ArraySerialized.php
index cdfd0653ec7..2a012697da3 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Serialized/ArraySerialized.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Serialized/ArraySerialized.php
@@ -15,7 +15,7 @@ class ArraySerialized extends \Magento\Config\Model\Config\Backend\Serialized
     /**
      * Unset array element with '__empty' key
      *
-     * @return void
+     * @return $this
      */
     public function beforeSave()
     {
@@ -24,6 +24,6 @@ class ArraySerialized extends \Magento\Config\Model\Config\Backend\Serialized
             unset($value['__empty']);
         }
         $this->setValue($value);
-        parent::beforeSave();
+        return parent::beforeSave();
     }
 }
diff --git a/app/code/Magento/Config/Model/Config/Backend/Store.php b/app/code/Magento/Config/Model/Config/Backend/Store.php
index 85c10c62a18..bf34f2aa09d 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Store.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Store.php
@@ -20,6 +20,7 @@ class Store extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\App\Config\MutableScopeConfigInterface $mutableConfig
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -29,17 +30,18 @@ class Store extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\App\Config\MutableScopeConfigInterface $mutableConfig,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
         $this->_mutableConfig = $mutableConfig;
     }
 
     /**
-     * @return void
+     * @return $this
      */
     public function afterSave()
     {
@@ -49,5 +51,6 @@ class Store extends \Magento\Framework\App\Config\Value
             \Magento\Store\Model\ScopeInterface::SCOPE_STORE
         );
         $this->_cacheManager->clean();
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/Config/Model/Config/Backend/Translate.php b/app/code/Magento/Config/Model/Config/Backend/Translate.php
index e91a44e91ae..665a7e68e1a 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Translate.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Translate.php
@@ -3,77 +3,24 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
+namespace Magento\Rss\Model\System\Config\Backend;
 
 /**
- * System config translate inline fields backend model
+ * Cache cleaner backend model
+ *
  */
-namespace Magento\Config\Model\Config\Backend;
-
-class Translate extends \Magento\Framework\App\Config\Value
+class Links extends \Magento\Framework\App\Config\Value
 {
     /**
-     * @var \Magento\Framework\App\Cache\TypeListInterface
-     */
-    protected $_cacheTypeList;
-
-    /**
-     * Path to config node with list of caches
-     *
-     * @var string
-     */
-    const XML_PATH_INVALID_CACHES = 'dev/translate_inline/invalid_caches';
-
-    /**
-     * Core store config
-     *
-     * @var \Magento\Framework\App\Config\ScopeConfigInterface
-     */
-    protected $_scopeConfig;
-
-    /**
-     * Constructor
-     *
-     * @param \Magento\Framework\Model\Context $context
-     * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
-     * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
-     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
-     * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
-     * @param array $data
-     */
-    public function __construct(
-        \Magento\Framework\Model\Context $context,
-        \Magento\Framework\Registry $registry,
-        \Magento\Framework\App\Config\ScopeConfigInterface $config,
-        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
-        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
-        \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
-        array $data = []
-    ) {
-        $this->_scopeConfig = $scopeConfig;
-        $this->_cacheTypeList = $cacheTypeList;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
-    }
-
-    /**
-     * Set status 'invalidate' for blocks and other output caches
+     * Invalidate cache type, when value was changed
      *
      * @return $this
      */
     public function afterSave()
     {
-        $types = array_keys(
-            $this->_scopeConfig->getValue(
-                self::XML_PATH_INVALID_CACHES,
-                \Magento\Store\Model\ScopeInterface::SCOPE_STORE
-            )
-        );
         if ($this->isValueChanged()) {
-            $this->_cacheTypeList->invalidate($types);
+            $this->cacheTypeList->invalidate(\Magento\Framework\View\Element\AbstractBlock::CACHE_GROUP);
         }
-
-        return $this;
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Backend/BaseurlTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Backend/BaseurlTest.php
index 38b195ac336..8f9d418356e 100644
--- a/app/code/Magento/Config/Test/Unit/Model/Config/Backend/BaseurlTest.php
+++ b/app/code/Magento/Config/Test/Unit/Model/Config/Backend/BaseurlTest.php
@@ -5,6 +5,7 @@
  */
 namespace Magento\Config\Test\Unit\Model\Config\Backend;
 
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 use Magento\Store\Model\StoreManagerInterface;
 use Magento\Store\Model\Store;
 
@@ -12,25 +13,8 @@ class BaseurlTest extends \PHPUnit_Framework_TestCase
 {
     public function testSaveMergedJsCssMustBeCleaned()
     {
-        $eventDispatcher = $this->getMock('Magento\Framework\Event\ManagerInterface', [], [], '', false);
-        $appState = $this->getMock('Magento\Framework\App\State', [], [], '', false);
-        $cacheManager = $this->getMock('Magento\Framework\App\CacheInterface');
-        $logger = $this->getMock('Psr\Log\LoggerInterface');
-        $actionValidatorMock = $this->getMock(
-            'Magento\Framework\Model\ActionValidator\RemoveAction',
-            [],
-            [],
-            '',
-            false
-        );
 
-        $context = new \Magento\Framework\Model\Context(
-            $logger,
-            $eventDispatcher,
-            $cacheManager,
-            $appState,
-            $actionValidatorMock
-        );
+        $context = (new ObjectManager($this))->getObject('Magento\Framework\Model\Context');
 
         $resource = $this->getMock('Magento\Config\Model\ResourceModel\Config\Data', [], [], '', false);
         $resource->expects($this->any())->method('addCommitCallback')->will($this->returnValue($resource));
@@ -40,12 +24,18 @@ class BaseurlTest extends \PHPUnit_Framework_TestCase
         $mergeService = $this->getMock('Magento\Framework\View\Asset\MergeService', [], [], '', false);
         $coreRegistry = $this->getMock('Magento\Framework\Registry', [], [], '', false);
         $coreConfig = $this->getMock('Magento\Framework\App\Config\ScopeConfigInterface');
-
+        $cacheTypeListMock = $this->getMockBuilder('Magento\Framework\App\Cache\TypeListInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
         $model = $this->getMock(
             'Magento\Config\Model\Config\Backend\Baseurl',
             ['getOldValue'],
-            [$context, $coreRegistry, $coreConfig, $mergeService, $resource, $resourceCollection]
+            [$context, $coreRegistry, $coreConfig, $cacheTypeListMock, $mergeService, $resource, $resourceCollection]
         );
+        $cacheTypeListMock->expects($this->once())
+            ->method('invalidate')
+            ->with(\Magento\Framework\App\Cache\Type\Config::TYPE_IDENTIFIER)
+            ->willReturn($model);
         $mergeService->expects($this->once())->method('cleanMergedJsCss');
 
         $model->setValue('http://example.com/')->setPath(Store::XML_PATH_UNSECURE_BASE_URL);
diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Backend/SecureTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Backend/SecureTest.php
index 25280b8967d..16bd95fa825 100644
--- a/app/code/Magento/Config/Test/Unit/Model/Config/Backend/SecureTest.php
+++ b/app/code/Magento/Config/Test/Unit/Model/Config/Backend/SecureTest.php
@@ -5,28 +5,13 @@
  */
 namespace Magento\Config\Test\Unit\Model\Config\Backend;
 
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+
 class SecureTest extends \PHPUnit_Framework_TestCase
 {
     public function testSaveMergedJsCssMustBeCleaned()
     {
-        $eventDispatcher = $this->getMock('Magento\Framework\Event\ManagerInterface', [], [], '', false);
-        $appState = $this->getMock('Magento\Framework\App\State', [], [], '', false);
-        $cacheManager = $this->getMock('Magento\Framework\App\CacheInterface');
-        $logger = $this->getMock('Psr\Log\LoggerInterface');
-        $actionValidatorMock = $this->getMock(
-            '\Magento\Framework\Model\ActionValidator\RemoveAction',
-            [],
-            [],
-            '',
-            false
-        );
-        $context = new \Magento\Framework\Model\Context(
-            $logger,
-            $eventDispatcher,
-            $cacheManager,
-            $appState,
-            $actionValidatorMock
-        );
+        $context = (new ObjectManager($this))->getObject('Magento\Framework\Model\Context');
 
         $resource = $this->getMock('Magento\Config\Model\ResourceModel\Config\Data', [], [], '', false);
         $resource->expects($this->any())->method('addCommitCallback')->will($this->returnValue($resource));
@@ -36,12 +21,19 @@ class SecureTest extends \PHPUnit_Framework_TestCase
         $mergeService = $this->getMock('Magento\Framework\View\Asset\MergeService', [], [], '', false);
         $coreRegistry = $this->getMock('Magento\Framework\Registry', [], [], '', false);
         $coreConfig = $this->getMock('Magento\Framework\App\Config\ScopeConfigInterface');
+        $cacheTypeListMock = $this->getMockBuilder('Magento\Framework\App\Cache\TypeListInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
 
         $model = $this->getMock(
             'Magento\Config\Model\Config\Backend\Secure',
             ['getOldValue'],
-            [$context, $coreRegistry, $coreConfig, $mergeService, $resource, $resourceCollection]
+            [$context, $coreRegistry, $coreConfig, $cacheTypeListMock, $mergeService, $resource, $resourceCollection]
         );
+        $cacheTypeListMock->expects($this->once())
+            ->method('invalidate')
+            ->with(\Magento\Framework\App\Cache\Type\Config::TYPE_IDENTIFIER)
+            ->willReturn($model);
         $mergeService->expects($this->once())->method('cleanMergedJsCss');
 
         $model->setValue('new_value');
diff --git a/app/code/Magento/Contact/Test/Unit/Model/System/Config/Backend/LinksTest.php b/app/code/Magento/Contact/Test/Unit/Model/System/Config/Backend/LinksTest.php
index 5a2c469bf10..4ed7d555234 100644
--- a/app/code/Magento/Contact/Test/Unit/Model/System/Config/Backend/LinksTest.php
+++ b/app/code/Magento/Contact/Test/Unit/Model/System/Config/Backend/LinksTest.php
@@ -5,6 +5,8 @@
  */
 namespace Magento\Contact\Test\Unit\Model\System\Config\Backend;
 
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+
 class LinksTest extends \PHPUnit_Framework_TestCase
 {
     /**
@@ -14,13 +16,7 @@ class LinksTest extends \PHPUnit_Framework_TestCase
 
     public function setUp()
     {
-        $this->_model = new \Magento\Contact\Model\System\Config\Backend\Links(
-            $this->getMock('\Magento\Framework\Model\Context', [], [], '', false),
-            $this->getMock('\Magento\Framework\Registry', [], [], '', false),
-            $this->getMockForAbstractClass('\Magento\Framework\App\Config\ScopeConfigInterface', [], '', false),
-            $this->getMockForAbstractClass('\Magento\Framework\Model\ModelResource\AbstractResource', [], '', false),
-            $this->getMock('\Magento\Framework\Data\Collection\AbstractDb', [], [], '', false)
-        );
+        $this->_model = (new ObjectManager($this))->getObject('Magento\Contact\Model\System\Config\Backend\Links');
     }
 
     public function testGetIdentities()
diff --git a/app/code/Magento/Cookie/Model/Config/Backend/Domain.php b/app/code/Magento/Cookie/Model/Config/Backend/Domain.php
index 0d8fb666c75..d656941e6da 100644
--- a/app/code/Magento/Cookie/Model/Config/Backend/Domain.php
+++ b/app/code/Magento/Cookie/Model/Config/Backend/Domain.php
@@ -17,6 +17,7 @@ class Domain extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\Session\Config\Validator\CookieDomainValidator $configValidator
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -27,13 +28,14 @@ class Domain extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\Session\Config\Validator\CookieDomainValidator $configValidator,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->configValidator = $configValidator;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
diff --git a/app/code/Magento/Cookie/Model/Config/Backend/Lifetime.php b/app/code/Magento/Cookie/Model/Config/Backend/Lifetime.php
index 3170aadb8f5..b5b5a4d3ec3 100644
--- a/app/code/Magento/Cookie/Model/Config/Backend/Lifetime.php
+++ b/app/code/Magento/Cookie/Model/Config/Backend/Lifetime.php
@@ -17,6 +17,7 @@ class Lifetime extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\Session\Config\Validator\CookieLifetimeValidator $configValidator
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -27,19 +28,20 @@ class Lifetime extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\Session\Config\Validator\CookieLifetimeValidator $configValidator,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->configValidator = $configValidator;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
      * Validate a domain name value
      *
-     * @return void
+     * @return $this
      * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function beforeSave()
@@ -50,5 +52,6 @@ class Lifetime extends \Magento\Framework\App\Config\Value
             $msg = __('Invalid cookie lifetime: ' . join('; ', $this->configValidator->getMessages()));
             throw new \Magento\Framework\Exception\LocalizedException($msg);
         }
+        return parent::beforeSave();
     }
 }
diff --git a/app/code/Magento/Cookie/Model/Config/Backend/Path.php b/app/code/Magento/Cookie/Model/Config/Backend/Path.php
index 7130085fbd8..bc2661e4657 100644
--- a/app/code/Magento/Cookie/Model/Config/Backend/Path.php
+++ b/app/code/Magento/Cookie/Model/Config/Backend/Path.php
@@ -17,6 +17,7 @@ class Path extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\Session\Config\Validator\CookiePathValidator $configValidator
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -27,13 +28,14 @@ class Path extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\Session\Config\Validator\CookiePathValidator $configValidator,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->configValidator = $configValidator;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
diff --git a/app/code/Magento/Cron/Model/Config/Backend/Product/Alert.php b/app/code/Magento/Cron/Model/Config/Backend/Product/Alert.php
index 7427d72f392..fc1989ef261 100644
--- a/app/code/Magento/Cron/Model/Config/Backend/Product/Alert.php
+++ b/app/code/Magento/Cron/Model/Config/Backend/Product/Alert.php
@@ -37,6 +37,7 @@ class Alert extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -47,6 +48,7 @@ class Alert extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\App\Config\ValueFactory $configValueFactory,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
@@ -55,11 +57,13 @@ class Alert extends \Magento\Framework\App\Config\Value
     ) {
         $this->_runModelPath = $runModelPath;
         $this->_configValueFactory = $configValueFactory;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
-     * @return void
+     * {@inheritdoc}
+     *
+     * @return $this
      * @throws \Exception
      */
     public function afterSave()
@@ -97,5 +101,7 @@ class Alert extends \Magento\Framework\App\Config\Value
         } catch (\Exception $e) {
             throw new \Exception(__('We can\'t save the cron expression.'));
         }
+
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/Cron/Model/Config/Backend/Sitemap.php b/app/code/Magento/Cron/Model/Config/Backend/Sitemap.php
index c49176ab625..13e59f4d730 100644
--- a/app/code/Magento/Cron/Model/Config/Backend/Sitemap.php
+++ b/app/code/Magento/Cron/Model/Config/Backend/Sitemap.php
@@ -37,6 +37,7 @@ class Sitemap extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -47,6 +48,7 @@ class Sitemap extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\App\Config\ValueFactory $configValueFactory,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
@@ -55,11 +57,11 @@ class Sitemap extends \Magento\Framework\App\Config\Value
     ) {
         $this->_runModelPath = $runModelPath;
         $this->_configValueFactory = $configValueFactory;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
-     * @return void
+     * @return $this
      * @throws \Exception
      */
     public function afterSave()
@@ -97,5 +99,6 @@ class Sitemap extends \Magento\Framework\App\Config\Value
         } catch (\Exception $e) {
             throw new \Exception(__('We can\'t save the cron expression.'));
         }
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php b/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php
index 014c25e8ea9..dd149276adf 100644
--- a/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php
+++ b/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php
@@ -26,6 +26,7 @@ class Street extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
@@ -36,6 +37,7 @@ class Street extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
@@ -43,7 +45,7 @@ class Street extends \Magento\Framework\App\Config\Value
         array $data = []
     ) {
         $this->_eavConfig = $eavConfig;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
         $this->_storeManager = $storeManager;
     }
 
@@ -71,7 +73,7 @@ class Street extends \Magento\Framework\App\Config\Value
                 break;
         }
         $attribute->save();
-        return $this;
+        return parent::afterSave();
     }
 
     /**
diff --git a/app/code/Magento/Customer/Model/Config/Backend/CreateAccount/DisableAutoGroupAssignDefault.php b/app/code/Magento/Customer/Model/Config/Backend/CreateAccount/DisableAutoGroupAssignDefault.php
index 2c39ad5de00..363fe4cd200 100644
--- a/app/code/Magento/Customer/Model/Config/Backend/CreateAccount/DisableAutoGroupAssignDefault.php
+++ b/app/code/Magento/Customer/Model/Config/Backend/CreateAccount/DisableAutoGroupAssignDefault.php
@@ -16,6 +16,7 @@ class DisableAutoGroupAssignDefault extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -25,13 +26,14 @@ class DisableAutoGroupAssignDefault extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->eavConfig = $eavConfig;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
diff --git a/app/code/Magento/Customer/Model/Config/Backend/Show/Customer.php b/app/code/Magento/Customer/Model/Config/Backend/Show/Customer.php
index 2957d9ae35f..a4a9b336e9c 100644
--- a/app/code/Magento/Customer/Model/Config/Backend/Show/Customer.php
+++ b/app/code/Magento/Customer/Model/Config/Backend/Show/Customer.php
@@ -26,6 +26,7 @@ class Customer extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
@@ -36,6 +37,7 @@ class Customer extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
@@ -43,7 +45,7 @@ class Customer extends \Magento\Framework\App\Config\Value
         array $data = []
     ) {
         $this->_eavConfig = $eavConfig;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
         $this->storeManager = $storeManager;
     }
 
diff --git a/app/code/Magento/Customer/Model/Config/Share.php b/app/code/Magento/Customer/Model/Config/Share.php
index 5c8010c95b2..f7e6be108a9 100644
--- a/app/code/Magento/Customer/Model/Config/Share.php
+++ b/app/code/Magento/Customer/Model/Config/Share.php
@@ -40,6 +40,7 @@ class Share extends \Magento\Framework\App\Config\Value implements \Magento\Fram
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Customer\Model\ResourceModel\Customer $customerResource
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
@@ -50,6 +51,7 @@ class Share extends \Magento\Framework\App\Config\Value implements \Magento\Fram
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Customer\Model\ResourceModel\Customer $customerResource,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
@@ -58,7 +60,7 @@ class Share extends \Magento\Framework\App\Config\Value implements \Magento\Fram
     ) {
         $this->_storeManager = $storeManager;
         $this->_customerResource = $customerResource;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
diff --git a/app/code/Magento/Developer/Model/Config/Backend/AllowedIps.php b/app/code/Magento/Developer/Model/Config/Backend/AllowedIps.php
index e4552761129..19852067353 100644
--- a/app/code/Magento/Developer/Model/Config/Backend/AllowedIps.php
+++ b/app/code/Magento/Developer/Model/Config/Backend/AllowedIps.php
@@ -30,6 +30,7 @@ class AllowedIps extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\Message\ManagerInterface $messageManager
      * @param \Magento\Framework\Escaper $escaper
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
@@ -40,6 +41,7 @@ class AllowedIps extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\Message\ManagerInterface $messageManager,
         \Magento\Framework\Escaper $escaper,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
@@ -48,7 +50,7 @@ class AllowedIps extends \Magento\Framework\App\Config\Value
     ) {
         $this->messageManager = $messageManager;
         $this->escaper = $escaper;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
diff --git a/app/code/Magento/GoogleAdwords/Model/Config/Backend/AbstractConversion.php b/app/code/Magento/GoogleAdwords/Model/Config/Backend/AbstractConversion.php
index f072d2114d6..f70ffd207dd 100644
--- a/app/code/Magento/GoogleAdwords/Model/Config/Backend/AbstractConversion.php
+++ b/app/code/Magento/GoogleAdwords/Model/Config/Backend/AbstractConversion.php
@@ -26,6 +26,7 @@ abstract class AbstractConversion extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\Validator\DataObjectFactory $validatorCompositeFactory
      * @param \Magento\GoogleAdwords\Model\Validator\Factory $validatorFactory
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
@@ -36,13 +37,14 @@ abstract class AbstractConversion extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\Validator\DataObjectFactory $validatorCompositeFactory,
         \Magento\GoogleAdwords\Model\Validator\Factory $validatorFactory,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
 
         $this->_validatorFactory = $validatorFactory;
         $this->_validatorComposite = $validatorCompositeFactory->create();
diff --git a/app/code/Magento/MediaStorage/Model/Config/Backend/Storage/Media/Database.php b/app/code/Magento/MediaStorage/Model/Config/Backend/Storage/Media/Database.php
index 95f4d6c2165..0b1ebbd8317 100644
--- a/app/code/Magento/MediaStorage/Model/Config/Backend/Storage/Media/Database.php
+++ b/app/code/Magento/MediaStorage/Model/Config/Backend/Storage/Media/Database.php
@@ -18,6 +18,7 @@ class Database extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\MediaStorage\Helper\File\Storage $coreFileStorage
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -27,13 +28,14 @@ class Database extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\MediaStorage\Helper\File\Storage $coreFileStorage,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->_coreFileStorage = $coreFileStorage;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
@@ -46,6 +48,6 @@ class Database extends \Magento\Framework\App\Config\Value
         $helper = $this->_coreFileStorage;
         $helper->getStorageModel(null, ['init' => true]);
 
-        return $this;
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/OfflineShipping/Model/Config/Backend/Tablerate.php b/app/code/Magento/OfflineShipping/Model/Config/Backend/Tablerate.php
index e48b75956b3..605afa75833 100644
--- a/app/code/Magento/OfflineShipping/Model/Config/Backend/Tablerate.php
+++ b/app/code/Magento/OfflineShipping/Model/Config/Backend/Tablerate.php
@@ -23,6 +23,7 @@ class Tablerate extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\OfflineShipping\Model\ResourceModel\Carrier\TablerateFactory $tablerateFactory
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -32,22 +33,24 @@ class Tablerate extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\OfflineShipping\Model\ResourceModel\Carrier\TablerateFactory $tablerateFactory,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->_tablerateFactory = $tablerateFactory;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
-     * @return \Magento\Framework\Model\AbstractModel|void
+     * @return $this
      */
     public function afterSave()
     {
         /** @var \Magento\OfflineShipping\Model\ResourceModel\Carrier\Tablerate $tableRate */
         $tableRate = $this->_tablerateFactory->create();
         $tableRate->uploadAndImport($this);
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/Paypal/Model/System/Config/Backend/Cert.php b/app/code/Magento/Paypal/Model/System/Config/Backend/Cert.php
index 5edc101cc02..48569dd3bc3 100644
--- a/app/code/Magento/Paypal/Model/System/Config/Backend/Cert.php
+++ b/app/code/Magento/Paypal/Model/System/Config/Backend/Cert.php
@@ -10,6 +10,8 @@ use Magento\Framework\Filesystem\DirectoryList;
 
 /**
  * Backend model for saving certificate file in case of using certificate based authentication
+ *
+ * @SuppressWarnings(PHPMD.ExcessiveParameterList)
  */
 class Cert extends \Magento\Framework\App\Config\Value
 {
@@ -32,6 +34,7 @@ class Cert extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Paypal\Model\CertFactory $certFactory
      * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
      * @param \Magento\Framework\Filesystem $filesystem
@@ -43,6 +46,7 @@ class Cert extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Paypal\Model\CertFactory $certFactory,
         \Magento\Framework\Encryption\EncryptorInterface $encryptor,
         \Magento\Framework\Filesystem $filesystem,
@@ -53,7 +57,7 @@ class Cert extends \Magento\Framework\App\Config\Value
         $this->_certFactory = $certFactory;
         $this->_encryptor = $encryptor;
         $this->_tmpDirectory = $filesystem->getDirectoryRead(DirectoryList::SYS_TMP);
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
diff --git a/app/code/Magento/Paypal/Model/System/Config/Backend/Cron.php b/app/code/Magento/Paypal/Model/System/Config/Backend/Cron.php
index dda1f596559..0603fe3ee40 100644
--- a/app/code/Magento/Paypal/Model/System/Config/Backend/Cron.php
+++ b/app/code/Magento/Paypal/Model/System/Config/Backend/Cron.php
@@ -20,6 +20,7 @@ class Cron extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -29,13 +30,14 @@ class Cron extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\App\Config\ValueFactory $configValueFactory,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->_configValueFactory = $configValueFactory;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
diff --git a/app/code/Magento/Paypal/Model/System/Config/Backend/MerchantCountry.php b/app/code/Magento/Paypal/Model/System/Config/Backend/MerchantCountry.php
index bef8a6e42b4..d02e68e1bf0 100644
--- a/app/code/Magento/Paypal/Model/System/Config/Backend/MerchantCountry.php
+++ b/app/code/Magento/Paypal/Model/System/Config/Backend/MerchantCountry.php
@@ -26,6 +26,7 @@ class MerchantCountry extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Directory\Helper\Data $directoryHelper
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
@@ -36,6 +37,7 @@ class MerchantCountry extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Directory\Helper\Data $directoryHelper,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
@@ -43,7 +45,7 @@ class MerchantCountry extends \Magento\Framework\App\Config\Value
         array $data = []
     ) {
         $this->directoryHelper = $directoryHelper;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
         $this->_storeManager = $storeManager;
     }
 
diff --git a/app/code/Magento/Rss/Model/System/Config/Backend/Links.php b/app/code/Magento/Rss/Model/System/Config/Backend/Links.php
index c86f176a373..665a7e68e1a 100644
--- a/app/code/Magento/Rss/Model/System/Config/Backend/Links.php
+++ b/app/code/Magento/Rss/Model/System/Config/Backend/Links.php
@@ -11,42 +11,16 @@ namespace Magento\Rss\Model\System\Config\Backend;
  */
 class Links extends \Magento\Framework\App\Config\Value
 {
-    /**
-     * @var \Magento\Framework\App\Cache\TypeListInterface
-     */
-    protected $_cacheTypeList;
-
-    /**
-     * @param \Magento\Framework\Model\Context $context
-     * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
-     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
-     * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
-     * @param array $data
-     */
-    public function __construct(
-        \Magento\Framework\Model\Context $context,
-        \Magento\Framework\Registry $registry,
-        \Magento\Framework\App\Config\ScopeConfigInterface $config,
-        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
-        \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
-        \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
-        array $data = []
-    ) {
-        $this->_cacheTypeList = $cacheTypeList;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
-    }
-
     /**
      * Invalidate cache type, when value was changed
      *
-     * @return void
+     * @return $this
      */
     public function afterSave()
     {
         if ($this->isValueChanged()) {
-            $this->_cacheTypeList->invalidate(\Magento\Framework\View\Element\AbstractBlock::CACHE_GROUP);
+            $this->cacheTypeList->invalidate(\Magento\Framework\View\Element\AbstractBlock::CACHE_GROUP);
         }
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/Tax/Model/Config/Notification.php b/app/code/Magento/Tax/Model/Config/Notification.php
index 1c830caee47..25b1cde5df6 100644
--- a/app/code/Magento/Tax/Model/Config/Notification.php
+++ b/app/code/Magento/Tax/Model/Config/Notification.php
@@ -21,6 +21,7 @@ class Notification extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Config\Model\ResourceModel\Config $resourceConfig
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -30,19 +31,20 @@ class Notification extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Config\Model\ResourceModel\Config $resourceConfig,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->resourceConfig = $resourceConfig;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
      * Prepare and store cron settings after save
      *
-     * @return \Magento\Tax\Model\Config\Notification
+     * @return $this
      */
     public function afterSave()
     {
@@ -50,7 +52,7 @@ class Notification extends \Magento\Framework\App\Config\Value
             $this->_resetNotificationFlag(\Magento\Tax\Model\Config::XML_PATH_TAX_NOTIFICATION_IGNORE_DISCOUNT);
             $this->_resetNotificationFlag(\Magento\Tax\Model\Config::XML_PATH_TAX_NOTIFICATION_IGNORE_PRICE_DISPLAY);
         }
-        return parent::afterSave($this);
+        return parent::afterSave();
     }
 
     /**
diff --git a/app/code/Magento/Tax/Model/Config/TaxClass.php b/app/code/Magento/Tax/Model/Config/TaxClass.php
index 2d2503c8c3e..2d47f9aae7b 100644
--- a/app/code/Magento/Tax/Model/Config/TaxClass.php
+++ b/app/code/Magento/Tax/Model/Config/TaxClass.php
@@ -24,6 +24,7 @@ class TaxClass extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Config\Model\ResourceModel\Config $resourceConfig
      * @param \Magento\Eav\Model\Entity\AttributeFactory $attributeFactory
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
@@ -34,6 +35,7 @@ class TaxClass extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Config\Model\ResourceModel\Config $resourceConfig,
         \Magento\Eav\Model\Entity\AttributeFactory $attributeFactory,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
@@ -42,15 +44,15 @@ class TaxClass extends \Magento\Framework\App\Config\Value
     ) {
         $this->resourceConfig = $resourceConfig;
         $this->attributeFactory = $attributeFactory;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
      * Update the default product tax class
      *
-     * @return \Magento\Tax\Model\Config\TaxClass
+     * @return $this
      */
-    protected function _afterSave()
+    public function afterSave()
     {
         $attributeCode = "tax_class_id";
 
@@ -62,6 +64,6 @@ class TaxClass extends \Magento\Framework\App\Config\Value
         $attribute->setData("default_value", $this->getData('value'));
         $attribute->save();
 
-        return parent::_afterSave($this);
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/Theme/Model/Design/Backend/Exceptions.php b/app/code/Magento/Theme/Model/Design/Backend/Exceptions.php
index 948f64ef6a7..44a2e63bc7f 100644
--- a/app/code/Magento/Theme/Model/Design/Backend/Exceptions.php
+++ b/app/code/Magento/Theme/Model/Design/Backend/Exceptions.php
@@ -22,6 +22,7 @@ class Exceptions extends ArraySerialized
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\View\DesignInterface $design
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -31,13 +32,14 @@ class Exceptions extends ArraySerialized
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\View\DesignInterface $design,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->_design = $design;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
diff --git a/app/code/Magento/Theme/Model/Design/Backend/Theme.php b/app/code/Magento/Theme/Model/Design/Backend/Theme.php
index 5e85a547c37..d77f694b4b4 100644
--- a/app/code/Magento/Theme/Model/Design/Backend/Theme.php
+++ b/app/code/Magento/Theme/Model/Design/Backend/Theme.php
@@ -16,28 +16,37 @@ class Theme extends Value
      */
     protected $_design = null;
 
+    /**
+     * Path to config node with list of caches
+     *
+     * @var string
+     */
+    const XML_PATH_INVALID_CACHES = 'design/invalid_caches';
+
     /**
      * Initialize dependencies
      *
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\View\DesignInterface $design
-     * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
-     * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
+     * @param \Magento\Framework\Model\ModelResource\AbstractResource|null $resource
+     * @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\View\DesignInterface $design,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->_design = $design;
-        parent::__construct($context, $registry, $config, $resource, $resourceCollection, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
@@ -53,4 +62,26 @@ class Theme extends Value
         }
         return parent::beforeSave();
     }
+
+    /**
+     * {@inheritdoc}
+     *
+     * {@inheritdoc}. In addition, it sets status 'invalidate' for blocks and other output caches
+     *
+     * @return $this
+     */
+    public function afterSave()
+    {
+        $types = array_keys(
+            $this->_config->getValue(
+                self::XML_PATH_INVALID_CACHES,
+                \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+            )
+        );
+        if ($this->isValueChanged()) {
+            $this->cacheTypeList->invalidate($types);
+        }
+
+        return parent::afterSave();
+    }
 }
diff --git a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ExceptionsTest.php b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ExceptionsTest.php
index 47a9acad4ee..74760ac7a77 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ExceptionsTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ExceptionsTest.php
@@ -5,6 +5,7 @@
  */
 namespace Magento\Theme\Test\Unit\Model\Design\Backend;
 
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 use Magento\Theme\Model\Design\Backend\Exceptions;
 use Magento\Framework\App\Area;
 
@@ -18,60 +19,29 @@ class ExceptionsTest extends \PHPUnit_Framework_TestCase
     /**
      * @var \Magento\Framework\Model\Context|\PHPUnit_Framework_MockObject_MockObject
      */
-    protected $context;
-
-    /**
-     * @var \Magento\Framework\Registry|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $registry;
-
-    /**
-     * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $config;
+    protected $contextMock;
 
     /**
      * @var \Magento\Framework\View\DesignInterface|\PHPUnit_Framework_MockObject_MockObject
      */
-    protected $design;
-
-    /**
-     * @var \Magento\Theme\Model\ResourceModel\Design|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $resource;
-
-    /**
-     * @var \Magento\Theme\Model\ResourceModel\Design\Collection|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $resourceCollection;
+    protected $designMock;
 
     protected function setUp()
     {
-        $this->context = $this->getMockBuilder('Magento\Framework\Model\Context')
-            ->disableOriginalConstructor()
-            ->getMock();
-        $this->registry = $this->getMockBuilder('Magento\Framework\Registry')
-            ->disableOriginalConstructor()
-            ->getMock();
-        $this->config = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface')->getMock();
-        $this->design = $this->getMockBuilder('Magento\Framework\View\DesignInterface')->getMock();
-        $this->resource = $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Design')
-            ->disableOriginalConstructor()
-            ->getMock();
-        $this->resourceCollection = $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Design\Collection')
+        $this->contextMock = $this->getMockBuilder('Magento\Framework\Model\Context')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->context->expects($this->once())
+        $this->designMock = $this->getMockBuilder('Magento\Framework\View\DesignInterface')->getMock();
+        $this->contextMock->expects($this->once())
             ->method('getEventDispatcher')
             ->willReturn($this->getMockBuilder('Magento\Framework\Event\ManagerInterface')->getMock());
 
-        $this->model = new Exceptions(
-            $this->context,
-            $this->registry,
-            $this->config,
-            $this->design,
-            $this->resource,
-            $this->resourceCollection
+        $this->model = (new ObjectManager($this))->getObject(
+            'Magento\Theme\Model\Design\Backend\Exceptions',
+            [
+                'context' => $this->contextMock,
+                'design' => $this->designMock,
+            ]
         );
     }
 
@@ -86,7 +56,7 @@ class ExceptionsTest extends \PHPUnit_Framework_TestCase
     public function testBeforeSave()
     {
         $value = ['__empty' => '', 'test' => ['search' => '1qwe', 'value' => '#val#', 'regexp' => '[a-zA-Z0-9]*']];
-        $this->design->expects($this->once())
+        $this->designMock->expects($this->once())
             ->method('setDesignTheme')
             ->with('#val#', Area::AREA_FRONTEND);
         $this->model->setValue($value);
diff --git a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php
index f6ac670502a..14e25f82611 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php
@@ -7,6 +7,7 @@
 namespace Magento\Theme\Test\Unit\Model\Design\Backend;
 
 use Magento\Framework\App\Area;
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 use Magento\Theme\Model\Design\Backend\Theme;
 
 class ThemeTest extends \PHPUnit_Framework_TestCase
@@ -19,60 +20,29 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
     /**
      * @var \Magento\Framework\Model\Context|\PHPUnit_Framework_MockObject_MockObject
      */
-    protected $context;
-
-    /**
-     * @var \Magento\Framework\Registry|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $registry;
-
-    /**
-     * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $config;
+    protected $contextMock;
 
     /**
      * @var \Magento\Framework\View\DesignInterface|\PHPUnit_Framework_MockObject_MockObject
      */
-    protected $design;
-
-    /**
-     * @var \Magento\Theme\Model\ResourceModel\Design|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $resource;
-
-    /**
-     * @var \Magento\Theme\Model\ResourceModel\Design\Collection|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $resourceCollection;
+    protected $designMock;
 
     protected function setUp()
     {
-        $this->context = $this->getMockBuilder('Magento\Framework\Model\Context')
-            ->disableOriginalConstructor()
-            ->getMock();
-        $this->registry = $this->getMockBuilder('Magento\Framework\Registry')
-            ->disableOriginalConstructor()
-            ->getMock();
-        $this->config = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface')->getMock();
-        $this->design = $this->getMockBuilder('Magento\Framework\View\DesignInterface')->getMock();
-        $this->resource = $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Design')
-            ->disableOriginalConstructor()
-            ->getMock();
-        $this->resourceCollection = $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Design\Collection')
+        $this->contextMock = $this->getMockBuilder('Magento\Framework\Model\Context')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->context->expects($this->once())
+        $this->designMock = $this->getMockBuilder('Magento\Framework\View\DesignInterface')->getMock();
+        $this->contextMock->expects($this->once())
             ->method('getEventDispatcher')
             ->willReturn($this->getMockBuilder('Magento\Framework\Event\ManagerInterface')->getMock());
 
-        $this->model = new Theme(
-            $this->context,
-            $this->registry,
-            $this->config,
-            $this->design,
-            $this->resource,
-            $this->resourceCollection
+        $this->model = (new ObjectManager($this))->getObject(
+            'Magento\Theme\Model\Design\Backend\Theme',
+            [
+                'design' => $this->designMock,
+                'context' => $this->contextMock,
+            ]
         );
     }
 
@@ -84,7 +54,7 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
      */
     public function testBeforeSave()
     {
-        $this->design->expects($this->once())
+        $this->designMock->expects($this->once())
             ->method('setDesignTheme')
             ->with('some_value', Area::AREA_FRONTEND);
         $this->model->setValue('some_value');
diff --git a/app/code/Magento/Theme/etc/config.xml b/app/code/Magento/Theme/etc/config.xml
index 332043e56df..4f25cd7e2ab 100644
--- a/app/code/Magento/Theme/etc/config.xml
+++ b/app/code/Magento/Theme/etc/config.xml
@@ -8,6 +8,11 @@
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
     <default>
         <design>
+            <invalid_caches>
+                <block_html />
+                <layout />
+                <translate />
+            </invalid_caches>
             <head translate="default_description">
                 <default_title>Magento Commerce</default_title>
                 <default_description>Default Description</default_description>
diff --git a/lib/internal/Magento/Framework/App/Config/Value.php b/lib/internal/Magento/Framework/App/Config/Value.php
index 1065c8f1f19..629b066aa35 100644
--- a/lib/internal/Magento/Framework/App/Config/Value.php
+++ b/lib/internal/Magento/Framework/App/Config/Value.php
@@ -42,10 +42,16 @@ class Value extends \Magento\Framework\Model\AbstractModel implements \Magento\F
      */
     protected $_config;
 
+    /**
+     * @var \Magento\Framework\App\Cache\TypeListInterface
+     */
+    protected $cacheTypeList;
+
     /**
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
+     * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
      * @param \Magento\Framework\Model\ModelResource\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
@@ -54,12 +60,14 @@ class Value extends \Magento\Framework\Model\AbstractModel implements \Magento\F
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
+        \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
         \Magento\Framework\Model\ModelResource\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->_config = $config;
         parent::__construct($context, $registry, $resource, $resourceCollection, $data);
+        $this->cacheTypeList = $cacheTypeList;
     }
 
     /**
@@ -107,4 +115,20 @@ class Value extends \Magento\Framework\Model\AbstractModel implements \Magento\F
         $data = $this->_getData('fieldset_data');
         return is_array($data) && isset($data[$key]) ? $data[$key] : null;
     }
+
+    /**
+     * {@inheritdoc}
+     *
+     * {@inheritdoc}. In addition, it sets status 'invalidate' for config caches
+     *
+     * @return $this
+     */
+    public function afterSave()
+    {
+        if ($this->isValueChanged()) {
+            $this->cacheTypeList->invalidate(\Magento\Framework\App\Cache\Type\Config::TYPE_IDENTIFIER);
+        }
+
+        return parent::afterSave();
+    }
 }
-- 
GitLab


From 323630196ea4fd0e7a856aa6be458783749c8ccc Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Tue, 13 Oct 2015 15:12:16 -0500
Subject: [PATCH 031/370] MAGETWO-43857: [github] cache types don't properly
 invalidate all the time #1844

---
 .../Model/Config/Backend/Currency/Allow.php   |  2 +-
 .../Model/Config/Backend/Currency/Base.php    |  2 +-
 .../Config/Model/Config/Backend/Translate.php | 26 ++++++++++++++-----
 .../Model/Config/Backend/ManagestockTest.php  |  1 +
 .../Config/Backend/Image/AdapterTest.php      |  1 +
 .../Model/Config/Backend/DomainTest.php       |  1 +
 .../Model/Config/Backend/AllowedIpsTest.php   |  1 +
 7 files changed, 26 insertions(+), 8 deletions(-)

diff --git a/app/code/Magento/Config/Model/Config/Backend/Currency/Allow.php b/app/code/Magento/Config/Model/Config/Backend/Currency/Allow.php
index fecb0710472..61ed9ef5266 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Currency/Allow.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Currency/Allow.php
@@ -38,7 +38,7 @@ class Allow extends AbstractCurrency
         array $data = []
     ) {
         $this->_localeCurrency = $localeCurrency;
-        parent::__construct($context, $registry, $config, $cacheTypeList, $resourceCollection, $resource, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
     }
 
     /**
diff --git a/app/code/Magento/Config/Model/Config/Backend/Currency/Base.php b/app/code/Magento/Config/Model/Config/Backend/Currency/Base.php
index fe32b71564f..abff700c120 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Currency/Base.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Currency/Base.php
@@ -35,7 +35,7 @@ class Base extends AbstractCurrency
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
-        parent::__construct($context, $registry, $config, $cacheTypeList, $resourceCollection, $resource, $data);
+        parent::__construct($context, $registry, $config, $cacheTypeList, $resource, $resourceCollection, $data);
         $this->currencyFactory = $currencyFactory;
     }
 
diff --git a/app/code/Magento/Config/Model/Config/Backend/Translate.php b/app/code/Magento/Config/Model/Config/Backend/Translate.php
index 665a7e68e1a..6f6ae7071c7 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Translate.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Translate.php
@@ -3,24 +3,38 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Rss\Model\System\Config\Backend;
 
 /**
- * Cache cleaner backend model
- *
+ * System config translate inline fields backend model
  */
-class Links extends \Magento\Framework\App\Config\Value
+namespace Magento\Config\Model\Config\Backend;
+
+class Translate extends \Magento\Framework\App\Config\Value
 {
     /**
-     * Invalidate cache type, when value was changed
+     * Path to config node with list of caches
+     *
+     * @var string
+     */
+    const XML_PATH_INVALID_CACHES = 'dev/translate_inline/invalid_caches';
+
+    /**
+     * Set status 'invalidate' for blocks and other output caches
      *
      * @return $this
      */
     public function afterSave()
     {
+        $types = array_keys(
+            $this->_config->getValue(
+                self::XML_PATH_INVALID_CACHES,
+                \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+            )
+        );
         if ($this->isValueChanged()) {
-            $this->cacheTypeList->invalidate(\Magento\Framework\View\Element\AbstractBlock::CACHE_GROUP);
+            $this->cacheTypeList->invalidate($types);
         }
+
         return parent::afterSave();
     }
 }
diff --git a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/Config/Backend/ManagestockTest.php b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/Config/Backend/ManagestockTest.php
index 07fcc69d89c..8f63143bddc 100644
--- a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/Config/Backend/ManagestockTest.php
+++ b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/Config/Backend/ManagestockTest.php
@@ -54,6 +54,7 @@ class ManagestockTest extends \PHPUnit_Framework_TestCase
             Bootstrap::getObjectManager()->get('Magento\Framework\Model\Context'),
             Bootstrap::getObjectManager()->get('Magento\Framework\Registry'),
             Bootstrap::getObjectManager()->get('Magento\Framework\App\Config\ScopeConfigInterface'),
+            Bootstrap::getObjectManager()->get('Magento\Framework\App\Cache\TypeListInterface'),
             $stockManagement,
             Bootstrap::getObjectManager()->get('Magento\CatalogInventory\Model\Indexer\Stock\Processor'),
             Bootstrap::getObjectManager()->get('Magento\Config\Model\ResourceModel\Config')
diff --git a/dev/tests/integration/testsuite/Magento/Config/Model/Config/Backend/Image/AdapterTest.php b/dev/tests/integration/testsuite/Magento/Config/Model/Config/Backend/Image/AdapterTest.php
index fc7c961049d..3bdc1817762 100644
--- a/dev/tests/integration/testsuite/Magento/Config/Model/Config/Backend/Image/AdapterTest.php
+++ b/dev/tests/integration/testsuite/Magento/Config/Model/Config/Backend/Image/AdapterTest.php
@@ -18,6 +18,7 @@ class AdapterTest extends \PHPUnit_Framework_TestCase
         $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
             'Magento\Config\Model\Config\Backend\Image\Adapter'
         );
+        $this->_model->setPath('path');
     }
 
     /**
diff --git a/dev/tests/integration/testsuite/Magento/Cookie/Model/Config/Backend/DomainTest.php b/dev/tests/integration/testsuite/Magento/Cookie/Model/Config/Backend/DomainTest.php
index 7f469f42e7b..5f24039ee05 100644
--- a/dev/tests/integration/testsuite/Magento/Cookie/Model/Config/Backend/DomainTest.php
+++ b/dev/tests/integration/testsuite/Magento/Cookie/Model/Config/Backend/DomainTest.php
@@ -27,6 +27,7 @@ class DomainTest extends \PHPUnit_Framework_TestCase
             'Magento\Cookie\Model\Config\Backend\Domain'
         );
         $domain->setValue($value);
+        $domain->setPath('path');
         try {
             $domain->save();
             if ($exceptionMessage) {
diff --git a/dev/tests/integration/testsuite/Magento/Developer/Model/Config/Backend/AllowedIpsTest.php b/dev/tests/integration/testsuite/Magento/Developer/Model/Config/Backend/AllowedIpsTest.php
index d34c64a96dc..3b23c65d06b 100644
--- a/dev/tests/integration/testsuite/Magento/Developer/Model/Config/Backend/AllowedIpsTest.php
+++ b/dev/tests/integration/testsuite/Magento/Developer/Model/Config/Backend/AllowedIpsTest.php
@@ -22,6 +22,7 @@ class AllowedIpsTest extends \PHPUnit_Framework_TestCase
             'Magento\Developer\Model\Config\Backend\AllowedIps'
         );
         $model->setValue($value);
+        $model->setPath('path');
         $model->beforeSave();
         $model->save();
         $this->assertEquals($expected, $model->getValue());
-- 
GitLab


From 8d3b0c072bf16f858a781c0d6782c6e188bf1090 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Tue, 13 Oct 2015 16:13:17 -0500
Subject: [PATCH 032/370] MAGETWO-43787: cache:clean command doesn't clear
 Varnish cache  - use _nosid route param so session does not get invoked when
 building url

---
 app/code/Magento/PageCache/Model/Cache/Server.php               | 2 +-
 app/code/Magento/PageCache/Test/Unit/Model/Cache/ServerTest.php | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/PageCache/Model/Cache/Server.php b/app/code/Magento/PageCache/Model/Cache/Server.php
index fc52e41e3b2..2e2f3a87fb8 100644
--- a/app/code/Magento/PageCache/Model/Cache/Server.php
+++ b/app/code/Magento/PageCache/Model/Cache/Server.php
@@ -60,7 +60,7 @@ class Server
             $httpHost = $this->request->getHttpHost();
             $servers[] = $httpHost ?
                 UriFactory::factory('')->setHost($httpHost)->setPort(self::DEFAULT_PORT)->setScheme('http') :
-                UriFactory::factory($this->urlBuilder->getUrl('*'))
+                UriFactory::factory($this->urlBuilder->getUrl('*', ['_nosid' => true])) // Don't use SID in building URL
                     ->setScheme('http')
                     ->setPath(null)
                     ->setQuery(null);
diff --git a/app/code/Magento/PageCache/Test/Unit/Model/Cache/ServerTest.php b/app/code/Magento/PageCache/Test/Unit/Model/Cache/ServerTest.php
index 38cc49be2ff..f18c5e04468 100644
--- a/app/code/Magento/PageCache/Test/Unit/Model/Cache/ServerTest.php
+++ b/app/code/Magento/PageCache/Test/Unit/Model/Cache/ServerTest.php
@@ -64,7 +64,7 @@ class ServerTest extends \PHPUnit_Framework_TestCase
             ->willReturn($httpHost);
         $this->urlBuilderMock->expects($this->exactly($getUrlCallCtr))
             ->method('getUrl')
-            ->with('*')
+            ->with('*', ['_nosid' => true])
             ->willReturn($url);
 
         $uris = [];
-- 
GitLab


From bbe4029a24108a20ffdd2edd8970a0ac20eb4566 Mon Sep 17 00:00:00 2001
From: manasa <mpotluri@ebay.com>
Date: Wed, 14 Oct 2015 11:23:28 -0500
Subject: [PATCH 033/370] MAGETWO-43944: Fix Weee and Tax functional tests

---
 .../AbstractAssertTaxRuleIsAppliedToAllPricesDownloadable.php    | 1 +
 1 file changed, 1 insertion(+)

diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Constraint/AbstractAssertTaxRuleIsAppliedToAllPricesDownloadable.php b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Constraint/AbstractAssertTaxRuleIsAppliedToAllPricesDownloadable.php
index 20dd5579d0e..7fd9a452324 100644
--- a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Constraint/AbstractAssertTaxRuleIsAppliedToAllPricesDownloadable.php
+++ b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Constraint/AbstractAssertTaxRuleIsAppliedToAllPricesDownloadable.php
@@ -66,6 +66,7 @@ abstract class AbstractAssertTaxRuleIsAppliedToAllPricesDownloadable extends Abs
         $actualPrices = $this->getProductPagePrices($actualPrices);
         $catalogProductView->getViewBlock()->clickAddToCart();
         $catalogProductView->getMessagesBlock()->waitSuccessMessage();
+        $checkoutCart->open();
         $actualPrices = $this->getCartPrices($product, $actualPrices);
         $actualPrices = $this->getTotals($actualPrices);
         //Prices verification
-- 
GitLab


From 9c2632a9cb3e750b951dfb7483125812aa57130c Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Wed, 14 Oct 2015 12:50:04 -0500
Subject: [PATCH 034/370] MAGETWO-43787: cache:clean command doesn't clear
 Varnish cache  - add verification of event being dispatched

---
 .../Unit/Console/Command/AbstractCacheManageCommandTest.php     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Backend/Test/Unit/Console/Command/AbstractCacheManageCommandTest.php b/app/code/Magento/Backend/Test/Unit/Console/Command/AbstractCacheManageCommandTest.php
index ef8a9e941bf..1bda8475c36 100644
--- a/app/code/Magento/Backend/Test/Unit/Console/Command/AbstractCacheManageCommandTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Console/Command/AbstractCacheManageCommandTest.php
@@ -21,7 +21,7 @@ abstract class AbstractCacheManageCommandTest extends AbstractCacheCommandTest
         $this->eventManagerMock = $this->getMockBuilder('\Magento\Framework\Event\ManagerInterface')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->eventManagerMock->expects($this->any())->method('dispatch');
+        $this->eventManagerMock->expects($this->any())->method('dispatch')->with($this->cacheEventName);
         parent::setUp();
     }
 
-- 
GitLab


From d6189dd4c6bb4c149b2f9bdbd71d03ac58cfa1ef Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Wed, 14 Oct 2015 15:40:25 -0500
Subject: [PATCH 035/370] MAGETWO-43857: [github] cache types don't properly
 invalidate all the time #1844

---
 .../Unit/Model/Design/Backend/ThemeTest.php   | 56 +++++++++++++++++++
 .../App/Test/Unit/Config/ValueTest.php        | 43 ++++++++++++--
 2 files changed, 94 insertions(+), 5 deletions(-)

diff --git a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php
index 14e25f82611..e83a4e4ca30 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php
@@ -27,21 +27,37 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
      */
     protected $designMock;
 
+    /**
+     * @var \Magento\Framework\App\Cache\TypeListInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $cacheTypeListMock;
+
+    /**
+     * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $configMock;
+
     protected function setUp()
     {
         $this->contextMock = $this->getMockBuilder('Magento\Framework\Model\Context')
             ->disableOriginalConstructor()
             ->getMock();
         $this->designMock = $this->getMockBuilder('Magento\Framework\View\DesignInterface')->getMock();
+        $this->cacheTypeListMock = $this->getMockBuilder('Magento\Framework\App\Cache\TypeListInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
         $this->contextMock->expects($this->once())
             ->method('getEventDispatcher')
             ->willReturn($this->getMockBuilder('Magento\Framework\Event\ManagerInterface')->getMock());
+        $this->configMock = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface')->getMock();
 
         $this->model = (new ObjectManager($this))->getObject(
             'Magento\Theme\Model\Design\Backend\Theme',
             [
                 'design' => $this->designMock,
                 'context' => $this->contextMock,
+                'cacheTypeList' => $this->cacheTypeListMock,
+                'config' => $this->configMock,
             ]
         );
     }
@@ -60,4 +76,44 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
         $this->model->setValue('some_value');
         $this->assertInstanceOf(get_class($this->model), $this->model->beforeSave());
     }
+
+    /**
+     * @param int $callNumber
+     * @param string $oldValue
+     * @dataProvider afterSaveDataProvider
+     */
+    public function testAfterSave($callNumber, $oldValue)
+    {
+        $this->cacheTypeListMock->expects($this->exactly($callNumber))
+            ->method('invalidate');
+        $this->configMock->expects($this->any())
+            ->method('getValue')
+            ->willReturnMap(
+                [
+                    [
+                        Theme::XML_PATH_INVALID_CACHES,
+                        \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
+                        null,
+                        ['block_html' => 1, 'layout' => 1, 'translate' => 1]
+                    ],
+                    [
+                        null,
+                        \Magento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT,
+                        null,
+                        $oldValue
+                    ],
+
+                ]
+            );
+        $this->model->setValue('some_value');
+        $this->assertInstanceOf(get_class($this->model), $this->model->afterSave());
+    }
+
+    public function afterSaveDataProvider()
+    {
+        return [
+            [0, 'some_value'],
+            [2, 'other_value'],
+        ];
+    }
 }
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Config/ValueTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Config/ValueTest.php
index db103705fef..175509af622 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/Config/ValueTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/Config/ValueTest.php
@@ -15,27 +15,36 @@ class ValueTest extends \PHPUnit_Framework_TestCase
     /**
      * @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject
      */
-    protected $eventManager;
+    protected $eventManagerMock;
 
     /**
      * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $configMock;
 
+    /**
+     * @var \Magento\Framework\App\Cache\TypeListInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $cacheTypeListMock;
+
     /**
      * @return void
      */
     protected function setUp()
     {
         $this->configMock = $this->getMock('Magento\Framework\App\Config\ScopeConfigInterface');
-        $this->eventManager = $this->getMock('Magento\Framework\Event\ManagerInterface');
+        $this->eventManagerMock = $this->getMock('Magento\Framework\Event\ManagerInterface');
+        $this->cacheTypeListMock = $this->getMockBuilder('Magento\Framework\App\Cache\TypeListInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
 
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->model = $objectManager->getObject(
             'Magento\Framework\App\Config\Value',
             [
                 'config' => $this->configMock,
-                'eventDispatcher' => $this->eventManager,
+                'eventDispatcher' => $this->eventManagerMock,
+                'cacheTypeList' => $this->cacheTypeListMock,
             ]
         );
     }
@@ -99,7 +108,7 @@ class ValueTest extends \PHPUnit_Framework_TestCase
      */
     public function testAfterLoad()
     {
-        $this->eventManager->expects(
+        $this->eventManagerMock->expects(
             $this->at(0)
         )->method(
             'dispatch'
@@ -107,7 +116,7 @@ class ValueTest extends \PHPUnit_Framework_TestCase
             'model_load_after',
             ['object' => $this->model]
         );
-        $this->eventManager->expects(
+        $this->eventManagerMock->expects(
             $this->at(1)
         )->method(
             'dispatch'
@@ -158,4 +167,28 @@ class ValueTest extends \PHPUnit_Framework_TestCase
             ],
         ];
     }
+
+    /**
+     * @param int $callNumber
+     * @param string $oldValue
+     * @dataProvider afterSaveDataProvider
+     */
+    public function testAfterSave($callNumber, $oldValue)
+    {
+        $this->cacheTypeListMock->expects($this->exactly($callNumber))
+            ->method('invalidate');
+        $this->configMock->expects($this->any())
+            ->method('getValue')
+            ->willReturn($oldValue);
+        $this->model->setValue('some_value');
+        $this->assertInstanceOf(get_class($this->model), $this->model->afterSave());
+    }
+
+    public function afterSaveDataProvider()
+    {
+        return [
+            [0, 'some_value'],
+            [1, 'other_value'],
+        ];
+    }
 }
-- 
GitLab


From 2c5ecc7967640c4d6988cac130048db208d44003 Mon Sep 17 00:00:00 2001
From: Ankur Kaneria <akaneria@ebay.com>
Date: Thu, 15 Oct 2015 14:23:43 -0500
Subject: [PATCH 036/370] MAGETWO-44112: [php7]*.htaccess  incompatibility with
 php 7

- Added section to check for php7 module
---
 .htaccess                      | 26 ++++++++++++++++++++++++
 dev/tests/functional/.htaccess | 37 ++++++++++++++++++++++++++++++++++
 pub/.htaccess                  | 26 ++++++++++++++++++++++++
 pub/media/.htaccess            |  5 +++++
 pub/static/.htaccess           |  4 ++++
 5 files changed, 98 insertions(+)

diff --git a/.htaccess b/.htaccess
index a0d1710a8aa..1636ce4bc50 100644
--- a/.htaccess
+++ b/.htaccess
@@ -58,6 +58,32 @@
 
 </IfModule>
 
+<IfModule mod_php7.c>
+
+############################################
+## adjust memory limit
+
+    php_value memory_limit 768M
+    php_value max_execution_time 18000
+
+############################################
+## disable automatic session start
+## before autoload was initialized
+
+    php_flag session.auto_start off
+
+############################################
+## enable resulting html compression
+
+    #php_flag zlib.output_compression on
+
+###########################################
+## disable user agent verification to not break multiple image upload
+
+    php_flag suhosin.session.cryptua off
+
+</IfModule>
+
 <IfModule mod_security.c>
 ###########################################
 ## disable POST processing to not break multiple image upload
diff --git a/dev/tests/functional/.htaccess b/dev/tests/functional/.htaccess
index 0fe8af43b87..b20b4dc2e4e 100644
--- a/dev/tests/functional/.htaccess
+++ b/dev/tests/functional/.htaccess
@@ -63,6 +63,43 @@
 
 </IfModule>
 
+<IfModule mod_php7.c>
+
+############################################
+## adjust memory limit
+
+#    php_value memory_limit 64M
+    php_value memory_limit 256M
+    php_value max_execution_time 18000
+
+############################################
+## disable magic quotes for php request vars
+
+    php_flag magic_quotes_gpc off
+
+############################################
+## disable automatic session start
+## before autoload was initialized
+
+    php_flag session.auto_start off
+
+############################################
+## enable resulting html compression
+
+    #php_flag zlib.output_compression on
+
+###########################################
+# disable user agent verification to not break multiple image upload
+
+    php_flag suhosin.session.cryptua off
+
+###########################################
+# turn off compatibility with PHP4 when dealing with objects
+
+    php_flag zend.ze1_compatibility_mode Off
+
+</IfModule>
+
 <IfModule mod_security.c>
 ###########################################
 # disable POST processing to not break multiple image upload
diff --git a/pub/.htaccess b/pub/.htaccess
index 6e6f63c4358..120d7eb5a08 100644
--- a/pub/.htaccess
+++ b/pub/.htaccess
@@ -57,6 +57,32 @@
 
 </IfModule>
 
+<IfModule mod_php7.c>
+
+############################################
+## adjust memory limit
+
+    php_value memory_limit 256M
+    php_value max_execution_time 18000
+
+############################################
+## disable automatic session start
+## before autoload was initialized
+
+    php_flag session.auto_start off
+
+############################################
+## enable resulting html compression
+
+    #php_flag zlib.output_compression on
+
+###########################################
+# disable user agent verification to not break multiple image upload
+
+    php_flag suhosin.session.cryptua off
+
+</IfModule>
+
 <IfModule mod_security.c>
 ###########################################
 # disable POST processing to not break multiple image upload
diff --git a/pub/media/.htaccess b/pub/media/.htaccess
index f2751570906..865ebd31b52 100644
--- a/pub/media/.htaccess
+++ b/pub/media/.htaccess
@@ -1,8 +1,13 @@
 Options All -Indexes
+
 <IfModule mod_php5.c>
 php_flag engine 0
 </IfModule>
 
+<IfModule mod_php7.c>
+php_flag engine 0
+</IfModule>
+
 AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
 Options -ExecCGI
 
diff --git a/pub/static/.htaccess b/pub/static/.htaccess
index c96881a49c6..56ceaf05709 100644
--- a/pub/static/.htaccess
+++ b/pub/static/.htaccess
@@ -2,6 +2,10 @@
 php_flag engine 0
 </IfModule>
 
+<IfModule mod_php7.c>
+php_flag engine 0
+</IfModule>
+
 # To avoid situation when web server automatically adds extension to path
 Options -MultiViews
 
-- 
GitLab


From 3eab8b83d3fce45ae16edc04fed5100131f64ee7 Mon Sep 17 00:00:00 2001
From: Cari Spruiell <cspruiell@ebay.com>
Date: Thu, 15 Oct 2015 15:09:08 -0500
Subject: [PATCH 037/370] MAGETWO-39125: Some backend menu are not properly
 translated when setting admin interface locale to non en_us.

 - added missing entries to translation files
---
 app/code/Magento/Backend/i18n/de_DE.csv            | 8 ++++++++
 app/code/Magento/Backend/i18n/en_US.csv            | 8 ++++++++
 app/code/Magento/Backend/i18n/es_ES.csv            | 8 ++++++++
 app/code/Magento/Backend/i18n/fr_FR.csv            | 8 ++++++++
 app/code/Magento/Backend/i18n/nl_NL.csv            | 8 ++++++++
 app/code/Magento/Backend/i18n/pt_BR.csv            | 8 ++++++++
 app/code/Magento/Backend/i18n/zh_Hans_CN.csv       | 8 ++++++++
 app/code/Magento/Catalog/i18n/de_DE.csv            | 1 +
 app/code/Magento/Catalog/i18n/en_US.csv            | 1 +
 app/code/Magento/Catalog/i18n/es_ES.csv            | 1 +
 app/code/Magento/Catalog/i18n/fr_FR.csv            | 1 +
 app/code/Magento/Catalog/i18n/nl_NL.csv            | 1 +
 app/code/Magento/Catalog/i18n/pt_BR.csv            | 1 +
 app/code/Magento/Catalog/i18n/zh_Hans_CN.csv       | 1 +
 app/code/Magento/Cms/i18n/de_DE.csv                | 5 +++++
 app/code/Magento/Cms/i18n/en_US.csv                | 5 +++++
 app/code/Magento/Cms/i18n/es_ES.csv                | 5 +++++
 app/code/Magento/Cms/i18n/fr_FR.csv                | 5 +++++
 app/code/Magento/Cms/i18n/nl_NL.csv                | 5 +++++
 app/code/Magento/Cms/i18n/pt_BR.csv                | 5 +++++
 app/code/Magento/Cms/i18n/zh_Hans_CN.csv           | 5 +++++
 app/code/Magento/Customer/i18n/de_DE.csv           | 2 ++
 app/code/Magento/Customer/i18n/en_US.csv           | 2 ++
 app/code/Magento/Customer/i18n/es_ES.csv           | 2 ++
 app/code/Magento/Customer/i18n/fr_FR.csv           | 2 ++
 app/code/Magento/Customer/i18n/nl_NL.csv           | 2 ++
 app/code/Magento/Customer/i18n/pt_BR.csv           | 2 ++
 app/code/Magento/Customer/i18n/zh_Hans_CN.csv      | 2 ++
 app/code/Magento/EncryptionKey/i18n/de_DE.csv      | 1 +
 app/code/Magento/EncryptionKey/i18n/en_US.csv      | 1 +
 app/code/Magento/EncryptionKey/i18n/es_ES.csv      | 1 +
 app/code/Magento/EncryptionKey/i18n/fr_FR.csv      | 1 +
 app/code/Magento/EncryptionKey/i18n/nl_NL.csv      | 1 +
 app/code/Magento/EncryptionKey/i18n/pt_BR.csv      | 1 +
 app/code/Magento/EncryptionKey/i18n/zh_Hans_CN.csv | 1 +
 app/code/Magento/Marketplace/i18n/de_DE.csv        | 1 +
 app/code/Magento/Marketplace/i18n/en_US.csv        | 1 +
 app/code/Magento/Marketplace/i18n/es_ES.csv        | 1 +
 app/code/Magento/Marketplace/i18n/fr_FR.csv        | 1 +
 app/code/Magento/Marketplace/i18n/nl_NL.csv        | 1 +
 app/code/Magento/Marketplace/i18n/pt_BR.csv        | 1 +
 app/code/Magento/Marketplace/i18n/zh_Hans_CN.csv   | 1 +
 app/code/Magento/Newsletter/i18n/de_DE.csv         | 1 +
 app/code/Magento/Newsletter/i18n/en_US.csv         | 1 +
 app/code/Magento/Newsletter/i18n/es_ES.csv         | 1 +
 app/code/Magento/Newsletter/i18n/fr_FR.csv         | 1 +
 app/code/Magento/Newsletter/i18n/nl_NL.csv         | 1 +
 app/code/Magento/Newsletter/i18n/pt_BR.csv         | 1 +
 app/code/Magento/Newsletter/i18n/zh_Hans_CN.csv    | 1 +
 app/code/Magento/Reports/etc/acl.xml               | 2 +-
 app/code/Magento/Reports/i18n/de_DE.csv            | 7 +++++++
 app/code/Magento/Reports/i18n/en_US.csv            | 7 +++++++
 app/code/Magento/Reports/i18n/es_ES.csv            | 7 +++++++
 app/code/Magento/Reports/i18n/fr_FR.csv            | 7 +++++++
 app/code/Magento/Reports/i18n/nl_NL.csv            | 7 +++++++
 app/code/Magento/Reports/i18n/pt_BR.csv            | 7 +++++++
 app/code/Magento/Reports/i18n/zh_Hans_CN.csv       | 7 +++++++
 app/code/Magento/Sales/i18n/de_DE.csv              | 1 +
 app/code/Magento/Sales/i18n/en_US.csv              | 1 +
 app/code/Magento/Sales/i18n/es_ES.csv              | 1 +
 app/code/Magento/Sales/i18n/fr_FR.csv              | 1 +
 app/code/Magento/Sales/i18n/nl_NL.csv              | 1 +
 app/code/Magento/Sales/i18n/pt_BR.csv              | 1 +
 app/code/Magento/Sales/i18n/zh_Hans_CN.csv         | 1 +
 app/code/Magento/Store/i18n/de_DE.csv              | 3 +++
 app/code/Magento/Store/i18n/en_US.csv              | 3 +++
 app/code/Magento/Store/i18n/es_ES.csv              | 3 +++
 app/code/Magento/Store/i18n/fr_FR.csv              | 3 +++
 app/code/Magento/Store/i18n/nl_NL.csv              | 3 +++
 app/code/Magento/Store/i18n/pt_BR.csv              | 3 +++
 app/code/Magento/Store/i18n/zh_Hans_CN.csv         | 3 +++
 app/code/Magento/Tax/i18n/de_DE.csv                | 2 ++
 app/code/Magento/Tax/i18n/en_US.csv                | 2 ++
 app/code/Magento/Tax/i18n/es_ES.csv                | 2 ++
 app/code/Magento/Tax/i18n/fr_FR.csv                | 2 ++
 app/code/Magento/Tax/i18n/nl_NL.csv                | 2 ++
 app/code/Magento/Tax/i18n/pt_BR.csv                | 2 ++
 app/code/Magento/Tax/i18n/zh_Hans_CN.csv           | 2 ++
 app/code/Magento/User/i18n/de_DE.csv               | 2 ++
 app/code/Magento/User/i18n/en_US.csv               | 2 ++
 app/code/Magento/User/i18n/es_ES.csv               | 2 ++
 app/code/Magento/User/i18n/fr_FR.csv               | 2 ++
 app/code/Magento/User/i18n/nl_NL.csv               | 2 ++
 app/code/Magento/User/i18n/pt_BR.csv               | 2 ++
 app/code/Magento/User/i18n/zh_Hans_CN.csv          | 2 ++
 85 files changed, 239 insertions(+), 1 deletion(-)
 create mode 100644 app/code/Magento/Marketplace/i18n/de_DE.csv
 create mode 100644 app/code/Magento/Marketplace/i18n/en_US.csv
 create mode 100644 app/code/Magento/Marketplace/i18n/es_ES.csv
 create mode 100644 app/code/Magento/Marketplace/i18n/fr_FR.csv
 create mode 100644 app/code/Magento/Marketplace/i18n/nl_NL.csv
 create mode 100644 app/code/Magento/Marketplace/i18n/pt_BR.csv
 create mode 100644 app/code/Magento/Marketplace/i18n/zh_Hans_CN.csv

diff --git a/app/code/Magento/Backend/i18n/de_DE.csv b/app/code/Magento/Backend/i18n/de_DE.csv
index 8bd82b41c20..7c6b4dab599 100644
--- a/app/code/Magento/Backend/i18n/de_DE.csv
+++ b/app/code/Magento/Backend/i18n/de_DE.csv
@@ -606,3 +606,11 @@ Tags,Tags
 Options,Options
 "Magento Admin","Magento Admin"
 "Community Edition","Community Edition"
+Marketing,Marketing
+Communications,Communications
+"SEO & Search","SEO & Search"
+"User Content","User Content"
+"Data Transfer","Data Transfer"
+"Import History","Import History"
+Extensions,Extensions
+"Web Setup Wizard","Web Setup Wizard"
diff --git a/app/code/Magento/Backend/i18n/en_US.csv b/app/code/Magento/Backend/i18n/en_US.csv
index 8bd82b41c20..7c6b4dab599 100644
--- a/app/code/Magento/Backend/i18n/en_US.csv
+++ b/app/code/Magento/Backend/i18n/en_US.csv
@@ -606,3 +606,11 @@ Tags,Tags
 Options,Options
 "Magento Admin","Magento Admin"
 "Community Edition","Community Edition"
+Marketing,Marketing
+Communications,Communications
+"SEO & Search","SEO & Search"
+"User Content","User Content"
+"Data Transfer","Data Transfer"
+"Import History","Import History"
+Extensions,Extensions
+"Web Setup Wizard","Web Setup Wizard"
diff --git a/app/code/Magento/Backend/i18n/es_ES.csv b/app/code/Magento/Backend/i18n/es_ES.csv
index 8bd82b41c20..7c6b4dab599 100644
--- a/app/code/Magento/Backend/i18n/es_ES.csv
+++ b/app/code/Magento/Backend/i18n/es_ES.csv
@@ -606,3 +606,11 @@ Tags,Tags
 Options,Options
 "Magento Admin","Magento Admin"
 "Community Edition","Community Edition"
+Marketing,Marketing
+Communications,Communications
+"SEO & Search","SEO & Search"
+"User Content","User Content"
+"Data Transfer","Data Transfer"
+"Import History","Import History"
+Extensions,Extensions
+"Web Setup Wizard","Web Setup Wizard"
diff --git a/app/code/Magento/Backend/i18n/fr_FR.csv b/app/code/Magento/Backend/i18n/fr_FR.csv
index 8bd82b41c20..7c6b4dab599 100644
--- a/app/code/Magento/Backend/i18n/fr_FR.csv
+++ b/app/code/Magento/Backend/i18n/fr_FR.csv
@@ -606,3 +606,11 @@ Tags,Tags
 Options,Options
 "Magento Admin","Magento Admin"
 "Community Edition","Community Edition"
+Marketing,Marketing
+Communications,Communications
+"SEO & Search","SEO & Search"
+"User Content","User Content"
+"Data Transfer","Data Transfer"
+"Import History","Import History"
+Extensions,Extensions
+"Web Setup Wizard","Web Setup Wizard"
diff --git a/app/code/Magento/Backend/i18n/nl_NL.csv b/app/code/Magento/Backend/i18n/nl_NL.csv
index 8bd82b41c20..7c6b4dab599 100644
--- a/app/code/Magento/Backend/i18n/nl_NL.csv
+++ b/app/code/Magento/Backend/i18n/nl_NL.csv
@@ -606,3 +606,11 @@ Tags,Tags
 Options,Options
 "Magento Admin","Magento Admin"
 "Community Edition","Community Edition"
+Marketing,Marketing
+Communications,Communications
+"SEO & Search","SEO & Search"
+"User Content","User Content"
+"Data Transfer","Data Transfer"
+"Import History","Import History"
+Extensions,Extensions
+"Web Setup Wizard","Web Setup Wizard"
diff --git a/app/code/Magento/Backend/i18n/pt_BR.csv b/app/code/Magento/Backend/i18n/pt_BR.csv
index 8bd82b41c20..7c6b4dab599 100644
--- a/app/code/Magento/Backend/i18n/pt_BR.csv
+++ b/app/code/Magento/Backend/i18n/pt_BR.csv
@@ -606,3 +606,11 @@ Tags,Tags
 Options,Options
 "Magento Admin","Magento Admin"
 "Community Edition","Community Edition"
+Marketing,Marketing
+Communications,Communications
+"SEO & Search","SEO & Search"
+"User Content","User Content"
+"Data Transfer","Data Transfer"
+"Import History","Import History"
+Extensions,Extensions
+"Web Setup Wizard","Web Setup Wizard"
diff --git a/app/code/Magento/Backend/i18n/zh_Hans_CN.csv b/app/code/Magento/Backend/i18n/zh_Hans_CN.csv
index 8bd82b41c20..7c6b4dab599 100644
--- a/app/code/Magento/Backend/i18n/zh_Hans_CN.csv
+++ b/app/code/Magento/Backend/i18n/zh_Hans_CN.csv
@@ -606,3 +606,11 @@ Tags,Tags
 Options,Options
 "Magento Admin","Magento Admin"
 "Community Edition","Community Edition"
+Marketing,Marketing
+Communications,Communications
+"SEO & Search","SEO & Search"
+"User Content","User Content"
+"Data Transfer","Data Transfer"
+"Import History","Import History"
+Extensions,Extensions
+"Web Setup Wizard","Web Setup Wizard"
diff --git a/app/code/Magento/Catalog/i18n/de_DE.csv b/app/code/Magento/Catalog/i18n/de_DE.csv
index ecbd2cb0211..fc8b41620da 100644
--- a/app/code/Magento/Catalog/i18n/de_DE.csv
+++ b/app/code/Magento/Catalog/i18n/de_DE.csv
@@ -161,6 +161,7 @@ Empty,Leer
 "Add New Attribute Set","Neuer Eigenschaftensatz hinzufügen"
 "Add New Set","Neuen Satz hinzufügen"
 "Product Templates","Product Templates"
+"Product Template","Product Template"
 "Close Window","Fenster Schließen"
 "New Product","Neues Produkt"
 "Save & Edit","Save & Edit"
diff --git a/app/code/Magento/Catalog/i18n/en_US.csv b/app/code/Magento/Catalog/i18n/en_US.csv
index 2cfe7083932..9c436a2bc00 100644
--- a/app/code/Magento/Catalog/i18n/en_US.csv
+++ b/app/code/Magento/Catalog/i18n/en_US.csv
@@ -161,6 +161,7 @@ Empty,Empty
 "Add New Attribute Set","Add New Attribute Set"
 "Add New Set","Add New Set"
 "Product Templates","Product Templates"
+"Product Template","Product Template"
 "Close Window","Close Window"
 "New Product","New Product"
 "Save & Edit","Save & Edit"
diff --git a/app/code/Magento/Catalog/i18n/es_ES.csv b/app/code/Magento/Catalog/i18n/es_ES.csv
index 83b48a5ad10..f86f269a69c 100644
--- a/app/code/Magento/Catalog/i18n/es_ES.csv
+++ b/app/code/Magento/Catalog/i18n/es_ES.csv
@@ -161,6 +161,7 @@ Empty,Vacío(a)
 "Add New Attribute Set","Agregar nuevo conjunto de atributos"
 "Add New Set","Agregar nuevo conjunto"
 "Product Templates","Product Templates"
+"Product Template","Product Template"
 "Close Window","Cerrar Ventana"
 "New Product","Nuevo producto"
 "Save & Edit","Save & Edit"
diff --git a/app/code/Magento/Catalog/i18n/fr_FR.csv b/app/code/Magento/Catalog/i18n/fr_FR.csv
index 62cb82be609..0f6bdab5223 100644
--- a/app/code/Magento/Catalog/i18n/fr_FR.csv
+++ b/app/code/Magento/Catalog/i18n/fr_FR.csv
@@ -161,6 +161,7 @@ Empty,Vide
 "Add New Attribute Set","Ajouter un nouveau jeu d'attributs"
 "Add New Set","Ajouter une nouvelle série"
 "Product Templates","Product Templates"
+"Product Template","Product Template"
 "Close Window","Fermer la fenêtre"
 "New Product","Nouveau produit"
 "Save & Edit","Save & Edit"
diff --git a/app/code/Magento/Catalog/i18n/nl_NL.csv b/app/code/Magento/Catalog/i18n/nl_NL.csv
index ee1eb9baee9..9f1dbdbb839 100644
--- a/app/code/Magento/Catalog/i18n/nl_NL.csv
+++ b/app/code/Magento/Catalog/i18n/nl_NL.csv
@@ -161,6 +161,7 @@ Empty,Leeg
 "Add New Attribute Set","Voeg Nieuwe Attribuut Set toe"
 "Add New Set","Voeg Nieuwe Reeks Toe"
 "Product Templates","Product Templates"
+"Product Template","Product Template"
 "Close Window","Venster Sluiten"
 "New Product","Nieuw Product"
 "Save & Edit","Save & Edit"
diff --git a/app/code/Magento/Catalog/i18n/pt_BR.csv b/app/code/Magento/Catalog/i18n/pt_BR.csv
index 3e0887c8754..fbce46b4d56 100644
--- a/app/code/Magento/Catalog/i18n/pt_BR.csv
+++ b/app/code/Magento/Catalog/i18n/pt_BR.csv
@@ -161,6 +161,7 @@ Empty,Vazio
 "Add New Attribute Set","Adicionar Novo Conjunto de Atributos"
 "Add New Set","Adicionar Novo Conjunto"
 "Product Templates","Product Templates"
+"Product Template","Product Template"
 "Close Window","Fechar Janela"
 "New Product","Novo Produto"
 "Save & Edit","Save & Edit"
diff --git a/app/code/Magento/Catalog/i18n/zh_Hans_CN.csv b/app/code/Magento/Catalog/i18n/zh_Hans_CN.csv
index 4774b64706d..d600494d742 100644
--- a/app/code/Magento/Catalog/i18n/zh_Hans_CN.csv
+++ b/app/code/Magento/Catalog/i18n/zh_Hans_CN.csv
@@ -161,6 +161,7 @@ Empty,空
 "Add New Attribute Set",添加新属性集
 "Add New Set",添加新集
 "Product Templates","Product Templates"
+"Product Template","Product Template"
 "Close Window",关闭窗口
 "New Product",新产品
 "Save & Edit","Save & Edit"
diff --git a/app/code/Magento/Cms/i18n/de_DE.csv b/app/code/Magento/Cms/i18n/de_DE.csv
index 09eb96234df..e3dc8b9b189 100644
--- a/app/code/Magento/Cms/i18n/de_DE.csv
+++ b/app/code/Magento/Cms/i18n/de_DE.csv
@@ -119,3 +119,8 @@ Template,Vorlage
 "CMS Static Block","CMS statischer Block"
 "Contents of a Static Block","Inhalte eines statischen Blocks"
 "CMS Static Block Default Template","CMS statischer Block Standardvorlage"
+Elements,Elements
+Blocks,Blocks
+Widgets,Widgets
+Themes,Themes
+Schedule,Schedule
diff --git a/app/code/Magento/Cms/i18n/en_US.csv b/app/code/Magento/Cms/i18n/en_US.csv
index 03a82317472..58485f3d9d2 100644
--- a/app/code/Magento/Cms/i18n/en_US.csv
+++ b/app/code/Magento/Cms/i18n/en_US.csv
@@ -119,3 +119,8 @@ Template,Template
 "CMS Static Block","CMS Static Block"
 "Contents of a Static Block","Contents of a Static Block"
 "CMS Static Block Default Template","CMS Static Block Default Template"
+Elements,Elements
+Blocks,Blocks
+Widgets,Widgets
+Themes,Themes
+Schedule,Schedule
diff --git a/app/code/Magento/Cms/i18n/es_ES.csv b/app/code/Magento/Cms/i18n/es_ES.csv
index 90bcb395cd0..62584b67995 100644
--- a/app/code/Magento/Cms/i18n/es_ES.csv
+++ b/app/code/Magento/Cms/i18n/es_ES.csv
@@ -119,3 +119,8 @@ Template,Plantilla
 "CMS Static Block","Bloque estático CMS"
 "Contents of a Static Block","Cotenidos de un bloque estático"
 "CMS Static Block Default Template","Tema por defecto del bloque estático CMS"
+Elements,Elements
+Blocks,Blocks
+Widgets,Widgets
+Themes,Themes
+Schedule,Schedule
diff --git a/app/code/Magento/Cms/i18n/fr_FR.csv b/app/code/Magento/Cms/i18n/fr_FR.csv
index 3feb0add8c1..92e0c3ab029 100644
--- a/app/code/Magento/Cms/i18n/fr_FR.csv
+++ b/app/code/Magento/Cms/i18n/fr_FR.csv
@@ -119,3 +119,8 @@ Template,"Modèle visuel"
 "CMS Static Block","Bloc statique du CMS"
 "Contents of a Static Block","Contenu des blocs statiques"
 "CMS Static Block Default Template","Modèle de bloc statique par défaut du CMS"
+Elements,Elements
+Blocks,Blocks
+Widgets,Widgets
+Themes,Themes
+Schedule,Schedule
diff --git a/app/code/Magento/Cms/i18n/nl_NL.csv b/app/code/Magento/Cms/i18n/nl_NL.csv
index 259123f1fe6..ef34949cc0e 100644
--- a/app/code/Magento/Cms/i18n/nl_NL.csv
+++ b/app/code/Magento/Cms/i18n/nl_NL.csv
@@ -119,3 +119,8 @@ Template,Thema
 "CMS Static Block","CMS statisch blok"
 "Contents of a Static Block","Inhoud van een statisch blok"
 "CMS Static Block Default Template","CMS statisch blok standaard thema"
+Elements,Elements
+Blocks,Blocks
+Widgets,Widgets
+Themes,Themes
+Schedule,Schedule
diff --git a/app/code/Magento/Cms/i18n/pt_BR.csv b/app/code/Magento/Cms/i18n/pt_BR.csv
index daf3cf4a6f5..706c52533ca 100644
--- a/app/code/Magento/Cms/i18n/pt_BR.csv
+++ b/app/code/Magento/Cms/i18n/pt_BR.csv
@@ -119,3 +119,8 @@ Template,Modelo
 "CMS Static Block","Bloco Estático do CMS"
 "Contents of a Static Block","Conteúdos de um Bloco Estático"
 "CMS Static Block Default Template","Template Padrão do Bloco Estático do CMS"
+Elements,Elements
+Blocks,Blocks
+Widgets,Widgets
+Themes,Themes
+Schedule,Schedule
diff --git a/app/code/Magento/Cms/i18n/zh_Hans_CN.csv b/app/code/Magento/Cms/i18n/zh_Hans_CN.csv
index e27e81aa3b8..338aa81bc8c 100644
--- a/app/code/Magento/Cms/i18n/zh_Hans_CN.csv
+++ b/app/code/Magento/Cms/i18n/zh_Hans_CN.csv
@@ -119,3 +119,8 @@ Template,模板
 "CMS Static Block","CMS 静态区块"
 "Contents of a Static Block",静态区块的内容
 "CMS Static Block Default Template","CMS 静态区块默认模板"
+Elements,Elements
+Blocks,Blocks
+Widgets,Widgets
+Themes,Themes
+Schedule,Schedule
diff --git a/app/code/Magento/Customer/i18n/de_DE.csv b/app/code/Magento/Customer/i18n/de_DE.csv
index e138d63071c..ec5acd01bec 100644
--- a/app/code/Magento/Customer/i18n/de_DE.csv
+++ b/app/code/Magento/Customer/i18n/de_DE.csv
@@ -415,3 +415,5 @@ n/a,"Keine Angabe"
 "Password forgotten","Passwort vergessen"
 "My Dashboard","Meine Startseite"
 "You are now logged out","Sie sind jetzt abgemeldet"
+"All Customers", "All Customers"
+"Now Online", "Now Online"
diff --git a/app/code/Magento/Customer/i18n/en_US.csv b/app/code/Magento/Customer/i18n/en_US.csv
index f3ed0e19fb9..24d087d95d0 100644
--- a/app/code/Magento/Customer/i18n/en_US.csv
+++ b/app/code/Magento/Customer/i18n/en_US.csv
@@ -414,3 +414,5 @@ n/a,n/a
 "Password forgotten","Password forgotten"
 "My Dashboard","My Dashboard"
 "You are now logged out","You are now logged out"
+"All Customers", "All Customers"
+"Now Online", "Now Online"
diff --git a/app/code/Magento/Customer/i18n/es_ES.csv b/app/code/Magento/Customer/i18n/es_ES.csv
index 6ee5727639a..a2d8a49b8e6 100644
--- a/app/code/Magento/Customer/i18n/es_ES.csv
+++ b/app/code/Magento/Customer/i18n/es_ES.csv
@@ -414,3 +414,5 @@ n/a,n/d
 "Password forgotten","Olvido de contraseña"
 "My Dashboard","Mi panel de control"
 "You are now logged out","Ha cerrado sesión."
+"All Customers", "All Customers"
+"Now Online", "Now Online"
diff --git a/app/code/Magento/Customer/i18n/fr_FR.csv b/app/code/Magento/Customer/i18n/fr_FR.csv
index e32c2759c36..ded34d3149b 100644
--- a/app/code/Magento/Customer/i18n/fr_FR.csv
+++ b/app/code/Magento/Customer/i18n/fr_FR.csv
@@ -414,3 +414,5 @@ n/a,n/a
 "Password forgotten","Mot de passe oublié"
 "My Dashboard","Mon espace de travail"
 "You are now logged out","Vous êtes maintenant déconnecté."
+"All Customers", "All Customers"
+"Now Online", "Now Online"
diff --git a/app/code/Magento/Customer/i18n/nl_NL.csv b/app/code/Magento/Customer/i18n/nl_NL.csv
index bde6b074652..4953a878356 100644
--- a/app/code/Magento/Customer/i18n/nl_NL.csv
+++ b/app/code/Magento/Customer/i18n/nl_NL.csv
@@ -414,3 +414,5 @@ n/a,n.v.t.
 "Password forgotten","Wachtwoord vergeten"
 "My Dashboard","Mijn Dashboard"
 "You are now logged out","U bent nu uitgelogd"
+"All Customers", "All Customers"
+"Now Online", "Now Online"
diff --git a/app/code/Magento/Customer/i18n/pt_BR.csv b/app/code/Magento/Customer/i18n/pt_BR.csv
index b02e6801702..e3f1d8e704a 100644
--- a/app/code/Magento/Customer/i18n/pt_BR.csv
+++ b/app/code/Magento/Customer/i18n/pt_BR.csv
@@ -414,3 +414,5 @@ n/a,n/d
 "Password forgotten","Senha esquecida"
 "My Dashboard","Meu Painel"
 "You are now logged out","Agora você está desconectado"
+"All Customers", "All Customers"
+"Now Online", "Now Online"
diff --git a/app/code/Magento/Customer/i18n/zh_Hans_CN.csv b/app/code/Magento/Customer/i18n/zh_Hans_CN.csv
index e344fa595c3..927f8db2406 100644
--- a/app/code/Magento/Customer/i18n/zh_Hans_CN.csv
+++ b/app/code/Magento/Customer/i18n/zh_Hans_CN.csv
@@ -414,3 +414,5 @@ n/a,不可用
 "Password forgotten",密码忘记
 "My Dashboard",我的仪表板
 "You are now logged out",您已注销
+"All Customers", "All Customers"
+"Now Online", "Now Online"
diff --git a/app/code/Magento/EncryptionKey/i18n/de_DE.csv b/app/code/Magento/EncryptionKey/i18n/de_DE.csv
index 6f364baa1ff..705d98a99d2 100644
--- a/app/code/Magento/EncryptionKey/i18n/de_DE.csv
+++ b/app/code/Magento/EncryptionKey/i18n/de_DE.csv
@@ -17,3 +17,4 @@ Username,Benutzername
 "The encryption key format is invalid.","The encryption key format is invalid."
 "File %1 is not writeable.","File %1 is not writeable."
 "Encryption Key Change","Änderung des Verschlüsselungscodes"
+"Manage Encryption Key","Manage Encryption Key"
diff --git a/app/code/Magento/EncryptionKey/i18n/en_US.csv b/app/code/Magento/EncryptionKey/i18n/en_US.csv
index 792bc2f60f5..f111edc33ab 100644
--- a/app/code/Magento/EncryptionKey/i18n/en_US.csv
+++ b/app/code/Magento/EncryptionKey/i18n/en_US.csv
@@ -17,3 +17,4 @@ Username,Username
 "The encryption key format is invalid.","The encryption key format is invalid."
 "File %1 is not writeable.","File %1 is not writeable."
 "Encryption Key Change","Encryption Key Change"
+"Manage Encryption Key","Manage Encryption Key"
diff --git a/app/code/Magento/EncryptionKey/i18n/es_ES.csv b/app/code/Magento/EncryptionKey/i18n/es_ES.csv
index 0840d0cb0b5..16fe7d35f56 100644
--- a/app/code/Magento/EncryptionKey/i18n/es_ES.csv
+++ b/app/code/Magento/EncryptionKey/i18n/es_ES.csv
@@ -17,3 +17,4 @@ Username,"Nombre de Usuario"
 "The encryption key format is invalid.","The encryption key format is invalid."
 "File %1 is not writeable.","File %1 is not writeable."
 "Encryption Key Change","Cambio de clave de encriptación"
+"Manage Encryption Key","Manage Encryption Key"
diff --git a/app/code/Magento/EncryptionKey/i18n/fr_FR.csv b/app/code/Magento/EncryptionKey/i18n/fr_FR.csv
index 0604b96989a..6311d1da4f3 100644
--- a/app/code/Magento/EncryptionKey/i18n/fr_FR.csv
+++ b/app/code/Magento/EncryptionKey/i18n/fr_FR.csv
@@ -17,3 +17,4 @@ Username,"Nom d'utilisateur"
 "The encryption key format is invalid.","The encryption key format is invalid."
 "File %1 is not writeable.","File %1 is not writeable."
 "Encryption Key Change","Modification Clé de Chiffrement"
+"Manage Encryption Key","Manage Encryption Key"
diff --git a/app/code/Magento/EncryptionKey/i18n/nl_NL.csv b/app/code/Magento/EncryptionKey/i18n/nl_NL.csv
index cffae21b418..11268b36d5d 100644
--- a/app/code/Magento/EncryptionKey/i18n/nl_NL.csv
+++ b/app/code/Magento/EncryptionKey/i18n/nl_NL.csv
@@ -17,3 +17,4 @@ Username,Gebruikersnaam
 "The encryption key format is invalid.","The encryption key format is invalid."
 "File %1 is not writeable.","File %1 is not writeable."
 "Encryption Key Change","Encryptie Code Veranderen"
+"Manage Encryption Key","Manage Encryption Key"
diff --git a/app/code/Magento/EncryptionKey/i18n/pt_BR.csv b/app/code/Magento/EncryptionKey/i18n/pt_BR.csv
index 495e0c38d96..2529b0b015a 100644
--- a/app/code/Magento/EncryptionKey/i18n/pt_BR.csv
+++ b/app/code/Magento/EncryptionKey/i18n/pt_BR.csv
@@ -17,3 +17,4 @@ Username,"Nome do usuário"
 "The encryption key format is invalid.","The encryption key format is invalid."
 "File %1 is not writeable.","File %1 is not writeable."
 "Encryption Key Change","Mudança na Chave de Criptografia"
+"Manage Encryption Key","Manage Encryption Key"
diff --git a/app/code/Magento/EncryptionKey/i18n/zh_Hans_CN.csv b/app/code/Magento/EncryptionKey/i18n/zh_Hans_CN.csv
index 3b5711dc0af..02b9c53f97b 100644
--- a/app/code/Magento/EncryptionKey/i18n/zh_Hans_CN.csv
+++ b/app/code/Magento/EncryptionKey/i18n/zh_Hans_CN.csv
@@ -17,3 +17,4 @@ Username,用户名
 "The encryption key format is invalid.","The encryption key format is invalid."
 "File %1 is not writeable.","File %1 is not writeable."
 "Encryption Key Change",加密密钥已更改
+"Manage Encryption Key","Manage Encryption Key"
diff --git a/app/code/Magento/Marketplace/i18n/de_DE.csv b/app/code/Magento/Marketplace/i18n/de_DE.csv
new file mode 100644
index 00000000000..e0a266e1291
--- /dev/null
+++ b/app/code/Magento/Marketplace/i18n/de_DE.csv
@@ -0,0 +1 @@
+"Find Partners & Extensions","Find Partners & Extensions"
diff --git a/app/code/Magento/Marketplace/i18n/en_US.csv b/app/code/Magento/Marketplace/i18n/en_US.csv
new file mode 100644
index 00000000000..e0a266e1291
--- /dev/null
+++ b/app/code/Magento/Marketplace/i18n/en_US.csv
@@ -0,0 +1 @@
+"Find Partners & Extensions","Find Partners & Extensions"
diff --git a/app/code/Magento/Marketplace/i18n/es_ES.csv b/app/code/Magento/Marketplace/i18n/es_ES.csv
new file mode 100644
index 00000000000..e0a266e1291
--- /dev/null
+++ b/app/code/Magento/Marketplace/i18n/es_ES.csv
@@ -0,0 +1 @@
+"Find Partners & Extensions","Find Partners & Extensions"
diff --git a/app/code/Magento/Marketplace/i18n/fr_FR.csv b/app/code/Magento/Marketplace/i18n/fr_FR.csv
new file mode 100644
index 00000000000..e0a266e1291
--- /dev/null
+++ b/app/code/Magento/Marketplace/i18n/fr_FR.csv
@@ -0,0 +1 @@
+"Find Partners & Extensions","Find Partners & Extensions"
diff --git a/app/code/Magento/Marketplace/i18n/nl_NL.csv b/app/code/Magento/Marketplace/i18n/nl_NL.csv
new file mode 100644
index 00000000000..e0a266e1291
--- /dev/null
+++ b/app/code/Magento/Marketplace/i18n/nl_NL.csv
@@ -0,0 +1 @@
+"Find Partners & Extensions","Find Partners & Extensions"
diff --git a/app/code/Magento/Marketplace/i18n/pt_BR.csv b/app/code/Magento/Marketplace/i18n/pt_BR.csv
new file mode 100644
index 00000000000..e0a266e1291
--- /dev/null
+++ b/app/code/Magento/Marketplace/i18n/pt_BR.csv
@@ -0,0 +1 @@
+"Find Partners & Extensions","Find Partners & Extensions"
diff --git a/app/code/Magento/Marketplace/i18n/zh_Hans_CN.csv b/app/code/Magento/Marketplace/i18n/zh_Hans_CN.csv
new file mode 100644
index 00000000000..e0a266e1291
--- /dev/null
+++ b/app/code/Magento/Marketplace/i18n/zh_Hans_CN.csv
@@ -0,0 +1 @@
+"Find Partners & Extensions","Find Partners & Extensions"
diff --git a/app/code/Magento/Newsletter/i18n/de_DE.csv b/app/code/Magento/Newsletter/i18n/de_DE.csv
index 2fc3bee3bc6..98a16ae2e77 100644
--- a/app/code/Magento/Newsletter/i18n/de_DE.csv
+++ b/app/code/Magento/Newsletter/i18n/de_DE.csv
@@ -138,3 +138,4 @@ Unsubscribe,"Abonnement kündigen"
 Subscribed,Abonniert
 Unsubscribed,"Abonnements gekündigt"
 Unconfirmed,Unbestätigt
+"Newsletter Template","Newsletter Vorlage"
diff --git a/app/code/Magento/Newsletter/i18n/en_US.csv b/app/code/Magento/Newsletter/i18n/en_US.csv
index ac79fef143e..a30b48f0c93 100644
--- a/app/code/Magento/Newsletter/i18n/en_US.csv
+++ b/app/code/Magento/Newsletter/i18n/en_US.csv
@@ -138,3 +138,4 @@ Unsubscribe,Unsubscribe
 Subscribed,Subscribed
 Unsubscribed,Unsubscribed
 Unconfirmed,Unconfirmed
+"Newsletter Template","Newsletter Template"
diff --git a/app/code/Magento/Newsletter/i18n/es_ES.csv b/app/code/Magento/Newsletter/i18n/es_ES.csv
index 3be9617100d..43c2e724ea7 100644
--- a/app/code/Magento/Newsletter/i18n/es_ES.csv
+++ b/app/code/Magento/Newsletter/i18n/es_ES.csv
@@ -138,3 +138,4 @@ Unsubscribe,"Cancelar suscripción"
 Subscribed,Suscrito
 Unsubscribed,"Suscripción cancelada"
 Unconfirmed,"Sin confirmar"
+"Newsletter Template","Newsletter Template"
diff --git a/app/code/Magento/Newsletter/i18n/fr_FR.csv b/app/code/Magento/Newsletter/i18n/fr_FR.csv
index cec853133f4..65134aa5e43 100644
--- a/app/code/Magento/Newsletter/i18n/fr_FR.csv
+++ b/app/code/Magento/Newsletter/i18n/fr_FR.csv
@@ -138,3 +138,4 @@ Unsubscribe,"Se désinscrire"
 Subscribed,Inscrit
 Unsubscribed,Désinscrit
 Unconfirmed,"Non confirmé"
+"Newsletter Template","Newsletter Template"
diff --git a/app/code/Magento/Newsletter/i18n/nl_NL.csv b/app/code/Magento/Newsletter/i18n/nl_NL.csv
index 9280f66bdc0..7999b25e129 100644
--- a/app/code/Magento/Newsletter/i18n/nl_NL.csv
+++ b/app/code/Magento/Newsletter/i18n/nl_NL.csv
@@ -138,3 +138,4 @@ Unsubscribe,Uitschrijven
 Subscribed,Uitschrijven
 Unsubscribed,Uitgeschreven
 Unconfirmed,Onbevestigd
+"Newsletter Template","Newsletter Template"
diff --git a/app/code/Magento/Newsletter/i18n/pt_BR.csv b/app/code/Magento/Newsletter/i18n/pt_BR.csv
index 4ec9dd0d67d..cb2fecc6a59 100644
--- a/app/code/Magento/Newsletter/i18n/pt_BR.csv
+++ b/app/code/Magento/Newsletter/i18n/pt_BR.csv
@@ -138,3 +138,4 @@ Unsubscribe,Desinscrever
 Subscribed,Assinado
 Unsubscribed,Desinscrito
 Unconfirmed,"Não Confirmado"
+"Newsletter Template","Newsletter Template"
diff --git a/app/code/Magento/Newsletter/i18n/zh_Hans_CN.csv b/app/code/Magento/Newsletter/i18n/zh_Hans_CN.csv
index 96d65bc5352..71be218444f 100644
--- a/app/code/Magento/Newsletter/i18n/zh_Hans_CN.csv
+++ b/app/code/Magento/Newsletter/i18n/zh_Hans_CN.csv
@@ -138,3 +138,4 @@ Unsubscribe,退订
 Subscribed,已订阅
 Unsubscribed,已退订
 Unconfirmed,未确认
+"Newsletter Template","Newsletter Template"
diff --git a/app/code/Magento/Reports/etc/acl.xml b/app/code/Magento/Reports/etc/acl.xml
index 834fcdc5285..6d6972fd734 100644
--- a/app/code/Magento/Reports/etc/acl.xml
+++ b/app/code/Magento/Reports/etc/acl.xml
@@ -42,7 +42,7 @@
                         <resource id="Magento_Reports::downloads" title="Downloads" sortOrder="50" />
                     </resource>
                     <resource id="Magento_Reports::statistics" title="Statistics" sortOrder="80">
-                        <resource id="Magento_Reports::statistics_refresh" title="Refresh statistics" sortOrder="10"/>
+                        <resource id="Magento_Reports::statistics_refresh" title="Refresh Statistics" sortOrder="10"/>
                     </resource>
                 </resource>
                 <resource id="Magento_Backend::stores">
diff --git a/app/code/Magento/Reports/i18n/de_DE.csv b/app/code/Magento/Reports/i18n/de_DE.csv
index b2bd8ea9e79..c751048ec4f 100644
--- a/app/code/Magento/Reports/i18n/de_DE.csv
+++ b/app/code/Magento/Reports/i18n/de_DE.csv
@@ -218,3 +218,10 @@ Hits,Treffer
 "Refresh Statistics for the Last Day","Aktualisiere Statistik für den letzten Tag"
 "Are you sure you want to refresh statistics for last day?","Are you sure you want to refresh statistics for last day?"
 undefined,undefiniert
+"Products in Cart","Artikel in den Warenkörbe"
+"By Customers","By Customers"
+"By Products","By Products"
+Refunds,Refunds
+"PayPal Settlement","PayPal Settlement"
+"Order Count","Order Count"
+Bestseller,Bestseller
diff --git a/app/code/Magento/Reports/i18n/en_US.csv b/app/code/Magento/Reports/i18n/en_US.csv
index 03173d8b230..3ab4dda3fe6 100644
--- a/app/code/Magento/Reports/i18n/en_US.csv
+++ b/app/code/Magento/Reports/i18n/en_US.csv
@@ -219,3 +219,10 @@ Hits,Hits
 "Refresh Statistics for the Last Day","Refresh Statistics for the Last Day"
 "Are you sure you want to refresh statistics for last day?","Are you sure you want to refresh statistics for last day?"
 undefined,undefined
+"Products in Cart","Products in Cart"
+"By Customers","By Customers"
+"By Products","By Products"
+Refunds,Refunds
+"PayPal Settlement","PayPal Settlement"
+"Order Count","Order Count"
+Bestseller,Bestseller
diff --git a/app/code/Magento/Reports/i18n/es_ES.csv b/app/code/Magento/Reports/i18n/es_ES.csv
index 26595380f01..b025859c92e 100644
--- a/app/code/Magento/Reports/i18n/es_ES.csv
+++ b/app/code/Magento/Reports/i18n/es_ES.csv
@@ -218,3 +218,10 @@ Hits,Visitas.
 "Refresh Statistics for the Last Day","Actualiza estadísticas del último día"
 "Are you sure you want to refresh statistics for last day?","Are you sure you want to refresh statistics for last day?"
 undefined,Indefinido
+"Products in Cart","Products in Cart"
+"By Customers","By Customers"
+"By Products","By Products"
+Refunds,Refunds
+"PayPal Settlement","PayPal Settlement"
+"Order Count","Order Count"
+Bestseller,Bestseller
diff --git a/app/code/Magento/Reports/i18n/fr_FR.csv b/app/code/Magento/Reports/i18n/fr_FR.csv
index 488b76e42c4..de79ece2ef8 100644
--- a/app/code/Magento/Reports/i18n/fr_FR.csv
+++ b/app/code/Magento/Reports/i18n/fr_FR.csv
@@ -218,3 +218,10 @@ Hits,Clics
 "Refresh Statistics for the Last Day","Rafraîchir les statistiques de la veille"
 "Are you sure you want to refresh statistics for last day?","Are you sure you want to refresh statistics for last day?"
 undefined,indéfini
+"Products in Cart","Products in Cart"
+"By Customers","By Customers"
+"By Products","By Products"
+Refunds,Refunds
+"PayPal Settlement","PayPal Settlement"
+"Order Count","Order Count"
+Bestseller,Bestseller
diff --git a/app/code/Magento/Reports/i18n/nl_NL.csv b/app/code/Magento/Reports/i18n/nl_NL.csv
index d35cbaf6f85..f8b5dc7e7c8 100644
--- a/app/code/Magento/Reports/i18n/nl_NL.csv
+++ b/app/code/Magento/Reports/i18n/nl_NL.csv
@@ -218,3 +218,10 @@ Hits,Bezoeken
 "Refresh Statistics for the Last Day","Statistiek voor de laatste dag verversen"
 "Are you sure you want to refresh statistics for last day?","Are you sure you want to refresh statistics for last day?"
 undefined,ongedefinieerd
+"Products in Cart","Products in Cart"
+"By Customers","By Customers"
+"By Products","By Products"
+Refunds,Refunds
+"PayPal Settlement","PayPal Settlement"
+"Order Count","Order Count"
+Bestseller,Bestseller
diff --git a/app/code/Magento/Reports/i18n/pt_BR.csv b/app/code/Magento/Reports/i18n/pt_BR.csv
index 03072fb8a8d..8ef822b53a2 100644
--- a/app/code/Magento/Reports/i18n/pt_BR.csv
+++ b/app/code/Magento/Reports/i18n/pt_BR.csv
@@ -218,3 +218,10 @@ Hits,Críticas
 "Refresh Statistics for the Last Day","Atualizar estatísticas para o Último dia"
 "Are you sure you want to refresh statistics for last day?","Are you sure you want to refresh statistics for last day?"
 undefined,indefinido
+"Products in Cart","Products in Cart"
+"By Customers","By Customers"
+"By Products","By Products"
+Refunds,Refunds
+"PayPal Settlement","PayPal Settlement"
+"Order Count","Order Count"
+Bestseller,Bestseller
diff --git a/app/code/Magento/Reports/i18n/zh_Hans_CN.csv b/app/code/Magento/Reports/i18n/zh_Hans_CN.csv
index 3b36163f6b0..bf85485daa4 100644
--- a/app/code/Magento/Reports/i18n/zh_Hans_CN.csv
+++ b/app/code/Magento/Reports/i18n/zh_Hans_CN.csv
@@ -218,3 +218,10 @@ Hits,提示
 "Refresh Statistics for the Last Day",刷新昨天的状态
 "Are you sure you want to refresh statistics for last day?","Are you sure you want to refresh statistics for last day?"
 undefined,未定义
+"Products in Cart","Products in Cart"
+"By Customers","By Customers"
+"By Products","By Products"
+Refunds,Refunds
+"PayPal Settlement","PayPal Settlement"
+"Order Count","Order Count"
+Bestseller,Bestseller
diff --git a/app/code/Magento/Sales/i18n/de_DE.csv b/app/code/Magento/Sales/i18n/de_DE.csv
index 8cd4ff0cf4d..736a5f91b8f 100644
--- a/app/code/Magento/Sales/i18n/de_DE.csv
+++ b/app/code/Magento/Sales/i18n/de_DE.csv
@@ -679,3 +679,4 @@ order-header,order-header
 "State Code and Title","State Code and Title"
 "PDF Packing Slips","PDF Packzettel"
 "Status can't be unassigned, because it is used by existing order(s).","Status can't be unassigned, because it is used by existing order(s)."
+Operations,Operations
diff --git a/app/code/Magento/Sales/i18n/en_US.csv b/app/code/Magento/Sales/i18n/en_US.csv
index 56fadf45155..5970b2ff82e 100644
--- a/app/code/Magento/Sales/i18n/en_US.csv
+++ b/app/code/Magento/Sales/i18n/en_US.csv
@@ -679,3 +679,4 @@ order-header,order-header
 "State Code and Title","State Code and Title"
 "PDF Packing Slips","PDF Packing Slips"
 "Status can't be unassigned, because it is used by existing order(s).","Status can't be unassigned, because it is used by existing order(s)."
+Operations,Operations
diff --git a/app/code/Magento/Sales/i18n/es_ES.csv b/app/code/Magento/Sales/i18n/es_ES.csv
index b14dd0c68fc..d524aad0e94 100644
--- a/app/code/Magento/Sales/i18n/es_ES.csv
+++ b/app/code/Magento/Sales/i18n/es_ES.csv
@@ -679,3 +679,4 @@ order-header,order-header
 "State Code and Title","State Code and Title"
 "PDF Packing Slips","Albaranes en PDF"
 "Status can't be unassigned, because it is used by existing order(s).","Status can't be unassigned, because it is used by existing order(s)."
+Operations,Operations
diff --git a/app/code/Magento/Sales/i18n/fr_FR.csv b/app/code/Magento/Sales/i18n/fr_FR.csv
index d56acf87271..e6ee0ec1c4a 100644
--- a/app/code/Magento/Sales/i18n/fr_FR.csv
+++ b/app/code/Magento/Sales/i18n/fr_FR.csv
@@ -679,3 +679,4 @@ order-header,order-header
 "State Code and Title","State Code and Title"
 "PDF Packing Slips","Bons de livraison PDF"
 "Status can't be unassigned, because it is used by existing order(s).","Status can't be unassigned, because it is used by existing order(s)."
+Operations,Operations
diff --git a/app/code/Magento/Sales/i18n/nl_NL.csv b/app/code/Magento/Sales/i18n/nl_NL.csv
index 8018624c475..1675d096d63 100644
--- a/app/code/Magento/Sales/i18n/nl_NL.csv
+++ b/app/code/Magento/Sales/i18n/nl_NL.csv
@@ -679,3 +679,4 @@ order-header,order-header
 "State Code and Title","State Code and Title"
 "PDF Packing Slips","PDF Packing Slips"
 "Status can't be unassigned, because it is used by existing order(s).","Status can't be unassigned, because it is used by existing order(s)."
+Operations,Operations
diff --git a/app/code/Magento/Sales/i18n/pt_BR.csv b/app/code/Magento/Sales/i18n/pt_BR.csv
index ffba7bb166d..41380ea687d 100644
--- a/app/code/Magento/Sales/i18n/pt_BR.csv
+++ b/app/code/Magento/Sales/i18n/pt_BR.csv
@@ -679,3 +679,4 @@ order-header,order-header
 "State Code and Title","State Code and Title"
 "PDF Packing Slips","Guias de remessas em PDF"
 "Status can't be unassigned, because it is used by existing order(s).","Status can't be unassigned, because it is used by existing order(s)."
+Operations,Operations
diff --git a/app/code/Magento/Sales/i18n/zh_Hans_CN.csv b/app/code/Magento/Sales/i18n/zh_Hans_CN.csv
index ecbf7406771..72b4d5663d7 100644
--- a/app/code/Magento/Sales/i18n/zh_Hans_CN.csv
+++ b/app/code/Magento/Sales/i18n/zh_Hans_CN.csv
@@ -679,3 +679,4 @@ order-header,order-header
 "State Code and Title","State Code and Title"
 "PDF Packing Slips",PDF版包裹清单
 "Status can't be unassigned, because it is used by existing order(s).","Status can't be unassigned, because it is used by existing order(s)."
+Operations,Operations
diff --git a/app/code/Magento/Store/i18n/de_DE.csv b/app/code/Magento/Store/i18n/de_DE.csv
index e498731b13b..5cbbe3e5697 100644
--- a/app/code/Magento/Store/i18n/de_DE.csv
+++ b/app/code/Magento/Store/i18n/de_DE.csv
@@ -21,3 +21,6 @@ Layouts,Layouts
 "Paths to pre-processed view files (e.g, CSS files with fixed paths or generated from LESS files).","Paths to pre-processed view files (e.g, CSS files with fixed paths or generated from LESS files)."
 "Collections Data","Collections Data"
 "Collection data files.","Collection data files."
+"All Stores","All Stores"
+"Other Settings","Other Settings"
+Attribute,Attribute
diff --git a/app/code/Magento/Store/i18n/en_US.csv b/app/code/Magento/Store/i18n/en_US.csv
index e498731b13b..5cbbe3e5697 100644
--- a/app/code/Magento/Store/i18n/en_US.csv
+++ b/app/code/Magento/Store/i18n/en_US.csv
@@ -21,3 +21,6 @@ Layouts,Layouts
 "Paths to pre-processed view files (e.g, CSS files with fixed paths or generated from LESS files).","Paths to pre-processed view files (e.g, CSS files with fixed paths or generated from LESS files)."
 "Collections Data","Collections Data"
 "Collection data files.","Collection data files."
+"All Stores","All Stores"
+"Other Settings","Other Settings"
+Attribute,Attribute
diff --git a/app/code/Magento/Store/i18n/es_ES.csv b/app/code/Magento/Store/i18n/es_ES.csv
index e498731b13b..5cbbe3e5697 100644
--- a/app/code/Magento/Store/i18n/es_ES.csv
+++ b/app/code/Magento/Store/i18n/es_ES.csv
@@ -21,3 +21,6 @@ Layouts,Layouts
 "Paths to pre-processed view files (e.g, CSS files with fixed paths or generated from LESS files).","Paths to pre-processed view files (e.g, CSS files with fixed paths or generated from LESS files)."
 "Collections Data","Collections Data"
 "Collection data files.","Collection data files."
+"All Stores","All Stores"
+"Other Settings","Other Settings"
+Attribute,Attribute
diff --git a/app/code/Magento/Store/i18n/fr_FR.csv b/app/code/Magento/Store/i18n/fr_FR.csv
index e498731b13b..5cbbe3e5697 100644
--- a/app/code/Magento/Store/i18n/fr_FR.csv
+++ b/app/code/Magento/Store/i18n/fr_FR.csv
@@ -21,3 +21,6 @@ Layouts,Layouts
 "Paths to pre-processed view files (e.g, CSS files with fixed paths or generated from LESS files).","Paths to pre-processed view files (e.g, CSS files with fixed paths or generated from LESS files)."
 "Collections Data","Collections Data"
 "Collection data files.","Collection data files."
+"All Stores","All Stores"
+"Other Settings","Other Settings"
+Attribute,Attribute
diff --git a/app/code/Magento/Store/i18n/nl_NL.csv b/app/code/Magento/Store/i18n/nl_NL.csv
index e498731b13b..5cbbe3e5697 100644
--- a/app/code/Magento/Store/i18n/nl_NL.csv
+++ b/app/code/Magento/Store/i18n/nl_NL.csv
@@ -21,3 +21,6 @@ Layouts,Layouts
 "Paths to pre-processed view files (e.g, CSS files with fixed paths or generated from LESS files).","Paths to pre-processed view files (e.g, CSS files with fixed paths or generated from LESS files)."
 "Collections Data","Collections Data"
 "Collection data files.","Collection data files."
+"All Stores","All Stores"
+"Other Settings","Other Settings"
+Attribute,Attribute
diff --git a/app/code/Magento/Store/i18n/pt_BR.csv b/app/code/Magento/Store/i18n/pt_BR.csv
index e498731b13b..5cbbe3e5697 100644
--- a/app/code/Magento/Store/i18n/pt_BR.csv
+++ b/app/code/Magento/Store/i18n/pt_BR.csv
@@ -21,3 +21,6 @@ Layouts,Layouts
 "Paths to pre-processed view files (e.g, CSS files with fixed paths or generated from LESS files).","Paths to pre-processed view files (e.g, CSS files with fixed paths or generated from LESS files)."
 "Collections Data","Collections Data"
 "Collection data files.","Collection data files."
+"All Stores","All Stores"
+"Other Settings","Other Settings"
+Attribute,Attribute
diff --git a/app/code/Magento/Store/i18n/zh_Hans_CN.csv b/app/code/Magento/Store/i18n/zh_Hans_CN.csv
index e498731b13b..5cbbe3e5697 100644
--- a/app/code/Magento/Store/i18n/zh_Hans_CN.csv
+++ b/app/code/Magento/Store/i18n/zh_Hans_CN.csv
@@ -21,3 +21,6 @@ Layouts,Layouts
 "Paths to pre-processed view files (e.g, CSS files with fixed paths or generated from LESS files).","Paths to pre-processed view files (e.g, CSS files with fixed paths or generated from LESS files)."
 "Collections Data","Collections Data"
 "Collection data files.","Collection data files."
+"All Stores","All Stores"
+"Other Settings","Other Settings"
+Attribute,Attribute
diff --git a/app/code/Magento/Tax/i18n/de_DE.csv b/app/code/Magento/Tax/i18n/de_DE.csv
index 23653999670..4fc035fa2f4 100644
--- a/app/code/Magento/Tax/i18n/de_DE.csv
+++ b/app/code/Magento/Tax/i18n/de_DE.csv
@@ -157,3 +157,5 @@ Note:,Note:
 "Orders, Invoices, Credit Memos Display Settings","Orders, Invoices, Credit Memos Display Settings"
 State/Region,Bundesstaat/Region
 "Subtotal Only","Subtotal Only"
+Taxes,Taxes
+"Import/Export Tax Rates","Import/Export Tax Rates"
diff --git a/app/code/Magento/Tax/i18n/en_US.csv b/app/code/Magento/Tax/i18n/en_US.csv
index 078cef5d97b..af228accb34 100644
--- a/app/code/Magento/Tax/i18n/en_US.csv
+++ b/app/code/Magento/Tax/i18n/en_US.csv
@@ -157,3 +157,5 @@ Note:,Note:
 "Orders, Invoices, Credit Memos Display Settings","Orders, Invoices, Credit Memos Display Settings"
 State/Region,State/Region
 "Subtotal Only","Subtotal Only"
+Taxes,Taxes
+"Import/Export Tax Rates","Import/Export Tax Rates"
diff --git a/app/code/Magento/Tax/i18n/es_ES.csv b/app/code/Magento/Tax/i18n/es_ES.csv
index 999f3930c26..b97d5fe9cb3 100644
--- a/app/code/Magento/Tax/i18n/es_ES.csv
+++ b/app/code/Magento/Tax/i18n/es_ES.csv
@@ -157,3 +157,5 @@ Note:,Note:
 "Orders, Invoices, Credit Memos Display Settings","Orders, Invoices, Credit Memos Display Settings"
 State/Region,Estado/Región
 "Subtotal Only","Subtotal Only"
+Taxes,Taxes
+"Import/Export Tax Rates","Import/Export Tax Rates"
diff --git a/app/code/Magento/Tax/i18n/fr_FR.csv b/app/code/Magento/Tax/i18n/fr_FR.csv
index bf297e3d673..2687af941e9 100644
--- a/app/code/Magento/Tax/i18n/fr_FR.csv
+++ b/app/code/Magento/Tax/i18n/fr_FR.csv
@@ -157,3 +157,5 @@ Note:,Note:
 "Orders, Invoices, Credit Memos Display Settings","Orders, Invoices, Credit Memos Display Settings"
 State/Region,État/Région
 "Subtotal Only","Subtotal Only"
+Taxes,Taxes
+"Import/Export Tax Rates","Import/Export Tax Rates"
diff --git a/app/code/Magento/Tax/i18n/nl_NL.csv b/app/code/Magento/Tax/i18n/nl_NL.csv
index ac644e6510c..212f01a0c47 100644
--- a/app/code/Magento/Tax/i18n/nl_NL.csv
+++ b/app/code/Magento/Tax/i18n/nl_NL.csv
@@ -157,3 +157,5 @@ Note:,Note:
 "Orders, Invoices, Credit Memos Display Settings","Orders, Invoices, Credit Memos Display Settings"
 State/Region,Provincie
 "Subtotal Only","Subtotal Only"
+Taxes,Taxes
+"Import/Export Tax Rates","Import/Export Tax Rates"
diff --git a/app/code/Magento/Tax/i18n/pt_BR.csv b/app/code/Magento/Tax/i18n/pt_BR.csv
index 2c52eee8e59..d22d24f7218 100644
--- a/app/code/Magento/Tax/i18n/pt_BR.csv
+++ b/app/code/Magento/Tax/i18n/pt_BR.csv
@@ -157,3 +157,5 @@ Note:,Note:
 "Orders, Invoices, Credit Memos Display Settings","Orders, Invoices, Credit Memos Display Settings"
 State/Region,Estado/Região
 "Subtotal Only","Subtotal Only"
+Taxes,Taxes
+"Import/Export Tax Rates","Import/Export Tax Rates"
diff --git a/app/code/Magento/Tax/i18n/zh_Hans_CN.csv b/app/code/Magento/Tax/i18n/zh_Hans_CN.csv
index d47d26b939b..2a4d9e43e27 100644
--- a/app/code/Magento/Tax/i18n/zh_Hans_CN.csv
+++ b/app/code/Magento/Tax/i18n/zh_Hans_CN.csv
@@ -157,3 +157,5 @@ Note:,Note:
 "Orders, Invoices, Credit Memos Display Settings","Orders, Invoices, Credit Memos Display Settings"
 State/Region,州/地区
 "Subtotal Only","Subtotal Only"
+Taxes,Taxes
+"Import/Export Tax Rates","Import/Export Tax Rates"
diff --git a/app/code/Magento/User/i18n/de_DE.csv b/app/code/Magento/User/i18n/de_DE.csv
index 63367a6ff3a..eb4689a2501 100644
--- a/app/code/Magento/User/i18n/de_DE.csv
+++ b/app/code/Magento/User/i18n/de_DE.csv
@@ -118,3 +118,5 @@ Unlock,Entsperren
 "Last login","Letzter Login"
 Failures,Fehler
 Unlocked,"Gesperrt bis"
+"All Users","All Users"
+"User Roles","User Roles"
diff --git a/app/code/Magento/User/i18n/en_US.csv b/app/code/Magento/User/i18n/en_US.csv
index 1f56f067006..7c85088044d 100644
--- a/app/code/Magento/User/i18n/en_US.csv
+++ b/app/code/Magento/User/i18n/en_US.csv
@@ -118,3 +118,5 @@ Unlock,Unlock
 "Last login","Last login"
 Failures,Failures
 Unlocked,Unlocked
+"All Users","All Users"
+"User Roles","User Roles"
diff --git a/app/code/Magento/User/i18n/es_ES.csv b/app/code/Magento/User/i18n/es_ES.csv
index 4dd4f371b4a..1e9397fee14 100644
--- a/app/code/Magento/User/i18n/es_ES.csv
+++ b/app/code/Magento/User/i18n/es_ES.csv
@@ -119,3 +119,5 @@ Unlock,Desbloquear
 "Last login","Ultimo acceso"
 Failures,Fallos
 Unlocked,"Bloqueado hasta"
+"All Users","All Users"
+"User Roles","User Roles"
diff --git a/app/code/Magento/User/i18n/fr_FR.csv b/app/code/Magento/User/i18n/fr_FR.csv
index bbe1e63a96c..42116af645b 100644
--- a/app/code/Magento/User/i18n/fr_FR.csv
+++ b/app/code/Magento/User/i18n/fr_FR.csv
@@ -119,3 +119,5 @@ Unlock,Déverrouiller
 "Last login","Dernière connexion"
 Failures,Echecs
 Unlocked,"Verrouillé jusqu'"
+"All Users","All Users"
+"User Roles","User Roles"
diff --git a/app/code/Magento/User/i18n/nl_NL.csv b/app/code/Magento/User/i18n/nl_NL.csv
index 91813e3a133..3745ad04302 100644
--- a/app/code/Magento/User/i18n/nl_NL.csv
+++ b/app/code/Magento/User/i18n/nl_NL.csv
@@ -119,3 +119,5 @@ Unlock,Openen
 "Last login","Laatste login"
 Failures,Mislukkingen
 Unlocked,"Gesloten tot"
+"All Users","All Users"
+"User Roles","User Roles"
diff --git a/app/code/Magento/User/i18n/pt_BR.csv b/app/code/Magento/User/i18n/pt_BR.csv
index d8d16b8cd04..0edca55b30e 100644
--- a/app/code/Magento/User/i18n/pt_BR.csv
+++ b/app/code/Magento/User/i18n/pt_BR.csv
@@ -119,3 +119,5 @@ Unlock,Desbloquear
 "Last login","Último login"
 Failures,Falhas
 Unlocked,"Bloqueado até"
+"All Users","All Users"
+"User Roles","User Roles"
diff --git a/app/code/Magento/User/i18n/zh_Hans_CN.csv b/app/code/Magento/User/i18n/zh_Hans_CN.csv
index 1c10afb0b64..1c0292bf2db 100644
--- a/app/code/Magento/User/i18n/zh_Hans_CN.csv
+++ b/app/code/Magento/User/i18n/zh_Hans_CN.csv
@@ -119,3 +119,5 @@ Unlock,解锁
 "Last login",上一次登录
 Failures,失败
 Unlocked,锁定直到
+"All Users","All Users"
+"User Roles","User Roles"
-- 
GitLab


From 732ed1c999966490b4868a6970ed0a950804e452 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Thu, 15 Oct 2015 20:49:25 -0500
Subject: [PATCH 038/370] MAGETWO-44154: Random PAT build failures due to
 400/503 HTTP response errors being thrown

---
 .../Magento/Framework/Code/Generator.php      |  2 -
 .../Code/Generator/EntityAbstract.php         |  3 --
 .../Unit/Generator/EntityAbstractTest.php     |  6 ---
 .../Code/Test/Unit/Generator/IoTest.php       | 37 ++++++++++++++++---
 .../TestAsset/ExistingResultClass.php         | 13 +++++++
 .../Code/Test/Unit/GeneratorTest.php          | 25 -------------
 6 files changed, 44 insertions(+), 42 deletions(-)
 create mode 100644 lib/internal/Magento/Framework/Code/Test/Unit/Generator/TestAsset/ExistingResultClass.php

diff --git a/lib/internal/Magento/Framework/Code/Generator.php b/lib/internal/Magento/Framework/Code/Generator.php
index edd02f6c204..68f63e0dc00 100644
--- a/lib/internal/Magento/Framework/Code/Generator.php
+++ b/lib/internal/Magento/Framework/Code/Generator.php
@@ -202,8 +202,6 @@ class Generator
     {
         if (!$resultEntityType || !$sourceClassName) {
             return self::GENERATION_ERROR;
-        } else if ($this->definedClasses->isClassLoadableFromDisc($resultClass)) {
-            return self::GENERATION_SKIP;
         } else if (!isset($this->_generatedEntities[$resultEntityType])) {
             throw new \InvalidArgumentException('Unknown generation entity.');
         }
diff --git a/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php b/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php
index fee367f49ca..d99838bf4d0 100644
--- a/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php
+++ b/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php
@@ -252,9 +252,6 @@ abstract class EntityAbstract
         if (!$this->definedClasses->isClassLoadable($sourceClassName)) {
             $this->_addError('Source class ' . $sourceClassName . ' doesn\'t exist.');
             return false;
-        } elseif ($this->definedClasses->isClassLoadableFromDisc($resultClassName)) {
-            $this->_addError('Result class ' . $resultClassName . ' already exists.');
-            return false;
         } elseif (
             /**
              * If makeResultFileDirectory only fails because the file is already created,
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php
index cf74e8a67f1..c53f1aa39ab 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php
@@ -107,12 +107,6 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase
                 '$validationSuccess' => false,
                 '$sourceClassExists' => false,
             ],
-            'result_class_exists' => [
-                '$errors' => ['Result class ' . self::RESULT_CLASS . ' already exists.'],
-                '$validationSuccess' => false,
-                '$sourceClassExists' => true,
-                '$resultClassExists' => true,
-            ],
             'cant_create_result_directory' => [
                 '$errors' => ['Can\'t create directory ' . self::RESULT_DIRECTORY . '.'],
                 '$validationSuccess' => false,
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php
index bd3a34bc471..5f07802694a 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php
@@ -5,6 +5,10 @@
  */
 namespace Magento\Framework\Code\Test\Unit\Generator;
 
+use Magento\Framework\Component\ComponentRegistrar;
+use Magento\Framework\Exception\FileSystemException;
+use Magento\Framework\Phrase;
+
 class IoTest extends \PHPUnit_Framework_TestCase
 {
     /**#@+
@@ -29,16 +33,15 @@ class IoTest extends \PHPUnit_Framework_TestCase
      */
     protected $_generationDirectory;
 
-    /**
-     * @var \Magento\Framework\Code\Generator\Io
-     */
+    /** @var \Magento\Framework\Code\Generator\Io */
     protected $_object;
 
-    /**
-     * @var \Magento\Framework\Filesystem|\PHPUnit_Framework_MockObject_MockObject
-     */
+    /** @var \Magento\Framework\Filesystem|\PHPUnit_Framework_MockObject_MockObject */
     protected $_filesystemDriverMock;
 
+    /** @var string */
+    protected $existingResultClassFile;
+
     protected function setUp()
     {
         $this->_generationDirectory = rtrim(self::GENERATION_DIRECTORY, '/') . '/';
@@ -49,6 +52,9 @@ class IoTest extends \PHPUnit_Framework_TestCase
             $this->_filesystemDriverMock,
             self::GENERATION_DIRECTORY
         );
+        $this->existingResultClassFile =
+            (new ComponentRegistrar())->getPath(ComponentRegistrar::LIBRARY, 'magento/framework')
+            . '/Code/Test/Unit/Generator/TestAsset/ExistingResultClass.php';
     }
 
     protected function tearDown()
@@ -90,6 +96,25 @@ class IoTest extends \PHPUnit_Framework_TestCase
         $this->assertTrue($this->_object->writeResultFile(self::FILE_NAME, self::FILE_CONTENT));
     }
 
+    public function testWriteResultFileAlreadyExists()
+    {
+        $this->_filesystemDriverMock->expects($this->once())
+            ->method('filePutContents')
+            ->with(
+                $this->stringContains($this->existingResultClassFile),
+                "<?php\n" . self::FILE_CONTENT
+            )->willReturn(true);
+
+        $this->_filesystemDriverMock->expects($this->once())
+            ->method('rename')
+            ->with(
+                $this->stringContains($this->existingResultClassFile),
+                $this->existingResultClassFile
+            )->willThrowException(new FileSystemException(new Phrase('File already exists')));
+
+        $this->assertTrue($this->_object->writeResultFile($this->existingResultClassFile, self::FILE_CONTENT));
+    }
+
     public function testMakeGenerationDirectoryWritable()
     {
         $this->_filesystemDriverMock->expects(
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/TestAsset/ExistingResultClass.php b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/TestAsset/ExistingResultClass.php
new file mode 100644
index 00000000000..c4e487eab7f
--- /dev/null
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/TestAsset/ExistingResultClass.php
@@ -0,0 +1,13 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+// @codingStandardsIgnoreFile
+namespace Magento\Framework\Code\Test\Unit\Generator\TestAsset;
+
+
+class ExistingResultClass
+{
+
+}
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
index 88a043753da..eb1a49a49a3 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
@@ -83,31 +83,6 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
         $this->model->generateClass($fullClassName);
     }
 
-    /**
-     * @dataProvider generateValidClassDataProvider
-     */
-    public function testGenerateClassWithExistName($className, $entityType)
-    {
-        $definedClassesMock = $this->getMock('Magento\Framework\Code\Generator\DefinedClasses');
-        $definedClassesMock->expects($this->any())
-            ->method('isClassLoadableFromDisc')
-            ->willReturn(true);
-        $this->model = new \Magento\Framework\Code\Generator(
-            $this->ioObjectMock,
-            [
-                'factory' => '\Magento\Framework\ObjectManager\Code\Generator\Factory',
-                'proxy' => '\Magento\Framework\ObjectManager\Code\Generator\Proxy',
-                'interceptor' => '\Magento\Framework\Interception\Code\Generator\Interceptor'
-            ],
-            $definedClassesMock
-        );
-
-        $this->assertEquals(
-            \Magento\Framework\Code\Generator::GENERATION_SKIP,
-            $this->model->generateClass($className . $entityType)
-        );
-    }
-
     public function testGenerateClassWithWrongName()
     {
         $this->model = new \Magento\Framework\Code\Generator($this->ioObjectMock);
-- 
GitLab


From 81e190d711ae3922ef12f03d49471a6c6bbaa850 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Thu, 15 Oct 2015 21:00:58 -0500
Subject: [PATCH 039/370] =?UTF-8?q?MAGETWO-43435:=20[Github]=20=C2=ABi18n:?=
 =?UTF-8?q?collect-phrases=C2=BB=20command=20wrongly=20handles=20PHP=20str?=
 =?UTF-8?q?ing=20concatenation=20=20-=20make=20sure=20concatenation=20oper?=
 =?UTF-8?q?ators=20are=20included=20in=20phrase=20array=20so=20they=20are?=
 =?UTF-8?q?=20evaluated=20=20-=20add=20integration=20test=20for=20various?=
 =?UTF-8?q?=20phrase=20capture=20cases?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Command/I18nCollectPhrasesCommandTest.php |  8 +-
 .../_files/Magento/TestModule/Phrases.php     |  7 --
 .../Command/_files/expectedPhrases.csv        | 19 +++++
 .../Command/_files/phrases/TestPhrases.php    | 84 +++++++++++++++++++
 .../Adapter/Php/Tokenizer/PhraseCollector.php |  2 +-
 .../Parser/Adapter/Php/Tokenizer/Token.php    |  8 ++
 .../Php/Tokenizer/PhraseCollectorTest.php     | 15 ++++
 .../Adapter/Php/Tokenizer/TokenTest.php       | 14 ++++
 8 files changed, 146 insertions(+), 11 deletions(-)
 delete mode 100644 dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/Magento/TestModule/Phrases.php
 create mode 100644 dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/expectedPhrases.csv
 create mode 100644 dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/phrases/TestPhrases.php

diff --git a/dev/tests/integration/testsuite/Magento/Setup/Console/Command/I18nCollectPhrasesCommandTest.php b/dev/tests/integration/testsuite/Magento/Setup/Console/Command/I18nCollectPhrasesCommandTest.php
index 924853df6bc..2d5e9026cee 100644
--- a/dev/tests/integration/testsuite/Magento/Setup/Console/Command/I18nCollectPhrasesCommandTest.php
+++ b/dev/tests/integration/testsuite/Magento/Setup/Console/Command/I18nCollectPhrasesCommandTest.php
@@ -46,17 +46,19 @@ class I18nCollectPhrasesCommandTest extends \PHPUnit_Framework_TestCase
 
     public function testExecuteCsvOutput()
     {
-        $outputPath = BP . '/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/output/output.csv';
+        $outputPath = BP . '/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/output/phrases.csv';
         $this->tester->execute(
             [
-                'directory' => BP . '/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/',
+                'directory' => BP . '/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/phrases/',
                 '--output' => $outputPath,
             ]
         );
 
         $handle = fopen($outputPath, 'r');
         $output = fread($handle, filesize($outputPath));
-        $expected = '"Hello world","Hello world"' . PHP_EOL . '"Foo bar","Foo bar"' . PHP_EOL;
+        $expected = file_get_contents(
+            BP . '/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/expectedPhrases.csv'
+        );
         $this->assertEquals($expected, $output);
         unlink($outputPath);
     }
diff --git a/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/Magento/TestModule/Phrases.php b/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/Magento/TestModule/Phrases.php
deleted file mode 100644
index d55885ff96f..00000000000
--- a/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/Magento/TestModule/Phrases.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-$a = __("Hello world");
-$b = __("Foo bar");
diff --git a/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/expectedPhrases.csv b/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/expectedPhrases.csv
new file mode 100644
index 00000000000..43c331ecb48
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/expectedPhrases.csv
@@ -0,0 +1,19 @@
+"simple text","simple text"
+"simple text with 1 string literal placeholder %1","simple text with 1 string literal placeholder %1"
+"simple text with 1 variable placeholder %1","simple text with 1 variable placeholder %1"
+"simple text with multiple placeholders %1 %2","simple text with multiple placeholders %1 %2"
+"first part second part","first part second part"
+"first part second part third part","first part second part third part"
+"first part second part with one string literal placeholder %1","first part second part with one string literal placeholder %1"
+"first part of concat second part with one variable placeholder %1","first part of concat second part with one variable placeholder %1"
+"first part of concat second part with two placeholders %1, %2","first part of concat second part with two placeholders %1, %2"
+"first part of concat second part third part with one placeholder %1","first part of concat second part third part with one placeholder %1"
+"first part of concat second part third part with two placeholders %1, %2","first part of concat second part third part with two placeholders %1, %2"
+"string with escaped 'single quotes'","string with escaped 'single quotes'"
+"string with placeholder in escaped single quotes '%1'","string with placeholder in escaped single quotes '%1'"
+"string with ""double quotes""","string with ""double quotes"""
+"string with placeholder in double quotes ""%1""","string with placeholder in double quotes ""%1"""
+"string with 'single quotes'","string with 'single quotes'"
+"string with placeholder in single quotes '%1'","string with placeholder in single quotes '%1'"
+"string with escaped ""double quotes""","string with escaped ""double quotes"""
+"string with placeholder in escaped double quotes ""%1""","string with placeholder in escaped double quotes ""%1"""
diff --git a/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/phrases/TestPhrases.php b/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/phrases/TestPhrases.php
new file mode 100644
index 00000000000..1e46c79299a
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/phrases/TestPhrases.php
@@ -0,0 +1,84 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+// @codingStandardsIgnoreFile
+
+use Magento\Framework\Phrase;
+
+class TestPhrases
+{
+    public function awesomeFunction()
+    {
+        $str1 = 'str1';
+        $str2 = 'str2';
+
+        // Simple
+        $simpleCases = [
+            new Phrase('simple text'),
+            new Phrase('simple text with 1 string literal placeholder %1', 'arg'),
+            new Phrase('simple text with 1 variable placeholder %1', $str1),
+            new Phrase('simple text with multiple placeholders %1 %2', $str1, $str2),
+        ];
+
+        // Phrase objects
+        $phraseObjects = [
+            // Single concatenation
+            new Phrase('first part' . ' second part'),
+            new Phrase('first part' . ' second part' . ' third part'),
+
+            // Multiple concatenation
+            new Phrase('first part' . ' second part with one string literal placeholder %1', 'arg'),
+            new Phrase('first part of concat' . ' second part with one variable placeholder %1', $str1),
+            new Phrase('first part of concat' . ' second part with two placeholders %1, %2', $str1, $str2),
+            new Phrase('first part of concat' . ' second part' . ' third part with one placeholder %1', 'arg'),
+            new Phrase('first part of concat' . ' second part' . ' third part with two placeholders %1, %2', $str1, $str2),
+
+            // Escaped quotes
+            new Phrase('string with escaped \'single quotes\''),
+            new Phrase('string with placeholder in escaped single quotes \'%1\'', 'arg'),
+            new Phrase('string with "double quotes"'),
+            new Phrase('string with placeholder in double quotes "%1"', 'arg'),
+        ];
+
+        $singleQuoteTranslateFunctions = [
+            // Single concatenation
+            __('first part' . ' second part'),
+            __('first part' . ' second part' . ' third part'),
+
+            // Multiple concatenation
+            __('first part' . ' second part with one string literal placeholder %1', 'arg'),
+            __('first part of concat' . ' second part with one variable placeholder %1', $str1),
+            __('first part of concat' . ' second part with two placeholders %1, %2', $str1, $str2),
+            __('first part of concat' . ' second part' . ' third part with one placeholder %1', 'arg'),
+            __('first part of concat' . ' second part' . ' third part with two placeholders %1, %2', $str1, $str2),
+
+            // Escaped quotes
+            __('string with escaped \'single quotes\''),
+            __('string with placeholder in escaped single quotes \'%1\'', 'arg'),
+            __('string with "double quotes"'),
+            __('string with placeholder in double quotes "%1"', 'arg'),
+        ];
+
+        $doubleQuoteTranslateFunctions = [
+            // Single concatenation
+            __("first part" . " second part"),
+            __("first part" . " second part" . " third part"),
+
+            // Multiple concatenation
+            __("first part" . " second part with one string literal placeholder %1", "arg"),
+            __("first part of concat" . " second part with one variable placeholder %1", $str1),
+            __("first part of concat" . " second part with two placeholders %1, %2", $str1, $str2),
+            __("first part of concat" . " second part" . " third part with one placeholder %1", "arg"),
+            __("first part of concat" . " second part" . " third part with two placeholders %1, %2", $str1, $str2),
+
+            // Escaped quotes
+            __("string with 'single quotes'"),
+            __("string with placeholder in single quotes '%1'", "arg"),
+            __("string with escaped \"double quotes\""),
+            __("string with placeholder in escaped double quotes \"%1\"", "arg"),
+        ];
+    }
+}
diff --git a/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollector.php b/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollector.php
index ee7ecd15e0c..96f7c84fd7e 100644
--- a/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollector.php
+++ b/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollector.php
@@ -139,7 +139,7 @@ class PhraseCollector
         if ($phraseTokens) {
             /** @var \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token $phraseToken */
             foreach ($phraseTokens as $phraseToken) {
-                if ($phraseToken->isConstantEncapsedString()) {
+                if ($phraseToken->isConstantEncapsedString() || $phraseToken->isConcatenateOperator()) {
                     $phrase[] = $phraseToken->getValue();
                 }
             }
diff --git a/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/Token.php b/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/Token.php
index a36b8b1e885..0477da1bcd3 100644
--- a/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/Token.php
+++ b/setup/src/Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/Token.php
@@ -166,6 +166,14 @@ class Token
         return $this->getValue() == ';';
     }
 
+    /**
+     * @return bool
+     */
+    public function isConcatenateOperator()
+    {
+        return $this->getValue() == '.';
+    }
+
     /**
      * Is namespace separator
      *
diff --git a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollectorTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollectorTest.php
index 954bcc013ad..e4dccc6fd63 100644
--- a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollectorTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollectorTest.php
@@ -204,4 +204,19 @@ class PhraseCollectorTest extends \PHPUnit_Framework_TestCase
             ->willReturn($line);
         return $token;
     }
+
+    public function testCollectPhrases()
+    {
+        $firstPart = "'first part'";
+        $firstPartToken = new Token(\T_CONSTANT_ENCAPSED_STRING, $firstPart);
+        $concatenationToken = new Token('.', '.');
+        $secondPart = "' second part'";
+        $secondPartToken = new Token(\T_CONSTANT_ENCAPSED_STRING, $secondPart);
+        $phraseTokens = [$firstPartToken, $concatenationToken, $secondPartToken];
+        $phraseString = "'first part' . ' second part'";
+
+        $reflectionMethod = new \ReflectionMethod('\Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector', '_collectPhrase');
+        $reflectionMethod->setAccessible(true);
+        $this->assertSame($phraseString, $reflectionMethod->invoke($this->phraseCollector, $phraseTokens));
+    }
 }
diff --git a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/TokenTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/TokenTest.php
index 26bcea7516d..5622bcdc23d 100644
--- a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/TokenTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/TokenTest.php
@@ -118,4 +118,18 @@ class TokenTest extends \PHPUnit_Framework_TestCase
             ]
         );
     }
+
+    public function testIsConcatenateOperatorTrue()
+    {
+        $token = new \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token('.', '.');
+        $this->assertTrue($token->isConcatenateOperator());
+    }
+
+    public function testIsConcatenateOperatorFalse()
+    {
+        $token = new \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token(',', ',');
+        $this->assertFalse($token->isConcatenateOperator());
+    }
+
+
 }
-- 
GitLab


From 25e4f7a480841b5277f8621704746cdb2c1aa4af Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Fri, 16 Oct 2015 10:21:40 +0300
Subject: [PATCH 040/370] MAGETWO-42984: Remove Section from Customer Data

---
 .../Test/TestCase/UpdateCustomerFrontendEntityTest.php      | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/UpdateCustomerFrontendEntityTest.php b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/UpdateCustomerFrontendEntityTest.php
index 8a31cb657a0..63308bbea50 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/UpdateCustomerFrontendEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/UpdateCustomerFrontendEntityTest.php
@@ -124,12 +124,9 @@ class UpdateCustomerFrontendEntityTest extends Injectable
             'Magento\Customer\Test\TestStep\LoginCustomerOnFrontendStep',
             ['customer' => $initialCustomer]
         )->run();
-        $this->cmsIndex->getCmsPageBlock()->waitPageInit();
-        sleep(3); // TODO: remove after resolving an issue with ajax on Frontend.
         $this->customerAccountIndex->getInfoBlock()->openEditContactInfo();
         $this->customerAccountEdit->getAccountInfoForm()->fill($customer);
         $this->customerAccountEdit->getAccountInfoForm()->submit();
-        $this->cmsIndex->getCmsPageBlock()->waitPageInit();
 
         \PHPUnit_Framework_Assert::assertThat($this->getName(), $assertCustomerInfoSuccessSavedMessage);
 
@@ -137,8 +134,5 @@ class UpdateCustomerFrontendEntityTest extends Injectable
         $this->customerAccountIndex->getDashboardAddress()->editBillingAddress();
         $this->customerAddressEdit->getEditForm()->fill($address);
         $this->customerAddressEdit->getEditForm()->saveAddress();
-        $this->cmsIndex->getCmsPageBlock()->waitPageInit();
-        $this->cmsIndex->getCmsPageBlock()->waitPageInit();
-        sleep(3); // TODO: remove after resolving an issue with ajax on Frontend.
     }
 }
-- 
GitLab


From dc32e2be6d77976a0363ac63d70bcacbb45fd009 Mon Sep 17 00:00:00 2001
From: Ievgen Sentiabov <isentiabov@ebay.com>
Date: Fri, 16 Oct 2015 15:43:25 +0300
Subject: [PATCH 041/370] MAGETWO-43957: Authorization transaction is not
 closed after creating capture for order placed within Authorize.net and
 PayPal

 - Updated actions to close parent transaction for capture action
 - Added unit tests
---
 .../Magento/Braintree/Model/PaymentMethod.php |  21 +-
 .../Test/Unit/Model/PaymentMethodTest.php     | 216 ++++++++++--------
 .../Magento/Sales/Model/Order/Payment.php     |  16 +-
 .../Payment/Operations/CaptureOperation.php   |  73 +++---
 .../RegisterCaptureNotificationOperation.php  |   3 +
 .../Test/Unit/Model/Order/PaymentTest.php     |  35 +++
 6 files changed, 201 insertions(+), 163 deletions(-)

diff --git a/app/code/Magento/Braintree/Model/PaymentMethod.php b/app/code/Magento/Braintree/Model/PaymentMethod.php
index cbcfbf1f8d3..5dc6b8f91c4 100644
--- a/app/code/Magento/Braintree/Model/PaymentMethod.php
+++ b/app/code/Magento/Braintree/Model/PaymentMethod.php
@@ -603,7 +603,7 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc
                     if ($result->success) {
                         $payment->setIsTransactionClosed(false)
                             ->setShouldCloseParentTransaction(false);
-                        if ($this->isFinalCapture($payment->getParentId(), $amount)) {
+                        if ($payment->isCaptureFinal($amount)) {
                             $payment->setShouldCloseParentTransaction(true);
                         }
                     } else {
@@ -902,7 +902,7 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc
             ->setAdditionalInformation($this->getExtraTransactionInformation($result->transaction))
             ->setAmount($amount)
             ->setShouldCloseParentTransaction(false);
-        if ($this->isFinalCapture($payment->getParentId(), $amount)) {
+        if ($payment->isCaptureFinal($amount)) {
             $payment->setShouldCloseParentTransaction(true);
         }
         if (isset($result->transaction->creditCard['token']) && $result->transaction->creditCard['token']) {
@@ -961,21 +961,4 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc
     {
         return json_decode(json_encode($data), true);
     }
-
-    /**
-     * Checks whether the capture is final
-     *
-     * @param string $orderId
-     * @param string $amount
-     * @return bool
-     */
-    protected function isFinalCapture($orderId, $amount)
-    {
-        if (!empty($orderId)) {
-            $order = $this->orderRepository->get($orderId);
-            return (float)$order->getTotalDue() === (float) $amount;
-        }
-
-        return false;
-    }
 }
diff --git a/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php b/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php
index f8f0494c128..a4e1e2beae7 100644
--- a/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php
@@ -31,6 +31,7 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
     const LNAME = 'Doe';
     const AUTH_TRAN_ID = 'r4z34j';
     const AUTH_AMOUNT = 5.76;
+    const TOTAL_AMOUNT = 10.02;
     const AUTH_CC_LAST_4 = '0004';
     const CUSTOMER_ID = '221b3649effb4bb1b62fc940691bd18c';
 
@@ -324,11 +325,8 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
      * @param $ccType
      * @param null $ccToken
      */
-    protected function setupInfoInstance(
-        $countryId,
-        $ccType,
-        $ccToken = null
-    ) {
+    protected function setupInfoInstance($countryId, $ccType, $ccToken = null)
+    {
         $quoteObj = new \Magento\Framework\DataObject(
             [
                 'billing_address' => new \Magento\Framework\DataObject(
@@ -500,6 +498,7 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
                     'getCustomerEmail',
                     'getCustomerId',
                     'getStoreId',
+                    'getTotalDue'
                 ]
             )->getMock();
 
@@ -521,18 +520,25 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
         $orderMock->expects($this->any())
             ->method('getStoreId')
             ->willReturn($storeId);
+        $orderMock->expects(static::any())
+            ->method('getTotalDue')
+            ->willReturn(self::TOTAL_AMOUNT);
+
+        $this->orderRepository->expects(static::any())
+            ->method('get')
+            ->willReturn($orderMock);
+
         return $orderMock;
     }
+
     /**
      * @param \Magento\Framework\DataObject $paymentObject
      * @param int $storeId
      * @return array
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
-    protected function setupPaymentObject(
-        \Magento\Framework\DataObject $paymentObject,
-        $storeId
-    ) {
+    protected function setupPaymentObject(\Magento\Framework\DataObject $paymentObject, $storeId)
+    {
         $customerId = '12';
         $customerEmail = 'abc@example.com';
         $company = 'NA';
@@ -563,13 +569,9 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
             'address_type' => 'billing',
         ];
 
-        $billingAddress = new \Magento\Framework\DataObject(
-            $addressData
-        );
+        $billingAddress = new \Magento\Framework\DataObject($addressData);
         $addressData['address_type'] = 'shipping';
-        $shippingAddress = new \Magento\Framework\DataObject(
-            $addressData
-        );
+        $shippingAddress = new \Magento\Framework\DataObject($addressData);
 
         $order = $this->setupOrderMock(
             $billingAddress,
@@ -605,26 +607,26 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
             ->willReturn($regionMock);
 
         $braintreeAddressData = [
-            'firstName'         => self::FNAME,
-            'lastName'          => self::LNAME,
-            'company'           => $company,
-            'streetAddress'     => $street,
-            'extendedAddress'   => $street2,
-            'locality'          => $city,
-            'region'            => $regionCode,
-            'postalCode'        => $postcode,
+            'firstName' => self::FNAME,
+            'lastName' => self::LNAME,
+            'company' => $company,
+            'streetAddress' => $street,
+            'extendedAddress' => $street2,
+            'locality' => $city,
+            'region' => $regionCode,
+            'postalCode' => $postcode,
             'countryCodeAlpha2' => $countryId,
         ];
         return [
-            'channel'   => self::CHANNEL,
-            'orderId'   => $orderId,
-            'customer'  => [
+            'channel' => self::CHANNEL,
+            'orderId' => $orderId,
+            'customer' => [
                 'firstName' => self::FNAME,
-                'lastName'  => self::LNAME,
-                'company'   => $company,
-                'phone'     => $phone,
-                'fax'       => $fax,
-                'email'     => $customerEmail,
+                'lastName' => self::LNAME,
+                'company' => $company,
+                'phone' => $phone,
+                'fax' => $fax,
+                'email' => $customerEmail,
             ],
             'billing' => $braintreeAddressData,
             'shipping' => $braintreeAddressData,
@@ -764,8 +766,11 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
     ) {
         $storeId = 3;
         $amount = self::AUTH_AMOUNT;
-        $paymentObject = $this->objectManagerHelper->getObject('Magento\Sales\Model\Order\Payment');
-
+        $currencyMock = $this->getPriceCurrencyMock();
+        /** @var \Magento\Sales\Model\Order\Payment $paymentObject */
+        $paymentObject = $this->objectManagerHelper->getObject('Magento\Sales\Model\Order\Payment', [
+            'priceCurrency' => $currencyMock
+        ]);
 
         $expectedRequestAttribs = $this->setupAuthorizeRequest(
             $configData,
@@ -797,14 +802,6 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
         }
 
         $paymentObject->setParentId('1');
-        $order = $this->getMockBuilder('Magento\Sales\Api\Data\OrderInterface')
-            ->getMockForAbstractClass();
-        $order->expects($this->once())
-            ->method('getTotalDue')
-            ->willReturn(10.02);
-        $this->orderRepository->expects($this->once())
-            ->method('get')
-            ->willReturn($order);
 
         $this->assertEquals($this->model, $this->model->authorize($paymentObject, $amount));
         foreach ($expectedPaymentFields as $key => $value) {
@@ -1597,13 +1594,8 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
      * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage error
      */
-    public function testAuthorizeError(
-        array $configData,
-        $vault,
-        $registry,
-        $existingCustomer,
-        array $paymentInfo
-    ) {
+    public function testAuthorizeError(array $configData, $vault, $registry, $existingCustomer, array $paymentInfo)
+    {
         $storeId = 3;
         $amount = self::AUTH_AMOUNT;
         $paymentObject = $this->objectManagerHelper->getObject('Magento\Sales\Model\Order\Payment');
@@ -1648,13 +1640,8 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
      * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage Please try again later
      */
-    public function testAuthorizeException(
-        array $configData,
-        $vault,
-        $registry,
-        $existingCustomer,
-        array $paymentInfo
-    ) {
+    public function testAuthorizeException(array $configData, $vault, $registry, $existingCustomer, array $paymentInfo)
+    {
         $storeId = 3;
         $amount = self::AUTH_AMOUNT;
         $paymentObject = $this->objectManagerHelper->getObject('Magento\Sales\Model\Order\Payment');
@@ -1715,10 +1702,8 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
      * @param int $numberOfTransactions
      * @return $this
      */
-    protected function setupSalesTransaction(
-        $paymentId,
-        $numberOfTransactions
-    ) {
+    protected function setupSalesTransaction($paymentId, $numberOfTransactions)
+    {
         $transactionCollectionMock = $this->getMockBuilder(
             'Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\Collection'
         )->disableOriginalConstructor()
@@ -1740,12 +1725,24 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
         return $this;
     }
 
-    protected function setupPaymentObjectForCapture(
-        $paymentId
-    ) {
+    protected function setupPaymentObjectForCapture($paymentId)
+    {
+        $order = $this->getMockBuilder('Magento\Sales\Api\Data\OrderInterface')
+            ->getMockForAbstractClass();
+        $order->expects(static::any())
+            ->method('getTotalDue')
+            ->willReturn(self::TOTAL_AMOUNT);
+        $this->orderRepository->expects(static::any())
+            ->method('get')
+            ->willReturn($order);
+
+        $currencyMock = $this->getPriceCurrencyMock();
+
         $paymentObject = $this->objectManagerHelper->getObject(
             'Magento\Sales\Model\Order\Payment',
             [
+                'priceCurrency' => $currencyMock,
+                'orderRepository' => $this->orderRepository,
                 'data' => [
                     'id' => $paymentId,
                     'cc_trans_id' => self::AUTH_TRAN_ID,
@@ -1755,6 +1752,11 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
 
         return $paymentObject;
     }
+
+    /**
+     * @covers \Magento\Braintree\Model\PaymentMethod::capture()
+     * @throws LocalizedException
+     */
     public function testCaptureSuccess()
     {
         $amount = self::AUTH_AMOUNT;
@@ -1773,20 +1775,40 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
             ->method('critical');
 
         $paymentObject->setParentId('1');
-        $order = $this->getMockBuilder('Magento\Sales\Api\Data\OrderInterface')
-            ->getMockForAbstractClass();
-        $order->expects($this->once())
-            ->method('getTotalDue')
-            ->willReturn(10.02);
-        $this->orderRepository->expects($this->once())
-            ->method('get')
-            ->willReturn($order);
 
         $this->model->capture($paymentObject, $amount);
         $this->assertEquals(0, $paymentObject->getIsTransactionClosed());
         $this->assertFalse($paymentObject->getShouldCloseParentTransaction());
     }
 
+    /**
+     * @covers \Magento\Braintree\Model\PaymentMethod::capture()
+     * @return void
+     */
+    public function testCaptureSuccessAuthTransactionClosed()
+    {
+        $paymentId = 31232;
+        /** @var \Magento\Sales\Model\Order\Payment $payment */
+        $payment = $this->setupPaymentObjectForCapture($paymentId);
+        $this->setupSalesTransaction($paymentId, 0); //no existing capture transaction
+
+        $result = $this->setupSuccessResponse([]);
+        $this->braintreeTransactionMock->expects(static::once())
+            ->method('submitForSettlement')
+            ->with(self::AUTH_TRAN_ID, self::TOTAL_AMOUNT)
+            ->willReturn($result);
+
+        $this->psrLoggerMock->expects(static::never())
+            ->method('critical');
+
+        $payment->setParentId(1);
+        $this->model->capture($payment, self::TOTAL_AMOUNT);
+
+        static::assertFalse($payment->getIsTransactionClosed());
+        static::assertTrue($payment->getShouldCloseParentTransaction());
+
+    }
+
     /**
      * @expectedException \Magento\Framework\Exception\LocalizedException
      * @expectedExceptionMessage There was an error capturing the transaction: error.
@@ -1819,10 +1841,8 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
         $this->model->capture($paymentObject, $amount);
     }
 
-    protected function setupAuthTransaction(
-        $paymentId,
-        $authTransaction
-    ) {
+    protected function setupAuthTransaction($paymentId, $authTransaction)
+    {
         $authTransactionCollectionMock = $this->getMockBuilder(
             'Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\Collection'
         )->disableOriginalConstructor()
@@ -1925,14 +1945,6 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
             ->willReturn($result);
 
         $paymentObject->setParentId('1');
-        $order = $this->getMockBuilder('Magento\Sales\Api\Data\OrderInterface')
-            ->getMockForAbstractClass();
-        $order->expects($this->once())
-            ->method('getTotalDue')
-            ->willReturn(10.02);
-        $this->orderRepository->expects($this->once())
-            ->method('get')
-            ->willReturn($order);
 
         $this->model->capture($paymentObject, $amount);
         $this->assertEquals(0, $paymentObject->getIsTransactionClosed());
@@ -2114,17 +2126,10 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
                         'submitForSettlement' => true,
                     ],
                 ]
-            )->willReturn($resultSuccess);
+            )
+            ->willReturn($resultSuccess);
 
         $paymentObject->setParentId('1');
-        $order = $this->getMockBuilder('Magento\Sales\Api\Data\OrderInterface')
-            ->getMockForAbstractClass();
-        $order->expects($this->once())
-            ->method('getTotalDue')
-            ->willReturn(10.02);
-        $this->orderRepository->expects($this->once())
-            ->method('get')
-            ->willReturn($order);
 
         $this->model->capture($paymentObject, $amount);
         $this->assertEquals(PaymentMethod::STATUS_APPROVED, $paymentObject->getStatus());
@@ -2191,9 +2196,8 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
     //End: test capture
 
     //Start: test refund
-    protected function setupPaymentObjectForRefund(
-        $refundTransactionId
-    ) {
+    protected function setupPaymentObjectForRefund($refundTransactionId)
+    {
         $paymentObject = $this->objectManagerHelper->getObject(
             'Magento\Sales\Model\Order\Payment',
             [
@@ -2459,9 +2463,8 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
             ->willReturnArgument(0);
     }
 
-    protected function setupPaymentObjectForVoid(
-        $orderId
-    ) {
+    protected function setupPaymentObjectForVoid($orderId)
+    {
         $paymentObject = $this->objectManagerHelper->getObject(
             'Magento\Sales\Model\Order\Payment'
         );
@@ -2664,4 +2667,23 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
             ->willReturn($orderMock);
         $this->assertEquals(false, $this->model->canVoid());
     }
+
+    /**
+     * @return \Magento\Directory\Model\PriceCurrency|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected function getPriceCurrencyMock()
+    {
+        $currencyMock = $this->getMockBuilder('\Magento\Directory\Model\PriceCurrency')
+            ->disableOriginalConstructor()
+            ->setMethods(['round'])
+            ->getMock();
+        $currencyMock->expects(static::any())
+            ->method('round')
+            ->willReturnMap([
+                [self::TOTAL_AMOUNT, round(self::TOTAL_AMOUNT, 2)],
+                [self::AUTH_AMOUNT, round(self::AUTH_AMOUNT, 2)]
+            ]);
+        return $currencyMock;
+    }
 }
+
diff --git a/app/code/Magento/Sales/Model/Order/Payment.php b/app/code/Magento/Sales/Model/Order/Payment.php
index d3dc65c432e..a37f12c521a 100644
--- a/app/code/Magento/Sales/Model/Order/Payment.php
+++ b/app/code/Magento/Sales/Model/Order/Payment.php
@@ -1263,16 +1263,8 @@ class Payment extends Info implements OrderPaymentInterface
      */
     public function isCaptureFinal($amountToCapture)
     {
-        $amountPaid = $this->formatAmount($this->getBaseAmountPaid(), true);
-        $amountToCapture = $this->formatAmount($amountToCapture, true);
-        $orderGrandTotal = $this->formatAmount($this->getOrder()->getBaseGrandTotal(), true);
-        if ($orderGrandTotal == $amountPaid + $amountToCapture) {
-            if (false !== $this->getShouldCloseParentTransaction()) {
-                $this->setShouldCloseParentTransaction(true);
-            }
-            return true;
-        }
-        return false;
+        $total = $this->getOrder()->getTotalDue();
+        return $this->formatAmount($total, true) == $this->formatAmount($amountToCapture, true);
     }
 
     /**
@@ -2406,12 +2398,12 @@ class Payment extends Info implements OrderPaymentInterface
     /**
      * Whether should close parent transaction
      *
-     * @return bool
+     * @return bool|null
      * @SuppressWarnings(PHPMD.BooleanGetMethodName)
      */
     public function getShouldCloseParentTransaction()
     {
-        return (bool)$this->getData('should_close_parent_transaction');
+        return $this->getData('should_close_parent_transaction');
     }
 
     //@codeCoverageIgnoreEnd
diff --git a/app/code/Magento/Sales/Model/Order/Payment/Operations/CaptureOperation.php b/app/code/Magento/Sales/Model/Order/Payment/Operations/CaptureOperation.php
index 590422b1531..236a51189d3 100644
--- a/app/code/Magento/Sales/Model/Order/Payment/Operations/CaptureOperation.php
+++ b/app/code/Magento/Sales/Model/Order/Payment/Operations/CaptureOperation.php
@@ -37,13 +37,6 @@ class CaptureOperation extends AbstractOperation
         $amountToCapture = $payment->formatAmount($invoice->getBaseGrandTotal());
         $order = $payment->getOrder();
 
-        // prepare parent transaction and its amount
-        $paidWorkaround = 0;
-        if (!$invoice->wasPayCalled()) {
-            $paidWorkaround = (double)$amountToCapture;
-        }
-        $payment->isCaptureFinal($paidWorkaround);
-
         $payment->setTransactionId(
             $this->transactionManager->generateTransactionId(
                 $payment,
@@ -72,38 +65,48 @@ class CaptureOperation extends AbstractOperation
             );
         }
 
-        if (!$invoice->getIsPaid()) {
-            // attempt to capture: this can trigger "is_transaction_pending"
-            $method = $payment->getMethodInstance();
-            $method->setStore(
-                $order->getStoreId()
+        if ($invoice->getIsPaid()) {
+            throw new \Magento\Framework\Exception\LocalizedException(
+                __('The transaction "%1" cannot be captured yet.', $invoice->getTransactionId())
             );
-            //TODO replace for sale usage
-            $method->capture($payment, $amountToCapture);
+        }
+
+        // attempt to capture: this can trigger "is_transaction_pending"
+        $method = $payment->getMethodInstance();
+        $method->setStore(
+            $order->getStoreId()
+        );
+        //TODO replace for sale usage
+        $method->capture($payment, $amountToCapture);
 
-            $transactionBuilder = $this->transactionBuilder->setPayment($payment);
-            $transactionBuilder->setOrder($order);
-            $transactionBuilder->setFailSafe(true);
-            $transactionBuilder->setTransactionId($payment->getTransactionId());
-            $transactionBuilder->setAdditionalInformation($payment->getTransactionAdditionalInfo());
-            $transactionBuilder->setSalesDocument($invoice);
-            $transaction = $transactionBuilder->build(Transaction::TYPE_CAPTURE);
+        // prepare parent transaction and its amount
+        $paidWorkaround = 0;
+        if (!$invoice->wasPayCalled()) {
+            $paidWorkaround = (double)$amountToCapture;
+        }
+        if ($payment->isCaptureFinal($paidWorkaround) && $payment->getShouldCloseParentTransaction() !== false) {
+            $payment->setShouldCloseParentTransaction(true);
+        }
 
-            $message = $this->stateCommand->execute($payment, $amountToCapture, $order);
-            if ($payment->getIsTransactionPending()) {
-                $invoice->setIsPaid(false);
-            } else {
-                $invoice->setIsPaid(true);
-                $this->updateTotals($payment, ['base_amount_paid_online' => $amountToCapture]);
-            }
-            $message = $payment->prependMessage($message);
-            $payment->addTransactionCommentsToOrder($transaction, $message);
-            $invoice->setTransactionId($payment->getLastTransId());
+        $transactionBuilder = $this->transactionBuilder->setPayment($payment);
+        $transactionBuilder->setOrder($order);
+        $transactionBuilder->setFailSafe(true);
+        $transactionBuilder->setTransactionId($payment->getTransactionId());
+        $transactionBuilder->setAdditionalInformation($payment->getTransactionAdditionalInfo());
+        $transactionBuilder->setSalesDocument($invoice);
+        $transaction = $transactionBuilder->build(Transaction::TYPE_CAPTURE);
 
-            return $payment;
+        $message = $this->stateCommand->execute($payment, $amountToCapture, $order);
+        if ($payment->getIsTransactionPending()) {
+            $invoice->setIsPaid(false);
+        } else {
+            $invoice->setIsPaid(true);
+            $this->updateTotals($payment, ['base_amount_paid_online' => $amountToCapture]);
         }
-        throw new \Magento\Framework\Exception\LocalizedException(
-            __('The transaction "%1" cannot be captured yet.', $invoice->getTransactionId())
-        );
+        $message = $payment->prependMessage($message);
+        $payment->addTransactionCommentsToOrder($transaction, $message);
+        $invoice->setTransactionId($payment->getLastTransId());
+
+        return $payment;
     }
 }
diff --git a/app/code/Magento/Sales/Model/Order/Payment/Operations/RegisterCaptureNotificationOperation.php b/app/code/Magento/Sales/Model/Order/Payment/Operations/RegisterCaptureNotificationOperation.php
index 7c5e892ce03..708d65d1103 100644
--- a/app/code/Magento/Sales/Model/Order/Payment/Operations/RegisterCaptureNotificationOperation.php
+++ b/app/code/Magento/Sales/Model/Order/Payment/Operations/RegisterCaptureNotificationOperation.php
@@ -44,6 +44,9 @@ class RegisterCaptureNotificationOperation extends AbstractOperation
                 $invoice->setOrder($order);
                 $order->addRelatedObject($invoice);
                 $payment->setCreatedInvoice($invoice);
+                if ($payment->getShouldCloseParentTransaction() !== false) {
+                    $payment->setShouldCloseParentTransaction(true);
+                }
             } else {
                 $payment->setIsFraudDetected(!$skipFraudDetection);
                 $this->updateTotals($payment, ['base_amount_paid_online' => $amount]);
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/PaymentTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/PaymentTest.php
index 29757fc570f..4a050b0a824 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/PaymentTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/PaymentTest.php
@@ -1437,6 +1437,41 @@ class PaymentTest extends \PHPUnit_Framework_TestCase
         ];
     }
 
+    /**
+     * @covers \Magento\Sales\Model\Order\Payment::isCaptureFinal()
+     * @return void
+     */
+    public function testIsCaptureFinal()
+    {
+        $amount = 23.02;
+        $partialAmount = 12.00;
+
+        $this->orderMock->expects(static::exactly(2))
+            ->method('getTotalDue')
+            ->willReturn($amount);
+
+        static::assertFalse($this->payment->isCaptureFinal($partialAmount));
+        static::assertTrue($this->payment->isCaptureFinal($amount));
+    }
+
+    /**
+     * @covers \Magento\Sales\Model\Order\Payment::getShouldCloseParentTransaction()
+     * @return void
+     */
+    public function testGetShouldCloseParentTransaction()
+    {
+        static::assertNull(
+            $this->payment->getShouldCloseParentTransaction(),
+            'By default method should always return `null`'
+        );
+
+        $this->payment->setShouldCloseParentTransaction(1);
+        static::assertTrue($this->payment->getShouldCloseParentTransaction());
+
+        $this->payment->setShouldCloseParentTransaction(0);
+        static::assertFalse($this->payment->getShouldCloseParentTransaction());
+    }
+
     protected function initPayment()
     {
         return (new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this))->getObject(
-- 
GitLab


From 14b29dacb911ee65c21a69f1e050ce6c20127fa9 Mon Sep 17 00:00:00 2001
From: Ievgen Sentiabov <isentiabov@ebay.com>
Date: Fri, 16 Oct 2015 17:08:44 +0300
Subject: [PATCH 042/370] MAGETWO-43957: Authorization transaction is not
 closed after creating capture for order placed within Authorize.net and
 PayPal

 - Refactored code related to failed tests
---
 app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php | 1 -
 1 file changed, 1 deletion(-)

diff --git a/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php b/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php
index a4e1e2beae7..8a297015c14 100644
--- a/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php
@@ -2686,4 +2686,3 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
         return $currencyMock;
     }
 }
-
-- 
GitLab


From 92ff7bd594ac6eaa849ffd381afeb2e22e01e834 Mon Sep 17 00:00:00 2001
From: Dmytro Voskoboinikov <dvoskoboinikov@ebay.com>
Date: Fri, 16 Oct 2015 17:44:06 +0300
Subject: [PATCH 043/370] MAGETWO-44134: [Github] Sales API should use
 searchCriteria not criteria

---
 .../Sales/Api/CreditmemoCommentRepositoryInterface.php |  4 ++--
 .../Sales/Api/CreditmemoItemRepositoryInterface.php    |  4 ++--
 .../Sales/Api/CreditmemoRepositoryInterface.php        |  4 ++--
 .../Sales/Api/InvoiceCommentRepositoryInterface.php    |  4 ++--
 .../Sales/Api/InvoiceItemRepositoryInterface.php       |  4 ++--
 .../Magento/Sales/Api/InvoiceRepositoryInterface.php   |  4 ++--
 .../Sales/Api/OrderAddressRepositoryInterface.php      |  4 ++--
 .../Magento/Sales/Api/OrderItemRepositoryInterface.php |  4 ++--
 .../Sales/Api/OrderPaymentRepositoryInterface.php      |  4 ++--
 .../Magento/Sales/Api/OrderRepositoryInterface.php     |  4 ++--
 .../Api/OrderStatusHistoryRepositoryInterface.php      |  4 ++--
 .../Sales/Api/ShipmentCommentRepositoryInterface.php   |  4 ++--
 .../Sales/Api/ShipmentItemRepositoryInterface.php      |  4 ++--
 .../Magento/Sales/Api/ShipmentRepositoryInterface.php  |  4 ++--
 .../Sales/Api/ShipmentTrackRepositoryInterface.php     |  4 ++--
 .../Sales/Api/TransactionRepositoryInterface.php       |  4 ++--
 .../Block/Adminhtml/Order/Create/Form/Address.php      |  4 ++--
 .../Magento/Sales/Model/Order/AddressRepository.php    | 10 +++++-----
 .../Magento/Sales/Model/Order/CreditmemoRepository.php | 10 +++++-----
 .../Magento/Sales/Model/Order/InvoiceRepository.php    | 10 +++++-----
 app/code/Magento/Sales/Model/Order/ItemRepository.php  |  8 ++++----
 .../Magento/Sales/Model/Order/Payment/Repository.php   | 10 +++++-----
 .../Model/Order/Payment/Transaction/Repository.php     |  8 ++++----
 .../Magento/Sales/Model/Order/ShipmentRepository.php   | 10 +++++-----
 app/code/Magento/Sales/Model/OrderRepository.php       | 10 +++++-----
 .../Magento/Sales/Model/Service/CreditmemoService.php  |  4 ++--
 .../Magento/Sales/Model/Service/InvoiceService.php     |  4 ++--
 app/code/Magento/Sales/Model/Service/OrderService.php  |  4 ++--
 .../Magento/Sales/Model/Service/ShipmentService.php    |  4 ++--
 .../Sales/Test/Unit/Model/InvoiceRepositoryTest.php    |  6 +++---
 .../Test/Unit/Model/Order/AddressRepositoryTest.php    |  6 +++---
 .../Test/Unit/Model/Order/CreditmemoRepositoryTest.php |  6 +++---
 .../Sales/Test/Unit/Model/Order/ItemRepositoryTest.php |  6 +++---
 .../Test/Unit/Model/Order/ShipmentRepositoryTest.php   |  6 +++---
 34 files changed, 95 insertions(+), 95 deletions(-)

diff --git a/app/code/Magento/Sales/Api/CreditmemoCommentRepositoryInterface.php b/app/code/Magento/Sales/Api/CreditmemoCommentRepositoryInterface.php
index d7c1f067cc0..bc8cda48f2b 100644
--- a/app/code/Magento/Sales/Api/CreditmemoCommentRepositoryInterface.php
+++ b/app/code/Magento/Sales/Api/CreditmemoCommentRepositoryInterface.php
@@ -32,10 +32,10 @@ interface CreditmemoCommentRepositoryInterface
      *
      * Returns a credit memo comment search results interface.
      *
-     * @param \Magento\Framework\Api\SearchCriteria $criteria The search criteria.
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria The search criteria.
      * @return \Magento\Sales\Api\Data\CreditmemoCommentSearchResultInterface Credit memo comment search results interface.
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria);
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria);
 
     /**
      * Deletes a specified credit memo comment.
diff --git a/app/code/Magento/Sales/Api/CreditmemoItemRepositoryInterface.php b/app/code/Magento/Sales/Api/CreditmemoItemRepositoryInterface.php
index b322cc7b68f..9921c53a843 100644
--- a/app/code/Magento/Sales/Api/CreditmemoItemRepositoryInterface.php
+++ b/app/code/Magento/Sales/Api/CreditmemoItemRepositoryInterface.php
@@ -27,10 +27,10 @@ interface CreditmemoItemRepositoryInterface
     /**
      * Lists credit memo items that match specified search criteria.
      *
-     * @param \Magento\Framework\Api\SearchCriteria $criteria The search criteria.
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria The search criteria.
      * @return \Magento\Sales\Api\Data\CreditmemoItemSearchResultInterface Credit memo item search results interface.
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria);
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria);
 
     /**
      * Deletes a specified credit memo item.
diff --git a/app/code/Magento/Sales/Api/CreditmemoRepositoryInterface.php b/app/code/Magento/Sales/Api/CreditmemoRepositoryInterface.php
index 8bb487d7322..e1577630215 100644
--- a/app/code/Magento/Sales/Api/CreditmemoRepositoryInterface.php
+++ b/app/code/Magento/Sales/Api/CreditmemoRepositoryInterface.php
@@ -18,10 +18,10 @@ interface CreditmemoRepositoryInterface
     /**
      * Lists credit memos that match specified search criteria.
      *
-     * @param \Magento\Framework\Api\SearchCriteria $criteria The search criteria.
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria The search criteria.
      * @return \Magento\Sales\Api\Data\CreditmemoSearchResultInterface Credit memo search result interface.
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria);
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria);
 
     /**
      * Loads a specified credit memo.
diff --git a/app/code/Magento/Sales/Api/InvoiceCommentRepositoryInterface.php b/app/code/Magento/Sales/Api/InvoiceCommentRepositoryInterface.php
index f256bb88af2..d9d698b987b 100644
--- a/app/code/Magento/Sales/Api/InvoiceCommentRepositoryInterface.php
+++ b/app/code/Magento/Sales/Api/InvoiceCommentRepositoryInterface.php
@@ -17,10 +17,10 @@ interface InvoiceCommentRepositoryInterface
     /**
      * Lists invoice comments that match specified search criteria.
      *
-     * @param \Magento\Framework\Api\SearchCriteria $criteria The search criteria.
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria The search criteria.
      * @return \Magento\Sales\Api\Data\InvoiceCommentSearchResultInterface Invoice search result interface.
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria);
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria);
 
     /**
      * Loads a specified invoice comment.
diff --git a/app/code/Magento/Sales/Api/InvoiceItemRepositoryInterface.php b/app/code/Magento/Sales/Api/InvoiceItemRepositoryInterface.php
index 90ae5cea092..510623d1932 100644
--- a/app/code/Magento/Sales/Api/InvoiceItemRepositoryInterface.php
+++ b/app/code/Magento/Sales/Api/InvoiceItemRepositoryInterface.php
@@ -16,10 +16,10 @@ interface InvoiceItemRepositoryInterface
     /**
      * Lists the invoice items that match specified search criteria.
      *
-     * @param \Magento\Framework\Api\SearchCriteria $criteria
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria
      * @return \Magento\Sales\Api\Data\InvoiceItemSearchResultInterface
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria);
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria);
 
     /**
      * Loads a specified invoice item.
diff --git a/app/code/Magento/Sales/Api/InvoiceRepositoryInterface.php b/app/code/Magento/Sales/Api/InvoiceRepositoryInterface.php
index 0fa5f268be6..9b864ba2ea3 100644
--- a/app/code/Magento/Sales/Api/InvoiceRepositoryInterface.php
+++ b/app/code/Magento/Sales/Api/InvoiceRepositoryInterface.php
@@ -16,10 +16,10 @@ interface InvoiceRepositoryInterface
     /**
      * Lists invoices that match specified search criteria.
      *
-     * @param \Magento\Framework\Api\SearchCriteria $criteria The search criteria.
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria The search criteria.
      * @return \Magento\Sales\Api\Data\InvoiceSearchResultInterface Invoice search result interface.
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria);
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria);
 
     /**
      * Return Invoice object
diff --git a/app/code/Magento/Sales/Api/OrderAddressRepositoryInterface.php b/app/code/Magento/Sales/Api/OrderAddressRepositoryInterface.php
index 5c3db027747..8071ec0c489 100644
--- a/app/code/Magento/Sales/Api/OrderAddressRepositoryInterface.php
+++ b/app/code/Magento/Sales/Api/OrderAddressRepositoryInterface.php
@@ -18,10 +18,10 @@ interface OrderAddressRepositoryInterface
     /**
      * Lists order addresses that match specified search criteria.
      *
-     * @param \Magento\Framework\Api\SearchCriteria $criteria The search criteria.
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria The search criteria.
      * @return \Magento\Sales\Api\Data\OrderAddressSearchResultInterface Order address search result interface.
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria);
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria);
 
     /**
      * Loads a specified order address.
diff --git a/app/code/Magento/Sales/Api/OrderItemRepositoryInterface.php b/app/code/Magento/Sales/Api/OrderItemRepositoryInterface.php
index e1832a09e55..6355db859bb 100644
--- a/app/code/Magento/Sales/Api/OrderItemRepositoryInterface.php
+++ b/app/code/Magento/Sales/Api/OrderItemRepositoryInterface.php
@@ -18,10 +18,10 @@ interface OrderItemRepositoryInterface
     /**
      * Lists order items that match specified search criteria.
      *
-     * @param \Magento\Framework\Api\SearchCriteria $criteria The search criteria.
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria The search criteria.
      * @return \Magento\Sales\Api\Data\OrderItemSearchResultInterface Order item search result interface.
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria);
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria);
 
     /**
      * Loads a specified order item.
diff --git a/app/code/Magento/Sales/Api/OrderPaymentRepositoryInterface.php b/app/code/Magento/Sales/Api/OrderPaymentRepositoryInterface.php
index e4ff2acf54b..005de16342d 100644
--- a/app/code/Magento/Sales/Api/OrderPaymentRepositoryInterface.php
+++ b/app/code/Magento/Sales/Api/OrderPaymentRepositoryInterface.php
@@ -18,10 +18,10 @@ interface OrderPaymentRepositoryInterface
     /**
      * Lists order payments that match specified search criteria.
      *
-     * @param \Magento\Framework\Api\SearchCriteria $criteria The search criteria.
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria The search criteria.
      * @return \Magento\Sales\Api\Data\OrderPaymentSearchResultInterface Order payment search result interface.
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria);
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria);
 
     /**
      * Loads a specified order payment.
diff --git a/app/code/Magento/Sales/Api/OrderRepositoryInterface.php b/app/code/Magento/Sales/Api/OrderRepositoryInterface.php
index d8420ce0da7..50a683b4371 100644
--- a/app/code/Magento/Sales/Api/OrderRepositoryInterface.php
+++ b/app/code/Magento/Sales/Api/OrderRepositoryInterface.php
@@ -18,10 +18,10 @@ interface OrderRepositoryInterface
     /**
      * Lists orders that match specified search criteria.
      *
-     * @param \Magento\Framework\Api\SearchCriteria $criteria The search criteria.
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria The search criteria.
      * @return \Magento\Sales\Api\Data\OrderSearchResultInterface Order search result interface.
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria);
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria);
 
     /**
      * Loads a specified order.
diff --git a/app/code/Magento/Sales/Api/OrderStatusHistoryRepositoryInterface.php b/app/code/Magento/Sales/Api/OrderStatusHistoryRepositoryInterface.php
index b99bf0dc2c7..743f9aaa734 100644
--- a/app/code/Magento/Sales/Api/OrderStatusHistoryRepositoryInterface.php
+++ b/app/code/Magento/Sales/Api/OrderStatusHistoryRepositoryInterface.php
@@ -21,10 +21,10 @@ interface OrderStatusHistoryRepositoryInterface
     /**
      * Lists order status history comments that match specified search criteria.
      *
-     * @param \Magento\Framework\Api\SearchCriteria $criteria The search criteria.
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria The search criteria.
      * @return \Magento\Sales\Api\Data\OrderStatusHistorySearchResultInterface Order status history search result interface.
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria);
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria);
 
     /**
      * Loads a specified order status comment.
diff --git a/app/code/Magento/Sales/Api/ShipmentCommentRepositoryInterface.php b/app/code/Magento/Sales/Api/ShipmentCommentRepositoryInterface.php
index e6605c9c5dd..9ca3bb336f2 100644
--- a/app/code/Magento/Sales/Api/ShipmentCommentRepositoryInterface.php
+++ b/app/code/Magento/Sales/Api/ShipmentCommentRepositoryInterface.php
@@ -17,10 +17,10 @@ interface ShipmentCommentRepositoryInterface
     /**
      * Lists shipment comments that match specific search criteria.
      *
-     * @param \Magento\Framework\Api\SearchCriteria $criteria The search criteria.
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria The search criteria.
      * @return \Magento\Sales\Api\Data\ShipmentCommentSearchResultInterface Shipment comment search result interface.
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria);
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria);
 
     /**
      * Loads a specified shipment comment.
diff --git a/app/code/Magento/Sales/Api/ShipmentItemRepositoryInterface.php b/app/code/Magento/Sales/Api/ShipmentItemRepositoryInterface.php
index 0db3adabf88..5d2d3946a91 100644
--- a/app/code/Magento/Sales/Api/ShipmentItemRepositoryInterface.php
+++ b/app/code/Magento/Sales/Api/ShipmentItemRepositoryInterface.php
@@ -17,10 +17,10 @@ interface ShipmentItemRepositoryInterface
     /**
      * Lists shipment items that match specified search criteria.
      *
-     * @param \Magento\Framework\Api\SearchCriteria $criteria The search criteria.
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria The search criteria.
      * @return \Magento\Sales\Api\Data\ShipmentItemSearchResultInterface Shipment item search result interface.
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria);
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria);
 
     /**
      * Loads a specified shipment item.
diff --git a/app/code/Magento/Sales/Api/ShipmentRepositoryInterface.php b/app/code/Magento/Sales/Api/ShipmentRepositoryInterface.php
index 1cfa85d87e6..858347a6f16 100644
--- a/app/code/Magento/Sales/Api/ShipmentRepositoryInterface.php
+++ b/app/code/Magento/Sales/Api/ShipmentRepositoryInterface.php
@@ -17,10 +17,10 @@ interface ShipmentRepositoryInterface
     /**
      * Lists shipments that match specified search criteria.
      *
-     * @param \Magento\Framework\Api\SearchCriteria $criteria The search criteria.
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria The search criteria.
      * @return \Magento\Sales\Api\Data\ShipmentSearchResultInterface Shipment search results interface.
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria);
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria);
 
     /**
      * Loads a specified shipment.
diff --git a/app/code/Magento/Sales/Api/ShipmentTrackRepositoryInterface.php b/app/code/Magento/Sales/Api/ShipmentTrackRepositoryInterface.php
index 5d7817b0c82..ada64b54d86 100644
--- a/app/code/Magento/Sales/Api/ShipmentTrackRepositoryInterface.php
+++ b/app/code/Magento/Sales/Api/ShipmentTrackRepositoryInterface.php
@@ -17,10 +17,10 @@ interface ShipmentTrackRepositoryInterface
     /**
      * Lists shipment tracks that match specified search criteria.
      *
-     * @param \Magento\Framework\Api\SearchCriteria $criteria The search criteria.
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria The search criteria.
      * @return \Magento\Sales\Api\Data\ShipmentTrackSearchResultInterface Shipment track search result interface.
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria);
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria);
 
     /**
      * Loads a specified shipment track.
diff --git a/app/code/Magento/Sales/Api/TransactionRepositoryInterface.php b/app/code/Magento/Sales/Api/TransactionRepositoryInterface.php
index 7a256e7deaf..be5315f1329 100644
--- a/app/code/Magento/Sales/Api/TransactionRepositoryInterface.php
+++ b/app/code/Magento/Sales/Api/TransactionRepositoryInterface.php
@@ -16,10 +16,10 @@ interface TransactionRepositoryInterface
     /**
      * Lists transactions that match specified search criteria.
      *
-     * @param \Magento\Framework\Api\SearchCriteria $criteria The search criteria.
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria The search criteria.
      * @return \Magento\Sales\Api\Data\TransactionSearchResultInterface Transaction search result interface.
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria);
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria);
 
     /**
      * Loads a specified transaction.
diff --git a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Form/Address.php b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Form/Address.php
index 1ee0386f871..4af19b69b13 100644
--- a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Form/Address.php
+++ b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Form/Address.php
@@ -160,8 +160,8 @@ class Address extends \Magento\Sales\Block\Adminhtml\Order\Create\Form\AbstractF
                 ->setConditionType('eq')
                 ->create();
             $this->searchCriteriaBuilder->addFilters([$filter]);
-            $criteria = $this->searchCriteriaBuilder->create();
-            $result = $this->addressService->getList($criteria);
+            $searchCriteria = $this->searchCriteriaBuilder->create();
+            $result = $this->addressService->getList($searchCriteria);
             return $result->getItems();
         }
         return [];
diff --git a/app/code/Magento/Sales/Model/Order/AddressRepository.php b/app/code/Magento/Sales/Model/Order/AddressRepository.php
index 2e4c9df86fa..fb77f8d17c3 100644
--- a/app/code/Magento/Sales/Model/Order/AddressRepository.php
+++ b/app/code/Magento/Sales/Model/Order/AddressRepository.php
@@ -77,24 +77,24 @@ class AddressRepository implements \Magento\Sales\Api\OrderAddressRepositoryInte
     /**
      * Find order addresses by criteria.
      *
-     * @param \Magento\Framework\Api\SearchCriteria  $criteria
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria
      * @return \Magento\Sales\Api\Data\OrderAddressInterface[]
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria)
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria)
     {
         //@TODO: fix search logic
         /** @var \Magento\Sales\Api\Data\OrderAddressSearchResultInterface $searchResult */
         $searchResult = $this->searchResultFactory->create();
 
-        foreach ($criteria->getFilterGroups() as $filterGroup) {
+        foreach ($searchCriteria->getFilterGroups() as $filterGroup) {
             foreach ($filterGroup->getFilters() as $filter) {
                 $condition = $filter->getConditionType() ? $filter->getConditionType() : 'eq';
                 $searchResult->addFieldToFilter($filter->getField(), [$condition => $filter->getValue()]);
             }
         }
 
-        $searchResult->setCurPage($criteria->getCurrentPage());
-        $searchResult->setPageSize($criteria->getPageSize());
+        $searchResult->setCurPage($searchCriteria->getCurrentPage());
+        $searchResult->setPageSize($searchCriteria->getPageSize());
 
         return $searchResult;
     }
diff --git a/app/code/Magento/Sales/Model/Order/CreditmemoRepository.php b/app/code/Magento/Sales/Model/Order/CreditmemoRepository.php
index 200a57a73ff..c9621a7e668 100644
--- a/app/code/Magento/Sales/Model/Order/CreditmemoRepository.php
+++ b/app/code/Magento/Sales/Model/Order/CreditmemoRepository.php
@@ -87,21 +87,21 @@ class CreditmemoRepository implements \Magento\Sales\Api\CreditmemoRepositoryInt
     /**
      * Lists credit memos that match specified search criteria.
      *
-     * @param \Magento\Framework\Api\SearchCriteria $criteria The search criteria.
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria The search criteria.
      * @return \Magento\Sales\Api\Data\CreditmemoSearchResultInterface Credit memo search result interface.
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria)
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria)
     {
         /** @var \Magento\Sales\Api\Data\CreditmemoSearchResultInterface $searchResult */
         $searchResult = $this->searchResultFactory->create();
-        foreach ($criteria->getFilterGroups() as $filterGroup) {
+        foreach ($searchCriteria->getFilterGroups() as $filterGroup) {
             foreach ($filterGroup->getFilters() as $filter) {
                 $condition = $filter->getConditionType() ? $filter->getConditionType() : 'eq';
                 $searchResult->addFieldToFilter($filter->getField(), [$condition => $filter->getValue()]);
             }
         }
-        $searchResult->setCurPage($criteria->getCurrentPage());
-        $searchResult->setPageSize($criteria->getPageSize());
+        $searchResult->setCurPage($searchCriteria->getCurrentPage());
+        $searchResult->setPageSize($searchCriteria->getPageSize());
         return $searchResult;
     }
 
diff --git a/app/code/Magento/Sales/Model/Order/InvoiceRepository.php b/app/code/Magento/Sales/Model/Order/InvoiceRepository.php
index 04275723bda..6ac147108bb 100644
--- a/app/code/Magento/Sales/Model/Order/InvoiceRepository.php
+++ b/app/code/Magento/Sales/Model/Order/InvoiceRepository.php
@@ -83,21 +83,21 @@ class InvoiceRepository implements InvoiceRepositoryInterface
     /**
      * Find entities by criteria
      *
-     * @param \Magento\Framework\Api\SearchCriteria  $criteria
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria
      * @return \Magento\Sales\Api\Data\InvoiceInterface[]
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria)
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria)
     {
         /** @var \Magento\Sales\Model\ResourceModel\Order\Invoice\Collection $collection */
         $collection = $this->searchResultFactory->create();
-        foreach ($criteria->getFilterGroups() as $filterGroup) {
+        foreach ($searchCriteria->getFilterGroups() as $filterGroup) {
             foreach ($filterGroup->getFilters() as $filter) {
                 $condition = $filter->getConditionType() ? $filter->getConditionType() : 'eq';
                 $collection->addFieldToFilter($filter->getField(), [$condition => $filter->getValue()]);
             }
         }
-        $collection->setCurPage($criteria->getCurrentPage());
-        $collection->setPageSize($criteria->getPageSize());
+        $collection->setCurPage($searchCriteria->getCurrentPage());
+        $collection->setPageSize($searchCriteria->getPageSize());
         return $collection;
     }
 
diff --git a/app/code/Magento/Sales/Model/Order/ItemRepository.php b/app/code/Magento/Sales/Model/Order/ItemRepository.php
index 776b8628286..983a87834fa 100644
--- a/app/code/Magento/Sales/Model/Order/ItemRepository.php
+++ b/app/code/Magento/Sales/Model/Order/ItemRepository.php
@@ -114,16 +114,16 @@ class ItemRepository implements OrderItemRepositoryInterface
     /**
      * Find entities by criteria
      *
-     * @param SearchCriteria  $criteria
+     * @param SearchCriteria $searchCriteria
      * @return OrderItemInterface[]
      */
-    public function getList(SearchCriteria $criteria)
+    public function getList(SearchCriteria $searchCriteria)
     {
         /** @var OrderItemSearchResultInterface $searchResult */
         $searchResult = $this->searchResultFactory->create();
-        $searchResult->setSearchCriteria($criteria);
+        $searchResult->setSearchCriteria($searchCriteria);
 
-        foreach ($criteria->getFilterGroups() as $filterGroup) {
+        foreach ($searchCriteria->getFilterGroups() as $filterGroup) {
             foreach ($filterGroup->getFilters() as $filter) {
                 $condition = $filter->getConditionType() ? $filter->getConditionType() : 'eq';
                 $searchResult->addFieldToFilter($filter->getField(), [$condition => $filter->getValue()]);
diff --git a/app/code/Magento/Sales/Model/Order/Payment/Repository.php b/app/code/Magento/Sales/Model/Order/Payment/Repository.php
index 2517c4b9adb..ef3fb08b5da 100644
--- a/app/code/Magento/Sales/Model/Order/Payment/Repository.php
+++ b/app/code/Magento/Sales/Model/Order/Payment/Repository.php
@@ -47,21 +47,21 @@ class Repository implements OrderPaymentRepositoryInterface
     /**
      * Lists order payments that match specified search criteria.
      *
-     * @param \Magento\Framework\Api\SearchCriteria $criteria The search criteria.
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria The search criteria.
      * @return \Magento\Sales\Api\Data\OrderPaymentSearchResultInterface Order payment search result interface.
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria)
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria)
     {
         /** @var \Magento\Sales\Model\ResourceModel\Order\Payment\Collection $collection */
         $collection = $this->searchResultFactory->create();
-        foreach ($criteria->getFilterGroups() as $filterGroup) {
+        foreach ($searchCriteria->getFilterGroups() as $filterGroup) {
             foreach ($filterGroup->getFilters() as $filter) {
                 $condition = $filter->getConditionType() ? $filter->getConditionType() : 'eq';
                 $collection->addFieldToFilter($filter->getField(), [$condition => $filter->getValue()]);
             }
         }
-        $collection->setCurPage($criteria->getCurrentPage());
-        $collection->setPageSize($criteria->getPageSize());
+        $collection->setCurPage($searchCriteria->getCurrentPage());
+        $collection->setPageSize($searchCriteria->getPageSize());
         return $collection;
     }
 
diff --git a/app/code/Magento/Sales/Model/Order/Payment/Transaction/Repository.php b/app/code/Magento/Sales/Model/Order/Payment/Transaction/Repository.php
index 051ab5401d5..a3550d6073e 100644
--- a/app/code/Magento/Sales/Model/Order/Payment/Transaction/Repository.php
+++ b/app/code/Magento/Sales/Model/Order/Payment/Transaction/Repository.php
@@ -185,18 +185,18 @@ class Repository implements TransactionRepositoryInterface
     /**
      * {@inheritdoc}
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria)
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria)
     {
         /** @var TransactionResource\Collection $collection */
         $collection = $this->searchResultFactory->create();
-        foreach ($criteria->getFilterGroups() as $filterGroup) {
+        foreach ($searchCriteria->getFilterGroups() as $filterGroup) {
             foreach ($filterGroup->getFilters() as $filter) {
                 $condition = $filter->getConditionType() ? $filter->getConditionType() : 'eq';
                 $collection->addFieldToFilter($filter->getField(), [$condition => $filter->getValue()]);
             }
         }
-        $collection->setCurPage($criteria->getCurrentPage());
-        $collection->setPageSize($criteria->getPageSize());
+        $collection->setCurPage($searchCriteria->getCurrentPage());
+        $collection->setPageSize($searchCriteria->getPageSize());
         $collection->addPaymentInformation(['method']);
         $collection->addOrderInformation(['increment_id']);
         return $collection;
diff --git a/app/code/Magento/Sales/Model/Order/ShipmentRepository.php b/app/code/Magento/Sales/Model/Order/ShipmentRepository.php
index c44fa79ae56..0476e481452 100644
--- a/app/code/Magento/Sales/Model/Order/ShipmentRepository.php
+++ b/app/code/Magento/Sales/Model/Order/ShipmentRepository.php
@@ -77,24 +77,24 @@ class ShipmentRepository implements \Magento\Sales\Api\ShipmentRepositoryInterfa
     /**
      * Find shipments by criteria.
      *
-     * @param \Magento\Framework\Api\SearchCriteria  $criteria
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria
      * @return \Magento\Sales\Api\Data\ShipmentInterface[]
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria)
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria)
     {
         //@TODO: fix search logic
         /** @var \Magento\Sales\Api\Data\ShipmentSearchResultInterface $searchResult */
         $searchResult = $this->searchResultFactory->create();
 
-        foreach ($criteria->getFilterGroups() as $filterGroup) {
+        foreach ($searchCriteria->getFilterGroups() as $filterGroup) {
             foreach ($filterGroup->getFilters() as $filter) {
                 $condition = $filter->getConditionType() ? $filter->getConditionType() : 'eq';
                 $searchResult->addFieldToFilter($filter->getField(), [$condition => $filter->getValue()]);
             }
         }
 
-        $searchResult->setCurPage($criteria->getCurrentPage());
-        $searchResult->setPageSize($criteria->getPageSize());
+        $searchResult->setCurPage($searchCriteria->getCurrentPage());
+        $searchResult->setPageSize($searchCriteria->getPageSize());
 
         return $searchResult;
     }
diff --git a/app/code/Magento/Sales/Model/OrderRepository.php b/app/code/Magento/Sales/Model/OrderRepository.php
index 976a03486a4..1d4a7b8e66a 100644
--- a/app/code/Magento/Sales/Model/OrderRepository.php
+++ b/app/code/Magento/Sales/Model/OrderRepository.php
@@ -73,22 +73,22 @@ class OrderRepository implements \Magento\Sales\Api\OrderRepositoryInterface
     /**
      * Find entities by criteria
      *
-     * @param \Magento\Framework\Api\SearchCriteria  $criteria
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria
      * @return \Magento\Sales\Api\Data\OrderInterface[]
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria)
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria)
     {
         //@TODO: fix search logic
         /** @var \Magento\Sales\Api\Data\OrderSearchResultInterface $searchResult */
         $searchResult = $this->searchResultFactory->create();
-        foreach ($criteria->getFilterGroups() as $filterGroup) {
+        foreach ($searchCriteria->getFilterGroups() as $filterGroup) {
             foreach ($filterGroup->getFilters() as $filter) {
                 $condition = $filter->getConditionType() ? $filter->getConditionType() : 'eq';
                 $searchResult->addFieldToFilter($filter->getField(), [$condition => $filter->getValue()]);
             }
         }
-        $searchResult->setCurPage($criteria->getCurrentPage());
-        $searchResult->setPageSize($criteria->getPageSize());
+        $searchResult->setCurPage($searchCriteria->getCurrentPage());
+        $searchResult->setPageSize($searchCriteria->getPageSize());
         return $searchResult;
     }
 
diff --git a/app/code/Magento/Sales/Model/Service/CreditmemoService.php b/app/code/Magento/Sales/Model/Service/CreditmemoService.php
index ea0e1ed82d1..6b949718c11 100644
--- a/app/code/Magento/Sales/Model/Service/CreditmemoService.php
+++ b/app/code/Magento/Sales/Model/Service/CreditmemoService.php
@@ -108,8 +108,8 @@ class CreditmemoService implements \Magento\Sales\Api\CreditmemoManagementInterf
         $this->searchCriteriaBuilder->addFilters(
             [$this->filterBuilder->setField('parent_id')->setValue($id)->setConditionType('eq')->create()]
         );
-        $criteria = $this->searchCriteriaBuilder->create();
-        return $this->commentRepository->getList($criteria);
+        $searchCriteria = $this->searchCriteriaBuilder->create();
+        return $this->commentRepository->getList($searchCriteria);
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Service/InvoiceService.php b/app/code/Magento/Sales/Model/Service/InvoiceService.php
index 5c07bf365e9..7352d0f221e 100644
--- a/app/code/Magento/Sales/Model/Service/InvoiceService.php
+++ b/app/code/Magento/Sales/Model/Service/InvoiceService.php
@@ -103,8 +103,8 @@ class InvoiceService implements InvoiceManagementInterface
         $this->criteriaBuilder->addFilters(
             [$this->filterBuilder->setField('parent_id')->setValue($id)->setConditionType('eq')->create()]
         );
-        $criteria = $this->criteriaBuilder->create();
-        return $this->commentRepository->getList($criteria);
+        $searchCriteria = $this->criteriaBuilder->create();
+        return $this->commentRepository->getList($searchCriteria);
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Service/OrderService.php b/app/code/Magento/Sales/Model/Service/OrderService.php
index 5df21bf9df6..d3c45bd2bd2 100644
--- a/app/code/Magento/Sales/Model/Service/OrderService.php
+++ b/app/code/Magento/Sales/Model/Service/OrderService.php
@@ -98,8 +98,8 @@ class OrderService implements OrderManagementInterface
         $this->criteriaBuilder->addFilters(
             [$this->filterBuilder->setField('parent_id')->setValue($id)->setConditionType('eq')->create()]
         );
-        $criteria = $this->criteriaBuilder->create();
-        return $this->historyRepository->getList($criteria);
+        $searchCriteria = $this->criteriaBuilder->create();
+        return $this->historyRepository->getList($searchCriteria);
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Service/ShipmentService.php b/app/code/Magento/Sales/Model/Service/ShipmentService.php
index 6523e8e8382..62593c1b1d0 100644
--- a/app/code/Magento/Sales/Model/Service/ShipmentService.php
+++ b/app/code/Magento/Sales/Model/Service/ShipmentService.php
@@ -91,8 +91,8 @@ class ShipmentService implements ShipmentManagementInterface
         $this->criteriaBuilder->addFilters(
             [$this->filterBuilder->setField('parent_id')->setValue($id)->setConditionType('eq')->create()]
         );
-        $criteria = $this->criteriaBuilder->create();
-        return $this->commentRepository->getList($criteria);
+        $searchCriteria = $this->criteriaBuilder->create();
+        return $this->commentRepository->getList($searchCriteria);
     }
 
     /**
diff --git a/app/code/Magento/Sales/Test/Unit/Model/InvoiceRepositoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/InvoiceRepositoryTest.php
index 4a2ef97a197..0cb9a4dc715 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/InvoiceRepositoryTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/InvoiceRepositoryTest.php
@@ -148,10 +148,10 @@ class InvoiceRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getFilters')
             ->willReturn([$filter]);
 
-        $criteria = $this->getMockBuilder('Magento\Framework\Api\SearchCriteria')
+        $searchCriteria = $this->getMockBuilder('Magento\Framework\Api\SearchCriteria')
             ->disableOriginalConstructor()
             ->getMock();
-        $criteria->expects($this->once())
+        $searchCriteria->expects($this->once())
             ->method('getFilterGroups')
             ->willReturn($filterGroups);
 
@@ -166,7 +166,7 @@ class InvoiceRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->willReturn($collection);
 
-        $this->assertEquals($collection, $this->invoice->getList($criteria));
+        $this->assertEquals($collection, $this->invoice->getList($searchCriteria));
     }
 
     public function testDelete()
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/AddressRepositoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/AddressRepositoryTest.php
index f943f663222..3dd1590bf72 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/AddressRepositoryTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/AddressRepositoryTest.php
@@ -170,14 +170,14 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getFilters')
             ->willReturn([$filter]);
 
-        $criteria = $this->getMock(
+        $searchCriteria = $this->getMock(
             'Magento\Framework\Api\SearchCriteria',
             ['getFilterGroups'],
             [],
             '',
             false
         );
-        $criteria->expects($this->once())
+        $searchCriteria->expects($this->once())
             ->method('getFilterGroups')
             ->willReturn([$filterGroup]);
 
@@ -196,7 +196,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->willReturn($collection);
 
-        $this->assertEquals($collection, $this->subject->getList($criteria));
+        $this->assertEquals($collection, $this->subject->getList($searchCriteria));
     }
 
     public function testDelete()
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/CreditmemoRepositoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/CreditmemoRepositoryTest.php
index cba7908dacd..25357bd6517 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/CreditmemoRepositoryTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/CreditmemoRepositoryTest.php
@@ -153,10 +153,10 @@ class CreditmemoRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getFilters')
             ->willReturn([$filter]);
 
-        $criteria = $this->getMockBuilder('Magento\Framework\Api\SearchCriteria')
+        $searchCriteria = $this->getMockBuilder('Magento\Framework\Api\SearchCriteria')
             ->disableOriginalConstructor()
             ->getMock();
-        $criteria->expects($this->once())
+        $searchCriteria->expects($this->once())
             ->method('getFilterGroups')
             ->willReturn($filterGroups);
 
@@ -171,7 +171,7 @@ class CreditmemoRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->willReturn($collection);
 
-        $this->assertEquals($collection, $this->creditmemo->getList($criteria));
+        $this->assertEquals($collection, $this->creditmemo->getList($searchCriteria));
     }
 
     public function testDelete()
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/ItemRepositoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/ItemRepositoryTest.php
index e2deb200dbc..314271c3156 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/ItemRepositoryTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/ItemRepositoryTest.php
@@ -200,10 +200,10 @@ class ItemRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getFilters')
             ->willReturn([$filterMock]);
 
-        $criteriaMock = $this->getMockBuilder('Magento\Framework\Api\SearchCriteria')
+        $searchCriteriaMock = $this->getMockBuilder('Magento\Framework\Api\SearchCriteria')
             ->disableOriginalConstructor()
             ->getMock();
-        $criteriaMock->expects($this->once())
+        $searchCriteriaMock->expects($this->once())
             ->method('getFilterGroups')
             ->willReturn([$filterGroupMock]);
 
@@ -230,7 +230,7 @@ class ItemRepositoryTest extends \PHPUnit_Framework_TestCase
             ->willReturn($searchResultMock);
 
         $model = $this->getModel($orderItemMock, $productType);
-        $this->assertSame($searchResultMock, $model->getList($criteriaMock));
+        $this->assertSame($searchResultMock, $model->getList($searchCriteriaMock));
     }
 
     public function testDeleteById()
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/ShipmentRepositoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/ShipmentRepositoryTest.php
index 36a8360ee09..f76732578da 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/ShipmentRepositoryTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/ShipmentRepositoryTest.php
@@ -170,14 +170,14 @@ class ShipmentRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getFilters')
             ->willReturn([$filter]);
 
-        $criteria = $this->getMock(
+        $searchCriteria = $this->getMock(
             'Magento\Framework\Api\SearchCriteria',
             ['getFilterGroups'],
             [],
             '',
             false
         );
-        $criteria->expects($this->once())
+        $searchCriteria->expects($this->once())
             ->method('getFilterGroups')
             ->willReturn([$filterGroup]);
 
@@ -196,7 +196,7 @@ class ShipmentRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->willReturn($collection);
 
-        $this->assertEquals($collection, $this->subject->getList($criteria));
+        $this->assertEquals($collection, $this->subject->getList($searchCriteria));
     }
 
     public function testDelete()
-- 
GitLab


From 4327f8b314279eca12dd79db49052001ded57243 Mon Sep 17 00:00:00 2001
From: Sergey Ivashchenko <sivashchenko@ebay.com>
Date: Fri, 16 Oct 2015 19:25:07 +0300
Subject: [PATCH 044/370] MAGETWO-43993: Coupon Code is deleted from Cart Price
 rule if we use it for checkout with ExpressCheckout button

---
 .../Magento/SalesRule/Observer/SalesOrderAfterPlaceObserver.php  | 1 +
 1 file changed, 1 insertion(+)

diff --git a/app/code/Magento/SalesRule/Observer/SalesOrderAfterPlaceObserver.php b/app/code/Magento/SalesRule/Observer/SalesOrderAfterPlaceObserver.php
index 1d1a6be1091..9ceb8221d17 100644
--- a/app/code/Magento/SalesRule/Observer/SalesOrderAfterPlaceObserver.php
+++ b/app/code/Magento/SalesRule/Observer/SalesOrderAfterPlaceObserver.php
@@ -77,6 +77,7 @@ class SalesOrderAfterPlaceObserver implements ObserverInterface
             $rule = $this->_ruleFactory->create();
             $rule->load($ruleId);
             if ($rule->getId()) {
+                $rule->loadCouponCode();
                 $rule->setTimesUsed($rule->getTimesUsed() + 1);
                 $rule->save();
 
-- 
GitLab


From ed33e2b3a6fba24cf1f9c48fce98b701f90a4fca Mon Sep 17 00:00:00 2001
From: Sergey Ivashchenko <sivashchenko@ebay.com>
Date: Fri, 16 Oct 2015 19:40:13 +0300
Subject: [PATCH 045/370] MAGETWO-43993: Coupon Code is deleted from Cart Price
 rule if we use it for checkout with ExpressCheckout button

---
 app/code/Magento/SalesRule/Model/Plugin/Rule.php   |  2 +-
 app/code/Magento/SalesRule/Model/Rule.php          | 14 +++++++++++++-
 .../SalesRule/Test/Unit/Model/Plugin/RuleTest.php  |  6 +++---
 3 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/app/code/Magento/SalesRule/Model/Plugin/Rule.php b/app/code/Magento/SalesRule/Model/Plugin/Rule.php
index 7bf8cb3c43d..8aa29ffe419 100644
--- a/app/code/Magento/SalesRule/Model/Plugin/Rule.php
+++ b/app/code/Magento/SalesRule/Model/Plugin/Rule.php
@@ -13,7 +13,7 @@ class Rule
      * @return \Magento\SalesRule\Model\Rule
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function aroundLoadCouponCode(
+    public function aroundLoadRelations(
         \Magento\SalesRule\Model\Rule $subject,
         \Closure $proceed
     ) {
diff --git a/app/code/Magento/SalesRule/Model/Rule.php b/app/code/Magento/SalesRule/Model/Rule.php
index 200a836592c..b9ad49da250 100644
--- a/app/code/Magento/SalesRule/Model/Rule.php
+++ b/app/code/Magento/SalesRule/Model/Rule.php
@@ -231,11 +231,23 @@ class Rule extends \Magento\Rule\Model\AbstractModel
      */
     protected function _afterLoad()
     {
-        $this->loadCouponCode();
+        $this->loadRelations();
         return parent::_afterLoad();
     }
 
     /**
+     * Load all relative data
+     *
+     * return void
+     */
+    public function loadRelations()
+    {
+        $this->loadCouponCode();
+    }
+
+    /**
+     * Load coupon code
+     *
      * @return void
      */
     public function loadCouponCode()
diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/Plugin/RuleTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/Plugin/RuleTest.php
index fb788c5cf5b..a30a4acb36a 100644
--- a/app/code/Magento/SalesRule/Test/Unit/Model/Plugin/RuleTest.php
+++ b/app/code/Magento/SalesRule/Test/Unit/Model/Plugin/RuleTest.php
@@ -14,7 +14,7 @@ class RuleTest extends \PHPUnit_Framework_TestCase
     protected $plugin;
 
     /**}
-     * @var \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\SalesRule\Model\Rule|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $subject;
 
@@ -36,11 +36,11 @@ class RuleTest extends \PHPUnit_Framework_TestCase
         $this->plugin = $objectManager->getObject('Magento\SalesRule\Model\Plugin\Rule');
     }
 
-    public function testLoadCouponCode()
+    public function testLoadRelations()
     {
         $this->assertEquals(
             $this->subject,
-            $this->plugin->aroundLoadCouponCode($this->subject, $this->genericClosure)
+            $this->plugin->aroundLoadRelations($this->subject, $this->genericClosure)
         );
     }
 }
-- 
GitLab


From 5590fdc8ffd0e12f9a4ceea07d82ff72a489a5af Mon Sep 17 00:00:00 2001
From: Mike Weis <miweis@ebay.com>
Date: Fri, 16 Oct 2015 13:45:55 -0500
Subject: [PATCH 046/370] MAGETWO-44044: Including tax price does not include
 tax in mini shopping cart subtotal

 - fixed
---
 .../CheckoutTotalsJsLayoutDataProvider.php    |  2 +-
 .../Tax/Model/Sales/Total/Quote/Tax.php       | 41 +++++++++++++++++++
 .../Unit/Model/Sales/Total/Quote/TaxTest.php  | 23 +++++++----
 .../Tax/Test/Unit/Setup/TaxSetupTest.php      | 12 +++++-
 .../checkout/minicart/subtotal/totals.html    |  4 +-
 5 files changed, 69 insertions(+), 13 deletions(-)

diff --git a/app/code/Magento/Tax/CustomerData/CheckoutTotalsJsLayoutDataProvider.php b/app/code/Magento/Tax/CustomerData/CheckoutTotalsJsLayoutDataProvider.php
index 61a94b5a848..35af16ecba5 100644
--- a/app/code/Magento/Tax/CustomerData/CheckoutTotalsJsLayoutDataProvider.php
+++ b/app/code/Magento/Tax/CustomerData/CheckoutTotalsJsLayoutDataProvider.php
@@ -61,7 +61,7 @@ class CheckoutTotalsJsLayoutDataProvider implements JsLayoutDataProviderInterfac
     protected function getTotalsConfig()
     {
         return [
-            'display_subtotal_incl_tax' => (int)$this->taxConfig->displayCartSubtotalInclTax(),
+            'display_cart_subtotal_incl_tax' => (int)$this->taxConfig->displayCartSubtotalInclTax(),
             'display_cart_subtotal_excl_tax' => (int)$this->taxConfig->displayCartSubtotalExclTax(),
         ];
     }
diff --git a/app/code/Magento/Tax/Model/Sales/Total/Quote/Tax.php b/app/code/Magento/Tax/Model/Sales/Total/Quote/Tax.php
index c1cd2b9927c..95a0dc2cf2d 100644
--- a/app/code/Magento/Tax/Model/Sales/Total/Quote/Tax.php
+++ b/app/code/Magento/Tax/Model/Sales/Total/Quote/Tax.php
@@ -298,6 +298,10 @@ class Tax extends CommonTaxCollector
         $store = $quote->getStore();
         $applied = $total->getAppliedTaxes();
         $amount = $total->getTaxAmount();
+        if (is_null($amount)) {
+            $this->enhanceTotalData($quote, $total);
+            $amount = $total->getTaxAmount();
+        }
         $taxAmount = $amount + $total->getTotalAmount('discount_tax_compensation');
 
         $area = null;
@@ -340,6 +344,43 @@ class Tax extends CommonTaxCollector
         return $totals;
     }
 
+    /**
+     * Adds minimal tax information to the "total" data structure
+     *
+     * @param \Magento\Quote\Model\Quote $quote
+     * @param Address\Total $total
+     */
+    protected function enhanceTotalData(
+        \Magento\Quote\Model\Quote $quote,
+        \Magento\Quote\Model\Quote\Address\Total $total
+    ) {
+        $taxAmount = 0;
+        $shippingTaxAmount = 0;
+        $discountTaxCompensation = 0;
+
+        $subtotalInclTax = $total->getSubtotalInclTax();
+        $computeSubtotalInclTax = true;
+        if ($total->getSubtotalInclTax() > 0) {
+            $computeSubtotalInclTax = false;
+        }
+
+        /** @var \Magento\Quote\Model\Quote\Address $address */
+        foreach ($quote->getAllAddresses() as $address) {
+            $taxAmount += $address->getTaxAmount();
+            $shippingTaxAmount += $address->getShippingTaxAmount();
+            $discountTaxCompensation += $address->getDiscountTaxCompensationAmount();
+            if ($computeSubtotalInclTax) {
+                $subtotalInclTax += $address->getSubtotalInclTax();
+            }
+        }
+
+        $total->setTaxAmount($taxAmount);
+        $total->setShippingTaxAmount($shippingTaxAmount);
+        $total->setDiscountTaxCompensationAmount($discountTaxCompensation); // accessed via 'discount_tax_compensation'
+        $total->setSubtotalInclTax($subtotalInclTax);
+        return;
+    }
+
     /**
      * Process model configuration array.
      * This method can be used for changing totals collect sort order
diff --git a/app/code/Magento/Tax/Test/Unit/Model/Sales/Total/Quote/TaxTest.php b/app/code/Magento/Tax/Test/Unit/Model/Sales/Total/Quote/TaxTest.php
index b5c223f0a62..ee093ee6807 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/Sales/Total/Quote/TaxTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/Sales/Total/Quote/TaxTest.php
@@ -576,7 +576,7 @@ class TaxTest extends \PHPUnit_Framework_TestCase
     /**
      * Tests the specific method
      *
-     * @param string $itemData
+     * @param string $appliedTaxesData
      * @param array $addressData
      *
      * @dataProvider dataProviderFetchArray
@@ -584,7 +584,8 @@ class TaxTest extends \PHPUnit_Framework_TestCase
      */
     public function testFetch($appliedTaxesData, $addressData)
     {
-        $methods = ['getAppliedTaxes', 'getTaxAmount', 'getTotalAmount', 'getGrandTotal', 'getSubtotalInclTax'];
+        $taxAmount = 8;
+        $methods = ['getAppliedTaxes', 'getTotalAmount', 'getGrandTotal', 'getSubtotalInclTax'];
         $totalsMock = $this->getMock('Magento\Quote\Model\Quote\Address\Total', $methods, [], '', false);
         $taxConfig = $this->getMockBuilder('\Magento\Tax\Model\Config')
             ->disableOriginalConstructor()
@@ -632,10 +633,6 @@ class TaxTest extends \PHPUnit_Framework_TestCase
             ->expects($this->once())
             ->method('getAppliedTaxes')
             ->will($this->returnValue($appliedTaxes));
-        $address
-            ->expects($this->any())
-            ->method('getQuote')
-            ->will($this->returnValue($quote));
         $totalsMock
             ->expects($this->any())
             ->method('getGrandTotal')
@@ -644,10 +641,17 @@ class TaxTest extends \PHPUnit_Framework_TestCase
             ->expects($this->any())
             ->method('getStore')
             ->will($this->returnValue($store));
+        $quote->expects($this->any())
+            ->method('getAllAddresses')
+            ->will($this->returnValue([$address]));
+        $address
+            ->expects($this->any())
+            ->method('getQuote')
+            ->will($this->returnValue($quote));
         $address
             ->expects($this->any())
             ->method('getTaxAmount')
-            ->will($this->returnValue(8));
+            ->will($this->returnValue($taxAmount));
         $address
             ->expects($this->any())
             ->method('getCustomAttributesCodes')
@@ -658,7 +662,10 @@ class TaxTest extends \PHPUnit_Framework_TestCase
             $address->setData($key, $value);
         }
 
-        $taxTotalsCalcModel->fetch($quote, $totalsMock);
+        $this->assertNull($totalsMock->getTaxAmount());
+        $totalsArray = $taxTotalsCalcModel->fetch($quote, $totalsMock);
+        $this->assertArrayHasKey('value', $totalsArray[0]);
+        $this->assertEquals($taxAmount, $totalsArray[0]['value']);
     }
 
     /**
diff --git a/app/code/Magento/Tax/Test/Unit/Setup/TaxSetupTest.php b/app/code/Magento/Tax/Test/Unit/Setup/TaxSetupTest.php
index c42a28490e3..151cd1876c4 100644
--- a/app/code/Magento/Tax/Test/Unit/Setup/TaxSetupTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Setup/TaxSetupTest.php
@@ -19,11 +19,19 @@ class TaxSetupTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->typeConfigMock = $this->getMock('Magento\Catalog\Model\ProductTypes\ConfigInterface');
+
+        $salesSetup = $this->getMock('\Magento\Sales\Setup\SalesSetup', [], [], '', false);
+        $salesSetupFactory = $this->getMock('Magento\Sales\Setup\SalesSetupFactory', ['create'], [], '', false);
+        $salesSetupFactory->expects($this->any())->method('create')->will($this->returnValue($salesSetup));
+
+        $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->taxSetup = $helper->getObject(
             'Magento\Tax\Setup\TaxSetup',
-            ['productTypeConfig' => $this->typeConfigMock]
+            [
+                'productTypeConfig' => $this->typeConfigMock,
+                'salesSetupFactory' => $salesSetupFactory,
+            ]
         );
     }
 
diff --git a/app/code/Magento/Tax/view/frontend/web/template/checkout/minicart/subtotal/totals.html b/app/code/Magento/Tax/view/frontend/web/template/checkout/minicart/subtotal/totals.html
index c3c28a58138..5b04ee82984 100644
--- a/app/code/Magento/Tax/view/frontend/web/template/checkout/minicart/subtotal/totals.html
+++ b/app/code/Magento/Tax/view/frontend/web/template/checkout/minicart/subtotal/totals.html
@@ -10,11 +10,11 @@
         <span class="price-wrapper" data-bind="html: cart().subtotal_excl_tax"></span>
     <!-- /ko -->
 
-    <!-- ko if: !display_cart_subtotal_excl_tax && display_subtotal_incl_tax -->
+    <!-- ko if: !display_cart_subtotal_excl_tax && display_cart_subtotal_incl_tax -->
         <span class="price-wrapper" data-bind="html: cart().subtotal_incl_tax"></span>
     <!-- /ko -->
 
-    <!-- ko if: !display_cart_subtotal_excl_tax && !display_subtotal_incl_tax -->
+    <!-- ko if: !display_cart_subtotal_excl_tax && !display_cart_subtotal_incl_tax -->
         <span class="price-wrapper price-including-tax"
               data-bind="attr: { 'data-label': $t('Incl. Tax') }, html: cart().subtotal_incl_tax">
         </span>
-- 
GitLab


From 12e8642a7b5825fac416a4210ea9ba7c68977c61 Mon Sep 17 00:00:00 2001
From: Mike Weis <miweis@ebay.com>
Date: Fri, 16 Oct 2015 14:13:06 -0500
Subject: [PATCH 047/370] MAGETWO-44044: Including tax price does not include
 tax in mini shopping cart subtotal

 - fixed static code failures
---
 app/code/Magento/Tax/Model/Sales/Total/Quote/Tax.php | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Tax/Model/Sales/Total/Quote/Tax.php b/app/code/Magento/Tax/Model/Sales/Total/Quote/Tax.php
index 95a0dc2cf2d..e16795ebb26 100644
--- a/app/code/Magento/Tax/Model/Sales/Total/Quote/Tax.php
+++ b/app/code/Magento/Tax/Model/Sales/Total/Quote/Tax.php
@@ -88,6 +88,7 @@ class Tax extends CommonTaxCollector
      * @param ShippingAssignmentInterface $shippingAssignment
      * @param Address\Total $total
      * @return $this
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function collect(
         \Magento\Quote\Model\Quote $quote,
@@ -291,6 +292,7 @@ class Tax extends CommonTaxCollector
      * @param Address\Total $total
      * @return array|null
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
+     * @SuppressWarnings(PHPMD.NPathComplexity
      */
     public function fetch(\Magento\Quote\Model\Quote $quote, \Magento\Quote\Model\Quote\Address\Total $total)
     {
@@ -298,7 +300,7 @@ class Tax extends CommonTaxCollector
         $store = $quote->getStore();
         $applied = $total->getAppliedTaxes();
         $amount = $total->getTaxAmount();
-        if (is_null($amount)) {
+        if ($amount == null) {
             $this->enhanceTotalData($quote, $total);
             $amount = $total->getTaxAmount();
         }
@@ -349,6 +351,7 @@ class Tax extends CommonTaxCollector
      *
      * @param \Magento\Quote\Model\Quote $quote
      * @param Address\Total $total
+     * @return null
      */
     protected function enhanceTotalData(
         \Magento\Quote\Model\Quote $quote,
-- 
GitLab


From 196648a18a67ae863b14ce884b4550e8d901e29b Mon Sep 17 00:00:00 2001
From: Mike Weis <miweis@ebay.com>
Date: Fri, 16 Oct 2015 14:21:44 -0500
Subject: [PATCH 048/370] MAGETWO-44044: Including tax price does not include
 tax in mini shopping cart subtotal

 - fixed more static code failures
---
 app/code/Magento/Tax/Model/Sales/Total/Quote/Tax.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Tax/Model/Sales/Total/Quote/Tax.php b/app/code/Magento/Tax/Model/Sales/Total/Quote/Tax.php
index e16795ebb26..34562754e08 100644
--- a/app/code/Magento/Tax/Model/Sales/Total/Quote/Tax.php
+++ b/app/code/Magento/Tax/Model/Sales/Total/Quote/Tax.php
@@ -292,7 +292,7 @@ class Tax extends CommonTaxCollector
      * @param Address\Total $total
      * @return array|null
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
-     * @SuppressWarnings(PHPMD.NPathComplexity
+     * @SuppressWarnings(PHPMD.NPathComplexity)
      */
     public function fetch(\Magento\Quote\Model\Quote $quote, \Magento\Quote\Model\Quote\Address\Total $total)
     {
-- 
GitLab


From b165f7860b4765fd38dd8968a35fd34aaa2d5c20 Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Fri, 16 Oct 2015 15:59:26 -0500
Subject: [PATCH 049/370] MAGETWO-43857: [github] cache types don't properly
 invalidate all the time #1844

---
 lib/internal/Magento/Framework/App/Config/Value.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/internal/Magento/Framework/App/Config/Value.php b/lib/internal/Magento/Framework/App/Config/Value.php
index 629b066aa35..32bb526b015 100644
--- a/lib/internal/Magento/Framework/App/Config/Value.php
+++ b/lib/internal/Magento/Framework/App/Config/Value.php
@@ -66,8 +66,8 @@ class Value extends \Magento\Framework\Model\AbstractModel implements \Magento\F
         array $data = []
     ) {
         $this->_config = $config;
-        parent::__construct($context, $registry, $resource, $resourceCollection, $data);
         $this->cacheTypeList = $cacheTypeList;
+        parent::__construct($context, $registry, $resource, $resourceCollection, $data);
     }
 
     /**
-- 
GitLab


From ffe9b5b45aec3b48106ca75f5dd66d19af266424 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Fri, 16 Oct 2015 17:53:05 -0500
Subject: [PATCH 050/370] MAGETWO-44154: Random PAT build failures due to
 400/503 HTTP response errors being thrown  - if trying to generate class that
 exists on disc, skip generation but try to load file

---
 .../Magento/Framework/Code/Generator.php         | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/lib/internal/Magento/Framework/Code/Generator.php b/lib/internal/Magento/Framework/Code/Generator.php
index 68f63e0dc00..2505bc34ba7 100644
--- a/lib/internal/Magento/Framework/Code/Generator.php
+++ b/lib/internal/Magento/Framework/Code/Generator.php
@@ -104,22 +104,27 @@ class Generator
                     new \Magento\Framework\Phrase(implode(' ', $errors))
                 );
             }
-            $this->tryToIncludeFile($file, $className);
+            $this->tryToIncludeFile($file, $className, true);
             return self::GENERATION_SUCCESS;
         }
     }
 
     /**
-     * Include file only if the class is not already defined in memory
+     * Include file conditionally
      *
      * @param string $fileName
      * @param string $className
+     * @param bool $mustExist Skip inclusion if file doesn't exist and this is false
      * @return void
      */
-    public function tryToIncludeFile($fileName, $className)
+    public function tryToIncludeFile($fileName, $className, $mustExist)
     {
         if (!$this->definedClasses->isClassLoadableFromMemory($className)) {
-            include $fileName;
+            if (!$mustExist && file_exists($fileName)) {
+                include $fileName;
+            } else {
+                include $fileName;
+            }
         }
     }
 
@@ -202,6 +207,9 @@ class Generator
     {
         if (!$resultEntityType || !$sourceClassName) {
             return self::GENERATION_ERROR;
+        } else if ($this->definedClasses->isClassLoadableFromDisc($resultClass)) {
+            $this->tryToIncludeFile($this->_ioObject->getResultFileName($resultClass), $resultClass, false);
+            return self::GENERATION_SKIP;
         } else if (!isset($this->_generatedEntities[$resultEntityType])) {
             throw new \InvalidArgumentException('Unknown generation entity.');
         }
-- 
GitLab


From cce202203b96742c7b5045bf89f299078fd5e7d6 Mon Sep 17 00:00:00 2001
From: Andrii Kasian <akasian@magento.com>
Date: Sat, 17 Oct 2015 13:31:23 +0300
Subject: [PATCH 051/370] MAGETWO-44159: Configurable product price in store
 front doesn't reflect price change from backend

---
 app/code/Magento/ConfigurableProduct/Setup/InstallData.php | 1 -
 1 file changed, 1 deletion(-)

diff --git a/app/code/Magento/ConfigurableProduct/Setup/InstallData.php b/app/code/Magento/ConfigurableProduct/Setup/InstallData.php
index 1d6705846db..8b29c11bc2b 100644
--- a/app/code/Magento/ConfigurableProduct/Setup/InstallData.php
+++ b/app/code/Magento/ConfigurableProduct/Setup/InstallData.php
@@ -47,7 +47,6 @@ class InstallData implements InstallDataInterface
             'minimal_price',
             'msrp',
             'msrp_display_actual_price_type',
-            'price',
             'special_price',
             'special_from_date',
             'special_to_date',
-- 
GitLab


From c30fcab93b67362f232c04a5146967f99c94b7e4 Mon Sep 17 00:00:00 2001
From: Sergey Ivashchenko <sivashchenko@ebay.com>
Date: Sat, 17 Oct 2015 13:37:34 +0300
Subject: [PATCH 052/370] MAGETWO-44157: Limiter (Show 20 per page) does not
 work in My Account -> My Orders

---
 app/code/Magento/Theme/view/frontend/templates/html/pager.phtml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Theme/view/frontend/templates/html/pager.phtml b/app/code/Magento/Theme/view/frontend/templates/html/pager.phtml
index e7835bee90c..331903c8ced 100644
--- a/app/code/Magento/Theme/view/frontend/templates/html/pager.phtml
+++ b/app/code/Magento/Theme/view/frontend/templates/html/pager.phtml
@@ -116,7 +116,7 @@
     <?php if ($block->isShowPerPage()): ?>
         <div class="limiter">
             <strong class="limiter-label"><?php /* @escapeNotVerified */ echo __('Show') ?></strong>
-            <select id="limiter" data-mage-redirect="{'event':'change'}" class="limiter-options">
+            <select id="limiter" data-mage-init='{"redirectUrl": {"event":"change"}}' class="limiter-options">
                 <?php foreach ($block->getAvailableLimit() as $_key => $_limit): ?>
                     <option value="<?php /* @escapeNotVerified */ echo $block->getLimitUrl($_key) ?>"<?php if ($block->isLimitCurrent($_key)): ?>
                         selected="selected"<?php endif ?>>
-- 
GitLab


From f9290cd955cc92ee242bea24621a842732b98c22 Mon Sep 17 00:00:00 2001
From: Michail Slabko <mslabko@ebay.com>
Date: Sat, 17 Oct 2015 14:07:03 +0300
Subject: [PATCH 053/370] MAGETWO-42123: Potential Exploit with Custom Option
 File Type

---
 .../Option/Type/File/ValidatorFile.php        | 12 ++--
 app/code/Magento/Sales/Model/Download.php     | 35 ++++++------
 .../Sales/Test/Unit/Model/DownloadTest.php    | 56 ++++++++++++++-----
 .../Option/Type/File/ValidatorFileTest.php    |  4 +-
 4 files changed, 70 insertions(+), 37 deletions(-)

diff --git a/app/code/Magento/Catalog/Model/Product/Option/Type/File/ValidatorFile.php b/app/code/Magento/Catalog/Model/Product/Option/Type/File/ValidatorFile.php
index a9f7a1188c5..1b3b2c5f0d8 100644
--- a/app/code/Magento/Catalog/Model/Product/Option/Type/File/ValidatorFile.php
+++ b/app/code/Magento/Catalog/Model/Product/Option/Type/File/ValidatorFile.php
@@ -21,21 +21,21 @@ class ValidatorFile extends Validator
      *
      * @var string
      */
-    protected $path = '/custom_options';
+    protected $path = 'custom_options';
 
     /**
      * Relative path for quote folder
      *
      * @var string
      */
-    protected $quotePath = '/custom_options/quote';
+    protected $quotePath = 'custom_options/quote';
 
     /**
      * Relative path for order folder
      *
      * @var string
      */
-    protected $orderPath = '/custom_options/order';
+    protected $orderPath = 'custom_options/order';
 
     /**
      * @var \Magento\Framework\Filesystem\Directory\WriteInterface
@@ -175,12 +175,12 @@ class ValidatorFile extends Validator
                     $_height = $imageSize[1];
                 }
             }
-            $uri = $this->filesystem->getUri(DirectoryList::MEDIA);
+
             $userValue = [
                 'type' => $fileInfo['type'],
                 'title' => $fileInfo['name'],
-                'quote_path' => $uri . $this->quotePath . $filePath,
-                'order_path' => $uri . $this->orderPath . $filePath,
+                'quote_path' => $this->quotePath . $filePath,
+                'order_path' => $this->orderPath . $filePath,
                 'fullpath' => $fileFullPath,
                 'size' => $fileInfo['size'],
                 'width' => $_width,
diff --git a/app/code/Magento/Sales/Model/Download.php b/app/code/Magento/Sales/Model/Download.php
index be8054315ea..7fbe3348844 100644
--- a/app/code/Magento/Sales/Model/Download.php
+++ b/app/code/Magento/Sales/Model/Download.php
@@ -6,6 +6,7 @@
 namespace Magento\Sales\Model;
 
 use Magento\Framework\App\Filesystem\DirectoryList;
+use Magento\Framework\Exception\LocalizedException;
 
 class Download
 {
@@ -29,6 +30,11 @@ class Download
      */
     protected $_fileFactory;
 
+    /**
+     * @var string
+     */
+    protected $allowedDirectory = DirectoryList::MEDIA;
+
     /**
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\MediaStorage\Helper\File\Storage\Database $fileStorageDatabase
@@ -41,7 +47,7 @@ class Download
         \Magento\MediaStorage\Model\File\Storage\DatabaseFactory $storageDatabaseFactory,
         \Magento\Framework\App\Response\Http\FileFactory $fileFactory
     ) {
-        $this->_rootDir = $filesystem->getDirectoryWrite(DirectoryList::ROOT);
+        $this->_rootDir = $filesystem->getDirectoryWrite($this->allowedDirectory);
         $this->_fileStorageDatabase = $fileStorageDatabase;
         $this->_storageDatabaseFactory = $storageDatabaseFactory;
         $this->_fileFactory = $fileFactory;
@@ -57,18 +63,19 @@ class Download
     public function downloadFile($info)
     {
         $relativePath = $info['order_path'];
-        if ($this->_isCanProcessed($relativePath)) {
+        if (!$this->_isCanProcessed($relativePath)) {
             //try get file from quote
             $relativePath = $info['quote_path'];
-            if ($this->_isCanProcessed($relativePath)) {
-                throw new \Exception();
+            if (!$this->_isCanProcessed($relativePath)) {
+                throw new LocalizedException(
+                    __('Path "%1" is not part of allowed directory "%2"', $relativePath, $this->allowedDirectory)
+                );
             }
         }
-
         $this->_fileFactory->create(
             $info['title'],
             ['value' => $this->_rootDir->getRelativePath($relativePath), 'type' => 'filename'],
-            DirectoryList::ROOT
+            $this->allowedDirectory
         );
     }
 
@@ -79,32 +86,28 @@ class Download
     protected function _isCanProcessed($relativePath)
     {
         $filePath = $this->_rootDir->getAbsolutePath($relativePath);
-        return (!$this->_rootDir->isFile(
-            $relativePath
-        ) || !$this->_rootDir->isReadable(
-            $relativePath
-        )) && !$this->_processDatabaseFile(
-            $filePath
-        );
+        return (strpos($this->_rootDir->getDriver()->getRealPath($filePath), $relativePath) !== false
+            && $this->_rootDir->isFile($relativePath) && $this->_rootDir->isReadable($relativePath))
+            || $this->_processDatabaseFile($filePath, $relativePath);
     }
 
     /**
      * Check file in database storage if needed and place it on file system
      *
      * @param string $filePath
+     * @param string $relativePath
      * @return bool
      */
-    protected function _processDatabaseFile($filePath)
+    protected function _processDatabaseFile($filePath, $relativePath)
     {
         if (!$this->_fileStorageDatabase->checkDbUsage()) {
             return false;
         }
-        $relativePath = $this->_fileStorageDatabase->getMediaRelativePath($filePath);
         $file = $this->_storageDatabaseFactory->create()->loadByFilename($relativePath);
         if (!$file->getId()) {
             return false;
         }
-        $stream = $this->_rootDir->openFile($filePath, 'w+');
+        $stream = $this->_rootDir->openFile($relativePath, 'w+');
         $stream->lock();
         $stream->write($filePath, $file->getContent());
         $stream->unlock();
diff --git a/app/code/Magento/Sales/Test/Unit/Model/DownloadTest.php b/app/code/Magento/Sales/Test/Unit/Model/DownloadTest.php
index e7410b411bf..295981ef91e 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/DownloadTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/DownloadTest.php
@@ -39,6 +39,11 @@ class DownloadTest extends \PHPUnit_Framework_TestCase
      */
     protected $writeDirectoryMock;
 
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $driverMock;
+
     protected function setUp()
     {
         $this->writeDirectoryMock = $this->getMockBuilder('Magento\Framework\Filesystem\Directory\Write')
@@ -49,9 +54,10 @@ class DownloadTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->filesystemMock->expects($this->any())
             ->method('getDirectoryWrite')
-            ->with(DirectoryList::ROOT)
+            ->with(DirectoryList::MEDIA)
             ->will($this->returnValue($this->writeDirectoryMock));
 
+        $this->driverMock = $this->getMockForAbstractClass('Magento\Framework\Filesystem\DriverInterface');
         $this->storageMock = $this->getMockBuilder('Magento\MediaStorage\Helper\File\Storage\Database')
             ->disableOriginalConstructor()
             ->getMock();
@@ -83,17 +89,23 @@ class DownloadTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @expectedException \Exception
+     * @param $realPatchCheck
+     * @param $isFile
+     * @param $isReadable
+     * @expectedException \Magento\Framework\Exception\LocalizedException
+     * @dataProvider dataProviderForTestDownloadFileException
      */
-    public function testDownloadFileException()
+    public function testDownloadFileException($realPatchCheck, $isFile, $isReadable)
     {
         $info = ['order_path' => 'test/path', 'quote_path' => 'test/path2', 'title' => 'test title'];
-        $isFile = true;
-        $isReadable = false;
 
         $this->writeDirectoryMock->expects($this->any())
             ->method('getAbsolutePath')
             ->will($this->returnArgument(0));
+        $this->writeDirectoryMock->expects($this->any())
+            ->method('getDriver')
+            ->willReturn($this->driverMock);
+        $this->driverMock->expects($this->any())->method('getRealPath')->willReturn($realPatchCheck);
         $this->writeDirectoryMock->expects($this->any())
             ->method('isFile')
             ->will($this->returnValue($isFile));
@@ -104,12 +116,25 @@ class DownloadTest extends \PHPUnit_Framework_TestCase
         $this->storageFactoryMock->expects($this->any())
             ->method('checkDbUsage')
             ->will($this->returnValue(false));
+        $this->httpFileFactoryMock->expects($this->never())->method('create');
 
         $this->model->downloadFile($info);
     }
 
     /**
-     * @expectedException \Exception
+     * @return array
+     */
+    public function dataProviderForTestDownloadFileException()
+    {
+        return [
+            [1, true, false],
+            [1, false, true],
+            [false, true, true],
+        ];
+    }
+
+    /**
+     * @expectedException \Magento\Framework\Exception\LocalizedException
      */
     public function testDownloadFileNoStorage()
     {
@@ -120,6 +145,11 @@ class DownloadTest extends \PHPUnit_Framework_TestCase
         $this->writeDirectoryMock->expects($this->any())
             ->method('getAbsolutePath')
             ->will($this->returnArgument(0));
+        $this->writeDirectoryMock->expects($this->any())
+            ->method('getDriver')
+            ->willReturn($this->driverMock);
+        $this->driverMock->expects($this->any())->method('getRealPath')->willReturn(true);
+
         $this->writeDirectoryMock->expects($this->any())
             ->method('isFile')
             ->will($this->returnValue($isFile));
@@ -130,9 +160,6 @@ class DownloadTest extends \PHPUnit_Framework_TestCase
         $this->storageMock->expects($this->any())
             ->method('checkDbUsage')
             ->will($this->returnValue(true));
-        $this->storageMock->expects($this->any())
-            ->method('getMediaRelativePath')
-            ->will($this->returnArgument(0));
 
         $storageDatabaseMock = $this->getMockBuilder('Magento\MediaStorage\Model\File\Storage\Database')
             ->disableOriginalConstructor()
@@ -153,6 +180,7 @@ class DownloadTest extends \PHPUnit_Framework_TestCase
         $this->storageFactoryMock->expects($this->any())
             ->method('create')
             ->will($this->returnValue($storageDatabaseMock));
+        $this->httpFileFactoryMock->expects($this->never())->method('create');
 
         $this->model->downloadFile($info);
     }
@@ -178,6 +206,11 @@ class DownloadTest extends \PHPUnit_Framework_TestCase
         $this->writeDirectoryMock->expects($this->any())
             ->method('getAbsolutePath')
             ->will($this->returnArgument(0));
+        $this->writeDirectoryMock->expects($this->any())
+            ->method('getDriver')
+            ->willReturn($this->driverMock);
+        $this->driverMock->expects($this->any())->method('getRealPath')->willReturn(true);
+
         $this->writeDirectoryMock->expects($this->any())
             ->method('isFile')
             ->will($this->returnValue($isFile));
@@ -195,9 +228,6 @@ class DownloadTest extends \PHPUnit_Framework_TestCase
         $this->storageMock->expects($this->any())
             ->method('checkDbUsage')
             ->will($this->returnValue(true));
-        $this->storageMock->expects($this->any())
-            ->method('getMediaRelativePath')
-            ->will($this->returnArgument(0));
 
         $storageDatabaseMock = $this->getMockBuilder('Magento\MediaStorage\Model\File\Storage\Database')
             ->disableOriginalConstructor()
@@ -220,7 +250,7 @@ class DownloadTest extends \PHPUnit_Framework_TestCase
             ->with(
                 $info['title'],
                 ['value' => $info['order_path'], 'type' => 'filename'],
-                DirectoryList::ROOT,
+                DirectoryList::MEDIA,
                 'application/octet-stream',
                 null
             );
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Option/Type/File/ValidatorFileTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Option/Type/File/ValidatorFileTest.php
index 611e8c839d4..a22645bf6b7 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Option/Type/File/ValidatorFileTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Option/Type/File/ValidatorFileTest.php
@@ -241,8 +241,8 @@ class ValidatorFileTest extends \PHPUnit_Framework_TestCase
         return [
             'type' => 'image/jpeg',
             'title' => 'test.jpg',
-            'quote_path' => 'pub/media/custom_options/quote/t/e/e1d601731b4b1a84163cd0e9370a4fcb.jpg',
-            'order_path' => 'pub/media/custom_options/order/t/e/e1d601731b4b1a84163cd0e9370a4fcb.jpg',
+            'quote_path' => 'custom_options/quote/t/e/e1d601731b4b1a84163cd0e9370a4fcb.jpg',
+            'order_path' => 'custom_options/order/t/e/e1d601731b4b1a84163cd0e9370a4fcb.jpg',
             'size' => '3300',
             'width' => 136,
             'height' => 131,
-- 
GitLab


From f7234771cd608500473a1f2d993b0422b4e3480b Mon Sep 17 00:00:00 2001
From: Anton Kaplya <akaplya@ebay.com>
Date: Sat, 17 Oct 2015 14:46:03 +0300
Subject: [PATCH 054/370] MAGETWO-44126: Asynchronous indexing of Orders grid
 does not work

---
 .../Sales/Model/ResourceModel/Order/Address.php   | 15 ---------------
 1 file changed, 15 deletions(-)

diff --git a/app/code/Magento/Sales/Model/ResourceModel/Order/Address.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Address.php
index 6df065f7ee3..625fe5e2b34 100644
--- a/app/code/Magento/Sales/Model/ResourceModel/Order/Address.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Address.php
@@ -122,19 +122,4 @@ class Address extends SalesResource implements OrderAddressResourceInterface
         }
         return $this;
     }
-
-    /**
-     * Update related grid table after object save
-     *
-     * @param \Magento\Framework\Model\AbstractModel|\Magento\Framework\DataObject $object
-     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
-     */
-    protected function _afterSave(\Magento\Framework\Model\AbstractModel $object)
-    {
-        $resource = parent::_afterSave($object);
-        if ($object->getParentId()) {
-            $this->gridPool->refreshByOrderId($object->getParentId());
-        }
-        return $resource;
-    }
 }
-- 
GitLab


From aa711a7cbaf181148ab130cfde02298b76654c8c Mon Sep 17 00:00:00 2001
From: Valeriy Nayda <vnayda@ebay.com>
Date: Sat, 17 Oct 2015 15:48:29 +0300
Subject: [PATCH 055/370] MAGETWO-44237:
 CategoryLinkManagementInterface->getAssignedProducts() does not work with
 flat tables

---
 .../Catalog/Model/CategoryLinkManagement.php  |  6 +++---
 .../Model/ResourceModel/Category/Flat.php     | 19 +++++++++++++++++++
 2 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/app/code/Magento/Catalog/Model/CategoryLinkManagement.php b/app/code/Magento/Catalog/Model/CategoryLinkManagement.php
index 0c2c324bd8e..f0405be4621 100644
--- a/app/code/Magento/Catalog/Model/CategoryLinkManagement.php
+++ b/app/code/Magento/Catalog/Model/CategoryLinkManagement.php
@@ -36,10 +36,10 @@ class CategoryLinkManagement implements \Magento\Catalog\Api\CategoryLinkManagem
     public function getAssignedProducts($categoryId)
     {
         $category = $this->categoryRepository->get($categoryId);
-        $productsPosition = $category->getProductsPosition();
 
-        /** @var \Magento\Framework\Data\Collection\AbstractDb $products */
+        /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $products */
         $products = $category->getProductCollection();
+        $products->addFieldToSelect('position');
 
         /** @var \Magento\Catalog\Api\Data\CategoryProductLinkInterface[] $links */
         $links = [];
@@ -49,7 +49,7 @@ class CategoryLinkManagement implements \Magento\Catalog\Api\CategoryLinkManagem
             /** @var \Magento\Catalog\Api\Data\CategoryProductLinkInterface $link */
             $link = $this->productLinkFactory->create();
             $link->setSku($product->getSku())
-                ->setPosition($productsPosition[$productId])
+                ->setPosition($product->getData('cat_index_position'))
                 ->setCategoryId($category->getId());
             $links[] = $link;
         }
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat.php b/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat.php
index 089bfbc10e0..7c054546878 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat.php
@@ -671,4 +671,23 @@ class Flat extends \Magento\Indexer\Model\ResourceModel\AbstractResource
 
         return $this->getConnection()->fetchCol($select);
     }
+
+    /**
+     * Get positions of associated to category products
+     *
+     * @param \Magento\Catalog\Model\Category $category
+     * @return array
+     */
+    public function getProductsPosition($category)
+    {
+        $select = $this->getConnection()->select()->from(
+            $this->getTable('catalog_category_product'),
+            ['product_id', 'position']
+        )->where(
+            'category_id = :category_id'
+        );
+        $bind = ['category_id' => (int)$category->getId()];
+
+        return $this->getConnection()->fetchPairs($select, $bind);
+    }
 }
-- 
GitLab


From bdc295b777bd4fe55da022123fa07250de48317b Mon Sep 17 00:00:00 2001
From: Valeriy Nayda <vnayda@ebay.com>
Date: Sat, 17 Oct 2015 16:14:12 +0300
Subject: [PATCH 056/370] MAGETWO-44237:
 CategoryLinkManagementInterface->getAssignedProducts() does not work with
 flat tables

- fix unit tests
---
 .../Test/Unit/Model/CategoryLinkManagementTest.php       | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/app/code/Magento/Catalog/Test/Unit/Model/CategoryLinkManagementTest.php b/app/code/Magento/Catalog/Test/Unit/Model/CategoryLinkManagementTest.php
index 9e75726f9df..4be4d33c4fc 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/CategoryLinkManagementTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/CategoryLinkManagementTest.php
@@ -44,7 +44,7 @@ class CategoryLinkManagementTest extends \PHPUnit_Framework_TestCase
     {
         $categoryId = 42;
         $productId = 55;
-        $productsPosition = [$productId => 25];
+        $position = 25;
         $productSku = 'testSku';
         $categoryProductLinkMock = $this->getMock('\Magento\Catalog\Api\Data\CategoryProductLinkInterface');
         $categoryMock = $this->getMock(
@@ -56,13 +56,14 @@ class CategoryLinkManagementTest extends \PHPUnit_Framework_TestCase
         );
         $productMock = $this->getMock('\Magento\Catalog\Model\Product', [], [], '', false);
         $productMock->expects($this->once())->method('getSku')->willReturn($productSku);
+        $productMock->expects($this->once())->method('getData')->with('cat_index_position')->willReturn($position);
         $items = [$productId => $productMock];
-        $productsMock = $this->getMock('\Magento\Framework\Data\Collection\AbstractDb', [], [], '', false);
+        $productsMock = $this->getMock('Magento\Catalog\Model\ResourceModel\Product\Collection', [], [], '', false);
         $this->categoryRepositoryMock->expects($this->once())->method('get')->with($categoryId)
             ->willReturn($categoryMock);
-        $categoryMock->expects($this->once())->method('getProductsPosition')->willReturn($productsPosition);
         $categoryMock->expects($this->once())->method('getProductCollection')->willReturn($productsMock);
         $categoryMock->expects($this->once())->method('getId')->willReturn($categoryId);
+        $productsMock->expects($this->once())->method('addFieldToSelect')->with('position')->willReturnSelf();
         $productsMock->expects($this->once())->method('getItems')->willReturn($items);
         $this->productLinkFactoryMock->expects($this->once())->method('create')->willReturn($categoryProductLinkMock);
         $categoryProductLinkMock->expects($this->once())
@@ -71,7 +72,7 @@ class CategoryLinkManagementTest extends \PHPUnit_Framework_TestCase
             ->willReturnSelf();
         $categoryProductLinkMock->expects($this->once())
             ->method('setPosition')
-            ->with(25)
+            ->with($position)
             ->willReturnSelf();
         $categoryProductLinkMock->expects($this->once())
             ->method('setCategoryId')
-- 
GitLab


From 4c3a9e416bd9e201615771ec8c96863a84787058 Mon Sep 17 00:00:00 2001
From: Andrii Kasian <akasian@magento.com>
Date: Sat, 17 Oct 2015 16:34:05 +0300
Subject: [PATCH 057/370] =?UTF-8?q?MAGETWO-43627:=20[github]=20Admin=20Pro?=
 =?UTF-8?q?duct=20Page=20is=20broken:=20=C2=ABElement=20with=20ID=20'catal?=
 =?UTF-8?q?og.product.edit.tab.downloadable.links'=20already=20exists?=
 =?UTF-8?q?=C2=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Magento/Backend/Block/Widget/Tabs.php     |  3 ++
 .../Eav/Model/Entity/Attribute/Group.php      | 48 ++++++++++++++++++-
 app/code/Magento/Eav/Setup/EavSetup.php       |  8 ++++
 app/code/Magento/Eav/Setup/InstallSchema.php  |  2 +-
 .../Unit/Model/Entity/Attribute/GroupTest.php |  6 +++
 5 files changed, 65 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Backend/Block/Widget/Tabs.php b/app/code/Magento/Backend/Block/Widget/Tabs.php
index e7b21aa01ab..0354554e3e2 100644
--- a/app/code/Magento/Backend/Block/Widget/Tabs.php
+++ b/app/code/Magento/Backend/Block/Widget/Tabs.php
@@ -111,6 +111,9 @@ class Tabs extends \Magento\Backend\Block\Widget
      */
     public function addTab($tabId, $tab)
     {
+        if (empty($tabId)) {
+            throw new \Exception(__('Please correct the tab configuration and try again. Tab Id should be not empry'));
+        }
         if (is_array($tab)) {
             $this->_tabs[$tabId] = new \Magento\Framework\DataObject($tab);
         } elseif ($tab instanceof \Magento\Framework\DataObject) {
diff --git a/app/code/Magento/Eav/Model/Entity/Attribute/Group.php b/app/code/Magento/Eav/Model/Entity/Attribute/Group.php
index b8c123718f8..b0603a54ebc 100644
--- a/app/code/Magento/Eav/Model/Entity/Attribute/Group.php
+++ b/app/code/Magento/Eav/Model/Entity/Attribute/Group.php
@@ -6,6 +6,8 @@
 
 namespace Magento\Eav\Model\Entity\Attribute;
 
+use Magento\Framework\Api\AttributeValueFactory;
+
 /**
  * @author      Magento Core Team <core@magentocommerce.com>
  *
@@ -23,6 +25,43 @@ namespace Magento\Eav\Model\Entity\Attribute;
 class Group extends \Magento\Framework\Model\AbstractExtensibleModel implements
     \Magento\Eav\Api\Data\AttributeGroupInterface
 {
+    /**
+     * @var \Magento\Framework\Filter\Translit
+     */
+    private $translitFilter;
+
+    /**
+     * @param \Magento\Framework\Model\Context $context
+     * @param \Magento\Framework\Registry $registry
+     * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
+     * @param AttributeValueFactory $customAttributeFactory
+     * @param \Magento\Framework\Filter\Translit $translitFilter
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
+     * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
+     * @param array $data
+     */
+    public function __construct(
+        \Magento\Framework\Model\Context $context,
+        \Magento\Framework\Registry $registry,
+        \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
+        AttributeValueFactory $customAttributeFactory,
+        \Magento\Framework\Filter\Translit $translitFilter,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
+        \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
+        array $data = []
+    ) {
+        parent::__construct(
+            $context,
+            $registry,
+            $extensionFactory,
+            $customAttributeFactory,
+            $resource,
+            $resourceCollection,
+            $data
+        );
+        $this->translitFilter = $translitFilter;
+    }
+
     /**
      * Resource initialization
      *
@@ -66,7 +105,14 @@ class Group extends \Magento\Framework\Model\AbstractExtensibleModel implements
         if (!$this->getAttributeGroupCode()) {
             $groupName = $this->getAttributeGroupName();
             if ($groupName) {
-                $attributeGroupCode = trim(preg_replace('/[^a-z0-9]+/', '-', strtolower($groupName)), '-');
+                $attributeGroupCode = trim(
+                    preg_replace(
+                        '/[^a-z0-9]+/',
+                        '-',
+                        $this->translitFilter->filter(strtolower($groupName))
+                    ),
+                    '-'
+                );
                 if (empty($attributeGroupCode)) {
                     // in the following code md5 is not used for security purposes
                     $attributeGroupCode = md5($groupName);
diff --git a/app/code/Magento/Eav/Setup/EavSetup.php b/app/code/Magento/Eav/Setup/EavSetup.php
index a1dba20110f..3c67b8f97b9 100644
--- a/app/code/Magento/Eav/Setup/EavSetup.php
+++ b/app/code/Magento/Eav/Setup/EavSetup.php
@@ -527,6 +527,14 @@ class EavSetup
             if ($sortOrder === null) {
                 $data['sort_order'] = $this->getAttributeGroupSortOrder($entityTypeId, $setId, $sortOrder);
             }
+            if (empty($data['attribute_group_code'])) {
+                $attributeGroupCode = trim(preg_replace('/[^a-z0-9]+/', '-', strtolower($name)), '-');
+                if (empty($attributeGroupCode)) {
+                    // in the following code md5 is not used for security purposes
+                    $attributeGroupCode = md5($name);
+                }
+                $data['attribute_group_code'] = $attributeGroupCode;
+            }
             $this->setup->getConnection()->insert($this->setup->getTable('eav_attribute_group'), $data);
         }
 
diff --git a/app/code/Magento/Eav/Setup/InstallSchema.php b/app/code/Magento/Eav/Setup/InstallSchema.php
index 24c041c7e2c..75ae06b1a30 100644
--- a/app/code/Magento/Eav/Setup/InstallSchema.php
+++ b/app/code/Magento/Eav/Setup/InstallSchema.php
@@ -895,7 +895,7 @@ class InstallSchema implements InstallSchemaInterface
             'attribute_group_code',
             \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
             255,
-            ['default' => null],
+            ['nullable' => false],
             'Attribute Group Code'
         )->addColumn(
             'tab_group_code',
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/GroupTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/GroupTest.php
index a9a9eff9b9e..cde8db9b424 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/GroupTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/GroupTest.php
@@ -34,11 +34,17 @@ class GroupTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
+        $translitFilter = $this->getMockBuilder(\Magento\Framework\Filter\Translit::class)
+            ->disableOriginalConstructor()
+            ->getMock();
+        $translitFilter->expects($this->atLeastOnce())->method('filter')->willReturnArgument(0);
+
         $this->eventManagerMock = $this->getMock('Magento\Framework\Event\ManagerInterface');
         $contextMock = $this->getMock('Magento\Framework\Model\Context', [], [], '', false);
         $contextMock->expects($this->any())->method('getEventDispatcher')->willReturn($this->eventManagerMock);
         $constructorArguments = [
             'resource' => $this->resourceMock,
+            'translitFilter' => $translitFilter,
             'context' => $contextMock,
         ];
         $objectManager = new ObjectManager($this);
-- 
GitLab


From 90cf850cda455f2b2e8bde4da34f86161055ac91 Mon Sep 17 00:00:00 2001
From: Andrii Kasian <akasian@magento.com>
Date: Sat, 17 Oct 2015 17:10:27 +0300
Subject: [PATCH 058/370] =?UTF-8?q?MAGETWO-43627:=20[github]=20Admin=20Pro?=
 =?UTF-8?q?duct=20Page=20is=20broken:=20=C2=ABElement=20with=20ID=20'catal?=
 =?UTF-8?q?og.product.edit.tab.downloadable.links'=20already=20exists?=
 =?UTF-8?q?=C2=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Magento/Catalog/Model/Product/Attribute/Group.php     | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Catalog/Model/Product/Attribute/Group.php b/app/code/Magento/Catalog/Model/Product/Attribute/Group.php
index ba141dc370c..4fb0b521c22 100644
--- a/app/code/Magento/Catalog/Model/Product/Attribute/Group.php
+++ b/app/code/Magento/Catalog/Model/Product/Attribute/Group.php
@@ -18,13 +18,15 @@ class Group extends \Magento\Eav\Model\Entity\Attribute\Group
     protected $_attributeCollectionFactory;
 
     /**
+     * Group constructor.
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
+     * @param \Magento\Framework\Filter\Translit $translitFilter
      * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeCollectionFactory
-     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
-     * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource|null $resource
+     * @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection
      * @param array $data
      */
     public function __construct(
@@ -32,6 +34,7 @@ class Group extends \Magento\Eav\Model\Entity\Attribute\Group
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
+        \Magento\Framework\Filter\Translit $translitFilter,
         \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeCollectionFactory,
         \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
@@ -43,6 +46,7 @@ class Group extends \Magento\Eav\Model\Entity\Attribute\Group
             $registry,
             $extensionFactory,
             $customAttributeFactory,
+            $translitFilter,
             $resource,
             $resourceCollection,
             $data
-- 
GitLab


From 6bb44f31f8361562cb192ffc2d5a4bb6a3e435e4 Mon Sep 17 00:00:00 2001
From: Anton Kaplya <akaplya@ebay.com>
Date: Sat, 17 Oct 2015 17:21:31 +0300
Subject: [PATCH 059/370] MAGETWO-44126: Asynchronous indexing of Orders grid
 does not work

---
 .../Adminhtml/Order/AddressSave.php           |  9 +++-
 .../Observer/GridProcessAddressChange.php     | 43 +++++++++++++++
 .../Observer/GridProcessAddressChangeTest.php | 54 +++++++++++++++++++
 app/code/Magento/Sales/etc/events.xml         |  3 ++
 4 files changed, 108 insertions(+), 1 deletion(-)
 create mode 100644 app/code/Magento/Sales/Observer/GridProcessAddressChange.php
 create mode 100644 app/code/Magento/Sales/Test/Unit/Observer/GridProcessAddressChangeTest.php

diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php
index e3d15fd93cd..b10329e70d3 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php
@@ -16,13 +16,20 @@ class AddressSave extends \Magento\Sales\Controller\Adminhtml\Order
     public function execute()
     {
         $addressId = $this->getRequest()->getParam('address_id');
-        $address = $this->_objectManager->create('Magento\Sales\Model\Order\Address')->load($addressId);
+        /** @var $address \Magento\Sales\Api\Data\OrderAddressInterface|\Magento\Sales\Model\Order\Address */
+        $address = $this->_objectManager->create('Magento\Sales\Api\Data\OrderAddressInterface')->load($addressId);
         $data = $this->getRequest()->getPostValue();
         $resultRedirect = $this->resultRedirectFactory->create();
         if ($data && $address->getId()) {
             $address->addData($data);
             try {
                 $address->save();
+                $this->_eventManager->dispatch(
+                    'admin_sales_order_address_update',
+                    [
+                        'order_id' => $address->getParentId()
+                    ]
+                );
                 $this->messageManager->addSuccess(__('You updated the order address.'));
                 return $resultRedirect->setPath('sales/*/view', ['order_id' => $address->getParentId()]);
             } catch (\Magento\Framework\Exception\LocalizedException $e) {
diff --git a/app/code/Magento/Sales/Observer/GridProcessAddressChange.php b/app/code/Magento/Sales/Observer/GridProcessAddressChange.php
new file mode 100644
index 00000000000..878d4c95b7d
--- /dev/null
+++ b/app/code/Magento/Sales/Observer/GridProcessAddressChange.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Sales\Observer;
+
+use Magento\Framework\Event\Observer as EventObserver;
+use Magento\Sales\Model\ResourceModel\GridPool;
+use Magento\Framework\Event\ObserverInterface;
+
+/**
+ * Class GridProcessAddressChange
+ */
+class GridProcessAddressChange implements ObserverInterface
+{
+
+    /**
+     * @var GridPool
+     */
+    protected $gridPool;
+
+    /**
+     * @param GridPool $gridPool
+     */
+    public function __construct(
+        GridPool $gridPool
+    ) {
+        $this->gridPool= $gridPool;
+    }
+
+    /**
+     * Refresh addresses in grids according to performed changed
+     * This is manual admin action, as result we perform this operation without delay
+     *
+     * @param EventObserver $observer
+     */
+    public function execute(EventObserver $observer)
+    {
+        $this->gridPool->refreshByOrderId($observer->getOrderId());
+    }
+}
diff --git a/app/code/Magento/Sales/Test/Unit/Observer/GridProcessAddressChangeTest.php b/app/code/Magento/Sales/Test/Unit/Observer/GridProcessAddressChangeTest.php
new file mode 100644
index 00000000000..6cc89aebc81
--- /dev/null
+++ b/app/code/Magento/Sales/Test/Unit/Observer/GridProcessAddressChangeTest.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Sales\Test\Unit\Observer;
+
+/**
+ * Class GridProcessAddressChangeTest
+ */
+class GridProcessAddressChangeTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Sales\Observer\GridProcessAddressChange
+     */
+    protected $observer;
+
+    /**
+     * @var \Magento\Sales\Model\ResourceModel\GridPool|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $gridPoolMock;
+
+    /**
+     * @var \Magento\Framework\Event\ObserverInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $eventObserverMock;
+
+    /**
+     *
+     */
+    public function setUp()
+    {
+        $this->gridPoolMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\GridPool')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer')
+            ->disableOriginalConstructor()
+            ->setMethods(['getOrderId'])
+            ->getMock();
+        $this->observer = new \Magento\Sales\Observer\GridProcessAddressChange($this->gridPoolMock);
+    }
+
+    public function testGridsReindex()
+    {
+        $this->eventObserverMock->expects($this->once())
+            ->method('getOrderId')
+            ->willReturn(100500);
+        $this->gridPoolMock->expects($this->once())
+            ->method('refreshByOrderId')
+            ->with(100500);
+        $this->assertNull($this->observer->execute($this->eventObserverMock));
+    }
+}
diff --git a/app/code/Magento/Sales/etc/events.xml b/app/code/Magento/Sales/etc/events.xml
index f02fcdd77a5..4dfe0d47c9c 100644
--- a/app/code/Magento/Sales/etc/events.xml
+++ b/app/code/Magento/Sales/etc/events.xml
@@ -33,6 +33,9 @@
     <event name="sales_order_creditmemo_delete_after">
         <observer name="sales_grid_order_creditmemo_sync_remove" instance="SalesCreditmemoIndexGridSyncRemove" />
     </event>
+    <event name="admin_sales_order_address_update">
+        <observer name="sales_grid_admin_refresh_grids" instance="Magento\Sales\Observer\GridProcessAddressChange" />
+    </event>
     <event name="config_data_dev_grid_async_indexing_disabled">
         <observer name="sales_grid_order_async_insert" instance="SalesOrderIndexGridAsyncInsertObserver" />
         <observer name="sales_grid_order_invoice_async_insert" instance="SalesInvoiceIndexGridAsyncInsertObserver" />
-- 
GitLab


From 9d5333d93eb1ce6418da49f8a069a1662f644602 Mon Sep 17 00:00:00 2001
From: Anton Kaplya <akaplya@ebay.com>
Date: Sat, 17 Oct 2015 17:23:10 +0300
Subject: [PATCH 060/370] MAGETWO-44126: Asynchronous indexing of Orders grid
 does not work

---
 .../Sales/Test/Unit/Observer/GridProcessAddressChangeTest.php  | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/app/code/Magento/Sales/Test/Unit/Observer/GridProcessAddressChangeTest.php b/app/code/Magento/Sales/Test/Unit/Observer/GridProcessAddressChangeTest.php
index 6cc89aebc81..d6a8e5fab14 100644
--- a/app/code/Magento/Sales/Test/Unit/Observer/GridProcessAddressChangeTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Observer/GridProcessAddressChangeTest.php
@@ -26,9 +26,6 @@ class GridProcessAddressChangeTest extends \PHPUnit_Framework_TestCase
      */
     protected $eventObserverMock;
 
-    /**
-     *
-     */
     public function setUp()
     {
         $this->gridPoolMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\GridPool')
-- 
GitLab


From e04b97beb63320fa8ee73f7d2c99952028ed4765 Mon Sep 17 00:00:00 2001
From: Michail Slabko <mslabko@ebay.com>
Date: Sat, 17 Oct 2015 17:27:39 +0300
Subject: [PATCH 061/370] MAGETWO-42123: Potential Exploit with Custom Option
 File Type

---
 app/code/Magento/Sales/Model/Download.php | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/app/code/Magento/Sales/Model/Download.php b/app/code/Magento/Sales/Model/Download.php
index 7fbe3348844..0f2649d7de5 100644
--- a/app/code/Magento/Sales/Model/Download.php
+++ b/app/code/Magento/Sales/Model/Download.php
@@ -33,21 +33,24 @@ class Download
     /**
      * @var string
      */
-    protected $allowedDirectory = DirectoryList::MEDIA;
+    protected $rootDirBasePath;
 
     /**
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\MediaStorage\Helper\File\Storage\Database $fileStorageDatabase
      * @param \Magento\MediaStorage\Model\File\Storage\DatabaseFactory $storageDatabaseFactory
      * @param \Magento\Framework\App\Response\Http\FileFactory $fileFactory
+     * @param string $rootDirBasePath
      */
     public function __construct(
         \Magento\Framework\Filesystem $filesystem,
         \Magento\MediaStorage\Helper\File\Storage\Database $fileStorageDatabase,
         \Magento\MediaStorage\Model\File\Storage\DatabaseFactory $storageDatabaseFactory,
-        \Magento\Framework\App\Response\Http\FileFactory $fileFactory
+        \Magento\Framework\App\Response\Http\FileFactory $fileFactory,
+        $rootDirBasePath = DirectoryList::MEDIA
     ) {
-        $this->_rootDir = $filesystem->getDirectoryWrite($this->allowedDirectory);
+        $this->rootDirBasePath = $rootDirBasePath;
+        $this->_rootDir = $filesystem->getDirectoryWrite($this->rootDirBasePath);
         $this->_fileStorageDatabase = $fileStorageDatabase;
         $this->_storageDatabaseFactory = $storageDatabaseFactory;
         $this->_fileFactory = $fileFactory;
@@ -68,14 +71,14 @@ class Download
             $relativePath = $info['quote_path'];
             if (!$this->_isCanProcessed($relativePath)) {
                 throw new LocalizedException(
-                    __('Path "%1" is not part of allowed directory "%2"', $relativePath, $this->allowedDirectory)
+                    __('Path "%1" is not part of allowed directory "%2"', $relativePath, $this->rootDirBasePath)
                 );
             }
         }
         $this->_fileFactory->create(
             $info['title'],
             ['value' => $this->_rootDir->getRelativePath($relativePath), 'type' => 'filename'],
-            $this->allowedDirectory
+            $this->rootDirBasePath
         );
     }
 
-- 
GitLab


From fe83f6925c5ab634202276365f7d96e160f59b2a Mon Sep 17 00:00:00 2001
From: Andrii Lugovyi <alugovyi@ebay.com>
Date: Sat, 17 Oct 2015 21:25:48 +0300
Subject: [PATCH 062/370] =?UTF-8?q?MAGETWO-44055:=20[GITHUB]=20Admin=20pro?=
 =?UTF-8?q?duct=20=C2=ABCustom=20Options=C2=BB=20tab=20controls=20(=C2=ABI?=
 =?UTF-8?q?mport=20Options=C2=BB,=20=C2=ABAdd=20New=20Option=C2=BB=20butto?=
 =?UTF-8?q?ns)=20do=20not=20work=20when=20non-English=20locale=20is=20used?=
 =?UTF-8?q?=20#1971?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../adminhtml/templates/catalog/product/edit/options.phtml    | 2 +-
 .../templates/catalog/product/edit/options/option.phtml       | 2 +-
 .../Magento/Catalog/view/adminhtml/web/js/custom-options.js   | 2 +-
 lib/internal/Magento/Framework/View/Element/Html/Select.php   | 4 +++-
 4 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options.phtml
index 67b1e95e308..6ed486f4c0b 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options.phtml
@@ -9,7 +9,7 @@
 ?>
 <?php /** @var $block \Magento\Catalog\Block\Adminhtml\Product\Edit\Tab\Options */ ?>
 
-<div class="fieldset-wrapper" id="product-custom-options-wrapper">
+<div class="fieldset-wrapper" id="product-custom-options-wrapper" data-block="product-custom-options">
     <div class="fieldset-wrapper-title">
         <strong class="title">
             <span><?php /* @escapeNotVerified */ echo __('Custom Options') ?></span>
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options/option.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options/option.phtml
index 3403d4447f8..ef38f34b168 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options/option.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options/option.phtml
@@ -88,7 +88,7 @@ require([
 ], function(jQuery){
 
 jQuery(function ($) {
-    var fieldSet = $('#Custom_Options');
+    var fieldSet = $('[data-block=product-custom-options]');
     fieldSet.customOptions(<?php /* @escapeNotVerified */ echo $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode(
         [
             'fieldId' => $block->getFieldId(),
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js b/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
index b7a16ce3db8..3c7163a2227 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
@@ -216,7 +216,7 @@ define([
                     var widget = this,
                         currentElement = $(event.target),
                         parentId = '#' + currentElement.closest('.fieldset-alt').attr('id'),
-                        group = currentElement.find('[value="' + currentElement.val() + '"]').closest('optgroup').attr('label'),
+                        group = currentElement.find('[value="' + currentElement.val() + '"]').closest('optgroup').attr('data-name'),
                         previousGroup = $(parentId + '_previous_group').val(),
                         previousBlock = $(parentId + '_type_' + previousGroup),
                         tmpl;
diff --git a/lib/internal/Magento/Framework/View/Element/Html/Select.php b/lib/internal/Magento/Framework/View/Element/Html/Select.php
index ab54697632a..2b240270ba7 100644
--- a/lib/internal/Magento/Framework/View/Element/Html/Select.php
+++ b/lib/internal/Magento/Framework/View/Element/Html/Select.php
@@ -154,16 +154,18 @@ class Select extends \Magento\Framework\View\Element\AbstractBlock
             if ($isArrayOption && is_array($option)) {
                 $value = $option['value'];
                 $label = (string)$option['label'];
+                $name = $option['label'] instanceof \Magento\Framework\Phrase ? $option['label']->getText() : $label;
                 $params = !empty($option['params']) ? $option['params'] : [];
             } else {
                 $value = (string)$key;
                 $label = (string)$option;
+                $name = $label;
                 $isArrayOption = false;
                 $params = [];
             }
 
             if (is_array($value)) {
-                $html .= '<optgroup label="' . $label . '">';
+                $html .= '<optgroup label="' . $label . '" data-name="' . $name . '">';
                 foreach ($value as $keyGroup => $optionGroup) {
                     if (!is_array($optionGroup)) {
                         $optionGroup = ['value' => $keyGroup, 'label' => $optionGroup];
-- 
GitLab


From 3e9a74f763fe8e4b4acac0bf3258844385a6b22c Mon Sep 17 00:00:00 2001
From: Dmytro Voskoboinikov <dvoskoboinikov@ebay.com>
Date: Sun, 18 Oct 2015 13:19:08 +0300
Subject: [PATCH 063/370] MAGETWO-44134: [Github] Sales API should use
 searchCriteria not criteria

---
 .../ObjectManager/Code/Generator/Repository.php        | 10 +++++-----
 .../Unit/Code/Generator/_files/SampleRepository.txt    | 10 +++++-----
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/lib/internal/Magento/Framework/ObjectManager/Code/Generator/Repository.php b/lib/internal/Magento/Framework/ObjectManager/Code/Generator/Repository.php
index 496ba2e8d17..6922234a56d 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Code/Generator/Repository.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Code/Generator/Repository.php
@@ -467,20 +467,20 @@ class Repository extends \Magento\Framework\Code\Generator\EntityAbstract
     {
         $body = "\$collection = \$this->" . $this->_getSourceCollectionFactoryPropertyName() . "->create();\n"
         . "\$this->extensionAttributesJoinProcessor->process(\$collection);\n"
-        . "foreach (\$criteria->getFilterGroups() as \$filterGroup) {\n"
+        . "foreach (\$searchCriteria->getFilterGroups() as \$filterGroup) {\n"
         . "    foreach (\$filterGroup->getFilters() as \$filter) {\n"
         . "        \$condition = \$filter->getConditionType() ? \$filter->getConditionType() : 'eq';\n"
         . "        \$collection->addFieldToFilter(\$filter->getField(), [\$condition => \$filter->getValue()]);\n"
         . "    }\n"
         . "}\n"
-        . "\$collection->setCurPage(\$criteria->getCurrentPage());\n"
-        . "\$collection->setPageSize(\$criteria->getPageSize());\n"
+        . "\$collection->setCurPage(\$searchCriteria->getCurrentPage());\n"
+        . "\$collection->setPageSize(\$searchCriteria->getPageSize());\n"
         . "return \$collection;\n";
         return [
             'name' => 'getList',
             'parameters' => [
                 [
-                    'name' => 'criteria',
+                    'name' => 'searchCriteria',
                     'type' => self::SEARCH_CRITERIA,
                 ],
             ],
@@ -490,7 +490,7 @@ class Repository extends \Magento\Framework\Code\Generator\EntityAbstract
                 'tags' => [
                     [
                         'name' => 'param',
-                        'description' => self::SEARCH_CRITERIA . '  $criteria',
+                        'description' => self::SEARCH_CRITERIA . ' $searchCriteria',
                     ],
                     [
                         'name' => 'return',
diff --git a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/_files/SampleRepository.txt b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/_files/SampleRepository.txt
index d135ca64dd1..803d9828cf5 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/_files/SampleRepository.txt
+++ b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/_files/SampleRepository.txt
@@ -103,21 +103,21 @@ class SampleRepository implements \Magento\Framework\ObjectManager\Code\Generato
     /**
      * Find entities by criteria
      *
-     * @param \Magento\Framework\Api\SearchCriteria  $criteria
+     * @param \Magento\Framework\Api\SearchCriteria $searchCriteria
      * @return \Magento\Framework\ObjectManager\Code\Generator\SampleInterface[]
      */
-    public function getList(\Magento\Framework\Api\SearchCriteria $criteria)
+    public function getList(\Magento\Framework\Api\SearchCriteria $searchCriteria)
     {
         $collection = $this->sampleInterfaceSearchResultFactory->create();
         $this->extensionAttributesJoinProcessor->process($collection);
-        foreach ($criteria->getFilterGroups() as $filterGroup) {
+        foreach ($searchCriteria->getFilterGroups() as $filterGroup) {
             foreach ($filterGroup->getFilters() as $filter) {
                 $condition = $filter->getConditionType() ? $filter->getConditionType() : 'eq';
                 $collection->addFieldToFilter($filter->getField(), [$condition => $filter->getValue()]);
             }
         }
-        $collection->setCurPage($criteria->getCurrentPage());
-        $collection->setPageSize($criteria->getPageSize());
+        $collection->setCurPage($searchCriteria->getCurrentPage());
+        $collection->setPageSize($searchCriteria->getPageSize());
         return $collection;
     }
 
-- 
GitLab


From edd0dccab35b2a7aba731b9d3269e68f53a0d68a Mon Sep 17 00:00:00 2001
From: Vladyslav Shcherbyna <vshcherbyna@ebay.com>
Date: Sun, 18 Oct 2015 16:31:57 +0300
Subject: [PATCH 064/370] MAGETWO-43903: No email when order status changed via
 API

---
 .../Sales/Model/Service/OrderService.php      | 12 ++++++-
 .../Unit/Model/Service/OrderServiceTest.php   | 32 ++++++++++++++++++-
 2 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Sales/Model/Service/OrderService.php b/app/code/Magento/Sales/Model/Service/OrderService.php
index 5df21bf9df6..d71540cb5e9 100644
--- a/app/code/Magento/Sales/Model/Service/OrderService.php
+++ b/app/code/Magento/Sales/Model/Service/OrderService.php
@@ -44,6 +44,11 @@ class OrderService implements OrderManagementInterface
      */
     protected $eventManager;
 
+    /**
+     * @var \Magento\Sales\Model\Order\Email\Sender\OrderCommentSender
+     */
+    protected $orderCommentSender;
+
     /**
      * Constructor
      *
@@ -60,7 +65,8 @@ class OrderService implements OrderManagementInterface
         \Magento\Framework\Api\SearchCriteriaBuilder $criteriaBuilder,
         \Magento\Framework\Api\FilterBuilder $filterBuilder,
         \Magento\Sales\Model\OrderNotifier $notifier,
-        \Magento\Framework\Event\ManagerInterface $eventManager
+        \Magento\Framework\Event\ManagerInterface $eventManager,
+        \Magento\Sales\Model\Order\Email\Sender\OrderCommentSender $orderCommentSender
     ) {
         $this->orderRepository = $orderRepository;
         $this->historyRepository = $historyRepository;
@@ -68,6 +74,7 @@ class OrderService implements OrderManagementInterface
         $this->filterBuilder = $filterBuilder;
         $this->notifier = $notifier;
         $this->eventManager = $eventManager;
+        $this->orderCommentSender = $orderCommentSender;
     }
 
     /**
@@ -114,6 +121,9 @@ class OrderService implements OrderManagementInterface
         $order = $this->orderRepository->get($id);
         $order->addStatusHistory($statusHistory);
         $this->orderRepository->save($order);
+        $notify = isset($statusHistory['is_customer_notified']) ? $statusHistory['is_customer_notified'] : false;
+        $comment = trim(strip_tags($statusHistory->getComment()));
+        $this->orderCommentSender->send($order, $notify, $comment);
         return true;
     }
 
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Service/OrderServiceTest.php b/app/code/Magento/Sales/Test/Unit/Model/Service/OrderServiceTest.php
index dfbdd79bd33..71a4bf2c0bb 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Service/OrderServiceTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Service/OrderServiceTest.php
@@ -14,51 +14,67 @@ class OrderServiceTest extends \PHPUnit_Framework_TestCase
      * @var \Magento\Sales\Model\Service\OrderService
      */
     protected $orderService;
+
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Sales\Api\OrderRepositoryInterface
      */
     protected $orderRepositoryMock;
+
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Sales\Api\OrderStatusHistoryRepositoryInterface
      */
     protected $orderStatusHistoryRepositoryMock;
+
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Api\SearchCriteriaBuilder
      */
     protected $searchCriteriaBuilderMock;
+
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Api\SearchCriteria
      */
     protected $searchCriteriaMock;
+
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Api\FilterBuilder
      */
     protected $filterBuilderMock;
+
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Api\Filter
      */
     protected $filterMock;
+
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Sales\Model\OrderNotifier
      */
     protected $orderNotifierMock;
+
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Sales\Model\Order
      */
     protected $orderMock;
+
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Sales\Model\Order\Status\History
      */
     protected $orderStatusHistoryMock;
+
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Sales\Api\Data\OrderStatusHistorySearchResultInterface
      */
     protected $orderSearchResultMock;
+
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Event\ManagerInterface
      */
     protected $eventManagerMock;
 
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Sales\Model\Order\Email\Sender\OrderCommentSender
+     */
+    protected $orderCommentSender;
+
     protected function setUp()
     {
         $this->orderRepositoryMock = $this->getMockBuilder(
@@ -116,13 +132,20 @@ class OrderServiceTest extends \PHPUnit_Framework_TestCase
         )
             ->disableOriginalConstructor()
             ->getMock();
+        $this->orderCommentSender = $this->getMockBuilder(
+            'Magento\Sales\Model\Order\Email\Sender\OrderCommentSender'
+        )
+            ->disableOriginalConstructor()
+            ->getMock();
+
         $this->orderService = new \Magento\Sales\Model\Service\OrderService(
             $this->orderRepositoryMock,
             $this->orderStatusHistoryRepositoryMock,
             $this->searchCriteriaBuilderMock,
             $this->filterBuilderMock,
             $this->orderNotifierMock,
-            $this->eventManagerMock
+            $this->eventManagerMock,
+            $this->orderCommentSender
         );
     }
 
@@ -174,6 +197,7 @@ class OrderServiceTest extends \PHPUnit_Framework_TestCase
 
     public function testAddComment()
     {
+        $clearComment = "Comment text here...";
         $this->orderRepositoryMock->expects($this->once())
             ->method('get')
             ->with(123)
@@ -182,10 +206,16 @@ class OrderServiceTest extends \PHPUnit_Framework_TestCase
             ->method('addStatusHistory')
             ->with($this->orderStatusHistoryMock)
             ->willReturn($this->orderMock);
+        $this->orderStatusHistoryMock->expects($this->once())
+            ->method('getComment')
+            ->willReturn("<h1>" . $clearComment);
         $this->orderRepositoryMock->expects($this->once())
             ->method('save')
             ->with($this->orderMock)
             ->willReturn([]);
+        $this->orderCommentSender->expects($this->once())
+            ->method('send')
+            ->with($this->orderMock, false, $clearComment);
         $this->assertTrue($this->orderService->addComment(123, $this->orderStatusHistoryMock));
     }
 
-- 
GitLab


From 0d85b24fd0f0d9da4a729cdaf236325cd6855fef Mon Sep 17 00:00:00 2001
From: Vitalii Zabaznov <vzabaznov@ebay.com>
Date: Mon, 19 Oct 2015 11:23:13 +0300
Subject: [PATCH 065/370] MAGETWO-44054: [GITHUB] Untranslatable phrases in
 backend

---
 .../Catalog/view/adminhtml/templates/catalog/product/edit.phtml | 2 +-
 .../adminhtml/templates/product/edit/attribute/search.phtml     | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit.phtml
index 3bce181616d..d21c1ee5ad8 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit.phtml
@@ -21,7 +21,7 @@
                 </button>
                 <ul class="dropdown-menu">
                     <li><input type="text" id="product-template-suggest" class="search"
-                           placeholder="start typing to search template"/></li>
+                           placeholder="<?php echo __('start typing to search template'); ?>"/></li>
                 </ul>
             </div>
         </div>
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/product/edit/attribute/search.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/product/edit/attribute/search.phtml
index d3c382f9276..4536143416c 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/product/edit/attribute/search.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/product/edit/attribute/search.phtml
@@ -17,7 +17,7 @@
             <input data-role="product-attribute-search"
                    data-group="<?php echo $block->escapeHtml($block->getGroupCode()); ?>"
                    class="search" type="text"
-                   placeholder="start typing to search attribute"/>
+                   placeholder="<?php echo __('start typing to search attribute'); ?>" />
         </div>
     </div>
 
-- 
GitLab


From cad3b13bb6afaa7918f3075623685f6562fb1f8f Mon Sep 17 00:00:00 2001
From: "Gurzhyi, Andrii" <agurzhyi@ebay.com>
Date: Mon, 19 Oct 2015 15:43:04 +0300
Subject: [PATCH 066/370] MAGETWO-44098: Enable PayPal Credit dropdown is
 active when Enable Express Checkout set to No in PayPal Payflow Link

- Fixed convertor configuration and initialization events
---
 .../Paypal/Model/Config/Rules/Converter.php   |  30 +---
 .../Unit/Model/Config/Rules/ConverterTest.php |  54 ++++---
 .../Config/Rules/ConvertibleContent/rules.xml |   4 +
 .../Paypal/etc/adminhtml/rules/payment_us.xml |   3 +
 .../adminhtml/web/js/predicate/confirm.js     |  15 +-
 .../Paypal/view/adminhtml/web/js/rule.js      |  14 +-
 .../view/adminhtml/web/js/rules/conflict.js   |  32 ++--
 .../view/adminhtml/web/js/rules/disable.js    |   3 +-
 .../bml/disable-conditional-express.js        |   5 +-
 .../rules/payflow/bml/disable-conditional.js  |   5 +-
 .../web/js/rules/payflow/bml/disable.js       |   3 +-
 .../rules/payflow/bml/enable-conditional.js   |  11 +-
 .../web/js/rules/payflow/bml/enable.js        |   3 +-
 .../js/rules/payflow/bml/lock-conditional.js  |   5 +-
 .../payflow/express/disable-conditional.js    |   5 +-
 .../web/js/rules/payflow/express/disable.js   |   3 +-
 .../payflow/express/enable-conditional.js     |  11 +-
 .../web/js/rules/payflow/express/enable.js    |   3 +-
 .../rules/payflow/express/lock-conditional.js |   5 +-
 .../rules/paypal/bml/disable-conditional.js   |   5 +-
 .../web/js/rules/paypal/bml/disable.js        |   3 +-
 .../web/js/rules/paypal/bml/enable.js         |   3 +-
 .../web/js/rules/paypal/express/disable.js    |   3 +-
 .../express/lock-configuration-conditional.js |  14 +-
 .../paypal/express/lock-configuration.js      |   3 +-
 .../js/rules/paypal/express/mark-disable.js   |  14 +-
 .../paypal/express/unlock-configuration.js    |  11 +-
 .../adminhtml/web/js/rules/simple/disable.js  |   3 +-
 .../web/js/rules/simple/mark-enable.js        |   5 +-
 .../Paypal/view/adminhtml/web/js/solution.js  | 137 +++++++++++++-----
 .../Paypal/view/adminhtml/web/js/solutions.js |  35 ++++-
 31 files changed, 298 insertions(+), 152 deletions(-)

diff --git a/app/code/Magento/Paypal/Model/Config/Rules/Converter.php b/app/code/Magento/Paypal/Model/Config/Rules/Converter.php
index a636188baf1..b2dad4af6f4 100644
--- a/app/code/Magento/Paypal/Model/Config/Rules/Converter.php
+++ b/app/code/Magento/Paypal/Model/Config/Rules/Converter.php
@@ -60,6 +60,7 @@ class Converter implements ConverterInterface
         $result = [];
         /** @var \DOMElement $child */
         foreach ($node->childNodes as $child) {
+            /** @var \DOMElement $child */
             if ($this->hasNodeElement($child)) {
                 $result[$child->getAttribute('name')] = [
                     'value' => $child->getAttribute('value'),
@@ -80,8 +81,8 @@ class Converter implements ConverterInterface
     protected function createPredicate(\DOMElement $node)
     {
         $result = [];
-        /** @var \DOMElement $child */
         foreach ($node->childNodes as $child) {
+            /** @var \DOMElement $child */
             if ($this->hasNodeElement($child)) {
                 $result = [
                     'name' => $child->getAttribute('name'),
@@ -105,33 +106,18 @@ class Converter implements ConverterInterface
     {
         $result = [];
         foreach ($node->childNodes as $child) {
+            /** @var \DOMElement $child */
             if ($this->hasNodeElement($child)) {
-                $result = array_merge($result, $this->createRule($child));
+                $result[$child->getAttribute('type')][] = [
+                    'event' => $child->getAttribute('event'),
+                    'argument' => $this->createArgument($child),
+                ];
             }
         }
 
         return [$node->getAttribute('target') => $result];
     }
 
-    /**
-     * Creating rules
-     *
-     * @param \DOMElement $node
-     * @return array
-     */
-    protected function createRule(\DOMElement $node)
-    {
-        $result = [];
-        $type = $node->getAttribute('type');
-        /** @var \DOMElement $node */
-        $result[$type] = [
-            'event' => $node->getAttribute('event'),
-        ];
-        $result[$type]['argument'] = $this->createArgument($node);
-
-        return $result;
-    }
-
     /**
      * Create argument
      *
@@ -141,8 +127,8 @@ class Converter implements ConverterInterface
     protected function createArgument(\DOMElement $node)
     {
         $result = [];
-        /** @var \DOMElement $child */
         foreach ($node->childNodes as $child) {
+            /** @var \DOMElement $child */
             if ($this->hasNodeElement($child)) {
                 $result[$child->getAttribute('name')] = $child->textContent;
             }
diff --git a/app/code/Magento/Paypal/Test/Unit/Model/Config/Rules/ConverterTest.php b/app/code/Magento/Paypal/Test/Unit/Model/Config/Rules/ConverterTest.php
index eb62d570481..ffd2f141e0a 100644
--- a/app/code/Magento/Paypal/Test/Unit/Model/Config/Rules/ConverterTest.php
+++ b/app/code/Magento/Paypal/Test/Unit/Model/Config/Rules/ConverterTest.php
@@ -78,22 +78,27 @@ class ConverterTest extends \PHPUnit_Framework_TestCase
                         'relations' => [
                             'payment_test_1' => [
                                 'test' => [
-                                    'event' => 'event0',
-                                    'argument' => [],
+                                    [
+                                        'event' => 'event0',
+                                        'argument' => [],
+                                    ]
                                 ],
                             ],
                             'payment_test_2' => [
                                 'test' => [
-                                    'event' => 'event1',
-                                    'argument' => [
-                                    ],
+                                    [
+                                        'event' => 'event1',
+                                        'argument' => [],
+                                    ]
                                 ],
                                 'test-two' => [
-                                    'event' => 'event1',
-                                    'argument' => [
-                                        'argument1' => 'argument1',
-                                        'argument2' => 'argument2',
-                                    ],
+                                    [
+                                        'event' => 'event1',
+                                        'argument' => [
+                                            'argument1' => 'argument1',
+                                            'argument2' => 'argument2',
+                                        ],
+                                    ]
                                 ],
                             ],
                         ],
@@ -122,21 +127,34 @@ class ConverterTest extends \PHPUnit_Framework_TestCase
                         'relations' => [
                             'payment_test_1' => [
                                 'test' => [
-                                    'event' => 'event0',
-                                    'argument' => [],
+                                    [
+                                        'event' => 'event0',
+                                        'argument' => [],
+                                    ]
                                 ],
                             ],
                             'payment_test_2' => [
                                 'test' => [
-                                    'event' => 'event1',
-                                    'argument' => [],
+                                    [
+                                        'event' => 'event1',
+                                        'argument' => [],
+                                    ]
                                 ],
                                 'test-two' => [
-                                    'event' => 'event1',
-                                    'argument' => [
-                                        'argument1' => 'argument1',
-                                        'argument2' => 'argument2',
+                                    [
+                                        'event' => 'event1',
+                                        'argument' => [
+                                            'argument1' => 'argument1',
+                                            'argument2' => 'argument2',
+                                        ],
                                     ],
+                                    [
+                                        'event' => 'event2',
+                                        'argument' => [
+                                            'argument1' => 'argument1',
+                                            'argument2' => 'argument2',
+                                        ],
+                                    ]
                                 ],
                             ],
                         ],
diff --git a/app/code/Magento/Paypal/Test/Unit/Model/Config/Rules/ConvertibleContent/rules.xml b/app/code/Magento/Paypal/Test/Unit/Model/Config/Rules/ConvertibleContent/rules.xml
index 297d3c8e620..4b4c6833d92 100644
--- a/app/code/Magento/Paypal/Test/Unit/Model/Config/Rules/ConvertibleContent/rules.xml
+++ b/app/code/Magento/Paypal/Test/Unit/Model/Config/Rules/ConvertibleContent/rules.xml
@@ -52,6 +52,10 @@
                 <argument name="argument1">argument1</argument>
                 <argument name="argument2">argument2</argument>
             </rule>
+            <rule type="test-two" event="event2">
+                <argument name="argument1">argument1</argument>
+                <argument name="argument2">argument2</argument>
+            </rule>
         </relation>
     </payment>
 </rules>
diff --git a/app/code/Magento/Paypal/etc/adminhtml/rules/payment_us.xml b/app/code/Magento/Paypal/etc/adminhtml/rules/payment_us.xml
index c187130b357..4b5acbe6e07 100644
--- a/app/code/Magento/Paypal/etc/adminhtml/rules/payment_us.xml
+++ b/app/code/Magento/Paypal/etc/adminhtml/rules/payment_us.xml
@@ -329,7 +329,10 @@
                 <argument name="wpp_usuk">wpp_usuk</argument>
                 <argument name="paypal_payflowpro_with_express_checkout">paypal_payflowpro_with_express_checkout</argument>
             </rule>
+
             <rule type="payflow/bml/disable-conditional-express" event="deactivate-express"/>
+            <rule type="payflow/bml/disable-conditional-express" event=":load"/>
+
             <rule type="payflow/bml/enable" event="activate-express"/>
             <rule type="payflow/express/lock-conditional" event=":load"/>
             <rule type="payflow/bml/lock-conditional" event=":load"/>
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/predicate/confirm.js b/app/code/Magento/Paypal/view/adminhtml/web/js/predicate/confirm.js
index ea426368243..278b101c9c6 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/predicate/confirm.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/predicate/confirm.js
@@ -2,25 +2,28 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-define([], function () {
-    "use strict";
+define(['underscore'], function (_) {
+    'use strict';
+
     return function (solution, message, argument) {
         var isConfirm = false;
 
         _.every(argument, function (name) {
-            if (solution.solutionsElements[name]
-                && solution.solutionsElements[name].find(solution.enableButton).val() == 1
+            if (solution.solutionsElements[name] &&
+                solution.solutionsElements[name].find(solution.enableButton).val() == 1
             ) {
                 isConfirm = true;
+
                 return !isConfirm;
             }
+
             return !isConfirm;
         }, this);
 
         if (isConfirm) {
             return confirm(message);
-        } else {
-            return true;
         }
+
+        return true;
     };
 });
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rule.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rule.js
index b565aa2d66d..c1c12344cc5 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rule.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rule.js
@@ -3,18 +3,24 @@
  * See COPYING.txt for license details.
  */
 define([
-    "uiClass",
-    "underscore"
-], function (Class, _) {
-    "use strict";
+    'uiClass'
+], function (Class) {
+    'use strict';
+
     return Class.extend({
+
         /**
          * Constructor
+         *
+         * @param {Object} config
+         * @returns {exports.initialize}
          */
         initialize: function (config) {
             this.initConfig(config);
+
             return this;
         },
+
         /**
          * To apply the rule
          */
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/conflict.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/conflict.js
index 4d94f6a2a9f..ab0ca8b9f60 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/conflict.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/conflict.js
@@ -2,32 +2,42 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-(function() {
+(function () {
+    'use strict';
+
     var executed = false;
+
     define([
-        'Magento_Ui/js/modal/alert'
-    ], function (alert) {
-        "use strict";
+        'Magento_Ui/js/modal/alert',
+        'underscore'
+    ], function (alert, _) {
+
         return function ($target, $owner, data) {
-            if ($owner.find(data.enableButton).val() == 1) {
-                var isDisabled = true;
 
+            var isDisabled = true,
+                newLine = String.fromCharCode(10, 13);
+
+            if ($owner.find(data.enableButton).val() === '1') {
                 _.every(data.argument, function (name) {
-                    if (data.solutionsElements[name]
-                        && data.solutionsElements[name].find(data.enableButton).val() == 1
+                    if (data.solutionsElements[name] &&
+                        data.solutionsElements[name].find(data.enableButton).val() === '1'
                     ) {
                         isDisabled = false;
+
                         return isDisabled;
                     }
+
                     return isDisabled;
                 }, this);
 
                 if (!isDisabled && !executed) {
                     executed = true;
                     alert({
-                        content: "The following error(s) occured:\n\r"
-                                +"Some PayPal solutions conflict.\n\r"
-                                +"Please re-enable the previously enabled payment solutions."
+                        content: 'The following error(s) occurred:\n\r' +
+                        newLine +
+                        'Some PayPal solutions conflict.' +
+                        newLine +
+                        'Please re-enable the previously enabled payment solutions.'
                     });
                 }
             }
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/disable.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/disable.js
index a5cc52ed96b..54e35558039 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/disable.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/disable.js
@@ -5,7 +5,8 @@
 define([
     'Magento_Paypal/js/rules/simple/disable'
 ], function (disable) {
-    "use strict";
+    'use strict';
+
     return function ($target, $owner, data) {
         disable($target, $owner, data);
         $target.find(data.enableButton).change();
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/disable-conditional-express.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/disable-conditional-express.js
index 8fccdd05455..e3d95340b8b 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/disable-conditional-express.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/disable-conditional-express.js
@@ -5,9 +5,10 @@
 define([
     'Magento_Paypal/js/rules/payflow/bml/disable'
 ], function (disable) {
-    "use strict";
+    'use strict';
+
     return function ($target, $owner, data) {
-        if ($target.find(data.enableExpress).val() == "0") {
+        if ($target.find(data.enableExpress).val() === '0') {
             disable($target, $owner, data);
         }
     };
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/disable-conditional.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/disable-conditional.js
index 2c5ae426534..20182ef0205 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/disable-conditional.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/disable-conditional.js
@@ -5,9 +5,10 @@
 define([
     'Magento_Paypal/js/rules/payflow/bml/disable'
 ], function (disable) {
-    "use strict";
+    'use strict';
+
     return function ($target, $owner, data) {
-        if ($target.find(data.enableButton).val() == "0") {
+        if ($target.find(data.enableButton).val() === '0') {
             disable($target, $owner, data);
         }
     };
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/disable.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/disable.js
index 873eea97958..01d241a0e36 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/disable.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/disable.js
@@ -3,7 +3,8 @@
  * See COPYING.txt for license details.
  */
 define([], function () {
-    "use strict";
+    'use strict';
+
     return function ($target, $owner, data) {
         $target.find('label[for="' + $target.find(data.enableBml).attr('id') + '"]').removeClass('enabled');
         $target.find(data.enableBml + ' option[value="0"]').prop('selected', true);
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/enable-conditional.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/enable-conditional.js
index f5d796397c7..77d3e28aa72 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/enable-conditional.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/enable-conditional.js
@@ -2,18 +2,21 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-define([], function () {
-    "use strict";
+define(['underscore'], function (_) {
+    'use strict';
+
     return function ($target, $owner, data) {
         var isDisabled = true;
 
         _.every(data.argument, function (name) {
-            if (data.solutionsElements[name]
-                && data.solutionsElements[name].find(data.enableButton).val() == 1
+            if (data.solutionsElements[name] &&
+                data.solutionsElements[name].find(data.enableButton).val() == 1
             ) {
                 isDisabled = false;
+
                 return isDisabled;
             }
+
             return isDisabled;
         }, this);
 
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/enable.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/enable.js
index e7710d80cf0..3ddfc3b0f60 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/enable.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/enable.js
@@ -3,7 +3,8 @@
  * See COPYING.txt for license details.
  */
 define([], function () {
-    "use strict";
+    'use strict';
+
     return function ($target, $owner, data) {
         $target.find(data.enableBml).prop('disabled', false);
         $target.find(data.enableBml + ' option[value="1"]').prop('selected', true);
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/lock-conditional.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/lock-conditional.js
index 09007924b0b..607c56984e7 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/lock-conditional.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/lock-conditional.js
@@ -3,9 +3,10 @@
  * See COPYING.txt for license details.
  */
 define([], function () {
-    "use strict";
+    'use strict';
+
     return function ($target, $owner, data) {
-        if ($target.find(data.enableButton).val() == "0") {
+        if ($target.find(data.enableButton).val() === '0') {
             $target.find(data.enableBml).prop('disabled', true);
         }
     };
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/express/disable-conditional.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/express/disable-conditional.js
index f37306731b8..94b178c0716 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/express/disable-conditional.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/express/disable-conditional.js
@@ -5,9 +5,10 @@
 define([
     'Magento_Paypal/js/rules/payflow/express/disable'
 ], function (disableExpress) {
-    "use strict";
+    'use strict';
+
     return function ($target, $owner, data) {
-        if ($target.find(data.enableButton).val() == "0") {
+        if ($target.find(data.enableButton).val() === '0') {
             disableExpress($target, $owner, data);
             $target.find(data.enableExpress).change();
         }
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/express/disable.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/express/disable.js
index 4d8b6fa3ca3..77649695f3c 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/express/disable.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/express/disable.js
@@ -3,7 +3,8 @@
  * See COPYING.txt for license details.
  */
 define([], function () {
-    "use strict";
+    'use strict';
+
     return function ($target, $owner, data) {
         $target.find('label[for="' + $target.find(data.enableExpress).attr('id') + '"]').removeClass('enabled');
         $target.find(data.enableExpress + ' option[value="0"]').prop('selected', true);
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/express/enable-conditional.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/express/enable-conditional.js
index cc76875080a..ea9fc5f2d0c 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/express/enable-conditional.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/express/enable-conditional.js
@@ -2,18 +2,21 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-define([], function () {
-    "use strict";
+define(['underscore'], function (_) {
+    'use strict';
+
     return function ($target, $owner, data) {
         var isDisabled = true;
 
         _.every(data.argument, function (name) {
-            if (data.solutionsElements[name]
-                && data.solutionsElements[name].find(data.enableButton).val() == 1
+            if (data.solutionsElements[name] &&
+                data.solutionsElements[name].find(data.enableButton).val() === '1'
             ) {
                 isDisabled = false;
+
                 return isDisabled;
             }
+
             return isDisabled;
         }, this);
 
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/express/enable.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/express/enable.js
index 456b4a6ac78..6dc1a0a49cf 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/express/enable.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/express/enable.js
@@ -3,7 +3,8 @@
  * See COPYING.txt for license details.
  */
 define([], function () {
-    "use strict";
+    'use strict';
+
     return function ($target, $owner, data) {
         $target.find(data.enableExpress).prop('disabled', false);
         $target.find(data.enableExpress + ' option[value="1"]').prop('selected', true);
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/express/lock-conditional.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/express/lock-conditional.js
index 476af3b5836..c07a0b5cf71 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/express/lock-conditional.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/express/lock-conditional.js
@@ -3,9 +3,10 @@
  * See COPYING.txt for license details.
  */
 define([], function () {
-    "use strict";
+    'use strict';
+
     return function ($target, $owner, data) {
-        if ($target.find(data.enableButton).val() == "0") {
+        if ($target.find(data.enableButton).val() === '0') {
             $target.find(data.enableExpress).prop('disabled', true);
         }
     };
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/bml/disable-conditional.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/bml/disable-conditional.js
index ed327a4678f..d4b8d4100e5 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/bml/disable-conditional.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/bml/disable-conditional.js
@@ -5,9 +5,10 @@
 define([
     'Magento_Paypal/js/rules/paypal/bml/disable'
 ], function (disable) {
-    "use strict";
+    'use strict';
+
     return function ($target, $owner, data) {
-        if ($target.find(data.enableButton).val() == "0") {
+        if ($target.find(data.enableButton).val() === '0') {
             disable($target, $owner, data);
         }
     };
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/bml/disable.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/bml/disable.js
index 124c325c445..c6ef93d332f 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/bml/disable.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/bml/disable.js
@@ -3,7 +3,8 @@
  * See COPYING.txt for license details.
  */
 define([], function () {
-    "use strict";
+    'use strict';
+
     return function ($target, $owner, data) {
         $target.find('label[for="' + $target.find(data.enableBmlPayPal).attr('id') + '"]').removeClass('enabled');
         $target.find(data.enableBmlPayPal + ' option[value="0"]').prop('selected', true);
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/bml/enable.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/bml/enable.js
index 1beb826bf39..90f7561734f 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/bml/enable.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/bml/enable.js
@@ -3,7 +3,8 @@
  * See COPYING.txt for license details.
  */
 define([], function () {
-    "use strict";
+    'use strict';
+
     return function ($target, $owner, data) {
         $target.find(data.enableBmlPayPal).prop('disabled', false);
         $target.find(data.enableBmlPayPal + ' option[value="1"]').prop('selected', true);
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/disable.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/disable.js
index 8421803de67..25e7b611a24 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/disable.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/disable.js
@@ -3,7 +3,8 @@
  * See COPYING.txt for license details.
  */
 define([], function () {
-    "use strict";
+    'use strict';
+
     return function ($target, $owner, data) {
         $target.find(data.enableButton + ' option[value="0"]').prop('selected', true);
         $target.find('label.enabled').removeClass('enabled');
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/lock-configuration-conditional.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/lock-configuration-conditional.js
index bd2c2f62a29..55a82e3cc19 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/lock-configuration-conditional.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/lock-configuration-conditional.js
@@ -3,19 +3,23 @@
  * See COPYING.txt for license details.
  */
 define([
-    'Magento_Paypal/js/rules/paypal/express/lock-configuration'
-], function (lockConfiguration) {
-    "use strict";
+    'Magento_Paypal/js/rules/paypal/express/lock-configuration',
+    'underscore'
+], function (lockConfiguration, _) {
+    'use strict';
+
     return function ($target, $owner, data) {
         var isDisabled = true;
 
         _.every(data.argument, function (name) {
-            if (data.solutionsElements[name]
-                && data.solutionsElements[name].find(data.enableButton).val() == 1
+            if (data.solutionsElements[name] &&
+                data.solutionsElements[name].find(data.enableButton).val() === '1'
             ) {
                 isDisabled = false;
+
                 return isDisabled;
             }
+
             return isDisabled;
         }, this);
 
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/lock-configuration.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/lock-configuration.js
index e549bda0adf..351f799b57b 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/lock-configuration.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/lock-configuration.js
@@ -3,7 +3,8 @@
  * See COPYING.txt for license details.
  */
 define([], function () {
-    "use strict";
+    'use strict';
+
     return function ($target, $owner, data) {
         $target.find(data.buttonConfiguration).addClass('disabled')
             .attr('disabled', 'disabled');
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/mark-disable.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/mark-disable.js
index 6bcf9a559b3..7943c843b13 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/mark-disable.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/mark-disable.js
@@ -3,19 +3,23 @@
  * See COPYING.txt for license details.
  */
 define([
-    'Magento_Paypal/js/rules/simple/disable'
-], function (disable) {
-    "use strict";
+    'Magento_Paypal/js/rules/simple/disable',
+    'underscore'
+], function (disable, _) {
+    'use strict';
+
     return function ($target, $owner, data) {
         var isDisabled = true;
 
         _.every(data.argument, function (name) {
-            if (data.solutionsElements[name]
-                && data.solutionsElements[name].find(data.enableButton).val() == 1
+            if (data.solutionsElements[name] &&
+                data.solutionsElements[name].find(data.enableButton).val() === '1'
             ) {
                 isDisabled = false;
+
                 return isDisabled;
             }
+
             return isDisabled;
         }, this);
 
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/unlock-configuration.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/unlock-configuration.js
index 413a8bf08b1..a13142e359e 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/unlock-configuration.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/unlock-configuration.js
@@ -2,18 +2,21 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-define([], function () {
-    "use strict";
+define(['underscore'], function (_) {
+    'use strict';
+
     return function ($target, $owner, data) {
         var isUnlock = true;
 
         _.every(data.argument, function (name) {
-            if (data.solutionsElements[name]
-                && data.solutionsElements[name].find(data.enableButton).val() == 1
+            if (data.solutionsElements[name] &&
+                data.solutionsElements[name].find(data.enableButton).val() == 1
             ) {
                 isUnlock = false;
+
                 return isUnlock;
             }
+
             return isUnlock;
         }, this);
 
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/simple/disable.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/simple/disable.js
index 4b7c4234dd3..7531d4fae1a 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/simple/disable.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/simple/disable.js
@@ -3,7 +3,8 @@
  * See COPYING.txt for license details.
  */
 define([], function () {
-    "use strict";
+    'use strict';
+
     return function ($target, $owner, data) {
         $target.find(data.enableButton + ' option[value="0"]').prop('selected', true);
         $target.find('label.enabled').removeClass('enabled');
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/simple/mark-enable.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/simple/mark-enable.js
index b686f1be7c9..1dec21bb5b4 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/simple/mark-enable.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/simple/mark-enable.js
@@ -3,8 +3,9 @@
  * See COPYING.txt for license details.
  */
 define([], function () {
-    "use strict";
-    return function ($target, $owner, data) {
+    'use strict';
+
+    return function ($target) {
         $target.find('.section-config').addClass('enabled');
     };
 });
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/solution.js b/app/code/Magento/Paypal/view/adminhtml/web/js/solution.js
index 787d9e066cd..4f8de68474d 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/solution.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/solution.js
@@ -3,39 +3,47 @@
  * See COPYING.txt for license details.
  */
 define([
-    "jquery",
-    "uiClass",
-    "Magento_Paypal/js/rule",
-    "mageUtils",
-    "underscore"
+    'jquery',
+    'uiClass',
+    'Magento_Paypal/js/rule',
+    'mageUtils',
+    'underscore'
 ], function ($, Class, Rule, utils, _) {
-    "use strict";
+    'use strict';
+
     return Class.extend({
         defaults: {
+
             /**
              * The event corresponding to the state change
              */
             systemEvent: 'change',
+
             /**
              * The rules applied after the page is loaded
              */
             afterLoadRules: [],
+
             /**
              * An attribute of the element responsible for the activation of the payment method (data attribute)
              */
             enableButton:   '[data-enable="payment"]',
+
             /**
              * An attribute of the element responsible for the activation of the Payflow Express (data attribute)
              */
             enableExpress:  '[data-enable="express"]',
+
             /**
              * An attribute of the element responsible for the activation of the Payflow Bml (data attribute)
              */
             enableBml:      '[data-enable="bml"]',
+
             /**
              * An attribute of the element responsible for the activation of the PayPal Bml (data attribute)
              */
             enableBmlPayPal:      '[data-enable="bml-api"]',
+
             /**
              * Templates element selectors
              */
@@ -43,100 +51,149 @@ define([
                 elementSelector: 'div.section-config tr[id$="${ $.identifier }"]:first'
             }
         },
+
         /**
          * Constructor
+         *
+         * @param {Object} config
+         * @param {String} identifier
+         * @returns {exports.initialize}
          */
         initialize: function (config, identifier) {
             this.initConfig(config);
             this.$self = this.createElement(identifier);
+
             return this;
         },
+
         /**
          * Initialization events
+         *
+         * @returns {exports.initEvents}
          */
         initEvents: function () {
             _.each(this.config.events, function (elementEvents, selector) {
+
                 var solution = this,
                     selectorButton = solution.$self.find(selector),
                     $self = solution.$self,
                     events = elementEvents;
-                selectorButton.on(solution.systemEvent, function (event) {
+
+                selectorButton.on(solution.systemEvent, function () {
                     _.each(events, function (elementEvent, name) {
+
                         var predicate = elementEvent.predicate,
-                            result = true;
+                            result = true,
+
+                            /**
+                             * @param {Function} functionPredicate
+                             */
+                            predicateCallback = function (functionPredicate) {
+                                result = functionPredicate(solution, predicate.message, predicate.argument);
+
+                                if (result) {
+                                    $self.trigger(name);
+                                } else {
+                                    $self.trigger(predicate.event);
+                                }
+                            };
+
                         if (solution.getValue($(this)) === elementEvent.value) {
                             if (predicate.name) {
                                 require([
                                     'Magento_Paypal/js/predicate/' + predicate.name
-                                ], function (functionPredicate) {
-                                    result = functionPredicate(solution, predicate.message, predicate.argument);
-                                    if (result) {
-                                        $self.trigger(name);
-                                    } else {
-                                        $self.trigger(predicate.event);
-                                    }
-                                });
+                                ], predicateCallback);
                             } else {
                                 $self.trigger(name);
                             }
-                            }
+                        }
                     }, this);
-                    });
+                });
             }, this);
+
             return this;
         },
 
+        /**
+         * @param {Object} $element
+         * @returns {*}
+         */
         getValue: function ($element) {
             if ($element.is(':checkbox')) {
                 return $element.prop('checked') ? '1' : '0';
             }
+
             return $element.val();
         },
+
         /**
          * Adding event listeners
+         *
+         * @returns {exports.addListeners}
          */
         addListeners: function () {
+
             _.each(this.config.relations, function (rules, targetName) {
+
                 var $target = this.createElement(targetName);
-                _.each(rules, function (rule, name) {
-                    var handler = new Rule({
-                        name :name,
-                        $target: $target,
-                        $owner: this.$self,
-                        data: {
-                            buttonConfiguration: this.buttonConfiguration,
-                            enableButton: this.enableButton,
-                            enableExpress: this.enableExpress,
-                            enableBml: this.enableBml,
-                            enableBmlPayPal: this.enableBmlPayPal,
-                            solutionsElements: this.solutionsElements,
-                            argument: rule.argument
+
+                _.each(rules, function (instances, instanceName) {
+
+                    _.each(instances, function (instance) {
+                        var handler = new Rule({
+                            name: instanceName,
+                            $target: $target,
+                            $owner: this.$self,
+                            data: {
+                                buttonConfiguration: this.buttonConfiguration,
+                                enableButton: this.enableButton,
+                                enableExpress: this.enableExpress,
+                                enableBml: this.enableBml,
+                                enableBmlPayPal: this.enableBmlPayPal,
+                                solutionsElements: this.solutionsElements,
+                                argument: instance.argument
+                            }
+                        });
+
+                        if (instance.event === ':load') {
+                            this.afterLoadRules.push(handler);
+
+                            return;
                         }
-                    });
-                    if (rule.event === ':load') {
-                        this.afterLoadRules.push(handler);
-                        return;
-                    }
-                    this.$self.on(rule.event, _.bind(handler.apply, handler));
+
+                        this.$self.on(instance.event, _.bind(handler.apply, handler));
+                    }, this);
                 }, this);
             }, this);
+
             return this;
         },
+
         /**
          * Create a jQuery element according to selector
+         *
+         * @param {String} identifier
+         * @returns {*}
          */
         createElement: function (identifier) {
-            if (':self' === identifier) {
+            if (identifier === ':self') {
                 return this.$self;
             }
-            var selector = utils.template(this.templates.elementSelector, {identifier: identifier});
-            return $(selector);
+
+            return $(utils.template(this.templates.elementSelector, {
+                'identifier': identifier
+            }));
         },
+
         /**
          * Assign solutions elements
+         *
+         * @param {Object} elements
+         * @returns {exports.setSolutionsElements}
          */
         setSolutionsElements: function (elements) {
             this.solutionsElements = elements;
+
             return this;
         }
     });
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/solutions.js b/app/code/Magento/Paypal/view/adminhtml/web/js/solutions.js
index b1e124aca38..f92a531e914 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/solutions.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/solutions.js
@@ -3,47 +3,64 @@
  * See COPYING.txt for license details.
  */
 define([
-    "jquery",
-    "uiClass",
-    "Magento_Paypal/js/solution",
-    "underscore"
+    'jquery',
+    'uiClass',
+    'Magento_Paypal/js/solution',
+    'underscore'
 ], function ($, Class, Solution, _) {
-    "use strict";
+    'use strict';
+
     return Class.extend({
         defaults: {
+
             /**
              * Initialized solutions
              */
             solutions: {},
+
             /**
              * The elements of created solutions
              */
             solutionsElements: {},
+
             /**
              * The selector element responsible for configuration of payment method (CSS class)
              */
             buttonConfiguration: '.button.action-configure'
         },
+
         /**
          * Constructor
+         *
+         * @param {Object} config
+         * @returns {exports.initialize}
          */
         initialize: function (config) {
             this.initConfig(config)
                 .initSolutions();
+
             return this;
         },
+
         /**
          * Initialization and configuration solutions
+         *
+         * @returns {exports.initSolutions}
          */
         initSolutions: function () {
             _.each(this.config.solutions, this.addSolution, this);
             this.initializeSolutions()
                 .wipeButtonsConfiguration();
             _.each(this.solutions, this.applicationRules);
+
             return this;
         },
+
         /**
          * The creation and addition of the solution according to the configuration
+         *
+         * @param {Object} solution
+         * @param {String} identifier
          */
         addSolution: function (solution, identifier) {
             this.solutions[identifier] = new Solution({
@@ -52,6 +69,7 @@ define([
             }, identifier);
             this.solutionsElements[identifier] = this.solutions[identifier].$self;
         },
+
         /**
          * Wiping buttons configuration of the payment method
          */
@@ -59,16 +77,22 @@ define([
             $(this.buttonConfiguration).removeClass('disabled')
                 .removeAttr('disabled');
         },
+
         /**
          * Application of the rules
+         *
+         * @param {Object} solution
          */
         applicationRules: function (solution) {
             _.each(solution.afterLoadRules, function (rule) {
                 rule.apply();
             });
         },
+
         /**
          * Initialize solutions
+         *
+         * @returns {exports.initializeSolutions}
          */
         initializeSolutions: function () {
             _.each(this.solutions, function (solution) {
@@ -76,6 +100,7 @@ define([
                     .initEvents()
                     .addListeners();
             }, this);
+
             return this;
         }
     });
-- 
GitLab


From 1ddcfd55f6e3c2234d5ba5a0723f92ce9b778a65 Mon Sep 17 00:00:00 2001
From: Andrii Kasian <akasian@magento.com>
Date: Mon, 19 Oct 2015 15:48:32 +0300
Subject: [PATCH 067/370] MAGETWO-44159: Configurable product price in store
 front doesn't reflect price change from backend

---
 .../Test/TestCase/CreateConfigurableProductEntityTest.xml   | 6 ------
 .../Test/TestCase/UpdateConfigurableProductEntityTest.xml   | 5 -----
 2 files changed, 11 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateConfigurableProductEntityTest.xml b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateConfigurableProductEntityTest.xml
index b7fdd48cd16..653ce4286e5 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateConfigurableProductEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateConfigurableProductEntityTest.xml
@@ -14,7 +14,6 @@
             <data name="product/data/checkout_data/dataset" xsi:type="string">configurable_two_options</data>
             <data name="product/data/name" xsi:type="string">Configurable Product %isolation%</data>
             <data name="product/data/sku" xsi:type="string">configurable_sku_%isolation%</data>
-            <data name="product/data/price/value" xsi:type="string">100</data>
             <data name="product/data/price/dataset" xsi:type="string">default</data>
             <data name="product/data/category_ids/dataset" xsi:type="string">default_subcategory</data>
             <data name="product/data/short_description" xsi:type="string">Configurable short description</data>
@@ -39,7 +38,6 @@
             <data name="product/data/checkout_data/dataset" xsi:type="string">configurable_two_options</data>
             <data name="product/data/name" xsi:type="string">Configurable Product %isolation%</data>
             <data name="product/data/sku" xsi:type="string">configurable_sku_%isolation%</data>
-            <data name="product/data/price/value" xsi:type="string">100</data>
             <data name="product/data/short_description" xsi:type="string">Configurable short description</data>
             <data name="product/data/description" xsi:type="string">Configurable Product description %isolation%</data>
             <data name="product/data/weight" xsi:type="string">2</data>
@@ -60,7 +58,6 @@
             <data name="product/data/checkout_data/dataset" xsi:type="string">configurable_two_new_options_with_special_price</data>
             <data name="product/data/name" xsi:type="string">Configurable Product %isolation%</data>
             <data name="product/data/sku" xsi:type="string">configurable_sku_%isolation%</data>
-            <data name="product/data/price/value" xsi:type="string">100</data>
             <data name="product/data/special_price" xsi:type="string">10</data>
             <data name="product/data/short_description" xsi:type="string">Configurable short description</data>
             <data name="product/data/description" xsi:type="string">Configurable Product description %isolation%</data>
@@ -83,7 +80,6 @@
             <data name="product/data/checkout_data/dataset" xsi:type="string">configurable_two_options_with_assigned_product</data>
             <data name="product/data/name" xsi:type="string">Configurable Product %isolation%</data>
             <data name="product/data/sku" xsi:type="string">configurable_sku_%isolation%</data>
-            <data name="product/data/price/value" xsi:type="string">100</data>
             <data name="product/data/short_description" xsi:type="string">Configurable short description</data>
             <data name="product/data/description" xsi:type="string">Configurable Product description %isolation%</data>
             <data name="product/data/weight" xsi:type="string">2</data>
@@ -102,7 +98,6 @@
             <data name="product/data/name" xsi:type="string">Configurable Product %isolation%</data>
             <data name="product/data/sku" xsi:type="string">configurable_sku_%isolation%</data>
             <data name="product/data/tax_class_id" xsi:type="string">Taxable Goods</data>
-            <data name="product/data/price/value" xsi:type="string">10</data>
             <data name="product/data/price/dataset" xsi:type="string">MAGETWO-12620</data>
             <data name="product/data/category_ids/dataset" xsi:type="string">default_subcategory</data>
             <data name="product/data/weight" xsi:type="string">1</data>
@@ -116,7 +111,6 @@
             <data name="product/data/configurable_attributes_data/dataset" xsi:type="string">two_searchable_options</data>
             <data name="product/data/name" xsi:type="string">Configurable Product %isolation%</data>
             <data name="product/data/sku" xsi:type="string">configurable_sku_%isolation%</data>
-            <data name="product/data/price/value" xsi:type="string">100</data>
             <data name="product/data/price/dataset" xsi:type="string">default</data>
             <data name="product/data/category_ids/new_category" xsi:type="string">no</data>
             <data name="product/data/category_ids/dataset" xsi:type="string">default_subcategory</data>
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/UpdateConfigurableProductEntityTest.xml b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/UpdateConfigurableProductEntityTest.xml
index 543ffade21f..e57a8d0a7c2 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/UpdateConfigurableProductEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/UpdateConfigurableProductEntityTest.xml
@@ -17,7 +17,6 @@
             <data name="updatedProduct/data/checkout_data/cartItem/price" xsi:type="string">153</data>
             <data name="updatedProduct/data/name" xsi:type="string">Configurable Product %isolation%</data>
             <data name="updatedProduct/data/sku" xsi:type="string">configurable_sku_%isolation%</data>
-            <data name="updatedProduct/data/price/value" xsi:type="string">99</data>
             <data name="updatedProduct/data/category_ids/dataset" xsi:type="string">default_subcategory</data>
             <data name="updatedProduct/data/short_description" xsi:type="string">Configurable short description</data>
             <data name="updatedProduct/data/description" xsi:type="string">Configurable Product description %isolation%</data>
@@ -42,7 +41,6 @@
             <data name="updatedProduct/data/checkout_data/cartItem/price" xsi:type="string">154</data>
             <data name="updatedProduct/data/name" xsi:type="string">Configurable Product %isolation%</data>
             <data name="updatedProduct/data/sku" xsi:type="string">configurable_sku_%isolation%</data>
-            <data name="updatedProduct/data/price/value" xsi:type="string">99</data>
             <data name="updatedProduct/data/short_description" xsi:type="string">Configurable short description</data>
             <data name="updatedProduct/data/description" xsi:type="string">Configurable Product description %isolation%</data>
             <data name="updatedProduct/data/weight" xsi:type="string">3</data>
@@ -65,7 +63,6 @@
             <data name="updatedProduct/data/checkout_data/cartItem/price" xsi:type="string">112</data>
             <data name="updatedProduct/data/name" xsi:type="string">Configurable Product %isolation%</data>
             <data name="updatedProduct/data/sku" xsi:type="string">configurable_sku_%isolation%</data>
-            <data name="updatedProduct/data/price/value" xsi:type="string">99</data>
             <data name="updatedProduct/data/category_ids/dataset" xsi:type="string">default_subcategory</data>
             <data name="updatedProduct/data/short_description" xsi:type="string">Configurable short description</data>
             <data name="updatedProduct/data/description" xsi:type="string">Configurable Product description %isolation%</data>
@@ -88,7 +85,6 @@
             <data name="updatedProduct/data/checkout_data/dataset" xsi:type="string">configurable_two_attributes</data>
             <data name="updatedProduct/data/name" xsi:type="string">Configurable Product %isolation%</data>
             <data name="updatedProduct/data/sku" xsi:type="string">configurable_sku_%isolation%</data>
-            <data name="updatedProduct/data/price/value" xsi:type="string">99</data>
             <data name="updatedProduct/data/short_description" xsi:type="string">Configurable short description</data>
             <data name="updatedProduct/data/description" xsi:type="string">Configurable Product description %isolation%</data>
             <data name="updatedProduct/data/weight" xsi:type="string">3</data>
@@ -106,7 +102,6 @@
             <data name="updatedProduct/data/configurable_attributes_data/dataset" xsi:type="string">one_new_options</data>
             <data name="updatedProduct/data/name" xsi:type="string">Configurable Product %isolation%</data>
             <data name="updatedProduct/data/sku" xsi:type="string">configurable_sku_%isolation%</data>
-            <data name="updatedProduct/data/price/value" xsi:type="string">99</data>
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductSaveMessage" />
             <constraint name="Magento\ConfigurableProduct\Test\Constraint\AssertConfigurableProductPage" />
         </variation>
-- 
GitLab


From c78545546b056100100fcaced222fe58237d9944 Mon Sep 17 00:00:00 2001
From: Andrii Lugovyi <alugovyi@ebay.com>
Date: Mon, 19 Oct 2015 17:09:04 +0300
Subject: [PATCH 068/370] MAGETWO-44177:  'Add Products Manually' link appears
 in 'Configurations' tab if add new attribute on edit Simple product

---
 .../templates/catalog/product/edit/super/config.phtml       | 2 +-
 .../adminhtml/templates/product/edit/downloadable.phtml     | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/super/config.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/super/config.phtml
index b71eadea028..b1d12ed35ed 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/super/config.phtml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/super/config.phtml
@@ -16,7 +16,7 @@
             You need to create a simple product for each configuration (Ex: a product for each color).');?>
             </div>
         </div>
-        <div class="product-create-configuration-actions">
+        <div class="product-create-configuration-actions" data-action="product-create-configuration-buttons">
             <div class="product-create-configuration-action">
                 <button type="button" data-action="open-steps-wizard" title="Create Product Configurations"
                         class="action-secondary" data-bind="click: open">
diff --git a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml
index 0c407754305..dac2edad7be 100644
--- a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml
+++ b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml
@@ -67,9 +67,9 @@ var uploaderTemplate = '<div class="no-display" id="[[idName]]-template">' +
         }
     };
 
-    var configurationSectionMessageHandler = (new function(attributeTitle, attributeTab) {
+    var configurationSectionMessageHandler = (new function(attributeTitle, buttons) {
         this.title = jQuery(attributeTitle);
-        this.buttons = jQuery('button', attributeTab);
+        this.buttons = jQuery(buttons);
         this.newText = '<?= /* @noEscape */ __('Configurations cannot be created for a standard product with downloadable files.'
              . ' To create configurations, first remove all downloadable files.');?>';
         this.oldText = this.title.text();
@@ -86,7 +86,7 @@ var uploaderTemplate = '<div class="no-display" id="[[idName]]-template">' +
             this.title.text(this.newText);
             this.buttons.hide();
         }
-    }('[data-role="product-create-configuration-info"]', '[data-tab="super_config"]'));
+    }('[data-role="product-create-configuration-info"]', '[data-action="product-create-configuration-buttons"]'));
 
     downloadableCheckbox.on('change', function () {
         switchConfigurationSectionMessage(!jQuery(this).is(':checked'));
-- 
GitLab


From 32d81c26897dd5d4168a35883b7b4cd3f5aefd41 Mon Sep 17 00:00:00 2001
From: "Gurzhyi, Andrii" <agurzhyi@ebay.com>
Date: Mon, 19 Oct 2015 17:30:24 +0300
Subject: [PATCH 069/370] MAGETWO-44098: Enable PayPal Credit dropdown is
 active when Enable Express Checkout set to No in PayPal Payflow Link

- CR
---
 app/code/Magento/Paypal/Model/Config/Rules/Converter.php        | 1 -
 app/code/Magento/Paypal/view/adminhtml/web/js/rules/conflict.js | 2 +-
 .../adminhtml/web/js/rules/payflow/bml/enable-conditional.js    | 2 +-
 .../web/js/rules/paypal/express/unlock-configuration.js         | 2 +-
 4 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/app/code/Magento/Paypal/Model/Config/Rules/Converter.php b/app/code/Magento/Paypal/Model/Config/Rules/Converter.php
index b2dad4af6f4..5528f79b385 100644
--- a/app/code/Magento/Paypal/Model/Config/Rules/Converter.php
+++ b/app/code/Magento/Paypal/Model/Config/Rules/Converter.php
@@ -58,7 +58,6 @@ class Converter implements ConverterInterface
     protected function createEvents(\DOMElement $node)
     {
         $result = [];
-        /** @var \DOMElement $child */
         foreach ($node->childNodes as $child) {
             /** @var \DOMElement $child */
             if ($this->hasNodeElement($child)) {
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/conflict.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/conflict.js
index ab0ca8b9f60..54b263be642 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/conflict.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/conflict.js
@@ -33,7 +33,7 @@
                 if (!isDisabled && !executed) {
                     executed = true;
                     alert({
-                        content: 'The following error(s) occurred:\n\r' +
+                        content: 'The following error(s) occurred:' +
                         newLine +
                         'Some PayPal solutions conflict.' +
                         newLine +
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/enable-conditional.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/enable-conditional.js
index 77d3e28aa72..9770d463f45 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/enable-conditional.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/payflow/bml/enable-conditional.js
@@ -10,7 +10,7 @@ define(['underscore'], function (_) {
 
         _.every(data.argument, function (name) {
             if (data.solutionsElements[name] &&
-                data.solutionsElements[name].find(data.enableButton).val() == 1
+                data.solutionsElements[name].find(data.enableButton).val() === '1'
             ) {
                 isDisabled = false;
 
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/unlock-configuration.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/unlock-configuration.js
index a13142e359e..fda160c6d94 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/unlock-configuration.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/paypal/express/unlock-configuration.js
@@ -10,7 +10,7 @@ define(['underscore'], function (_) {
 
         _.every(data.argument, function (name) {
             if (data.solutionsElements[name] &&
-                data.solutionsElements[name].find(data.enableButton).val() == 1
+                data.solutionsElements[name].find(data.enableButton).val() === '1'
             ) {
                 isUnlock = false;
 
-- 
GitLab


From d5346bf25bacf283a1ad61b3983e563beeb72d9a Mon Sep 17 00:00:00 2001
From: Ievgen Sentiabov <isentiabov@ebay.com>
Date: Mon, 19 Oct 2015 17:39:37 +0300
Subject: [PATCH 070/370] MAGETWO-43957: Authorization transaction is not
 closed after creating capture for order placed within Authorize.net and
 PayPal

 - Updated fixtures for integration tests
---
 .../testsuite/Magento/Paypal/_files/ipn.php   |  1 +
 .../Magento/Paypal/_files/order_express.php   | 43 ++++++++-----------
 2 files changed, 18 insertions(+), 26 deletions(-)

diff --git a/dev/tests/integration/testsuite/Magento/Paypal/_files/ipn.php b/dev/tests/integration/testsuite/Magento/Paypal/_files/ipn.php
index 5c27950d64f..3949117079b 100644
--- a/dev/tests/integration/testsuite/Magento/Paypal/_files/ipn.php
+++ b/dev/tests/integration/testsuite/Magento/Paypal/_files/ipn.php
@@ -8,6 +8,7 @@ return [
     'mc_gross' => '100.00',
     'invoice' => '100000001',
     'payment_status' => 'Completed',
+    'auth_status' => 'Completed',
     'mc_currency' => 'USD',
     'receiver_email' => 'merchant_2012050718_biz@example.com'
 ];
diff --git a/dev/tests/integration/testsuite/Magento/Paypal/_files/order_express.php b/dev/tests/integration/testsuite/Magento/Paypal/_files/order_express.php
index cc659a62b1e..9fbab06028d 100644
--- a/dev/tests/integration/testsuite/Magento/Paypal/_files/order_express.php
+++ b/dev/tests/integration/testsuite/Magento/Paypal/_files/order_express.php
@@ -18,30 +18,21 @@ $shippingAddress->setId(null)->setAddressType('shipping');
 $payment = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Sales\Model\Order\Payment');
 $payment->setMethod(\Magento\Paypal\Model\Config::METHOD_WPP_EXPRESS);
 
-$order = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Sales\Model\Order');
-$order
-    ->setCustomerEmail('co@co.co')
-    ->setIncrementId(
-    '100000001'
-)->setSubtotal(
-    100
-)->setBaseSubtotal(
-    100
-)->setBaseGrandTotal(
-    100
-)->setBaseCurrencyCode(
-    'USD'
-)->setCustomerIsGuest(
-    true
-)->setStoreId(
-    1
-)->setEmailSent(
-    1
-)->setBillingAddress(
-    $billingAddress
-)->setShippingAddress(
-    $shippingAddress
-)->setPayment(
-    $payment
-);
+$amount = 100;
+
+/** @var \Magento\Sales\Model\Order $order */
+$order = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(Magento\Sales\Model\Order::class);
+$order->setCustomerEmail('co@co.co')
+    ->setIncrementId('100000001')
+    ->setSubtotal($amount)
+    ->setBaseSubtotal($amount)
+    ->setBaseGrandTotal($amount)
+    ->setGrandTotal($amount)
+    ->setBaseCurrencyCode('USD')
+    ->setCustomerIsGuest(true)
+    ->setStoreId(1)
+    ->setEmailSent(true)
+    ->setBillingAddress($billingAddress)
+    ->setShippingAddress($shippingAddress)
+    ->setPayment($payment);
 $order->save();
-- 
GitLab


From 0728d75bf60c40accf04bd0315590b1e9f88279a Mon Sep 17 00:00:00 2001
From: Ankur Kaneria <akaneria@ebay.com>
Date: Mon, 19 Oct 2015 10:09:18 -0500
Subject: [PATCH 071/370] MAGETWO-44112: [php7]*.htaccess  incompatibility with
 php 7

- Removed magic_quotes_gpc which is no longer supported by PHP
---
 dev/tests/functional/.htaccess | 10 ----------
 1 file changed, 10 deletions(-)

diff --git a/dev/tests/functional/.htaccess b/dev/tests/functional/.htaccess
index b20b4dc2e4e..ae57d9073f2 100644
--- a/dev/tests/functional/.htaccess
+++ b/dev/tests/functional/.htaccess
@@ -35,11 +35,6 @@
     php_value memory_limit 256M
     php_value max_execution_time 18000
 
-############################################
-## disable magic quotes for php request vars
-
-    php_flag magic_quotes_gpc off
-
 ############################################
 ## disable automatic session start
 ## before autoload was initialized
@@ -72,11 +67,6 @@
     php_value memory_limit 256M
     php_value max_execution_time 18000
 
-############################################
-## disable magic quotes for php request vars
-
-    php_flag magic_quotes_gpc off
-
 ############################################
 ## disable automatic session start
 ## before autoload was initialized
-- 
GitLab


From 1240554e86ac5449e4decebe44d66dc156309285 Mon Sep 17 00:00:00 2001
From: Anton Kaplya <akaplya@ebay.com>
Date: Mon, 19 Oct 2015 18:20:32 +0300
Subject: [PATCH 072/370] MAGETWO-44169: Orders placed using Billing Agreement
 are not present in Related Orders section on backend

---
 .../Billing/Agreement/View/Tab/Orders.php     | 128 ++++++++++++++++--
 .../Model/ResourceModel/Billing/Agreement.php |   4 +-
 2 files changed, 122 insertions(+), 10 deletions(-)

diff --git a/app/code/Magento/Paypal/Block/Adminhtml/Billing/Agreement/View/Tab/Orders.php b/app/code/Magento/Paypal/Block/Adminhtml/Billing/Agreement/View/Tab/Orders.php
index df81fff83bd..f8b577df7c1 100644
--- a/app/code/Magento/Paypal/Block/Adminhtml/Billing/Agreement/View/Tab/Orders.php
+++ b/app/code/Magento/Paypal/Block/Adminhtml/Billing/Agreement/View/Tab/Orders.php
@@ -8,20 +8,54 @@
 
 namespace Magento\Paypal\Block\Adminhtml\Billing\Agreement\View\Tab;
 
+use Magento\Paypal\Model\ResourceModel\Billing\Agreement as BillingAgreementResource;
+use Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory;
+use Magento\Backend\Block\Widget\Grid\Extended as ExtendedGrid;
+use Magento\Backend\Block\Widget\Tab\TabInterface;
+use Magento\Backend\Block\Template\Context as TemplateContext;
+use Magento\Backend\Helper\Data as BackendHelper;
+use Magento\Framework\Registry;
+
 /**
  * Adminhtml billing agreement related orders tab
  */
-class Orders extends \Magento\Framework\View\Element\Text\ListText implements \Magento\Backend\Block\Widget\Tab\TabInterface
+class Orders extends ExtendedGrid implements TabInterface
 {
     /**
-     * Initialize grid params
-     *
-     * @return void
+     * @var  CollectionFactory
      */
-    protected function _construct()
-    {
-        parent::_construct();
-        $this->setId('billing_agreement_orders');
+    protected $collectionFactory;
+
+    /**
+     * @var Registry
+     */
+    protected $coreRegistry;
+
+    /**
+     * @var BillingAgreementResource
+     */
+    protected $billingAgreementResource;
+
+    /**
+     * @param TemplateContext $context
+     * @param BackendHelper $backendHelper
+     * @param CollectionFactory $collectionFactory
+     * @param Registry $coreRegistry
+     * @param BillingAgreementResource $billingAgreementResource
+     * @param array $data
+     */
+    public function __construct(
+        TemplateContext $context,
+        BackendHelper $backendHelper,
+        CollectionFactory $collectionFactory,
+        Registry $coreRegistry,
+        BillingAgreementResource $billingAgreementResource,
+        array $data = []
+    ) {
+        $this->coreRegistry = $coreRegistry;
+        $this->collectionFactory = $collectionFactory;
+        $this->billingAgreementResource = $billingAgreementResource;
+        parent::__construct($context, $backendHelper, $data);
     }
 
     /**
@@ -55,4 +89,82 @@ class Orders extends \Magento\Framework\View\Element\Text\ListText implements \M
     {
         return false;
     }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function _construct()
+    {
+        parent::_construct();
+        $this->setId('billing_agreement_orders');
+        $this->setUseAjax(true);
+    }
+
+    /**
+     * Apply various selection filters to prepare the sales order grid collection.
+     *
+     * @return $this
+     */
+    protected function _prepareCollection()
+    {
+        $billingAgreement = $this->coreRegistry->registry('current_billing_agreement');
+        if ($billingAgreement) {
+            $collection = $this->collectionFactory->getReport('sales_order_grid_data_source')->addFieldToSelect(
+                'entity_id'
+            )->addFieldToSelect(
+                'increment_id'
+            )->addFieldToSelect(
+                'customer_id'
+            )->addFieldToSelect(
+                'created_at'
+            )->addFieldToSelect(
+                'grand_total'
+            )->addFieldToSelect(
+                'order_currency_code'
+            )->addFieldToSelect(
+                'store_id'
+            )->addFieldToSelect(
+                'billing_name'
+            )->addFieldToSelect(
+                'shipping_name'
+            );
+            $this->billingAgreementResource->addOrdersFilter($collection, $billingAgreement->getId());
+            $this->setCollection($collection);
+        }
+        return parent::_prepareCollection();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function _prepareColumns()
+    {
+        $this->addColumn('increment_id', ['header' => __('Order'), 'width' => '100', 'index' => 'increment_id']);
+
+        $this->addColumn(
+            'created_at',
+            ['header' => __('Purchased'), 'index' => 'created_at', 'type' => 'datetime']
+        );
+
+        $this->addColumn('billing_name', ['header' => __('Bill-to Name'), 'index' => 'billing_name']);
+        $this->addColumn('shipping_name', ['header' => __('Ship-to Name'), 'index' => 'shipping_name']);
+
+        $this->addColumn(
+            'grand_total',
+            [
+                'header' => __('Order Total'),
+                'index' => 'grand_total',
+                'type' => 'currency',
+                'currency' => 'order_currency_code'
+            ]
+        );
+
+        if (!$this->_storeManager->isSingleStoreMode()) {
+            $this->addColumn(
+                'store_id',
+                ['header' => __('Purchase Point'), 'index' => 'store_id', 'type' => 'store', 'store_view' => true]
+            );
+        }
+        return parent::_prepareColumns();
+    }
 }
diff --git a/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement.php b/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement.php
index 6f714ae437e..5344091f837 100644
--- a/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement.php
+++ b/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement.php
@@ -39,11 +39,11 @@ class Agreement extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
     /**
      * Add billing agreement filter on orders collection
      *
-     * @param \Magento\Sales\Model\ResourceModel\Order\Collection $orderCollection
+     * @param \Magento\Framework\Data\Collection\AbstractDb $orderCollection
      * @param string|int|array $agreementIds
      * @return $this
      */
-    public function addOrdersFilter(\Magento\Sales\Model\ResourceModel\Order\Collection $orderCollection, $agreementIds)
+    public function addOrdersFilter(\Magento\Framework\Data\Collection\AbstractDb $orderCollection, $agreementIds)
     {
         $agreementIds = is_array($agreementIds) ? $agreementIds : [$agreementIds];
         $orderCollection->getSelect()->joinInner(
-- 
GitLab


From a4129d9c379cad99e5922923c80598cd94622b4e Mon Sep 17 00:00:00 2001
From: Ievgen Sentiabov <isentiabov@ebay.com>
Date: Mon, 19 Oct 2015 18:49:01 +0300
Subject: [PATCH 073/370] MAGETWO-43957: Authorization transaction is not
 closed after creating capture for order placed within Authorize.net and
 PayPal

 - Removed unnecessary conditions
---
 app/code/Magento/Sales/Model/Order/Payment.php               | 4 ++--
 .../Model/Order/Payment/Operations/CaptureOperation.php      | 2 +-
 .../Operations/RegisterCaptureNotificationOperation.php      | 4 +---
 app/code/Magento/Sales/Test/Unit/Model/Order/PaymentTest.php | 5 -----
 4 files changed, 4 insertions(+), 11 deletions(-)

diff --git a/app/code/Magento/Sales/Model/Order/Payment.php b/app/code/Magento/Sales/Model/Order/Payment.php
index 48b48ea18bf..7adf8f447f0 100644
--- a/app/code/Magento/Sales/Model/Order/Payment.php
+++ b/app/code/Magento/Sales/Model/Order/Payment.php
@@ -2398,12 +2398,12 @@ class Payment extends Info implements OrderPaymentInterface
     /**
      * Whether should close parent transaction
      *
-     * @return bool|null
+     * @return bool
      * @SuppressWarnings(PHPMD.BooleanGetMethodName)
      */
     public function getShouldCloseParentTransaction()
     {
-        return $this->getData('should_close_parent_transaction');
+        return (bool)$this->getData('should_close_parent_transaction');
     }
 
     //@codeCoverageIgnoreEnd
diff --git a/app/code/Magento/Sales/Model/Order/Payment/Operations/CaptureOperation.php b/app/code/Magento/Sales/Model/Order/Payment/Operations/CaptureOperation.php
index 236a51189d3..3bb13ccca2b 100644
--- a/app/code/Magento/Sales/Model/Order/Payment/Operations/CaptureOperation.php
+++ b/app/code/Magento/Sales/Model/Order/Payment/Operations/CaptureOperation.php
@@ -84,7 +84,7 @@ class CaptureOperation extends AbstractOperation
         if (!$invoice->wasPayCalled()) {
             $paidWorkaround = (double)$amountToCapture;
         }
-        if ($payment->isCaptureFinal($paidWorkaround) && $payment->getShouldCloseParentTransaction() !== false) {
+        if ($payment->isCaptureFinal($paidWorkaround)) {
             $payment->setShouldCloseParentTransaction(true);
         }
 
diff --git a/app/code/Magento/Sales/Model/Order/Payment/Operations/RegisterCaptureNotificationOperation.php b/app/code/Magento/Sales/Model/Order/Payment/Operations/RegisterCaptureNotificationOperation.php
index 708d65d1103..8b7759b79a6 100644
--- a/app/code/Magento/Sales/Model/Order/Payment/Operations/RegisterCaptureNotificationOperation.php
+++ b/app/code/Magento/Sales/Model/Order/Payment/Operations/RegisterCaptureNotificationOperation.php
@@ -44,9 +44,7 @@ class RegisterCaptureNotificationOperation extends AbstractOperation
                 $invoice->setOrder($order);
                 $order->addRelatedObject($invoice);
                 $payment->setCreatedInvoice($invoice);
-                if ($payment->getShouldCloseParentTransaction() !== false) {
-                    $payment->setShouldCloseParentTransaction(true);
-                }
+                $payment->setShouldCloseParentTransaction(true);
             } else {
                 $payment->setIsFraudDetected(!$skipFraudDetection);
                 $this->updateTotals($payment, ['base_amount_paid_online' => $amount]);
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/PaymentTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/PaymentTest.php
index 4a050b0a824..243588761cc 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/PaymentTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/PaymentTest.php
@@ -1460,11 +1460,6 @@ class PaymentTest extends \PHPUnit_Framework_TestCase
      */
     public function testGetShouldCloseParentTransaction()
     {
-        static::assertNull(
-            $this->payment->getShouldCloseParentTransaction(),
-            'By default method should always return `null`'
-        );
-
         $this->payment->setShouldCloseParentTransaction(1);
         static::assertTrue($this->payment->getShouldCloseParentTransaction());
 
-- 
GitLab


From ebe19486a065db137ea5e65a342856f179cc7cd1 Mon Sep 17 00:00:00 2001
From: Ivan Gavryshko <igavryshko@ebay.com>
Date: Mon, 19 Oct 2015 10:56:42 -0500
Subject: [PATCH 074/370] MAGETWO-43265: An exception if try to get to the Web
 Wizard without writable file permissions

- simplified check if application is installed in setup to avoid using ObjectManager
- moved dependency related checks from Environment to DependencyCheck controller
---
 setup/config/di.config.php                    |   1 +
 setup/pub/magento/setup/readiness-check.js    |   6 +-
 .../Setup/Controller/DependencyCheck.php      | 159 ++++++++++++++++++
 .../Magento/Setup/Controller/Environment.php  | 141 +---------------
 setup/src/Magento/Setup/Controller/Index.php  |  17 +-
 setup/src/Magento/Setup/Model/Navigation.php  |   6 +-
 .../Test/Unit/Controller/EnvironmentTest.php  |  42 +----
 7 files changed, 181 insertions(+), 191 deletions(-)
 create mode 100644 setup/src/Magento/Setup/Controller/DependencyCheck.php

diff --git a/setup/config/di.config.php b/setup/config/di.config.php
index e7f0ac693af..ada024a3dcb 100644
--- a/setup/config/di.config.php
+++ b/setup/config/di.config.php
@@ -19,6 +19,7 @@ return [
             'Magento\Setup\Controller\ReadinessCheckInstaller',
             'Magento\Setup\Controller\ReadinessCheckUpdater',
             'Magento\Setup\Controller\Environment',
+            'Magento\Setup\Controller\DependencyCheck',
             'Magento\Setup\Controller\DatabaseCheck',
             'Magento\Setup\Controller\AddDatabase',
             'Magento\Setup\Controller\WebConfiguration',
diff --git a/setup/pub/magento/setup/readiness-check.js b/setup/pub/magento/setup/readiness-check.js
index f2b8cf9e48c..e4ae0fae6c3 100644
--- a/setup/pub/magento/setup/readiness-check.js
+++ b/setup/pub/magento/setup/readiness-check.js
@@ -24,14 +24,14 @@ angular.module('readiness-check', [])
         };
         switch ($state.current.type) {
             case 'uninstall':
-                $scope.dependencyUrl = 'index.php/environment/uninstall-dependency-check';
+                $scope.dependencyUrl = 'index.php/dependency-check/uninstall-dependency-check';
                 if ($localStorage.packages) {
                     $scope.componentDependency.packages = $localStorage.packages;
                 }
                 break;
             case 'enable':
             case 'disable':
-                $scope.dependencyUrl = 'index.php/environment/enable-disable-dependency-check';
+                $scope.dependencyUrl = 'index.php/dependency-check/enable-disable-dependency-check';
                 if ($localStorage.packages) {
                     $scope.componentDependency.packages = {
                         type: $state.current.type,
@@ -40,7 +40,7 @@ angular.module('readiness-check', [])
                 }
                 break;
             default:
-                $scope.dependencyUrl = 'index.php/environment/component-dependency';
+                $scope.dependencyUrl = 'index.php/dependency-check/component-dependency';
                 if ($localStorage.packages) {
                     $scope.componentDependency.packages = $localStorage.packages;
                 }
diff --git a/setup/src/Magento/Setup/Controller/DependencyCheck.php b/setup/src/Magento/Setup/Controller/DependencyCheck.php
new file mode 100644
index 00000000000..6f865e16678
--- /dev/null
+++ b/setup/src/Magento/Setup/Controller/DependencyCheck.php
@@ -0,0 +1,159 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Setup\Controller;
+
+use Magento\Setup\Model\DependencyReadinessCheck;
+use Magento\Setup\Model\UninstallDependencyCheck;
+use Zend\Json\Json;
+use Zend\Mvc\Controller\AbstractActionController;
+use Zend\View\Model\JsonModel;
+use Magento\Framework\Filesystem;
+use Magento\Setup\Model\ModuleStatusFactory;
+use Magento\Framework\Module\Status;
+
+/**
+ * Class DependencyCheck
+ *
+ * Checks dependencies.
+ */
+class DependencyCheck extends AbstractActionController
+{
+    /**
+     * Dependency Readiness Check
+     *
+     * @var DependencyReadinessCheck
+     */
+    protected $dependencyReadinessCheck;
+
+    /**
+     * Uninstall Dependency Readiness Check
+     *
+     * @var UninstallDependencyCheck
+     */
+    protected $uninstallDependencyCheck;
+
+    /**
+     * Module/Status Object
+     *
+     * @var Status
+     */
+    protected $moduleStatus;
+
+    /**
+     * Constructor
+     *
+     * @param DependencyReadinessCheck $dependencyReadinessCheck
+     * @param UninstallDependencyCheck $uninstallDependencyCheck
+     * @param ModuleStatusFactory $moduleStatusFactory
+     */
+    public function __construct(
+        DependencyReadinessCheck $dependencyReadinessCheck,
+        UninstallDependencyCheck $uninstallDependencyCheck,
+        ModuleStatusFactory $moduleStatusFactory
+    ) {
+        $this->dependencyReadinessCheck = $dependencyReadinessCheck;
+        $this->uninstallDependencyCheck = $uninstallDependencyCheck;
+        $this->moduleStatus = $moduleStatusFactory->create();
+    }
+
+    /**
+     * Verifies component dependency
+     *
+     * @return JsonModel
+     */
+    public function componentDependencyAction()
+    {
+        $responseType = ResponseTypeInterface::RESPONSE_TYPE_SUCCESS;
+        $packages = Json::decode($this->getRequest()->getContent(), Json::TYPE_ARRAY);
+        $data = [];
+        foreach ($packages as $package) {
+            $data[] = implode(' ', $package);
+        }
+        $dependencyCheck = $this->dependencyReadinessCheck->runReadinessCheck($data);
+        $data = [];
+        if (!$dependencyCheck['success']) {
+            $responseType = ResponseTypeInterface::RESPONSE_TYPE_ERROR;
+            $data['errorMessage'] = $dependencyCheck['error'];
+        }
+        $data['responseType'] = $responseType;
+        return new JsonModel($data);
+    }
+
+    /**
+     * Verifies component dependency for uninstall
+     *
+     * @return JsonModel
+     */
+    public function uninstallDependencyCheckAction()
+    {
+        $responseType = ResponseTypeInterface::RESPONSE_TYPE_SUCCESS;
+        $packages = Json::decode($this->getRequest()->getContent(), Json::TYPE_ARRAY);
+
+        $packagesToDelete = [];
+        foreach ($packages as $package) {
+            $packagesToDelete[] = $package['name'];
+        }
+
+        $dependencyCheck = $this->uninstallDependencyCheck->runUninstallReadinessCheck($packagesToDelete);
+        $data = [];
+        if (!$dependencyCheck['success']) {
+            $responseType = ResponseTypeInterface::RESPONSE_TYPE_ERROR;
+            $data['errorMessage'] = $dependencyCheck['error'];
+        }
+        $data['responseType'] = $responseType;
+        return new JsonModel($data);
+    }
+
+    /**
+     * Verifies component dependency for enable/disable actions
+     *
+     * @return JsonModel
+     */
+    public function enableDisableDependencyCheckAction()
+    {
+        $responseType = ResponseTypeInterface::RESPONSE_TYPE_SUCCESS;
+        $data = Json::decode($this->getRequest()->getContent(), Json::TYPE_ARRAY);
+
+        try {
+            if (empty($data['packages'])) {
+                throw new \Exception('No packages have been found.');
+            }
+
+            if (empty($data['type'])) {
+                throw new \Exception('Can not determine the flow.');
+            }
+
+            $modules = $data['packages'];
+
+            $isEnable = ($data['type'] !== 'disable');
+
+            $modulesToChange = [];
+            foreach ($modules as $module) {
+                if (!isset($module['name'])) {
+                    throw new \Exception('Can not find module name.');
+                }
+                $modulesToChange[] = $module['name'];
+            }
+
+            $constraints = $this->moduleStatus->checkConstraints($isEnable, $modulesToChange);
+            $data = [];
+
+            if ($constraints) {
+                $data['errorMessage'] = "Unable to change status of modules because of the following constraints: "
+                    . implode("<br>", $constraints);
+                $responseType = ResponseTypeInterface::RESPONSE_TYPE_ERROR;
+            }
+
+        } catch (\Exception $e) {
+            $responseType = ResponseTypeInterface::RESPONSE_TYPE_ERROR;
+            $data['errorMessage'] = $e->getMessage();
+        }
+
+        $data['responseType'] = $responseType;
+        return new JsonModel($data);
+    }
+}
diff --git a/setup/src/Magento/Setup/Controller/Environment.php b/setup/src/Magento/Setup/Controller/Environment.php
index 57c8a509aba..88cc5a97226 100644
--- a/setup/src/Magento/Setup/Controller/Environment.php
+++ b/setup/src/Magento/Setup/Controller/Environment.php
@@ -7,24 +7,17 @@ namespace Magento\Setup\Controller;
 
 use Magento\Setup\Model\Cron\ReadinessCheck;
 use Magento\Setup\Model\CronScriptReadinessCheck;
-use Magento\Setup\Model\DependencyReadinessCheck;
-use Magento\Setup\Model\UninstallDependencyCheck;
 use Magento\Setup\Model\PhpReadinessCheck;
-use Zend\Json\Json;
 use Zend\Mvc\Controller\AbstractActionController;
 use Zend\View\Model\JsonModel;
 use Magento\Setup\Model\FilePermissions;
 use Magento\Framework\App\Filesystem\DirectoryList;
 use Magento\Framework\Filesystem;
-use Magento\Setup\Model\ModuleStatusFactory;
-use Magento\Framework\Module\Status;
 
 /**
  * Class Environment
  *
  * Provides information and checks about the environment.
- *
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
 class Environment extends AbstractActionController
 {
@@ -33,6 +26,11 @@ class Environment extends AbstractActionController
      */
     const UPDATER_DIR = 'update';
 
+    /**
+     * Path to Magento config
+     */
+    const PATH_TO_CONFIG = '/app/etc/config.php';
+
     /**
      * File system
      *
@@ -47,20 +45,6 @@ class Environment extends AbstractActionController
      */
     protected $cronScriptReadinessCheck;
 
-    /**
-     * Dependency Readiness Check
-     *
-     * @var DependencyReadinessCheck
-     */
-    protected $dependencyReadinessCheck;
-
-    /**
-     * Uninstall Dependency Readiness Check
-     *
-     * @var UninstallDependencyCheck
-     */
-    protected $uninstallDependencyCheck;
-
     /**
      * PHP Readiness Check
      *
@@ -68,40 +52,24 @@ class Environment extends AbstractActionController
      */
     protected $phpReadinessCheck;
 
-    /**
-     * Module/Status Object
-     *
-     * @var Status
-     */
-    protected $moduleStatus;
-
     /**
      * Constructor
      *
      * @param FilePermissions $permissions
      * @param Filesystem $filesystem
      * @param CronScriptReadinessCheck $cronScriptReadinessCheck
-     * @param DependencyReadinessCheck $dependencyReadinessCheck
-     * @param UninstallDependencyCheck $uninstallDependencyCheck
      * @param PhpReadinessCheck $phpReadinessCheck
-     * @param ModuleStatusFactory $moduleStatusFactory
      */
     public function __construct(
         FilePermissions $permissions,
         Filesystem $filesystem,
         CronScriptReadinessCheck $cronScriptReadinessCheck,
-        DependencyReadinessCheck $dependencyReadinessCheck,
-        UninstallDependencyCheck $uninstallDependencyCheck,
-        PhpReadinessCheck $phpReadinessCheck,
-        ModuleStatusFactory $moduleStatusFactory
+        PhpReadinessCheck $phpReadinessCheck
     ) {
         $this->permissions = $permissions;
         $this->filesystem = $filesystem;
         $this->cronScriptReadinessCheck = $cronScriptReadinessCheck;
-        $this->dependencyReadinessCheck = $dependencyReadinessCheck;
-        $this->uninstallDependencyCheck = $uninstallDependencyCheck;
         $this->phpReadinessCheck = $phpReadinessCheck;
-        $this->moduleStatus = $moduleStatusFactory->create();
     }
 
     /**
@@ -249,101 +217,4 @@ class Environment extends AbstractActionController
         $data['responseType'] = $responseType;
         return new JsonModel($data);
     }
-
-    /**
-     * Verifies component dependency
-     *
-     * @return JsonModel
-     */
-    public function componentDependencyAction()
-    {
-        $responseType = ResponseTypeInterface::RESPONSE_TYPE_SUCCESS;
-        $packages = Json::decode($this->getRequest()->getContent(), Json::TYPE_ARRAY);
-        $data = [];
-        foreach ($packages as $package) {
-            $data[] = implode(' ', $package);
-        }
-        $dependencyCheck = $this->dependencyReadinessCheck->runReadinessCheck($data);
-        $data = [];
-        if (!$dependencyCheck['success']) {
-            $responseType = ResponseTypeInterface::RESPONSE_TYPE_ERROR;
-            $data['errorMessage'] = $dependencyCheck['error'];
-        }
-        $data['responseType'] = $responseType;
-        return new JsonModel($data);
-    }
-
-    /**
-     * Verifies component dependency for uninstall
-     *
-     * @return JsonModel
-     */
-    public function uninstallDependencyCheckAction()
-    {
-        $responseType = ResponseTypeInterface::RESPONSE_TYPE_SUCCESS;
-        $packages = Json::decode($this->getRequest()->getContent(), Json::TYPE_ARRAY);
-
-        $packagesToDelete = [];
-        foreach ($packages as $package) {
-            $packagesToDelete[] = $package['name'];
-        }
-
-        $dependencyCheck = $this->uninstallDependencyCheck->runUninstallReadinessCheck($packagesToDelete);
-        $data = [];
-        if (!$dependencyCheck['success']) {
-            $responseType = ResponseTypeInterface::RESPONSE_TYPE_ERROR;
-            $data['errorMessage'] = $dependencyCheck['error'];
-        }
-        $data['responseType'] = $responseType;
-        return new JsonModel($data);
-    }
-
-    /**
-     * Verifies component dependency for enable/disable actions
-     *
-     * @return JsonModel
-     */
-    public function enableDisableDependencyCheckAction()
-    {
-        $responseType = ResponseTypeInterface::RESPONSE_TYPE_SUCCESS;
-        $data = Json::decode($this->getRequest()->getContent(), Json::TYPE_ARRAY);
-
-        try {
-            if (empty($data['packages'])) {
-                throw new \Exception('No packages have been found.');
-            }
-
-            if (empty($data['type'])) {
-                throw new \Exception('Can not determine the flow.');
-            }
-
-            $modules = $data['packages'];
-
-            $isEnable = ($data['type'] !== 'disable');
-
-            $modulesToChange = [];
-            foreach ($modules as $module) {
-                if (!isset($module['name'])) {
-                    throw new \Exception('Can not find module name.');
-                }
-                $modulesToChange[] = $module['name'];
-            }
-
-            $constraints = $this->moduleStatus->checkConstraints($isEnable, $modulesToChange);
-            $data = [];
-
-            if ($constraints) {
-                $data['errorMessage'] = "Unable to change status of modules because of the following constraints: "
-                    . implode("<br>", $constraints);
-                $responseType = ResponseTypeInterface::RESPONSE_TYPE_ERROR;
-            }
-
-        } catch (\Exception $e) {
-            $responseType = ResponseTypeInterface::RESPONSE_TYPE_ERROR;
-            $data['errorMessage'] = $e->getMessage();
-        }
-
-        $data['responseType'] = $responseType;
-        return new JsonModel($data);
-    }
 }
diff --git a/setup/src/Magento/Setup/Controller/Index.php b/setup/src/Magento/Setup/Controller/Index.php
index 1c239ab77aa..6e75f68504c 100644
--- a/setup/src/Magento/Setup/Controller/Index.php
+++ b/setup/src/Magento/Setup/Controller/Index.php
@@ -16,9 +16,9 @@ use Magento\Setup\Model\ObjectManagerProvider;
 class Index extends AbstractActionController
 {
     /**
-     * @var \Magento\Framework\ObjectManagerInterface
+     * @var \Magento\Setup\Model\ObjectManagerProvider
      */
-    private $objectManager;
+    private $objectManagerProvider;
 
     /**
      * @param ObjectManagerProvider $objectManagerProvider
@@ -26,7 +26,7 @@ class Index extends AbstractActionController
     public function __construct(
         ObjectManagerProvider $objectManagerProvider
     ) {
-        $this->objectManager = $objectManagerProvider->get();
+        $this->objectManagerProvider = $objectManagerProvider;
     }
 
     /**
@@ -34,19 +34,20 @@ class Index extends AbstractActionController
      */
     public function indexAction()
     {
-        if ($this->objectManager->get('Magento\Framework\App\DeploymentConfig')->isAvailable()) {
+        if (file_exists(BP . \Magento\Setup\Controller\Environment::PATH_TO_CONFIG)) {
+            $objectManager = $this->objectManagerProvider->get();
             /** @var \Magento\Framework\App\State $adminAppState */
-            $adminAppState = $this->objectManager->get('Magento\Framework\App\State');
+            $adminAppState = $objectManager->get('Magento\Framework\App\State');
             $adminAppState->setAreaCode(\Magento\Framework\App\Area::AREA_ADMIN);
 
-            $this->objectManager->create(
+            $objectManager->create(
                 'Magento\Backend\Model\Auth\Session',
                 [
-                    'sessionConfig' => $this->objectManager->get('Magento\Backend\Model\Session\AdminConfig'),
+                    'sessionConfig' => $objectManager->get('Magento\Backend\Model\Session\AdminConfig'),
                     'appState' => $adminAppState
                 ]
             );
-            if (!$this->objectManager->get('Magento\Backend\Model\Auth')->isLoggedIn()) {
+            if (!$objectManager->get('Magento\Backend\Model\Auth')->isLoggedIn()) {
                 $view = new ViewModel();
                 $view->setTemplate('/error/401.phtml');
                 $this->getResponse()->setStatusCode(\Zend\Http\Response::STATUS_CODE_401);
diff --git a/setup/src/Magento/Setup/Model/Navigation.php b/setup/src/Magento/Setup/Model/Navigation.php
index a5e4e35fcd8..ff7699d0828 100644
--- a/setup/src/Magento/Setup/Model/Navigation.php
+++ b/setup/src/Magento/Setup/Model/Navigation.php
@@ -34,12 +34,10 @@ class Navigation
 
     /**
      * @param ServiceLocatorInterface $serviceLocator
-     * @param ObjectManagerProvider $objectManagerProvider
      */
-    public function __construct(ServiceLocatorInterface $serviceLocator, ObjectManagerProvider $objectManagerProvider)
+    public function __construct(ServiceLocatorInterface $serviceLocator)
     {
-        $objectManager = $objectManagerProvider->get();
-        if ($objectManager->get('Magento\Framework\App\DeploymentConfig')->isAvailable()) {
+        if (file_exists(BP . \Magento\Setup\Controller\Environment::PATH_TO_CONFIG)) {
             $this->navStates = $serviceLocator->get('config')[self::NAV_UPDATER];
             $this->navType = self::NAV_UPDATER;
             $this->titles = $serviceLocator->get('config')[self::NAV_UPDATER . 'Titles'];
diff --git a/setup/src/Magento/Setup/Test/Unit/Controller/EnvironmentTest.php b/setup/src/Magento/Setup/Test/Unit/Controller/EnvironmentTest.php
index fc3fee7684e..0d8f640576a 100644
--- a/setup/src/Magento/Setup/Test/Unit/Controller/EnvironmentTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Controller/EnvironmentTest.php
@@ -28,26 +28,11 @@ class EnvironmentTest extends \PHPUnit_Framework_TestCase
      */
     private $cronScriptReadinessCheck;
 
-    /**
-     * @var \Magento\Setup\Model\DependencyReadinessCheck|\PHPUnit_Framework_MockObject_MockObject
-     */
-    private $dependencyReadinessCheck;
-
     /**
      * @var \Magento\Setup\Model\PhpReadinessCheck|\PHPUnit_Framework_MockObject_MockObject
      */
     private $phpReadinessCheck;
 
-    /**
-     * @var \Magento\Setup\Model\UninstallDependencyCheck|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $uninstallDependencyCheck;
-
-    /**
-     * @var \Magento\Setup\Model\ModuleStatusFactory|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $moduleStatusFactory;
-
     /**
      * @var Environment
      */
@@ -57,7 +42,6 @@ class EnvironmentTest extends \PHPUnit_Framework_TestCase
     {
         $this->filesystem = $this->getMock('Magento\Framework\Filesystem', [], [], '', false);
         $this->permissions = $this->getMock('Magento\Setup\Model\FilePermissions', [], [], '', false);
-
         $this->cronScriptReadinessCheck = $this->getMock(
             'Magento\Setup\Model\CronScriptReadinessCheck',
             [],
@@ -65,36 +49,12 @@ class EnvironmentTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $this->dependencyReadinessCheck = $this->getMock(
-            'Magento\Setup\Model\DependencyReadinessCheck',
-            [],
-            [],
-            '',
-            false
-        );
         $this->phpReadinessCheck = $this->getMock('Magento\Setup\Model\PhpReadinessCheck', [], [], '', false);
-        $this->uninstallDependencyCheck = $this->getMock(
-            'Magento\Setup\Model\UninstallDependencyCheck',
-            [],
-            [],
-            '',
-            false
-        );
-        $this->moduleStatusFactory = $this->getMock(
-            'Magento\Setup\Model\ModuleStatusFactory',
-            [],
-            [],
-            '',
-            false
-        );
         $this->environment = new Environment(
             $this->permissions,
             $this->filesystem,
             $this->cronScriptReadinessCheck,
-            $this->dependencyReadinessCheck,
-            $this->uninstallDependencyCheck,
-            $this->phpReadinessCheck,
-            $this->moduleStatusFactory
+            $this->phpReadinessCheck
         );
     }
 
-- 
GitLab


From af4f1fa51c23c6ab6012bd00a4e43ee0d5dcaf2f Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Mon, 19 Oct 2015 11:17:16 -0500
Subject: [PATCH 075/370] MAGETWO-43787: cache:clean command doesn't clear
 Varnish cache  - fix unit tests

---
 .../Unit/Console/Command/AbstractCacheManageCommandTest.php    | 3 +--
 .../Test/Unit/Console/Command/CacheCleanCommandTest.php        | 1 +
 .../Test/Unit/Console/Command/CacheFlushCommandTest.php        | 1 +
 3 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Backend/Test/Unit/Console/Command/AbstractCacheManageCommandTest.php b/app/code/Magento/Backend/Test/Unit/Console/Command/AbstractCacheManageCommandTest.php
index 1bda8475c36..97d1f57ad1c 100644
--- a/app/code/Magento/Backend/Test/Unit/Console/Command/AbstractCacheManageCommandTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Console/Command/AbstractCacheManageCommandTest.php
@@ -13,7 +13,7 @@ abstract class AbstractCacheManageCommandTest extends AbstractCacheCommandTest
     /** @var  string */
     protected $cacheEventName;
 
-    /** @var  \Magento\Framework\Event\ManagerInterface */
+    /** @var  \Magento\Framework\Event\ManagerInterface | \PHPUnit_Framework_MockObject_MockObject */
     protected $eventManagerMock;
 
     public function setUp()
@@ -21,7 +21,6 @@ abstract class AbstractCacheManageCommandTest extends AbstractCacheCommandTest
         $this->eventManagerMock = $this->getMockBuilder('\Magento\Framework\Event\ManagerInterface')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->eventManagerMock->expects($this->any())->method('dispatch')->with($this->cacheEventName);
         parent::setUp();
     }
 
diff --git a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheCleanCommandTest.php b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheCleanCommandTest.php
index 16ef5f2d797..fe812c1a93d 100644
--- a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheCleanCommandTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheCleanCommandTest.php
@@ -28,6 +28,7 @@ class CacheCleanCommandTest extends AbstractCacheManageCommandTest
     {
         $this->cacheManagerMock->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
         $this->cacheManagerMock->expects($this->once())->method('clean')->with($types);
+        $this->eventManagerMock->expects($this->once())->method('dispatch')->with($this->cacheEventName);
 
         $commandTester = new CommandTester($this->command);
         $commandTester->execute($param);
diff --git a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheFlushCommandTest.php b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheFlushCommandTest.php
index 5717e8a7307..07828c6627d 100644
--- a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheFlushCommandTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheFlushCommandTest.php
@@ -28,6 +28,7 @@ class CacheFlushCommandTest extends AbstractCacheManageCommandTest
     {
         $this->cacheManagerMock->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
         $this->cacheManagerMock->expects($this->once())->method('flush')->with($types);
+        $this->eventManagerMock->expects($this->once())->method('dispatch')->with($this->cacheEventName);
 
         $commandTester = new CommandTester($this->command);
         $commandTester->execute($param);
-- 
GitLab


From 03ecfb8d5da2ee14bc5952e46b804befa68145dc Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Mon, 19 Oct 2015 11:55:43 -0500
Subject: [PATCH 076/370] MAGETWO-44154: Random PAT build failures due to
 400/503 HTTP response errors being thrown  - update unit tests per CR

---
 .../Magento/Framework/Code/Generator/Io.php   |  2 +-
 .../Unit/Generator/EntityAbstractTest.php     | 42 +++++------
 .../Code/Test/Unit/Generator/IoTest.php       | 73 ++++++++++++++-----
 .../TestAsset/ExistingResultClass.php         | 13 ----
 4 files changed, 77 insertions(+), 53 deletions(-)
 delete mode 100644 lib/internal/Magento/Framework/Code/Test/Unit/Generator/TestAsset/ExistingResultClass.php

diff --git a/lib/internal/Magento/Framework/Code/Generator/Io.php b/lib/internal/Magento/Framework/Code/Generator/Io.php
index eb6cabeebf9..315bc814a90 100644
--- a/lib/internal/Magento/Framework/Code/Generator/Io.php
+++ b/lib/internal/Magento/Framework/Code/Generator/Io.php
@@ -98,7 +98,7 @@ class Io
         try {
             $success = $this->filesystemDriver->rename($tmpFile, $fileName);
         } catch (FileSystemException $e) {
-            if (!file_exists($fileName)) {
+            if (!$this->fileExists($fileName)) {
                 throw $e;
             } else {
                 /**
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php
index c53f1aa39ab..67b43a173a1 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php
@@ -103,33 +103,33 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase
     {
         return [
             'no_source_class' => [
-                '$errors' => ['Source class ' . self::SOURCE_CLASS . ' doesn\'t exist.'],
-                '$validationSuccess' => false,
-                '$sourceClassExists' => false,
+                'errors' => ['Source class ' . self::SOURCE_CLASS . ' doesn\'t exist.'],
+                'validationSuccess' => false,
+                'sourceClassExists' => false,
             ],
             'cant_create_result_directory' => [
-                '$errors' => ['Can\'t create directory ' . self::RESULT_DIRECTORY . '.'],
-                '$validationSuccess' => false,
-                '$sourceClassExists' => true,
-                '$resultClassExists' => false,
-                '$makeResultDirSuccess' => false,
+                'errors' => ['Can\'t create directory ' . self::RESULT_DIRECTORY . '.'],
+                'validationSuccess' => false,
+                'sourceClassExists' => true,
+                'resultClassExists' => false,
+                'makeResultDirSuccess' => false,
             ],
             'result_file_exists' => [
-                '$errors' => [],
-                '$validationSuccess' => true,
-                '$sourceClassExists' => true,
-                '$resultClassExists' => false,
-                '$makeResultDirSuccess' => false,
-                '$resultFileExists' => true,
+                'errors' => [],
+                'validationSuccess' => true,
+                'sourceClassExists' => true,
+                'resultClassExists' => false,
+                'makeResultDirSuccess' => false,
+                'resultFileExists' => true,
             ],
             'generate_no_data' => [
-                '$errors' => ['Can\'t generate source code.'],
-                '$validationSuccess' => true,
-                '$sourceClassExists' => true,
-                '$resultClassExists' => false,
-                '$makeResultDirSuccess' => true,
-                '$resultFileExists' => true,
-                '$willWriteCode' => false,
+                'errors' => ['Can\'t generate source code.'],
+                'validationSuccess' => true,
+                'sourceClassExists' => true,
+                'resultClassExists' => false,
+                'makeResultDirSuccess' => true,
+                'resultFileExists' => true,
+                'willWriteCode' => false,
             ],
             'generate_ok' => []
         ];
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php
index 5f07802694a..0bbeaec11a1 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php
@@ -20,8 +20,6 @@ class IoTest extends \PHPUnit_Framework_TestCase
 
     const CLASS_FILE_NAME = 'class/file/name';
 
-    const FILE_NAME = 'test_file';
-
     const FILE_CONTENT = "content";
 
     /**#@-*/
@@ -40,7 +38,9 @@ class IoTest extends \PHPUnit_Framework_TestCase
     protected $_filesystemDriverMock;
 
     /** @var string */
-    protected $existingResultClassFile;
+    protected $existingFile;
+    /** @var string */
+    protected $nonExistingFile;
 
     protected function setUp()
     {
@@ -52,9 +52,8 @@ class IoTest extends \PHPUnit_Framework_TestCase
             $this->_filesystemDriverMock,
             self::GENERATION_DIRECTORY
         );
-        $this->existingResultClassFile =
-            (new ComponentRegistrar())->getPath(ComponentRegistrar::LIBRARY, 'magento/framework')
-            . '/Code/Test/Unit/Generator/TestAsset/ExistingResultClass.php';
+        $this->existingFile = BP . '/Magento/Class/Exists.php';
+        $this->nonExistingFile = BP . '/Magento/Class/Does/Not/Exists.php';
     }
 
     protected function tearDown()
@@ -82,18 +81,18 @@ class IoTest extends \PHPUnit_Framework_TestCase
         $this->_filesystemDriverMock->expects($this->once())
             ->method('filePutContents')
             ->with(
-                $this->stringContains(self::FILE_NAME),
+                $this->stringContains($this->existingFile),
                 "<?php\n" . self::FILE_CONTENT
             )->willReturn(true);
 
         $this->_filesystemDriverMock->expects($this->once())
             ->method('rename')
             ->with(
-                $this->stringContains(self::FILE_NAME),
-                self::FILE_NAME
+                $this->stringContains($this->existingFile),
+                $this->existingFile
             )->willReturn(true);
 
-        $this->assertTrue($this->_object->writeResultFile(self::FILE_NAME, self::FILE_CONTENT));
+        $this->assertTrue($this->_object->writeResultFile($this->existingFile, self::FILE_CONTENT));
     }
 
     public function testWriteResultFileAlreadyExists()
@@ -101,18 +100,43 @@ class IoTest extends \PHPUnit_Framework_TestCase
         $this->_filesystemDriverMock->expects($this->once())
             ->method('filePutContents')
             ->with(
-                $this->stringContains($this->existingResultClassFile),
+                $this->stringContains($this->existingFile),
                 "<?php\n" . self::FILE_CONTENT
             )->willReturn(true);
+        $this->_filesystemDriverMock->expects($this->once())
+            ->method('isExists')
+            ->willReturn(true);
 
         $this->_filesystemDriverMock->expects($this->once())
             ->method('rename')
             ->with(
-                $this->stringContains($this->existingResultClassFile),
-                $this->existingResultClassFile
+                $this->stringContains($this->existingFile),
+                $this->existingFile
             )->willThrowException(new FileSystemException(new Phrase('File already exists')));
 
-        $this->assertTrue($this->_object->writeResultFile($this->existingResultClassFile, self::FILE_CONTENT));
+        $this->assertTrue($this->_object->writeResultFile($this->existingFile, self::FILE_CONTENT));
+    }
+
+    /**
+     * @expectedException \Magento\Framework\Exception\FileSystemException
+     */
+    public function testWriteResultFileThrowsException()
+    {
+        $this->_filesystemDriverMock->expects($this->once())
+            ->method('filePutContents')
+            ->with(
+                $this->stringContains($this->nonExistingFile),
+                "<?php\n" . self::FILE_CONTENT
+            )->willReturn(true);
+
+        $this->_filesystemDriverMock->expects($this->once())
+            ->method('rename')
+            ->with(
+                $this->stringContains($this->nonExistingFile),
+                $this->nonExistingFile
+            )->willThrowException(new FileSystemException(new Phrase('File already exists')));
+
+        $this->assertTrue($this->_object->writeResultFile($this->nonExistingFile, self::FILE_CONTENT));
     }
 
     public function testMakeGenerationDirectoryWritable()
@@ -161,18 +185,31 @@ class IoTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals($this->_generationDirectory, $this->_object->getGenerationDirectory());
     }
 
-    public function testFileExists()
+    /**
+     * @dataProvider fileExistsDataProvider
+     * @param $fileName
+     * @param $exists
+     */
+    public function testFileExists($fileName, $exists)
     {
         $this->_filesystemDriverMock->expects(
             $this->once()
         )->method(
             'isExists'
         )->with(
-            $this->equalTo(self::FILE_NAME)
+            $this->equalTo($fileName)
         )->will(
-            $this->returnValue(false)
+            $this->returnValue($exists)
         );
 
-        $this->assertFalse($this->_object->fileExists(self::FILE_NAME));
+        $this->assertSame($exists, $this->_object->fileExists($fileName));
+    }
+
+    public function fileExistsDataProvider()
+    {
+        return [
+            ['fileName' => $this->existingFile, 'exists' => true],
+            ['fileName' => $this->nonExistingFile, 'exists' => false]
+        ];
     }
 }
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/TestAsset/ExistingResultClass.php b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/TestAsset/ExistingResultClass.php
deleted file mode 100644
index c4e487eab7f..00000000000
--- a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/TestAsset/ExistingResultClass.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-/***
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-// @codingStandardsIgnoreFile
-namespace Magento\Framework\Code\Test\Unit\Generator\TestAsset;
-
-
-class ExistingResultClass
-{
-
-}
-- 
GitLab


From 98e1ebabf2100ed94719ea75783e6ae5fddad608 Mon Sep 17 00:00:00 2001
From: Ivan Gavryshko <igavryshko@ebay.com>
Date: Mon, 19 Oct 2015 12:13:30 -0500
Subject: [PATCH 077/370] MAGETWO-43265: An exception if try to get to the Web
 Wizard without writable file permissions

- fixed CouplingBetweenObjects static test
---
 .../Magento/Setup/Controller/Environment.php  | 25 ++++++++-----------
 1 file changed, 11 insertions(+), 14 deletions(-)

diff --git a/setup/src/Magento/Setup/Controller/Environment.php b/setup/src/Magento/Setup/Controller/Environment.php
index 88cc5a97226..c5101d62016 100644
--- a/setup/src/Magento/Setup/Controller/Environment.php
+++ b/setup/src/Magento/Setup/Controller/Environment.php
@@ -6,11 +6,8 @@
 namespace Magento\Setup\Controller;
 
 use Magento\Setup\Model\Cron\ReadinessCheck;
-use Magento\Setup\Model\CronScriptReadinessCheck;
-use Magento\Setup\Model\PhpReadinessCheck;
 use Zend\Mvc\Controller\AbstractActionController;
 use Zend\View\Model\JsonModel;
-use Magento\Setup\Model\FilePermissions;
 use Magento\Framework\App\Filesystem\DirectoryList;
 use Magento\Framework\Filesystem;
 
@@ -34,37 +31,37 @@ class Environment extends AbstractActionController
     /**
      * File system
      *
-     * @var Filesystem
+     * @var \Magento\Framework\Filesystem
      */
     protected $filesystem;
 
     /**
      * Cron Script Readiness Check
      *
-     * @var CronScriptReadinessCheck
+     * @var \Magento\Setup\Model\CronScriptReadinessCheck
      */
     protected $cronScriptReadinessCheck;
 
     /**
      * PHP Readiness Check
      *
-     * @var PhpReadinessCheck
+     * @var \Magento\Setup\Model\PhpReadinessCheck
      */
     protected $phpReadinessCheck;
 
     /**
      * Constructor
      *
-     * @param FilePermissions $permissions
-     * @param Filesystem $filesystem
-     * @param CronScriptReadinessCheck $cronScriptReadinessCheck
-     * @param PhpReadinessCheck $phpReadinessCheck
+     * @param \Magento\Setup\Model\FilePermissions $permissions
+     * @param \Magento\Framework\Filesystem $filesystem
+     * @param \Magento\Setup\Model\CronScriptReadinessCheck $cronScriptReadinessCheck
+     * @param \Magento\Setup\Model\PhpReadinessCheck $phpReadinessCheck
      */
     public function __construct(
-        FilePermissions $permissions,
-        Filesystem $filesystem,
-        CronScriptReadinessCheck $cronScriptReadinessCheck,
-        PhpReadinessCheck $phpReadinessCheck
+        \Magento\Setup\Model\FilePermissions $permissions,
+        \Magento\Framework\Filesystem $filesystem,
+        \Magento\Setup\Model\CronScriptReadinessCheck $cronScriptReadinessCheck,
+        \Magento\Setup\Model\PhpReadinessCheck $phpReadinessCheck
     ) {
         $this->permissions = $permissions;
         $this->filesystem = $filesystem;
-- 
GitLab


From a31c539707444cb191e25b00586087778bceffcf Mon Sep 17 00:00:00 2001
From: Sergey Semenov <ssemenov@ebay.com>
Date: Mon, 19 Oct 2015 21:01:53 +0300
Subject: [PATCH 078/370] MAGETWO-39018: Wish list item image placeholder
 overlays link to wish list

---
 .../Wishlist/CustomerData/Wishlist.php        | 98 +++++++++++++------
 .../Test/Unit/CustomerData/WishlistTest.php   | 29 +++++-
 .../view/frontend/templates/sidebar.phtml     |  2 +-
 .../frontend/web/template/product_image.html  |  7 --
 4 files changed, 96 insertions(+), 40 deletions(-)
 delete mode 100644 app/code/Magento/Wishlist/view/frontend/web/template/product_image.html

diff --git a/app/code/Magento/Wishlist/CustomerData/Wishlist.php b/app/code/Magento/Wishlist/CustomerData/Wishlist.php
index 2c4379872b8..0a9ceb2b66c 100644
--- a/app/code/Magento/Wishlist/CustomerData/Wishlist.php
+++ b/app/code/Magento/Wishlist/CustomerData/Wishlist.php
@@ -3,7 +3,6 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-
 namespace Magento\Wishlist\CustomerData;
 
 use Magento\Customer\CustomerData\SectionSourceInterface;
@@ -24,9 +23,9 @@ class Wishlist implements SectionSourceInterface
     protected $wishlistHelper;
 
     /**
-     * @var \Magento\Catalog\Helper\Image
+     * @var \Magento\Catalog\Helper\ImageFactory
      */
-    protected $imageHelper;
+    protected $imageHelperFactory;
 
     /**
      * @var \Magento\Framework\App\ViewInterface
@@ -41,17 +40,17 @@ class Wishlist implements SectionSourceInterface
     /**
      * @param \Magento\Wishlist\Helper\Data $wishlistHelper
      * @param \Magento\Wishlist\Block\Customer\Sidebar $block
-     * @param \Magento\Catalog\Helper\Image $imageHelper
+     * @param \Magento\Catalog\Helper\ImageFactory $imageHelperFactory
      * @param \Magento\Framework\App\ViewInterface $view
      */
     public function __construct(
         \Magento\Wishlist\Helper\Data $wishlistHelper,
         \Magento\Wishlist\Block\Customer\Sidebar $block,
-        \Magento\Catalog\Helper\Image $imageHelper,
+        \Magento\Catalog\Helper\ImageFactory $imageHelperFactory,
         \Magento\Framework\App\ViewInterface $view
     ) {
         $this->wishlistHelper = $wishlistHelper;
-        $this->imageHelper = $imageHelper;
+        $this->imageHelperFactory = $imageHelperFactory;
         $this->block = $block;
         $this->view = $view;
     }
@@ -100,35 +99,76 @@ class Wishlist implements SectionSourceInterface
     protected function getItems()
     {
         $this->view->loadLayout();
+
         $collection = $this->wishlistHelper->getWishlistItemCollection();
         $collection->clear()->setPageSize(self::SIDEBAR_ITEMS_NUMBER)
             ->setInStockFilter(true)->setOrder('added_at');
+
         $items = [];
-        /** @var \Magento\Wishlist\Model\Item $wishlistItem */
         foreach ($collection as $wishlistItem) {
-            $product = $wishlistItem->getProduct();
-            $this->imageHelper->init($product, 'wishlist_sidebar_block');
-            $items[] = [
-                'image' => [
-                    'src' => $this->imageHelper->getUrl(),
-                    'alt' => $this->imageHelper->getLabel(),
-                    'width' => $this->imageHelper->getWidth(),
-                    'height' => $this->imageHelper->getHeight(),
-                ],
-                'product_url' => $this->wishlistHelper->getProductUrl($wishlistItem),
-                'product_name' => $product->getName(),
-                'product_price' => $this->block->getProductPriceHtml(
-                    $product,
-                    \Magento\Catalog\Pricing\Price\ConfiguredPriceInterface::CONFIGURED_PRICE_CODE,
-                    \Magento\Framework\Pricing\Render::ZONE_ITEM_LIST,
-                    ['item' => $wishlistItem]
-                ),
-                'product_is_saleable_and_visible' => $product->isSaleable() && $product->isVisibleInSiteVisibility(),
-                'product_has_required_options' => $product->getTypeInstance()->hasRequiredOptions($product),
-                'add_to_cart_params' => $this->wishlistHelper->getAddToCartParams($wishlistItem, true),
-                'delete_item_params' => $this->wishlistHelper->getRemoveParams($wishlistItem, true),
-            ];
+            $items[] = $this->getItemData($wishlistItem);
         }
         return $items;
     }
+
+    /**
+     * Retrieve wishlist item data
+     *
+     * @param \Magento\Wishlist\Model\Item $wishlistItem
+     * @return array
+     */
+    protected function getItemData(\Magento\Wishlist\Model\Item $wishlistItem)
+    {
+        $product = $wishlistItem->getProduct();
+        return [
+            'image' => $this->getImageData($product),
+            'product_url' => $this->wishlistHelper->getProductUrl($wishlistItem),
+            'product_name' => $product->getName(),
+            'product_price' => $this->block->getProductPriceHtml(
+                $product,
+                \Magento\Catalog\Pricing\Price\ConfiguredPriceInterface::CONFIGURED_PRICE_CODE,
+                \Magento\Framework\Pricing\Render::ZONE_ITEM_LIST,
+                ['item' => $wishlistItem]
+            ),
+            'product_is_saleable_and_visible' => $product->isSaleable() && $product->isVisibleInSiteVisibility(),
+            'product_has_required_options' => $product->getTypeInstance()->hasRequiredOptions($product),
+            'add_to_cart_params' => $this->wishlistHelper->getAddToCartParams($wishlistItem, true),
+            'delete_item_params' => $this->wishlistHelper->getRemoveParams($wishlistItem, true),
+        ];
+    }
+
+    /**
+     * Retrieve product image data
+     *
+     * @param \Magento\Catalog\Model\Product $product
+     * @return \Magento\Catalog\Block\Product\Image
+     */
+    protected function getImageData($product)
+    {
+        /** @var \Magento\Catalog\Helper\Image $helper */
+        $helper = $this->imageHelperFactory->create()
+            ->init($product, 'wishlist_sidebar_block');
+
+        $template = $helper->getFrame()
+            ? 'Magento_Catalog/product/image'
+            : 'Magento_Catalog/product/image_with_borders';
+
+        $imagesize = $helper->getResizedImageInfo();
+
+        $width = $helper->getFrame()
+            ? $helper->getWidth()
+            : (!empty($imagesize[0]) ? $imagesize[0] : $helper->getWidth());
+
+        $height = $helper->getFrame()
+            ? $helper->getHeight()
+            : (!empty($imagesize[1]) ? $imagesize[1] : $helper->getHeight());
+
+        return [
+            'template' => $template,
+            'src' => $helper->getUrl(),
+            'width' => $width,
+            'height' => $height,
+            'alt' => $helper->getLabel(),
+        ];
+    }
 }
diff --git a/app/code/Magento/Wishlist/Test/Unit/CustomerData/WishlistTest.php b/app/code/Magento/Wishlist/Test/Unit/CustomerData/WishlistTest.php
index 24368820dc4..470be780e12 100644
--- a/app/code/Magento/Wishlist/Test/Unit/CustomerData/WishlistTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/CustomerData/WishlistTest.php
@@ -46,16 +46,24 @@ class WishlistTest extends \PHPUnit_Framework_TestCase
         $this->sidebarMock = $this->getMockBuilder('Magento\Wishlist\Block\Customer\Sidebar')
             ->disableOriginalConstructor()
             ->getMock();
+        $this->viewMock = $this->getMockBuilder('Magento\Framework\App\ViewInterface')
+            ->getMockForAbstractClass();
+
         $this->catalogImageHelperMock = $this->getMockBuilder('Magento\Catalog\Helper\Image')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->viewMock = $this->getMockBuilder('Magento\Framework\App\ViewInterface')
-            ->getMockForAbstractClass();
+        $imageHelperFactory = $this->getMockBuilder('Magento\Catalog\Helper\ImageFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+        $imageHelperFactory->expects($this->any())
+            ->method('create')
+            ->willReturn($this->catalogImageHelperMock);
 
         $this->model = new Wishlist(
             $this->wishlistHelperMock,
             $this->sidebarMock,
-            $this->catalogImageHelperMock,
+            $imageHelperFactory,
             $this->viewMock
         );
     }
@@ -83,6 +91,7 @@ class WishlistTest extends \PHPUnit_Framework_TestCase
             'items' => [
                 [
                     'image' => [
+                        'template' => 'Magento_Catalog/product/image',
                         'src' => $imageUrl,
                         'alt' => $imageLabel,
                         'width' => $imageWidth,
@@ -165,6 +174,12 @@ class WishlistTest extends \PHPUnit_Framework_TestCase
         $this->catalogImageHelperMock->expects($this->once())
             ->method('getHeight')
             ->willReturn($imageHeight);
+        $this->catalogImageHelperMock->expects($this->any())
+            ->method('getFrame')
+            ->willReturn(true);
+        $this->catalogImageHelperMock->expects($this->once())
+            ->method('getResizedImageInfo')
+            ->willReturn([]);
 
         $this->wishlistHelperMock->expects($this->once())
             ->method('getProductUrl')
@@ -251,6 +266,7 @@ class WishlistTest extends \PHPUnit_Framework_TestCase
             'items' => [
                 [
                     'image' => [
+                        'template' => 'Magento_Catalog/product/image',
                         'src' => $imageUrl,
                         'alt' => $imageLabel,
                         'width' => $imageWidth,
@@ -266,6 +282,7 @@ class WishlistTest extends \PHPUnit_Framework_TestCase
                 ],
                 [
                     'image' => [
+                        'template' => 'Magento_Catalog/product/image',
                         'src' => $imageUrl,
                         'alt' => $imageLabel,
                         'width' => $imageWidth,
@@ -342,6 +359,12 @@ class WishlistTest extends \PHPUnit_Framework_TestCase
         $this->catalogImageHelperMock->expects($this->exactly(2))
             ->method('getHeight')
             ->willReturn($imageHeight);
+        $this->catalogImageHelperMock->expects($this->any())
+            ->method('getFrame')
+            ->willReturn(true);
+        $this->catalogImageHelperMock->expects($this->exactly(2))
+            ->method('getResizedImageInfo')
+            ->willReturn([]);
 
         $this->wishlistHelperMock->expects($this->exactly(2))
             ->method('getProductUrl')
diff --git a/app/code/Magento/Wishlist/view/frontend/templates/sidebar.phtml b/app/code/Magento/Wishlist/view/frontend/templates/sidebar.phtml
index bab2e79a75f..1d7eb6e7dcc 100644
--- a/app/code/Magento/Wishlist/view/frontend/templates/sidebar.phtml
+++ b/app/code/Magento/Wishlist/view/frontend/templates/sidebar.phtml
@@ -26,7 +26,7 @@ $wishlistHelper = $this->helper('Magento\Wishlist\Helper\Data');
                     <li class="product-item">
                         <div class="product-item-info">
                             <a class="product-item-photo" data-bind="attr: { href: product_url, title: product_name }">
-                                <!-- ko template: {name: 'Magento_Wishlist/product_image', data: $data.image} --><!-- /ko -->
+                                <!-- ko template: {name: $data.image.template, data: $data.image} --><!-- /ko -->
                             </a>
                             <div class="product-item-details">
                                 <strong class="product-item-name">
diff --git a/app/code/Magento/Wishlist/view/frontend/web/template/product_image.html b/app/code/Magento/Wishlist/view/frontend/web/template/product_image.html
deleted file mode 100644
index da88b3236c9..00000000000
--- a/app/code/Magento/Wishlist/view/frontend/web/template/product_image.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-<img class="photo image" data-bind="attr: {src: src, alt: alt}, style: {width: width + 'px', height: height + 'px'}" />
-- 
GitLab


From da415fe567ccfd68aed8a424356520cda2f70167 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Mon, 19 Oct 2015 16:26:57 -0500
Subject: [PATCH 079/370] MAGETWO-44154: Random PAT build failures due to
 400/503 HTTP response errors being thrown  - add unit test coverage for
 GENERATION_SKIP case  - refactor logic of including classes

---
 .../Magento/Framework/Code/Generator.php      | 34 +++-----
 .../Magento/Framework/Code/Generator/Io.php   | 12 +++
 .../Code/Test/Unit/GeneratorTest.php          | 82 ++++++++++++++-----
 3 files changed, 85 insertions(+), 43 deletions(-)

diff --git a/lib/internal/Magento/Framework/Code/Generator.php b/lib/internal/Magento/Framework/Code/Generator.php
index 2505bc34ba7..824f4f445ae 100644
--- a/lib/internal/Magento/Framework/Code/Generator.php
+++ b/lib/internal/Magento/Framework/Code/Generator.php
@@ -104,27 +104,10 @@ class Generator
                     new \Magento\Framework\Phrase(implode(' ', $errors))
                 );
             }
-            $this->tryToIncludeFile($file, $className, true);
-            return self::GENERATION_SUCCESS;
-        }
-    }
-
-    /**
-     * Include file conditionally
-     *
-     * @param string $fileName
-     * @param string $className
-     * @param bool $mustExist Skip inclusion if file doesn't exist and this is false
-     * @return void
-     */
-    public function tryToIncludeFile($fileName, $className, $mustExist)
-    {
-        if (!$this->definedClasses->isClassLoadableFromMemory($className)) {
-            if (!$mustExist && file_exists($fileName)) {
-                include $fileName;
-            } else {
-                include $fileName;
+            if (!$this->definedClasses->isClassLoadableFromMemory($className)) {
+                $this->_ioObject->includeFile($file);
             }
+            return self::GENERATION_SUCCESS;
         }
     }
 
@@ -208,7 +191,16 @@ class Generator
         if (!$resultEntityType || !$sourceClassName) {
             return self::GENERATION_ERROR;
         } else if ($this->definedClasses->isClassLoadableFromDisc($resultClass)) {
-            $this->tryToIncludeFile($this->_ioObject->getResultFileName($resultClass), $resultClass, false);
+            $generatedFileName = $this->_ioObject->getResultFileName($resultClass);
+            /**
+             * Must handle two edge cases: a competing process has generated the class and written it to disc already,
+             * or the class exists in committed code, despite matching pattern to be generated.
+             */
+            if ($this->_ioObject->fileExists($generatedFileName)
+                && !$this->definedClasses->isClassLoadableFromMemory($resultClass)
+            ) {
+                $this->_ioObject->includeFile($generatedFileName);
+            }
             return self::GENERATION_SKIP;
         } else if (!isset($this->_generatedEntities[$resultEntityType])) {
             throw new \InvalidArgumentException('Unknown generation entity.');
diff --git a/lib/internal/Magento/Framework/Code/Generator/Io.php b/lib/internal/Magento/Framework/Code/Generator/Io.php
index 315bc814a90..04457e916b6 100644
--- a/lib/internal/Magento/Framework/Code/Generator/Io.php
+++ b/lib/internal/Magento/Framework/Code/Generator/Io.php
@@ -146,6 +146,18 @@ class Io
         return $this->filesystemDriver->isExists($fileName);
     }
 
+    /**
+     * Wrapper for include
+     *
+     * @param string $fileName
+     * @return mixed
+     * @codeCoverageIgnore
+     */
+    public function includeFile($fileName)
+    {
+        return include $fileName;
+    }
+
     /**
      * @param string $directory
      * @return bool
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
index eb1a49a49a3..c418cb713b7 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
@@ -8,6 +8,10 @@
 
 namespace Magento\Framework\Code\Test\Unit;
 
+use Magento\Framework\Code\Generator;
+use Magento\Framework\Code\Generator\DefinedClasses;
+use Magento\Framework\Code\Generator\Io;
+
 class GeneratorTest extends \PHPUnit_Framework_TestCase
 {
     /**
@@ -34,15 +38,28 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|Generator\Io
+     * @var \PHPUnit_Framework_MockObject_MockObject|Io
      */
     protected $ioObjectMock;
 
+    /** @var \Magento\Framework\Code\Generator\DefinedClasses | \PHPUnit_Framework_MockObject_MockObject */
+    protected $definedClassesMock;
+
     protected function setUp()
     {
+        $this->definedClassesMock = $this->getMock('\Magento\Framework\Code\Generator\DefinedClasses');
         $this->ioObjectMock = $this->getMockBuilder('\Magento\Framework\Code\Generator\Io')
             ->disableOriginalConstructor()
             ->getMock();
+        $this->model = $this->buildModel(
+            $this->ioObjectMock,
+            [
+                'factory' => '\Magento\Framework\ObjectManager\Code\Generator\Factory',
+                'proxy' => '\Magento\Framework\ObjectManager\Code\Generator\Proxy',
+                'interceptor' => '\Magento\Framework\Interception\Code\Generator\Interceptor'
+            ],
+            $this->definedClassesMock
+        );
     }
 
     protected function tearDown()
@@ -52,9 +69,10 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
 
     public function testGetGeneratedEntities()
     {
-        $this->model = new \Magento\Framework\Code\Generator(
+        $this->model = $this->buildModel(
             $this->ioObjectMock,
-            ['factory', 'proxy', 'interceptor']
+            ['factory', 'proxy', 'interceptor'],
+            $this->definedClassesMock
         );
         $this->assertEquals(array_values($this->expectedEntities), $this->model->getGeneratedEntities());
     }
@@ -65,14 +83,6 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
      */
     public function testGenerateClass($className, $entityType)
     {
-        $this->model = new \Magento\Framework\Code\Generator(
-            $this->ioObjectMock,
-            [
-                'factory' => '\Magento\Framework\ObjectManager\Code\Generator\Factory',
-                'proxy' => '\Magento\Framework\ObjectManager\Code\Generator\Proxy',
-                'interceptor' => '\Magento\Framework\Interception\Code\Generator\Interceptor'
-            ]
-        );
         $objectManagerMock = $this->getMock('Magento\Framework\ObjectManagerInterface');
         $fullClassName = $className . $entityType;
         $entityGeneratorMock = $this->getMockBuilder('\Magento\Framework\Code\Generator\EntityAbstract')
@@ -85,8 +95,6 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
 
     public function testGenerateClassWithWrongName()
     {
-        $this->model = new \Magento\Framework\Code\Generator($this->ioObjectMock);
-
         $this->assertEquals(
             \Magento\Framework\Code\Generator::GENERATION_ERROR,
             $this->model->generateClass(self::SOURCE_CLASS)
@@ -98,15 +106,6 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
      */
     public function testGenerateClassWithError()
     {
-        $this->model = new \Magento\Framework\Code\Generator(
-            $this->ioObjectMock,
-            [
-                'factory' => '\Magento\Framework\ObjectManager\Code\Generator\Factory',
-                'proxy' => '\Magento\Framework\ObjectManager\Code\Generator\Proxy',
-                'interceptor' => '\Magento\Framework\Interception\Code\Generator\Interceptor'
-            ]
-        );
-
         $expectedEntities = array_values($this->expectedEntities);
         $resultClassName = self::SOURCE_CLASS . ucfirst(array_shift($expectedEntities));
         $objectManagerMock = $this->getMock('Magento\Framework\ObjectManagerInterface');
@@ -118,6 +117,32 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
         $this->model->generateClass($resultClassName);
     }
 
+    /**
+     * @dataProvider trueFalseDataProvider
+     */
+    public function testGenerateClassWithExistName($fileExists)
+    {
+        $this->definedClassesMock->expects($this->any())
+            ->method('isClassLoadableFromDisc')
+            ->willReturn(true);
+
+        $resultClassFileName = '/Magento/Path/To/Class.php';
+        $this->ioObjectMock->expects($this->once())->method('getResultFileName')->willReturn($resultClassFileName);
+        $this->ioObjectMock->expects($this->once())->method('fileExists')->willReturn($fileExists);
+        $includeFileInvokeCount = $fileExists ? 1 : 0;
+        $this->ioObjectMock->expects($this->exactly($includeFileInvokeCount))->method('includeFile');
+
+        $this->assertEquals(
+            \Magento\Framework\Code\Generator::GENERATION_SKIP,
+            $this->model->generateClass('Magento\GeneratedClass\Factory')
+        );
+    }
+
+    public function trueFalseDataProvider()
+    {
+        return [[true], [false]];
+    }
+
     /**
      * Data provider for generate class tests
      *
@@ -135,4 +160,17 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
         }
         return $data;
     }
+
+    /**
+     * Build SUT object
+     *
+     * @param Io $ioObject
+     * @param array $generatedEntities
+     * @param DefinedClasses $definedClasses
+     * @return Generator
+     */
+    private function buildModel(Io $ioObject, array $generatedEntities, DefinedClasses $definedClasses)
+    {
+        return new Generator($ioObject, $generatedEntities, $definedClasses);
+    }
 }
-- 
GitLab


From a13d0f2962106edfa868b6803e190430960316a0 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Mon, 19 Oct 2015 16:42:52 -0500
Subject: [PATCH 080/370] MAGETWO-44154: Random PAT build failures due to
 400/503 HTTP response errors being thrown  - style fixe

---
 .../Framework/Code/Test/Unit/Generator/IoTest.php     |  1 +
 .../Framework/Code/Test/Unit/GeneratorTest.php        | 11 ++---------
 2 files changed, 3 insertions(+), 9 deletions(-)

diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php
index 0bbeaec11a1..d15295f9fef 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php
@@ -39,6 +39,7 @@ class IoTest extends \PHPUnit_Framework_TestCase
 
     /** @var string */
     protected $existingFile;
+
     /** @var string */
     protected $nonExistingFile;
 
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
index c418cb713b7..c53a0973b00 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
@@ -31,15 +31,13 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
     ];
 
     /**
-     * Model under test
+     * System under test
      *
      * @var \Magento\Framework\Code\Generator
      */
     protected $model;
 
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|Io
-     */
+    /** @var \PHPUnit_Framework_MockObject_MockObject|Io */
     protected $ioObjectMock;
 
     /** @var \Magento\Framework\Code\Generator\DefinedClasses | \PHPUnit_Framework_MockObject_MockObject */
@@ -62,11 +60,6 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
         );
     }
 
-    protected function tearDown()
-    {
-        unset($this->model);
-    }
-
     public function testGetGeneratedEntities()
     {
         $this->model = $this->buildModel(
-- 
GitLab


From 52001cf99b5b2b362621466fd5148c7621f564bc Mon Sep 17 00:00:00 2001
From: Ivan Gavryshko <igavryshko@ebay.com>
Date: Mon, 19 Oct 2015 16:44:03 -0500
Subject: [PATCH 081/370] MAGETWO-43265: An exception if try to get to the Web
 Wizard without writable file permissions

- added model wrapper over file_exists
- fixed unit-tests
---
 .../Magento/Setup/Controller/Environment.php  |  5 --
 setup/src/Magento/Setup/Controller/Index.php  | 13 +++-
 setup/src/Magento/Setup/Model/Navigation.php  |  4 +-
 .../Setup/Test/Unit/Controller/IndexTest.php  | 70 +++++++++++++++++--
 .../Setup/Test/Unit/Model/NavigationTest.php  | 19 ++---
 5 files changed, 86 insertions(+), 25 deletions(-)

diff --git a/setup/src/Magento/Setup/Controller/Environment.php b/setup/src/Magento/Setup/Controller/Environment.php
index c5101d62016..df99f0513d9 100644
--- a/setup/src/Magento/Setup/Controller/Environment.php
+++ b/setup/src/Magento/Setup/Controller/Environment.php
@@ -23,11 +23,6 @@ class Environment extends AbstractActionController
      */
     const UPDATER_DIR = 'update';
 
-    /**
-     * Path to Magento config
-     */
-    const PATH_TO_CONFIG = '/app/etc/config.php';
-
     /**
      * File system
      *
diff --git a/setup/src/Magento/Setup/Controller/Index.php b/setup/src/Magento/Setup/Controller/Index.php
index 6e75f68504c..10ed8905166 100644
--- a/setup/src/Magento/Setup/Controller/Index.php
+++ b/setup/src/Magento/Setup/Controller/Index.php
@@ -9,6 +9,7 @@ namespace Magento\Setup\Controller;
 use Zend\Mvc\Controller\AbstractActionController;
 use Zend\View\Model\ViewModel;
 use Magento\Setup\Model\ObjectManagerProvider;
+use Magento\Setup\Model\ApplicationStatus;
 
 /**
  * Main controller of the Setup Wizard
@@ -20,13 +21,21 @@ class Index extends AbstractActionController
      */
     private $objectManagerProvider;
 
+    /**
+     * @var \Magento\Setup\Model\ApplicationStatus
+     */
+    private $applicationStatus;
+
     /**
      * @param ObjectManagerProvider $objectManagerProvider
+     * @param ApplicationStatus $applicationStatus
      */
     public function __construct(
-        ObjectManagerProvider $objectManagerProvider
+        ObjectManagerProvider $objectManagerProvider,
+        ApplicationStatus $applicationStatus
     ) {
         $this->objectManagerProvider = $objectManagerProvider;
+        $this->applicationStatus = $applicationStatus;
     }
 
     /**
@@ -34,7 +43,7 @@ class Index extends AbstractActionController
      */
     public function indexAction()
     {
-        if (file_exists(BP . \Magento\Setup\Controller\Environment::PATH_TO_CONFIG)) {
+        if ($this->applicationStatus->isApplicationInstalled()) {
             $objectManager = $this->objectManagerProvider->get();
             /** @var \Magento\Framework\App\State $adminAppState */
             $adminAppState = $objectManager->get('Magento\Framework\App\State');
diff --git a/setup/src/Magento/Setup/Model/Navigation.php b/setup/src/Magento/Setup/Model/Navigation.php
index ff7699d0828..ca4e57c7b64 100644
--- a/setup/src/Magento/Setup/Model/Navigation.php
+++ b/setup/src/Magento/Setup/Model/Navigation.php
@@ -35,9 +35,9 @@ class Navigation
     /**
      * @param ServiceLocatorInterface $serviceLocator
      */
-    public function __construct(ServiceLocatorInterface $serviceLocator)
+    public function __construct(ServiceLocatorInterface $serviceLocator, ApplicationStatus $applicationStatus)
     {
-        if (file_exists(BP . \Magento\Setup\Controller\Environment::PATH_TO_CONFIG)) {
+        if ($applicationStatus->isApplicationInstalled()) {
             $this->navStates = $serviceLocator->get('config')[self::NAV_UPDATER];
             $this->navType = self::NAV_UPDATER;
             $this->titles = $serviceLocator->get('config')[self::NAV_UPDATER . 'Titles'];
diff --git a/setup/src/Magento/Setup/Test/Unit/Controller/IndexTest.php b/setup/src/Magento/Setup/Test/Unit/Controller/IndexTest.php
index e5a3e2829cc..fbdaeed4354 100644
--- a/setup/src/Magento/Setup/Test/Unit/Controller/IndexTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Controller/IndexTest.php
@@ -21,11 +21,21 @@ class IndexTest extends \PHPUnit_Framework_TestCase
     private $objectManager;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\DeploymentConfig
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Setup\Model\ApplicationStatus
      */
-    private $deploymentConfig;
+    private $applicationStatus;
 
-    public function testIndexAction()
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\State
+     */
+    private $appState;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Backend\Model\Auth
+     */
+    private $auth;
+
+    public function setUp()
     {
         $this->objectManager = $this->getMockForAbstractClass('Magento\Framework\ObjectManagerInterface');
         $this->objectManagerProvider = $this->getMock(
@@ -35,12 +45,58 @@ class IndexTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $this->deploymentConfig = $this->getMock('Magento\Framework\App\DeploymentConfig', [], [], '', false);
+        $this->applicationStatus = $this->getMock(
+            'Magento\Setup\Model\ApplicationStatus',
+            [],
+            [],
+            '',
+            false
+        );
+        $this->appState = $this->getMock(
+            'Magento\Framework\App\State',
+            [],
+            [],
+            '',
+            false
+        );
+        $this->auth = $this->getMock(
+            'Magento\Backend\Model\Auth',
+            [],
+            [],
+            '',
+            false
+        );
+    }
+
+    public function testIndexActionInstalled()
+    {
+        $this->applicationStatus->expects($this->once())->method('isApplicationInstalled')->willReturn(true);
         $this->objectManagerProvider->expects($this->once())->method('get')->willReturn($this->objectManager);
-        $this->objectManager->expects($this->once())->method('get')->willReturn($this->deploymentConfig);
-        $this->deploymentConfig->expects($this->once())->method('isAvailable')->willReturn(false);
+        $this->appState->expects($this->once())->method('setAreaCode');
+        $this->auth->expects($this->once())->method('isLoggedIn');
+        $this->objectManager->expects($this->any())
+            ->method('get')
+            ->will(
+                $this->returnValueMap(
+                    [
+                        ['Magento\Framework\App\State', $this->appState],
+                        ['Magento\Backend\Model\Auth', $this->auth]
+                    ]
+                )
+            );
+        /** @var $controller Index */
+        $controller = new Index($this->objectManagerProvider, $this->applicationStatus);
+        $viewModel = $controller->indexAction();
+        $this->assertInstanceOf('Zend\View\Model\ViewModel', $viewModel);
+        $this->assertFalse($viewModel->terminate());
+    }
+
+    public function testIndexActionNotInstalled()
+    {
+        $this->applicationStatus->expects($this->once())->method('isApplicationInstalled')->willReturn(false);
+        $this->objectManagerProvider->expects($this->exactly(0))->method('get');
         /** @var $controller Index */
-        $controller = new Index($this->objectManagerProvider);
+        $controller = new Index($this->objectManagerProvider, $this->applicationStatus);
         $viewModel = $controller->indexAction();
         $this->assertInstanceOf('Zend\View\Model\ViewModel', $viewModel);
         $this->assertFalse($viewModel->terminate());
diff --git a/setup/src/Magento/Setup/Test/Unit/Model/NavigationTest.php b/setup/src/Magento/Setup/Test/Unit/Model/NavigationTest.php
index 818c4feffda..7292b9a6eef 100644
--- a/setup/src/Magento/Setup/Test/Unit/Model/NavigationTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Model/NavigationTest.php
@@ -16,9 +16,9 @@ class NavigationTest extends \PHPUnit_Framework_TestCase
     private $serviceLocatorMock;
 
     /**
-     * @var \Magento\Setup\Model\ObjectManagerProvider|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Setup\Model\ApplicationStatus
      */
-    private $objectManagerProvider;
+    private $applicationStatus;
 
     /**
      * @var Navigation
@@ -29,12 +29,6 @@ class NavigationTest extends \PHPUnit_Framework_TestCase
     {
         $this->serviceLocatorMock =
             $this->getMockForAbstractClass('Zend\ServiceManager\ServiceLocatorInterface', ['get']);
-        $deploymentConfig = $this->getMock('Magento\Framework\App\DeploymentConfig', [], [], '', false);
-        $deploymentConfig->expects($this->once())->method('isAvailable')->willReturn(false);
-        $objectManager = $this->getMock('Magento\Framework\ObjectManagerInterface', [], [], '', false);
-        $objectManager->expects($this->once())->method('get')->willReturn($deploymentConfig);
-        $this->objectManagerProvider = $this->getMock('Magento\Setup\Model\ObjectManagerProvider', [], [], '', false);
-        $this->objectManagerProvider->expects($this->once())->method('get')->willReturn($objectManager);
         $this->serviceLocatorMock
             ->expects($this->exactly(2))
             ->method('get')
@@ -54,7 +48,14 @@ class NavigationTest extends \PHPUnit_Framework_TestCase
                     ['main' => false],
                 ]
             ]));
-        $this->navigation = new Navigation($this->serviceLocatorMock, $this->objectManagerProvider);
+        $this->applicationStatus = $this->getMock(
+            'Magento\Setup\Model\ApplicationStatus',
+            [],
+            [],
+            '',
+            false
+        );
+        $this->navigation = new Navigation($this->serviceLocatorMock, $this->applicationStatus);
     }
 
     public function testGetType()
-- 
GitLab


From 37b746ff5a384b48047475ef05aae31c06e09b52 Mon Sep 17 00:00:00 2001
From: Ivan Gavryshko <igavryshko@ebay.com>
Date: Mon, 19 Oct 2015 16:45:07 -0500
Subject: [PATCH 082/370] MAGETWO-43265: An exception if try to get to the Web
 Wizard without writable file permissions

- added model wrapper over file_exists
- fixed unit-tests
---
 .../Magento/Setup/Model/ApplicationStatus.php | 29 +++++++++++++++++++
 1 file changed, 29 insertions(+)
 create mode 100644 setup/src/Magento/Setup/Model/ApplicationStatus.php

diff --git a/setup/src/Magento/Setup/Model/ApplicationStatus.php b/setup/src/Magento/Setup/Model/ApplicationStatus.php
new file mode 100644
index 00000000000..4c9ba635bc8
--- /dev/null
+++ b/setup/src/Magento/Setup/Model/ApplicationStatus.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Setup\Model;
+
+/**
+ * Class ApplicationStatus
+ * Returns status of application
+ */
+class ApplicationStatus
+{
+    /**
+     * Path to Magento config
+     */
+    const PATH_TO_CONFIG = '/app/etc/config.php';
+
+    /**
+     * Returns status of application
+     *
+     * @return bool
+     */
+    public function isApplicationInstalled()
+    {
+        return file_exists(BP . self::PATH_TO_CONFIG);
+    }
+}
-- 
GitLab


From 5b9f11d50cb1be00c1632209239a8344a8fed482 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Mon, 19 Oct 2015 16:54:26 -0500
Subject: [PATCH 083/370] =?UTF-8?q?MAGETWO-43435:=20[Github]=20=C2=ABi18n:?=
 =?UTF-8?q?collect-phrases=C2=BB=20command=20wrongly=20handles=20PHP=20str?=
 =?UTF-8?q?ing=20concatenation=20=20-=20style=20test=20fixes?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Setup/Console/Command/_files/phrases/TestPhrases.php    | 3 +++
 .../Parser/Adapter/Php/Tokenizer/PhraseCollectorTest.php    | 6 +++++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/phrases/TestPhrases.php b/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/phrases/TestPhrases.php
index 1e46c79299a..f3306a521ad 100644
--- a/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/phrases/TestPhrases.php
+++ b/dev/tests/integration/testsuite/Magento/Setup/Console/Command/_files/phrases/TestPhrases.php
@@ -8,6 +8,9 @@
 
 use Magento\Framework\Phrase;
 
+/**
+ * @SuppressWarnings(PHPMD)
+ */
 class TestPhrases
 {
     public function awesomeFunction()
diff --git a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollectorTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollectorTest.php
index e4dccc6fd63..b4f7d60a1ca 100644
--- a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollectorTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollectorTest.php
@@ -215,7 +215,11 @@ class PhraseCollectorTest extends \PHPUnit_Framework_TestCase
         $phraseTokens = [$firstPartToken, $concatenationToken, $secondPartToken];
         $phraseString = "'first part' . ' second part'";
 
-        $reflectionMethod = new \ReflectionMethod('\Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector', '_collectPhrase');
+        $reflectionMethod = new \ReflectionMethod(
+            '\Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector',
+            '_collectPhrase'
+        );
+
         $reflectionMethod->setAccessible(true);
         $this->assertSame($phraseString, $reflectionMethod->invoke($this->phraseCollector, $phraseTokens));
     }
-- 
GitLab


From 345a88f7316eb04ec08e6fb39d384e0fb76cbf4f Mon Sep 17 00:00:00 2001
From: Ivan Gavryshko <igavryshko@ebay.com>
Date: Mon, 19 Oct 2015 16:58:37 -0500
Subject: [PATCH 084/370] MAGETWO-43265: An exception if try to get to the Web
 Wizard without writable file permissions

- instantiating DeploymentConfig via Zend Service Locator
- Changed tests according to changes
---
 setup/src/Magento/Setup/Controller/Index.php  | 14 ++++-----
 .../Magento/Setup/Model/ApplicationStatus.php | 29 -------------------
 setup/src/Magento/Setup/Model/Navigation.php  |  6 ++--
 .../Setup/Test/Unit/Controller/IndexTest.php  | 17 ++++++-----
 .../Setup/Test/Unit/Model/NavigationTest.php  | 10 +++----
 5 files changed, 25 insertions(+), 51 deletions(-)
 delete mode 100644 setup/src/Magento/Setup/Model/ApplicationStatus.php

diff --git a/setup/src/Magento/Setup/Controller/Index.php b/setup/src/Magento/Setup/Controller/Index.php
index 10ed8905166..2f80b4b860f 100644
--- a/setup/src/Magento/Setup/Controller/Index.php
+++ b/setup/src/Magento/Setup/Controller/Index.php
@@ -9,7 +9,7 @@ namespace Magento\Setup\Controller;
 use Zend\Mvc\Controller\AbstractActionController;
 use Zend\View\Model\ViewModel;
 use Magento\Setup\Model\ObjectManagerProvider;
-use Magento\Setup\Model\ApplicationStatus;
+use Magento\Framework\App\DeploymentConfig;
 
 /**
  * Main controller of the Setup Wizard
@@ -22,20 +22,20 @@ class Index extends AbstractActionController
     private $objectManagerProvider;
 
     /**
-     * @var \Magento\Setup\Model\ApplicationStatus
+     * @var \Magento\Framework\App\DeploymentConfig
      */
-    private $applicationStatus;
+    private $deploymentConfig;
 
     /**
      * @param ObjectManagerProvider $objectManagerProvider
-     * @param ApplicationStatus $applicationStatus
+     * @param DeploymentConfig $deploymentConfig
      */
     public function __construct(
         ObjectManagerProvider $objectManagerProvider,
-        ApplicationStatus $applicationStatus
+        DeploymentConfig $deploymentConfig
     ) {
         $this->objectManagerProvider = $objectManagerProvider;
-        $this->applicationStatus = $applicationStatus;
+        $this->deploymentConfig = $deploymentConfig;
     }
 
     /**
@@ -43,7 +43,7 @@ class Index extends AbstractActionController
      */
     public function indexAction()
     {
-        if ($this->applicationStatus->isApplicationInstalled()) {
+        if ($this->deploymentConfig->isAvailable()) {
             $objectManager = $this->objectManagerProvider->get();
             /** @var \Magento\Framework\App\State $adminAppState */
             $adminAppState = $objectManager->get('Magento\Framework\App\State');
diff --git a/setup/src/Magento/Setup/Model/ApplicationStatus.php b/setup/src/Magento/Setup/Model/ApplicationStatus.php
deleted file mode 100644
index 4c9ba635bc8..00000000000
--- a/setup/src/Magento/Setup/Model/ApplicationStatus.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-namespace Magento\Setup\Model;
-
-/**
- * Class ApplicationStatus
- * Returns status of application
- */
-class ApplicationStatus
-{
-    /**
-     * Path to Magento config
-     */
-    const PATH_TO_CONFIG = '/app/etc/config.php';
-
-    /**
-     * Returns status of application
-     *
-     * @return bool
-     */
-    public function isApplicationInstalled()
-    {
-        return file_exists(BP . self::PATH_TO_CONFIG);
-    }
-}
diff --git a/setup/src/Magento/Setup/Model/Navigation.php b/setup/src/Magento/Setup/Model/Navigation.php
index ca4e57c7b64..9564e311e37 100644
--- a/setup/src/Magento/Setup/Model/Navigation.php
+++ b/setup/src/Magento/Setup/Model/Navigation.php
@@ -7,6 +7,7 @@
 namespace Magento\Setup\Model;
 
 use Zend\ServiceManager\ServiceLocatorInterface;
+use Magento\Framework\App\DeploymentConfig;
 
 class Navigation
 {
@@ -34,10 +35,11 @@ class Navigation
 
     /**
      * @param ServiceLocatorInterface $serviceLocator
+     * @param DeploymentConfig $deploymentConfig
      */
-    public function __construct(ServiceLocatorInterface $serviceLocator, ApplicationStatus $applicationStatus)
+    public function __construct(ServiceLocatorInterface $serviceLocator, DeploymentConfig $deploymentConfig)
     {
-        if ($applicationStatus->isApplicationInstalled()) {
+        if ($deploymentConfig->isAvailable()) {
             $this->navStates = $serviceLocator->get('config')[self::NAV_UPDATER];
             $this->navType = self::NAV_UPDATER;
             $this->titles = $serviceLocator->get('config')[self::NAV_UPDATER . 'Titles'];
diff --git a/setup/src/Magento/Setup/Test/Unit/Controller/IndexTest.php b/setup/src/Magento/Setup/Test/Unit/Controller/IndexTest.php
index fbdaeed4354..13baa28e0d0 100644
--- a/setup/src/Magento/Setup/Test/Unit/Controller/IndexTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Controller/IndexTest.php
@@ -21,9 +21,10 @@ class IndexTest extends \PHPUnit_Framework_TestCase
     private $objectManager;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Setup\Model\ApplicationStatus
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\DeploymentConfig
      */
-    private $applicationStatus;
+    private $deploymentConfig;
+
 
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\State
@@ -45,8 +46,8 @@ class IndexTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $this->applicationStatus = $this->getMock(
-            'Magento\Setup\Model\ApplicationStatus',
+        $this->deploymentConfig = $this->getMock(
+            'Magento\Framework\App\DeploymentConfig',
             [],
             [],
             '',
@@ -70,7 +71,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
 
     public function testIndexActionInstalled()
     {
-        $this->applicationStatus->expects($this->once())->method('isApplicationInstalled')->willReturn(true);
+        $this->deploymentConfig->expects($this->once())->method('isAvailable')->willReturn(true);
         $this->objectManagerProvider->expects($this->once())->method('get')->willReturn($this->objectManager);
         $this->appState->expects($this->once())->method('setAreaCode');
         $this->auth->expects($this->once())->method('isLoggedIn');
@@ -85,7 +86,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
                 )
             );
         /** @var $controller Index */
-        $controller = new Index($this->objectManagerProvider, $this->applicationStatus);
+        $controller = new Index($this->objectManagerProvider, $this->deploymentConfig);
         $viewModel = $controller->indexAction();
         $this->assertInstanceOf('Zend\View\Model\ViewModel', $viewModel);
         $this->assertFalse($viewModel->terminate());
@@ -93,10 +94,10 @@ class IndexTest extends \PHPUnit_Framework_TestCase
 
     public function testIndexActionNotInstalled()
     {
-        $this->applicationStatus->expects($this->once())->method('isApplicationInstalled')->willReturn(false);
+        $this->deploymentConfig->expects($this->once())->method('isAvailable')->willReturn(false);
         $this->objectManagerProvider->expects($this->exactly(0))->method('get');
         /** @var $controller Index */
-        $controller = new Index($this->objectManagerProvider, $this->applicationStatus);
+        $controller = new Index($this->objectManagerProvider, $this->deploymentConfig);
         $viewModel = $controller->indexAction();
         $this->assertInstanceOf('Zend\View\Model\ViewModel', $viewModel);
         $this->assertFalse($viewModel->terminate());
diff --git a/setup/src/Magento/Setup/Test/Unit/Model/NavigationTest.php b/setup/src/Magento/Setup/Test/Unit/Model/NavigationTest.php
index 7292b9a6eef..6b23c410cc7 100644
--- a/setup/src/Magento/Setup/Test/Unit/Model/NavigationTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Model/NavigationTest.php
@@ -16,9 +16,9 @@ class NavigationTest extends \PHPUnit_Framework_TestCase
     private $serviceLocatorMock;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Setup\Model\ApplicationStatus
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\DeploymentConfig
      */
-    private $applicationStatus;
+    private $deploymentConfig;
 
     /**
      * @var Navigation
@@ -48,14 +48,14 @@ class NavigationTest extends \PHPUnit_Framework_TestCase
                     ['main' => false],
                 ]
             ]));
-        $this->applicationStatus = $this->getMock(
-            'Magento\Setup\Model\ApplicationStatus',
+        $this->deploymentConfig = $this->getMock(
+            'Magento\Framework\App\DeploymentConfig',
             [],
             [],
             '',
             false
         );
-        $this->navigation = new Navigation($this->serviceLocatorMock, $this->applicationStatus);
+        $this->navigation = new Navigation($this->serviceLocatorMock, $this->deploymentConfig);
     }
 
     public function testGetType()
-- 
GitLab


From c574e2fad0edeffb5fb3ce291fccc88e075af13e Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Mon, 19 Oct 2015 17:03:53 -0500
Subject: [PATCH 085/370] MAGETWO-43787: cache:clean command doesn't clear
 Varnish cache  - style test fixes

---
 .../Unit/Console/Command/CacheDisableCommandTest.php   |  9 +++++++--
 .../Unit/Console/Command/CacheEnableCommandTest.php    | 10 ++++++++--
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheDisableCommandTest.php b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheDisableCommandTest.php
index f3e3311d4b8..4446b1b992e 100644
--- a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheDisableCommandTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheDisableCommandTest.php
@@ -26,8 +26,13 @@ class CacheDisableCommandTest extends AbstractCacheSetCommandTest
      */
     public function testExecute($param, $enable, $result, $output)
     {
-        $this->cacheManagerMock->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
-        $this->cacheManagerMock->expects($this->once())->method('setEnabled')->with($enable, false)->willReturn($result);
+        $this->cacheManagerMock->expects($this->once())
+            ->method('getAvailableTypes')
+            ->willReturn(['A', 'B', 'C']);
+        $this->cacheManagerMock->expects($this->once())
+            ->method('setEnabled')
+            ->with($enable, false)
+            ->willReturn($result);
 
         $commandTester = new CommandTester($this->command);
         $commandTester->execute($param);
diff --git a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheEnableCommandTest.php b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheEnableCommandTest.php
index 8690d4295ec..e44b71d06f9 100644
--- a/app/code/Magento/Backend/Test/Unit/Console/Command/CacheEnableCommandTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Console/Command/CacheEnableCommandTest.php
@@ -27,8 +27,14 @@ class CacheEnableCommandTest extends AbstractCacheSetCommandTest
     public function testExecute($param, $enable, $result, $output)
     {
         $this->cacheManagerMock->expects($this->once())->method('getAvailableTypes')->willReturn(['A', 'B', 'C']);
-        $this->cacheManagerMock->expects($this->once())->method('setEnabled')->with($enable, true)->willReturn($result);
-        $this->cacheManagerMock->expects($result === [] ? $this->never() : $this->once())->method('clean')->with($enable);
+        $this->cacheManagerMock->expects($this->once())
+            ->method('setEnabled')
+            ->with($enable, true)
+            ->willReturn($result);
+        $cleanInvocationCount = $result === [] ? 0 : 1;
+        $this->cacheManagerMock->expects($this->exactly($cleanInvocationCount))
+            ->method('clean')
+            ->with($enable);
 
         $commandTester = new CommandTester($this->command);
         $commandTester->execute($param);
-- 
GitLab


From c19e5f89bb777842ffc22d25cb9c83f3acea3c4f Mon Sep 17 00:00:00 2001
From: Mike Weis <miweis@ebay.com>
Date: Mon, 19 Oct 2015 19:46:56 -0500
Subject: [PATCH 086/370] MAGETWO-44076: Incorrect old price for products when
 custom options are percentage of product price

 - fixed
---
 app/code/Magento/Catalog/Block/Product/View/Options.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Catalog/Block/Product/View/Options.php b/app/code/Magento/Catalog/Block/Product/View/Options.php
index 5e4efdb8e56..befca9212fc 100644
--- a/app/code/Magento/Catalog/Block/Product/View/Options.php
+++ b/app/code/Magento/Catalog/Block/Product/View/Options.php
@@ -162,7 +162,7 @@ class Options extends \Magento\Framework\View\Element\Template
         $data = [
             'prices' => [
                 'oldPrice' => [
-                    'amount' => $this->pricingHelper->currency($option->getPrice(false), false, false),
+                    'amount' => $optionPrice,
                     'adjustments' => [],
                 ],
                 'basePrice' => [
-- 
GitLab


From 78d693d53402da1ef816c32fa41a7e2d8a00883e Mon Sep 17 00:00:00 2001
From: Viktor Tymchynskyi <vtymchynskyi@ebay.com>
Date: Tue, 20 Oct 2015 12:21:41 +0300
Subject: [PATCH 087/370] MAGETWO-43503: Currency symbol is displayed outside
 "Price" input on "create Downloadable Product" Admin page

---
 .../Catalog/Product/Edit/Tab/Downloadable/Links.php      | 9 +++++++++
 .../templates/product/edit/downloadable/links.phtml      | 6 ++++--
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.php b/app/code/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.php
index b07b6e82bdc..fb92f2bc3ff 100644
--- a/app/code/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.php
+++ b/app/code/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.php
@@ -463,4 +463,13 @@ class Links extends \Magento\Backend\Block\Template
     {
         return $this->_storeManager->getStore($storeId)->getBaseCurrencyCode();
     }
+
+    /**
+     * @param null|string|bool|int|\Magento\Store\Model\Store $storeId $storeId
+     * @return string
+     */
+    public function getBaseCurrencySymbol($storeId)
+    {
+        return $this->_storeManager->getStore($storeId)->getBaseCurrency()->getCurrencySymbol();
+    }
 }
diff --git a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
index d5c4b6dca86..e9abaa7088b 100644
--- a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
+++ b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
@@ -107,8 +107,10 @@ require([
             '</td>'+
             <?php if ($block->getCanReadPrice() !== false) : ?>
                 '<td class="col-price">'+
-                    '<input type="text" id="downloadable_link_<%- data.id %>_price_value" class="input-text admin__control-text validate-number link-prices<?php if ($block->getCanEditPrice() === false) : ?> disabled<?php endif; ?>" name="downloadable[link][<%- data.id %>][price]" value="<%- data.price %>"<?php if ($block->getCanEditPrice() === false) : ?> disabled="disabled"<?php endif; ?> /> ' +
-                    '<div class="note">[<?php /* @escapeNotVerified */ echo $block->getBaseCurrencyCode($_product->getStoreId()) ?>]</div>' +
+                    '<div class="admin__control-addon">' +
+                        '<input type="text" id="downloadable_link_<%- data.id %>_price_value" class="input-text admin__control-text validate-number link-prices<?php if ($block->getCanEditPrice() === false) : ?> disabled<?php endif; ?>" name="downloadable[link][<%- data.id %>][price]" value="<%- data.price %>"<?php if ($block->getCanEditPrice() === false) : ?> disabled="disabled"<?php endif; ?> /> ' +
+                        '<label class="admin__addon-prefix"><span><?php /* @escapeNotVerified */ echo $block->getBaseCurrencySymbol($_product->getStoreId()) ?></span></label>' +
+                    '</div>' +
                     <?php if ($_product->getStoreId() && $block->getIsPriceWebsiteScope()) : ?>
                         '<div class="admin__field admin__field-option">'+
                             '<input type="checkbox" id="downloadable_link_<%- data.id %>_price" name="downloadable[link][<%- data.id %>][use_default_price]" value="1"<?php if ($block->getCanEditPrice() === false) : ?> disabled="disabled"<?php endif; ?> class="admin__control-checkbox" />'+
-- 
GitLab


From 89e1ef5125c04e6726e3056f8eda6792b82a59d9 Mon Sep 17 00:00:00 2001
From: Viktor Tymchynskyi <vtymchynskyi@ebay.com>
Date: Tue, 20 Oct 2015 12:46:06 +0300
Subject: [PATCH 088/370] MAGETWO-43503: Currency symbol is displayed outside
 "Price" input on "create Downloadable Product" Admin page

- Add escape html
---
 .../adminhtml/templates/product/edit/downloadable/links.phtml   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
index e9abaa7088b..cf43aa7d3f4 100644
--- a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
+++ b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
@@ -109,7 +109,7 @@ require([
                 '<td class="col-price">'+
                     '<div class="admin__control-addon">' +
                         '<input type="text" id="downloadable_link_<%- data.id %>_price_value" class="input-text admin__control-text validate-number link-prices<?php if ($block->getCanEditPrice() === false) : ?> disabled<?php endif; ?>" name="downloadable[link][<%- data.id %>][price]" value="<%- data.price %>"<?php if ($block->getCanEditPrice() === false) : ?> disabled="disabled"<?php endif; ?> /> ' +
-                        '<label class="admin__addon-prefix"><span><?php /* @escapeNotVerified */ echo $block->getBaseCurrencySymbol($_product->getStoreId()) ?></span></label>' +
+                        '<label class="admin__addon-prefix"><span><?php echo $block->escapeHtml($block->getBaseCurrencySymbol($_product->getStoreId())) ?></span></label>' +
                     '</div>' +
                     <?php if ($_product->getStoreId() && $block->getIsPriceWebsiteScope()) : ?>
                         '<div class="admin__field admin__field-option">'+
-- 
GitLab


From 028d6ae02f9ebd2f3bcb09407d6e26c8059f3140 Mon Sep 17 00:00:00 2001
From: Olga Matviienko <omatviienko@ebay.com>
Date: Tue, 20 Oct 2015 13:59:30 +0300
Subject: [PATCH 089/370] MAGETWO-42871: Storefront menu UI issues on mobile

---
 .../frontend/Magento/blank/web/css/source/_navigation.less     | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/app/design/frontend/Magento/blank/web/css/source/_navigation.less b/app/design/frontend/Magento/blank/web/css/source/_navigation.less
index 862e09dfdec..f4fee4d5d7d 100644
--- a/app/design/frontend/Magento/blank/web/css/source/_navigation.less
+++ b/app/design/frontend/Magento/blank/web/css/source/_navigation.less
@@ -146,6 +146,9 @@
                 font-weight: 700;
                 padding: .8rem @indent__base;
             }
+            .header.links {
+                border: 0;
+            }
         }
     }
 
-- 
GitLab


From 7c1a2f5b098372abf4898338e94f8fa1e05a9862 Mon Sep 17 00:00:00 2001
From: Vitalii Zabaznov <vzabaznov@ebay.com>
Date: Tue, 20 Oct 2015 14:16:11 +0300
Subject: [PATCH 090/370] MAGETWO-44109: Import Custom Options grid contains
 Downloadable product if Import Custom Options for Simple product

---
 .../Product/Edit/Tab/Options/Popup/Grid.php       | 15 ++++++++++++++-
 .../catalog/product/edit/options/option.phtml     |  1 +
 .../view/adminhtml/web/js/custom-options.js       |  2 +-
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Popup/Grid.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Popup/Grid.php
index 53bcc298732..e7aeff7affa 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Popup/Grid.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Popup/Grid.php
@@ -62,7 +62,20 @@ class Grid extends \Magento\Catalog\Block\Adminhtml\Product\Grid
     protected function _prepareCollection()
     {
         parent::_prepareCollection();
-        $this->getCollection()->addFieldToFilter('has_options', 1);
+
+        if (null !== $this->getRequest()->getParam('current_product_id')) {
+            $this->getCollection()->getSelect()->where(
+                'e.entity_id != ?', $this->getRequest()->getParam('current_product_id')
+            );
+        }
+
+        $this->getCollection()->getSelect()->distinct()->join(
+            ['opt' => $this->getCollection()->getTable('catalog_product_option')],
+            'opt.product_id = e.entity_id',
+            null
+        );
+
+        $this->_productFactory->create()->getMediaGalleryEntries();
 
         return $this;
     }
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options/option.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options/option.phtml
index ef38f34b168..f0baae3a2bd 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options/option.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options/option.phtml
@@ -97,6 +97,7 @@ jQuery(function ($) {
             'customOptionsUrl' => $block->getCustomOptionsUrl(),
             'isReadonly' => $block->isReadonly(),
             'itemCount' => $block->getItemCount(),
+            'currentProductId' => $block->getRequest()->getParam('id'),
         ]
     )?>);
     //adding data to templates
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js b/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
index 1b36e6ae0bf..69072252e41 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
@@ -179,7 +179,7 @@ define([
                     });
                     importContainer.load(
                         this.options.productGridUrl,
-                        {form_key: this.options.formKey},
+                        {form_key: this.options.formKey, current_product_id : this.options.currentProductId},
                         function () {
                             importContainer.modal('openModal');
                         }
-- 
GitLab


From 398d685772f2fe37534bc7356191284ad3d20170 Mon Sep 17 00:00:00 2001
From: Ievgen Sentiabov <isentiabov@ebay.com>
Date: Tue, 20 Oct 2015 14:21:42 +0300
Subject: [PATCH 091/370] MAGETWO-44113: Creating Ratings in the Frontend (not
 available after Magento installation)

 - Added cache skipping after rating entity saving
---
 app/code/Magento/Review/Model/Rating.php      | 16 ++++++++-
 .../Review/Test/Unit/Model/RatingTest.php     | 36 +++++++++++++++++++
 2 files changed, 51 insertions(+), 1 deletion(-)
 create mode 100644 app/code/Magento/Review/Test/Unit/Model/RatingTest.php

diff --git a/app/code/Magento/Review/Model/Rating.php b/app/code/Magento/Review/Model/Rating.php
index f9af9a9223e..b209b680c82 100644
--- a/app/code/Magento/Review/Model/Rating.php
+++ b/app/code/Magento/Review/Model/Rating.php
@@ -5,6 +5,9 @@
  */
 namespace Magento\Review\Model;
 
+use Magento\Framework\DataObject\IdentityInterface;
+use Magento\Store\Model\Store;
+
 /**
  * Rating model
  *
@@ -18,7 +21,7 @@ namespace Magento\Review\Model;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Rating extends \Magento\Framework\Model\AbstractModel
+class Rating extends \Magento\Framework\Model\AbstractModel implements IdentityInterface
 {
     /**
      * rating entity codes
@@ -161,4 +164,15 @@ class Rating extends \Magento\Framework\Model\AbstractModel
     {
         return $this->getResource()->getEntityIdByCode($entityCode);
     }
+
+    /**
+     * Return unique ID(s) for each object in system
+     *
+     * @return array
+     */
+    public function getIdentities()
+    {
+        // skip cache for all store
+        return [Store::CACHE_TAG];
+    }
 }
diff --git a/app/code/Magento/Review/Test/Unit/Model/RatingTest.php b/app/code/Magento/Review/Test/Unit/Model/RatingTest.php
new file mode 100644
index 00000000000..bf657b86a6b
--- /dev/null
+++ b/app/code/Magento/Review/Test/Unit/Model/RatingTest.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Review\Model;
+
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+use Magento\Store\Model\Store;
+use Magento\Review\Model\Rating;
+
+class RatingTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Review\Model\Rating
+     */
+    private $rating;
+
+    /**
+     * Init objects needed by tests
+     */
+    protected function setUp()
+    {
+        $helper = new ObjectManager($this);
+        $this->rating = $helper->getObject(Rating::class);
+    }
+
+    /**
+     * @covers \Magento\Review\Model\Rating::getIdentities()
+     * @return void
+     */
+    public function testGetIdentities()
+    {
+        static::assertEquals([Store::CACHE_TAG], $this->rating->getIdentities());
+    }
+}
-- 
GitLab


From ec65c015f3d9f8d617c54be8a63d9d1ecd644144 Mon Sep 17 00:00:00 2001
From: Michail Slabko <mslabko@ebay.com>
Date: Tue, 20 Oct 2015 14:36:58 +0300
Subject: [PATCH 092/370] MAGETWO-44114: Can't edit "Scope" in Product
 Attribute

---
 .../Adminhtml/Product/Attribute/Edit/Tab/Advanced.php  | 10 +++++++++-
 .../Product/Attribute/Edit/Tab/AdvancedTest.php        |  2 +-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Advanced.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Advanced.php
index dec89ab52ff..5ed9016a59f 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Advanced.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Advanced.php
@@ -31,12 +31,18 @@ class Advanced extends Generic
      */
     protected $_yesNo;
 
+    /**
+     * @var array
+     */
+    protected $disableScopeChangeList;
+
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Data\FormFactory $formFactory
      * @param Yesno $yesNo
      * @param Data $eavData
+     * @param array $disableScopeChangeList
      * @param array $data
      */
     public function __construct(
@@ -45,10 +51,12 @@ class Advanced extends Generic
         \Magento\Framework\Data\FormFactory $formFactory,
         Yesno $yesNo,
         Data $eavData,
+        array $disableScopeChangeList = ['sku'],
         array $data = []
     ) {
         $this->_yesNo = $yesNo;
         $this->_eavData = $eavData;
+        $this->disableScopeChangeList = $disableScopeChangeList;
         parent::__construct($context, $registry, $formFactory, $data);
     }
 
@@ -229,7 +237,7 @@ class Advanced extends Generic
         );
 
         $this->_eventManager->dispatch('product_attribute_form_build', ['form' => $form]);
-        if ($attributeObject->getId() && !$attributeObject->getIsUserDefined()) {
+        if (in_array($attributeObject->getAttributeCode(), $this->disableScopeChangeList)) {
             $form->getElement('is_global')->setDisabled(1);
         }
         $this->setForm($form);
diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Product/Attribute/Edit/Tab/AdvancedTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Product/Attribute/Edit/Tab/AdvancedTest.php
index a54834d4f56..7408df0ede1 100644
--- a/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Product/Attribute/Edit/Tab/AdvancedTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Product/Attribute/Edit/Tab/AdvancedTest.php
@@ -89,7 +89,7 @@ class AdvancedTest extends \PHPUnit_Framework_TestCase
         $this->localeDate->expects($this->any())->method('getDateFormat')->willReturn('mm/dd/yy');
         $entityType->expects($this->any())->method('getEntityTypeCode')->willReturn('entity_type_code');
         $this->eavData->expects($this->any())->method('getFrontendClasses')->willReturn([]);
-        $formElement->expects($this->exactly(3))->method('setDisabled')->willReturnSelf();
+        $formElement->expects($this->exactly(2))->method('setDisabled')->willReturnSelf();
         $this->yesNo->expects($this->any())->method('toOptionArray')->willReturn(['yes', 'no']);
         $this->filesystem->expects($this->any())->method('getDirectoryRead')->willReturn($directoryReadInterface);
         $directoryReadInterface->expects($this->any())->method('getRelativePath')->willReturn('relative_path');
-- 
GitLab


From 6591bf080749dc01568bc8605200b9f492a9200b Mon Sep 17 00:00:00 2001
From: Sergey Semenov <ssemenov@ebay.com>
Date: Tue, 20 Oct 2015 14:45:35 +0300
Subject: [PATCH 093/370] MAGETWO-39018: Wish list item image placeholder
 overlays link to wish list

---
 app/code/Magento/Wishlist/CustomerData/Wishlist.php | 1 +
 1 file changed, 1 insertion(+)

diff --git a/app/code/Magento/Wishlist/CustomerData/Wishlist.php b/app/code/Magento/Wishlist/CustomerData/Wishlist.php
index 0a9ceb2b66c..c937e334992 100644
--- a/app/code/Magento/Wishlist/CustomerData/Wishlist.php
+++ b/app/code/Magento/Wishlist/CustomerData/Wishlist.php
@@ -142,6 +142,7 @@ class Wishlist implements SectionSourceInterface
      *
      * @param \Magento\Catalog\Model\Product $product
      * @return \Magento\Catalog\Block\Product\Image
+     * @SuppressWarnings(PHPMD.NPathComplexity)
      */
     protected function getImageData($product)
     {
-- 
GitLab


From 5fe41a9590fe141696cee58c96e1c9d8618a86bd Mon Sep 17 00:00:00 2001
From: Ievgen Sentiabov <isentiabov@ebay.com>
Date: Tue, 20 Oct 2015 15:00:28 +0300
Subject: [PATCH 094/370] MAGETWO-44113: Creating Ratings in the Frontend (not
 available after Magento installation)

 - Fixed namespace
---
 app/code/Magento/Review/Test/Unit/Model/RatingTest.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Review/Test/Unit/Model/RatingTest.php b/app/code/Magento/Review/Test/Unit/Model/RatingTest.php
index bf657b86a6b..64bf2e99b7d 100644
--- a/app/code/Magento/Review/Test/Unit/Model/RatingTest.php
+++ b/app/code/Magento/Review/Test/Unit/Model/RatingTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Review\Model;
+namespace Magento\Review\Test\Unit\Model;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 use Magento\Store\Model\Store;
-- 
GitLab


From d38bb2ac935fdbb60386092b2252bee0b06ed53a Mon Sep 17 00:00:00 2001
From: Bohdan Korablov <bkorablov@ebay.com>
Date: Tue, 20 Oct 2015 15:32:46 +0300
Subject: [PATCH 095/370] MAGETWO-44116: JS bundling file size exceeded

---
 lib/internal/Magento/Framework/View/Asset/Bundle.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/internal/Magento/Framework/View/Asset/Bundle.php b/lib/internal/Magento/Framework/View/Asset/Bundle.php
index 380d87d3115..d19d667d612 100644
--- a/lib/internal/Magento/Framework/View/Asset/Bundle.php
+++ b/lib/internal/Magento/Framework/View/Asset/Bundle.php
@@ -150,7 +150,7 @@ class Bundle
      */
     protected function getAssetSize(LocalInterface $asset)
     {
-        return mb_strlen(utf8_encode($asset->getContent()), 'utf-8') / 1024;
+        return mb_strlen(json_encode(utf8_encode($asset->getContent()), JSON_UNESCAPED_SLASHES), 'utf-8') / 1024;
     }
 
     /**
-- 
GitLab


From ddf543aba443c336be95db583b8e521d5067e575 Mon Sep 17 00:00:00 2001
From: Olga Lytvynenko <olytvynenko@ebay.com>
Date: Tue, 20 Oct 2015 16:21:35 +0300
Subject: [PATCH 096/370] MAGETWO-44188: "Thumbnails" section is displayed too
 close to "Reviews" tab on "view Product" Storefront page

---
 .../Magento/blank/Magento_Catalog/web/css/source/_module.less | 4 ++++
 .../Magento/luma/Magento_Catalog/web/css/source/_module.less  | 4 ++++
 2 files changed, 8 insertions(+)

diff --git a/app/design/frontend/Magento/blank/Magento_Catalog/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_Catalog/web/css/source/_module.less
index d65fc3090a9..67d9400be23 100644
--- a/app/design/frontend/Magento/blank/Magento_Catalog/web/css/source/_module.less
+++ b/app/design/frontend/Magento/blank/Magento_Catalog/web/css/source/_module.less
@@ -558,9 +558,12 @@
     .product-info-main {
         float: right;
     }
+
     .product.media {
         float: left;
+        margin-bottom: @indent__m;
     }
+
     .page-layout-1column {
         .product-info-main {
             width: 40%;
@@ -569,6 +572,7 @@
             width: 57%;
         }
     }
+
     .page-layout-2columns-left,
     .page-layout-2columns-right,
     .page-layout-3columns {
diff --git a/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/_module.less
index e322d35fe9c..555101ccdbd 100644
--- a/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/_module.less
+++ b/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/_module.less
@@ -579,9 +579,12 @@
     .product-info-main {
         float: right;
     }
+
     .product.media {
         float: left;
+        margin-bottom: @indent__m;
     }
+
     .page-layout-1column {
         .product-info-main {
             width: 40%;
@@ -590,6 +593,7 @@
             width: 57%;
         }
     }
+
     .page-layout-2columns-left,
     .page-layout-2columns-right,
     .page-layout-3columns {
-- 
GitLab


From 39a287a4bf0472a391cca358e4397e13eae0b9dd Mon Sep 17 00:00:00 2001
From: Mikalai_Shostka <mikalai_shostka@epam.com>
Date: Tue, 20 Oct 2015 16:30:37 +0300
Subject: [PATCH 097/370] MAGETWO-44332: After click to add video button
 appears alert message

Fix alert
---
 .../Block/Adminhtml/Product/Edit/NewVideo.php | 58 +++++++++++++++++--
 .../ProductVideo/etc/adminhtml/system.xml     |  4 +-
 .../adminhtml/web/js/get-video-information.js |  7 ---
 .../web/css/source/_module.less               |  3 +
 4 files changed, 59 insertions(+), 13 deletions(-)

diff --git a/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php b/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
index fbc2132db49..82c7ac0de8a 100644
--- a/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
+++ b/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
@@ -12,11 +12,21 @@ use Magento\Framework\Data\Form\Element\Fieldset;
  */
 class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
 {
+    /**
+     * Anchor is product video
+     */
+    const PATH_ANCHOR_PRODUCT_VIDEO = 'catalog_product_video-link';
+
     /**
      * @var \Magento\ProductVideo\Helper\Media
      */
     protected $mediaHelper;
 
+    /**
+     * @var \Magento\Framework\UrlInterface
+     */
+    protected $_urlBuilder;
+
     /**
      * @var \Magento\Framework\Json\EncoderInterface
      */
@@ -25,6 +35,7 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\ProductVideo\Helper\Media $mediaHelper
+     * @param \Magento\Framework\UrlInterface $urlBuilder
      * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Data\FormFactory $formFactory
@@ -32,14 +43,16 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
+        \Magento\ProductVideo\Helper\Media $mediaHelper,
+        \Magento\Framework\UrlInterface $urlBuilder,
+        \Magento\Framework\Json\EncoderInterface $jsonEncoder,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Data\FormFactory $formFactory,
-        \Magento\Framework\Json\EncoderInterface $jsonEncoder,
-        \Magento\ProductVideo\Helper\Media $mediaHelper,
         array $data = []
     ) {
         parent::__construct($context, $registry, $formFactory, $data);
         $this->mediaHelper = $mediaHelper;
+        $this->_urlBuilder = $urlBuilder;
         $this->jsonEncoder = $jsonEncoder;
         $this->setUseContainer(true);
     }
@@ -104,7 +117,8 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
                 'title' => __('Url'),
                 'required' => true,
                 'name' => 'video_url',
-                'note' => 'Youtube or Vimeo supported',
+                'note' => $this->getNoteVideoUrl(),
+
             ]
         );
 
@@ -158,7 +172,7 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
                 'label' => '',
                 'title' => __('Get Video Information'),
                 'name' => 'new_video_get',
-                'value' => 'Get Video Information',
+                'value' => __('Get Video Information'),
                 'class' => 'action-default'
             ]
         );
@@ -248,4 +262,40 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
         }
         return $this;
     }
+
+    /**
+     * Get note for video url
+     *
+     * @return \Magento\Framework\Phrase
+     */
+    protected function getNoteVideoUrl()
+    {
+        $result = __('Youtube or Vimeo supported');
+        if (is_null($this->mediaHelper->getYouTubeApiKey())) {
+            $result = __(
+                '<div class="note_youtube_api_key">'
+                . 'Vimeo supported. '
+                . '<br>In order to add YouTube video please <a href="%1">add YouTube API key</a> in video configuration settings.'
+                . '</div>',
+                $this->getConfigApiKeyUrl()
+            );
+        }
+        return $result;
+    }
+
+    /**
+     * Get url for config params
+     *
+     * @return string
+     */
+    protected function getConfigApiKeyUrl()
+    {
+        return $this->_urlBuilder->getUrl(
+            'adminhtml/system_config/edit',
+            [
+                'section' => 'catalog',
+                '_fragment' => self::PATH_ANCHOR_PRODUCT_VIDEO
+            ]
+        );
+    }
 }
diff --git a/app/code/Magento/ProductVideo/etc/adminhtml/system.xml b/app/code/Magento/ProductVideo/etc/adminhtml/system.xml
index f475ab5b70d..5d828ad2cdb 100644
--- a/app/code/Magento/ProductVideo/etc/adminhtml/system.xml
+++ b/app/code/Magento/ProductVideo/etc/adminhtml/system.xml
@@ -8,9 +8,9 @@
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
     <system>
         <section id="catalog">
-            <group id="product_video" translate="label" type="text" sortOrder="350" showInDefault="1" showInWebsite="1" showInStore="1">
+            <group id="product_video" translate="label" type="text" sortOrder="350" showInDefault="1" showInWebsite="1" showInStore="0">
                 <label>Product Video</label>
-                <field id="youtube_api_key" translate="label" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
+                <field id="youtube_api_key" translate="label" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="0">
                     <label>YouTube API key</label>
                 </field>
             </group>
diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
index 52171f1537a..136a6dde21c 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
+++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
@@ -323,8 +323,6 @@ require([
         $.widget('mage.videoData', {
             options: {
                 youtubeKey: '',
-                noKeyErrorTxt: 'You have not entered youtube API key. ' +
-                'No information about youtube video will be retrieved.',
                 eventSource: '' //where is data going from - focus out or click on button
             },
 
@@ -340,11 +338,6 @@ require([
              * @private
              */
             _init: function () {
-                if (!this.options.youtubeKey && this.options.eventSource === 'click') {
-                    alert({
-                        content: this.options.noKeyErrorTxt
-                    });
-                }
                 this._onRequestHandler();
             },
 
diff --git a/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less b/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
index 7f4e8a590ac..032185bc423 100644
--- a/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
+++ b/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
@@ -234,3 +234,6 @@
 .image.base-image:hover .image-label {
     display: none;
 }
+.note .note_youtube_api_key {
+    background-color: #fffbbb;
+}
-- 
GitLab


From ff0c6088f17cb8127f59eef9a87d41e1ff148981 Mon Sep 17 00:00:00 2001
From: Sergey Ivashchenko <sivashchenko@ebay.com>
Date: Tue, 20 Oct 2015 16:33:53 +0300
Subject: [PATCH 098/370] MAGETWO-44155: [GITHUB] Inconsistency of the
 Attribute set / Product teamplace naming

---
 .../Adminhtml/Product/Attribute/Edit.php      |  4 ++--
 .../Adminhtml/Product/Attribute/Set/Main.php  |  4 ++--
 .../Product/Attribute/Set/Main/Formset.php    |  2 +-
 .../Product/Attribute/Set/Toolbar/Add.php     |  2 +-
 .../Product/Attribute/Set/Toolbar/Main.php    |  4 ++--
 .../Adminhtml/Product/Edit/AttributeSet.php   |  2 +-
 .../Adminhtml/Product/Edit/Tab/Crosssell.php  |  2 +-
 .../Adminhtml/Product/Edit/Tab/Related.php    |  2 +-
 .../Adminhtml/Product/Edit/Tab/Upsell.php     |  2 +-
 .../Catalog/Block/Adminhtml/Product/Grid.php  |  2 +-
 .../Block/Product/TemplateSelector.php        |  2 +-
 .../Product/AddAttributeToTemplate.php        |  2 +-
 .../Controller/Adminhtml/Product/Set/Add.php  |  2 +-
 .../Adminhtml/Product/Set/Delete.php          |  2 +-
 .../Controller/Adminhtml/Product/Set/Edit.php |  2 +-
 .../Adminhtml/Product/Set/Index.php           |  4 ++--
 .../Controller/Adminhtml/Product/Set/Save.php |  6 +++---
 .../Product/SuggestProductTemplates.php       |  4 ++--
 .../Catalog/Helper/Product/Flat/Indexer.php   |  2 +-
 .../Model/Product/AttributeSet/Build.php      |  2 +-
 .../Catalog/Model/ResourceModel/Product.php   |  2 +-
 .../Magento/Catalog/Setup/InstallSchema.php   |  2 +-
 .../Product/Media/AttributeManagementTest.php |  2 +-
 .../Unit/Model/ResourceModel/ProductTest.php  |  2 +-
 app/code/Magento/Catalog/etc/acl.xml          |  2 +-
 .../Magento/Catalog/etc/adminhtml/menu.xml    |  2 +-
 app/code/Magento/Catalog/i18n/de_DE.csv       |  4 ++--
 app/code/Magento/Catalog/i18n/en_US.csv       |  4 ++--
 app/code/Magento/Catalog/i18n/es_ES.csv       |  4 ++--
 app/code/Magento/Catalog/i18n/fr_FR.csv       |  4 ++--
 app/code/Magento/Catalog/i18n/nl_NL.csv       |  4 ++--
 app/code/Magento/Catalog/i18n/pt_BR.csv       |  4 ++--
 app/code/Magento/Catalog/i18n/zh_Hans_CN.csv  |  4 ++--
 .../catalog/product/attribute/set/main.phtml  |  4 ++--
 .../Model/Import/Product.php                  |  4 ++--
 .../Product/Edit/ProductTemplate/Form.php     | 12 +++++------
 .../adminhtml/layout/catalog_product_new.xml  |  2 +-
 .../catalog/product/attribute/set/js.phtml    |  4 ++--
 .../affected-attribute-set-selector/js.phtml  |  2 +-
 .../Condition/Product/AbstractProduct.php     |  2 +-
 app/code/Magento/Weee/README.md               |  2 +-
 .../web/css/source/_module.less               |  2 +-
 .../Product/Attribute/Set/GridPageActions.php |  2 +-
 ...sertAddedProductAttributeOnProductForm.php | 14 ++++++-------
 ...tAttributeAbsenceInSearchOnProductForm.php |  4 ++--
 ...roductAttributeAbsenceInTemplateGroups.php | 18 ++++++++---------
 ...AttributeAbsenceInUnassignedAttributes.php | 18 ++++++++---------
 .../AssertProductDuplicatedInGrid.php         |  2 +-
 .../Constraint/AssertProductTemplateForm.php  | 16 +++++++--------
 ...ssertProductTemplateGroupOnProductForm.php | 10 +++++-----
 .../AssertProductTemplateInGrid.php           | 14 ++++++-------
 .../AssertProductTemplateNotInGrid.php        | 20 +++++++++----------
 .../AssertProductTemplateOnProductForm.php    | 12 +++++------
 ...ertProductTemplateSuccessDeleteMessage.php | 12 +++++------
 ...ssertProductTemplateSuccessSaveMessage.php | 12 +++++------
 .../Test/Fixture/Product/AttributeSetId.php   |  2 +-
 .../Test/TestCase/NavigateMenuTest.xml        |  4 ++--
 .../CreateAttributeSetEntityTest.php          | 10 +++++-----
 .../CreateAttributeSetEntityTest.xml          | 12 +++++------
 .../CreateProductAttributeEntityTest.xml      | 18 ++++++++---------
 ...AssignedToTemplateProductAttributeTest.php | 12 +++++------
 ...AssignedToTemplateProductAttributeTest.xml |  8 ++++----
 .../DeleteAttributeSetTest.php                | 16 +++++++--------
 .../DeleteAttributeSetTest.xml                | 10 +++++-----
 .../UpdateAttributeSetTest.php                |  8 ++++----
 .../UpdateAttributeSetTest.xml                | 14 ++++++-------
 .../UpdateProductAttributeEntityTest.php      |  8 ++++----
 .../UpdateProductAttributeEntityTest.xml      |  4 ++--
 .../AddAttributeToProductTemplateStep.php     | 14 ++++++-------
 .../TestStep/CreateProductTemplateStep.php    | 14 ++++++-------
 .../Test/TestStep/SaveProductTemplateStep.php |  2 +-
 .../tests/app/Magento/Catalog/Test/etc/di.xml | 12 +++++------
 .../app/Magento/Catalog/Test/etc/testcase.xml |  8 ++++----
 ...ductAttributeAbsenceInVariationsSearch.php |  4 ++--
 .../TestCase/CreateSalesRuleEntityTest.xml    |  2 +-
 .../Test/TestCase/CreateTaxWithFptTest.php    | 18 ++++++++---------
 .../Adminhtml/Product/Set/DeleteTest.php      |  2 +-
 .../Test/Legacy/_files/obsolete_classes.php   |  4 ++--
 78 files changed, 244 insertions(+), 244 deletions(-)

diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit.php
index 96d204f7400..29f7d7227a2 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit.php
@@ -54,9 +54,9 @@ class Edit extends \Magento\Backend\Block\Widget\Form\Container
                 $this->addButton(
                     'save_in_new_set',
                     [
-                        'label' => __('Save in New Product Template'),
+                        'label' => __('Save in New Attribute Set'),
                         'class' => 'save',
-                        'onclick' => 'saveAttributeInNewSet(\'' . __('Enter Name for New Product Template') . '\')'
+                        'onclick' => 'saveAttributeInNewSet(\'' . __('Enter Name for New Attribute Set') . '\')'
                     ],
                     100
                 );
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Main.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Main.php
index 34025f7fc5b..9215bdb305f 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Main.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Main.php
@@ -129,7 +129,7 @@ class Main extends \Magento\Backend\Block\Template
                     'label' => __('Delete'),
                     'onclick' => 'deleteConfirm(\'' . $this->escapeJsQuote(
                         __(
-                            'You are about to delete all products in this product template. '
+                            'You are about to delete all products in this attribute set. '
                             . 'Are you sure you want to do that?'
                         )
                     ) . '\', \'' . $this->getUrl(
@@ -187,7 +187,7 @@ class Main extends \Magento\Backend\Block\Template
      */
     protected function _getHeader()
     {
-        return __("Edit Product Template '%1'", $this->_getAttributeSet()->getAttributeSetName());
+        return __("Edit Attribute Set '%1'", $this->_getAttributeSet()->getAttributeSetName());
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Main/Formset.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Main/Formset.php
index ab4bcab4dbf..ecfdb19e430 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Main/Formset.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Main/Formset.php
@@ -43,7 +43,7 @@ class Formset extends \Magento\Backend\Block\Widget\Form\Generic
 
         /** @var \Magento\Framework\Data\Form $form */
         $form = $this->_formFactory->create();
-        $fieldset = $form->addFieldset('set_name', ['legend' => __('Edit Product Template Name')]);
+        $fieldset = $form->addFieldset('set_name', ['legend' => __('Edit Attribute Set Name')]);
         $fieldset->addField(
             'attribute_set_name',
             'text',
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Toolbar/Add.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Toolbar/Add.php
index 42434c7094c..f4f6dc467ca 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Toolbar/Add.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Toolbar/Add.php
@@ -57,7 +57,7 @@ class Add extends \Magento\Backend\Block\Template
      */
     protected function _getHeader()
     {
-        return __('Add New Product Template');
+        return __('Add New Attribute Set');
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Toolbar/Main.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Toolbar/Main.php
index cedf419205b..a04f09439e1 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Toolbar/Main.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Toolbar/Main.php
@@ -27,7 +27,7 @@ class Main extends \Magento\Backend\Block\Template
             'addButton',
             'Magento\Backend\Block\Widget\Button',
             [
-                'label' => __('Add Product Template'),
+                'label' => __('Add Attribute Set'),
                 'onclick' => 'setLocation(\'' . $this->getUrl('catalog/*/add') . '\')',
                 'class' => 'add primary add-set'
             ]
@@ -48,7 +48,7 @@ class Main extends \Magento\Backend\Block\Template
      */
     protected function _getHeader()
     {
-        return __('Product Templates');
+        return __('Attribute Sets');
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/AttributeSet.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/AttributeSet.php
index 5b8bb9a77fa..df7a36b961a 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/AttributeSet.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/AttributeSet.php
@@ -42,7 +42,7 @@ class AttributeSet extends \Magento\Backend\Block\Widget\Form
     public function getSelectorOptions()
     {
         return [
-            'source' => $this->getUrl('catalog/product/suggestProductTemplates'),
+            'source' => $this->getUrl('catalog/product/suggestAttributeSets'),
             'className' => 'category-select',
             'showRecent' => true,
             'storageKey' => 'product-template-key',
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Crosssell.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Crosssell.php
index 8f6c08bb52b..09fbbd9b2a2 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Crosssell.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Crosssell.php
@@ -249,7 +249,7 @@ class Crosssell extends Extended
         $this->addColumn(
             'set_name',
             [
-                'header' => __('Product Template'),
+                'header' => __('Attribute Set'),
                 'index' => 'attribute_set_id',
                 'type' => 'options',
                 'options' => $sets,
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Related.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Related.php
index 0e87290ec27..af104d601ac 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Related.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Related.php
@@ -243,7 +243,7 @@ class Related extends Extended
         $this->addColumn(
             'set_name',
             [
-                'header' => __('Product Template'),
+                'header' => __('Attribute Set'),
                 'index' => 'attribute_set_id',
                 'type' => 'options',
                 'options' => $sets,
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Upsell.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Upsell.php
index cad5aafe5d0..2ea563292e6 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Upsell.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Upsell.php
@@ -239,7 +239,7 @@ class Upsell extends \Magento\Backend\Block\Widget\Grid\Extended
         $this->addColumn(
             'set_name',
             [
-                'header' => __('Product Template'),
+                'header' => __('Attribute Set'),
                 'index' => 'attribute_set_id',
                 'type' => 'options',
                 'options' => $sets,
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php
index e6f12259918..e426c08e70a 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php
@@ -263,7 +263,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
         $this->addColumn(
             'set_name',
             [
-                'header' => __('Product Template'),
+                'header' => __('Attribute Set'),
                 'index' => 'attribute_set_id',
                 'type' => 'options',
                 'options' => $sets,
diff --git a/app/code/Magento/Catalog/Block/Product/TemplateSelector.php b/app/code/Magento/Catalog/Block/Product/TemplateSelector.php
index 0fa415acf08..e2cb3d356a6 100644
--- a/app/code/Magento/Catalog/Block/Product/TemplateSelector.php
+++ b/app/code/Magento/Catalog/Block/Product/TemplateSelector.php
@@ -54,7 +54,7 @@ class TemplateSelector extends \Magento\Framework\View\Element\Template
     }
 
     /**
-     * Retrieve list of product templates with search part contained in label
+     * Retrieve list of attribute sets with search part contained in label
      *
      * @param string $labelPart
      * @return array
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/AddAttributeToTemplate.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/AddAttributeToTemplate.php
index 7d337411b0a..26fea5b4039 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/AddAttributeToTemplate.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/AddAttributeToTemplate.php
@@ -27,7 +27,7 @@ class AddAttributeToTemplate extends \Magento\Catalog\Controller\Adminhtml\Produ
         $this->resultJsonFactory = $resultJsonFactory;
     }
     /**
-     * Add attribute to product template
+     * Add attribute to attribute set
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Add.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Add.php
index 81f61ec8362..7e4bee7a769 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Add.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Add.php
@@ -37,7 +37,7 @@ class Add extends \Magento\Catalog\Controller\Adminhtml\Product\Set
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
         $resultPage->setActiveMenu('Magento_Catalog::catalog_attributes_sets');
-        $resultPage->getConfig()->getTitle()->prepend(__('New Product Template'));
+        $resultPage->getConfig()->getTitle()->prepend(__('New Attribute Set'));
         $resultPage->addContent(
             $resultPage->getLayout()->createBlock('Magento\Catalog\Block\Adminhtml\Product\Attribute\Set\Toolbar\Add')
         );
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Delete.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Delete.php
index 9849dc68847..9585bce699f 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Delete.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Delete.php
@@ -36,7 +36,7 @@ class Delete extends \Magento\Catalog\Controller\Adminhtml\Product\Set
         $resultRedirect = $this->resultRedirectFactory->create();
         try {
             $this->attributeSetRepository->deleteById($setId);
-            $this->messageManager->addSuccess(__('The product template has been removed.'));
+            $this->messageManager->addSuccess(__('The attribute set has been removed.'));
             $resultRedirect->setPath('catalog/*/');
         } catch (\Exception $e) {
             $this->messageManager->addError(__('We can\'t delete this set right now.'));
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Edit.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Edit.php
index d40982a5d56..8f7dafbf288 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Edit.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Edit.php
@@ -45,7 +45,7 @@ class Edit extends \Magento\Catalog\Controller\Adminhtml\Product\Set
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
         $resultPage->setActiveMenu('Magento_Catalog::catalog_attributes_sets');
-        $resultPage->getConfig()->getTitle()->prepend(__('Product Templates'));
+        $resultPage->getConfig()->getTitle()->prepend(__('Attribute Sets'));
         $resultPage->getConfig()->getTitle()->prepend(
             $attributeSet->getId() ? $attributeSet->getAttributeSetName() : __('New Set')
         );
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Index.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Index.php
index 7b9edb21c7e..2e1e1a4b642 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Index.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Index.php
@@ -37,9 +37,9 @@ class Index extends \Magento\Catalog\Controller\Adminhtml\Product\Set
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
         $resultPage->setActiveMenu('Magento_Catalog::catalog_attributes_sets');
-        $resultPage->getConfig()->getTitle()->prepend(__('Product Templates'));
+        $resultPage->getConfig()->getTitle()->prepend(__('Attribute Sets'));
         $resultPage->addBreadcrumb(__('Catalog'), __('Catalog'));
-        $resultPage->addBreadcrumb(__('Manage Product Templates'), __('Product Templates'));
+        $resultPage->addBreadcrumb(__('Manage Attribute Sets'), __('Attribute Sets'));
         return $resultPage;
     }
 }
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Save.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Save.php
index 5870190db02..480a079d53d 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Save.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Save.php
@@ -82,7 +82,7 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Set
                 }
                 if (!$model->getId()) {
                     throw new \Magento\Framework\Exception\LocalizedException(
-                        __('This product template no longer exists.')
+                        __('This attribute set no longer exists.')
                     );
                 }
                 $data = $this->_objectManager->get('Magento\Framework\Json\Helper\Data')
@@ -100,12 +100,12 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Set
                 $model->initFromSkeleton($this->getRequest()->getParam('skeleton_set'));
             }
             $model->save();
-            $this->messageManager->addSuccess(__('You saved the product template.'));
+            $this->messageManager->addSuccess(__('You saved the attribute set.'));
         } catch (\Magento\Framework\Exception\LocalizedException $e) {
             $this->messageManager->addError($e->getMessage());
             $hasError = true;
         } catch (\Exception $e) {
-            $this->messageManager->addException($e, __('Something went wrong while saving the product template.'));
+            $this->messageManager->addException($e, __('Something went wrong while saving the attribute set.'));
             $hasError = true;
         }
 
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/SuggestProductTemplates.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/SuggestProductTemplates.php
index d28b72799e7..456a579c619 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/SuggestProductTemplates.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/SuggestProductTemplates.php
@@ -6,7 +6,7 @@
  */
 namespace Magento\Catalog\Controller\Adminhtml\Product;
 
-class SuggestProductTemplates extends \Magento\Backend\App\Action
+class SuggestAttributeSets extends \Magento\Backend\App\Action
 {
     /**
      * @var \Magento\Framework\Controller\Result\JsonFactory
@@ -34,7 +34,7 @@ class SuggestProductTemplates extends \Magento\Backend\App\Action
     }
 
     /**
-     * Action for product template selector
+     * Action for attribute set selector
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
diff --git a/app/code/Magento/Catalog/Helper/Product/Flat/Indexer.php b/app/code/Magento/Catalog/Helper/Product/Flat/Indexer.php
index a54b13b3d6f..b88dac52725 100644
--- a/app/code/Magento/Catalog/Helper/Product/Flat/Indexer.php
+++ b/app/code/Magento/Catalog/Helper/Product/Flat/Indexer.php
@@ -204,7 +204,7 @@ class Indexer extends \Magento\Framework\App\Helper\AbstractHelper
             'unsigned' => true,
             'nullable' => false,
             'default' => '0',
-            'comment' => 'Product Template ID',
+            'comment' => 'Attribute Set ID',
         ];
         $columns['type_id'] = [
             'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
diff --git a/app/code/Magento/Catalog/Model/Product/AttributeSet/Build.php b/app/code/Magento/Catalog/Model/Product/AttributeSet/Build.php
index 7c5be52e6d7..a70ae163575 100644
--- a/app/code/Magento/Catalog/Model/Product/AttributeSet/Build.php
+++ b/app/code/Magento/Catalog/Model/Product/AttributeSet/Build.php
@@ -79,7 +79,7 @@ class Build
         $attributeSet = $this->attributeSetFactory->create();
         $attributeSet->setEntityTypeId($this->entityTypeId)->load($this->name, 'attribute_set_name');
         if ($attributeSet->getId()) {
-            throw new AlreadyExistsException(__('Product Template already exists.'));
+            throw new AlreadyExistsException(__('Attribute Set already exists.'));
         }
 
         $attributeSet->setAttributeSetName($this->name)->validate();
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product.php b/app/code/Magento/Catalog/Model/ResourceModel/Product.php
index b4d5298035d..130cd771773 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product.php
@@ -656,7 +656,7 @@ class Product extends AbstractResource
         $entityType = $this->typeFactory->create()->loadByCode(\Magento\Catalog\Model\Product::ENTITY);
         $attributeSet = $this->setFactory->create()->load($object->getAttributeSetId());
         if ($attributeSet->getEntityTypeId() != $entityType->getId()) {
-            return ['attribute_set' => 'Invalid product template entity type'];
+            return ['attribute_set' => 'Invalid attribute set entity type'];
         }
 
         return parent::validate($object);
diff --git a/app/code/Magento/Catalog/Setup/InstallSchema.php b/app/code/Magento/Catalog/Setup/InstallSchema.php
index c507f35db66..927dd2596cb 100644
--- a/app/code/Magento/Catalog/Setup/InstallSchema.php
+++ b/app/code/Magento/Catalog/Setup/InstallSchema.php
@@ -42,7 +42,7 @@ class InstallSchema implements InstallSchemaInterface
                 \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
                 null,
                 ['unsigned' => true, 'nullable' => false, 'default' => '0'],
-                'Product Template ID'
+                'Attribute Set ID'
             )
             ->addColumn(
                 'type_id',
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/Media/AttributeManagementTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/Media/AttributeManagementTest.php
index 3e8a85a7716..cc65bb7803b 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/Media/AttributeManagementTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/Media/AttributeManagementTest.php
@@ -58,7 +58,7 @@ class AttributeManagementTest extends \PHPUnit_Framework_TestCase
 
     public function testGetList()
     {
-        $attributeSetName = 'Default Product Template';
+        $attributeSetName = 'Default Attribute Set';
         $expectedResult = [
             $this->getMock('\Magento\Catalog\Api\Data\ProductAttributeInterface'),
         ];
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/ProductTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/ProductTest.php
index 9967344b70e..d3c87922741 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/ProductTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/ProductTest.php
@@ -56,7 +56,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
     public function testValidateWrongAttributeSet()
     {
         $productTypeId = 4;
-        $expectedErrorMessage = ['attribute_set' => 'Invalid product template entity type'];
+        $expectedErrorMessage = ['attribute_set' => 'Invalid attribute set entity type'];
 
         $productMock = $this->getMock(
             '\Magento\Framework\DataObject',
diff --git a/app/code/Magento/Catalog/etc/acl.xml b/app/code/Magento/Catalog/etc/acl.xml
index 0811d139312..0fc34da2584 100644
--- a/app/code/Magento/Catalog/etc/acl.xml
+++ b/app/code/Magento/Catalog/etc/acl.xml
@@ -24,7 +24,7 @@
                     <resource id="Magento_Backend::stores_attributes">
                         <resource id="Magento_Catalog::attributes_attributes" title="Product" sortOrder="30" />
                         <resource id="Magento_Catalog::update_attributes" title="Update Attributes" sortOrder="35" />
-                        <resource id="Magento_Catalog::sets" title="Product Template" sortOrder="40"/>
+                        <resource id="Magento_Catalog::sets" title="Attribute Set" sortOrder="40"/>
                     </resource>
                 </resource>
             </resource>
diff --git a/app/code/Magento/Catalog/etc/adminhtml/menu.xml b/app/code/Magento/Catalog/etc/adminhtml/menu.xml
index 0d9783b0fea..53db61bd3a1 100644
--- a/app/code/Magento/Catalog/etc/adminhtml/menu.xml
+++ b/app/code/Magento/Catalog/etc/adminhtml/menu.xml
@@ -11,7 +11,7 @@
         <add id="Magento_Catalog::catalog_products" title="Catalog" module="Magento_Catalog" sortOrder="10" parent="Magento_Catalog::inventory" action="catalog/product/" resource="Magento_Catalog::products"/>
         <add id="Magento_Catalog::catalog_categories" title="Categories" module="Magento_Catalog" sortOrder="20" parent="Magento_Catalog::inventory" action="catalog/category/" resource="Magento_Catalog::categories"/>
         <add id="Magento_Catalog::catalog_attributes_attributes" title="Product" module="Magento_Catalog" sortOrder="30" parent="Magento_Backend::stores_attributes" action="catalog/product_attribute/" resource="Magento_Catalog::attributes_attributes"/>
-        <add id="Magento_Catalog::catalog_attributes_sets" title="Product Template" module="Magento_Catalog" sortOrder="40" parent="Magento_Backend::stores_attributes" action="catalog/product_set/" resource="Magento_Catalog::sets"/>
+        <add id="Magento_Catalog::catalog_attributes_sets" title="Attribute Set" module="Magento_Catalog" sortOrder="40" parent="Magento_Backend::stores_attributes" action="catalog/product_set/" resource="Magento_Catalog::sets"/>
 
         <add id="Magento_Catalog::inventory" title="Inventory" module="Magento_Catalog" sortOrder="10" parent="Magento_Catalog::catalog" dependsOnModule="Magento_Catalog" resource="Magento_Catalog::catalog"/>
     </menu>
diff --git a/app/code/Magento/Catalog/i18n/de_DE.csv b/app/code/Magento/Catalog/i18n/de_DE.csv
index ecbd2cb0211..835c5a2fa1b 100644
--- a/app/code/Magento/Catalog/i18n/de_DE.csv
+++ b/app/code/Magento/Catalog/i18n/de_DE.csv
@@ -160,7 +160,7 @@ Empty,Leer
 "Based On","Basierend auf"
 "Add New Attribute Set","Neuer Eigenschaftensatz hinzufügen"
 "Add New Set","Neuen Satz hinzufügen"
-"Product Templates","Product Templates"
+"Attribute Sets","Attribute Sets"
 "Close Window","Fenster Schließen"
 "New Product","Neues Produkt"
 "Save & Edit","Save & Edit"
@@ -280,7 +280,7 @@ Categories,Kategorien
 "This attribute set no longer exists.","Dieses Eigenschaftenset existiert nicht mehr."
 "You saved the attribute set.","You saved the attribute set."
 "An error occurred while saving the attribute set.","Beim Speichern des Eigenschaftensatzes ist ein Fehler aufgetreten."
-"New Product Template","New Product Template"
+"New Attribute Set","New Attribute Set"
 "The attribute set has been removed.","The attribute set has been removed."
 "An error occurred while deleting this set.","An error occurred while deleting this set."
 "Search Terms","Search Terms"
diff --git a/app/code/Magento/Catalog/i18n/en_US.csv b/app/code/Magento/Catalog/i18n/en_US.csv
index 2cfe7083932..e6583169c3b 100644
--- a/app/code/Magento/Catalog/i18n/en_US.csv
+++ b/app/code/Magento/Catalog/i18n/en_US.csv
@@ -160,7 +160,7 @@ Empty,Empty
 "Based On","Based On"
 "Add New Attribute Set","Add New Attribute Set"
 "Add New Set","Add New Set"
-"Product Templates","Product Templates"
+"Attribute Sets","Attribute Sets"
 "Close Window","Close Window"
 "New Product","New Product"
 "Save & Edit","Save & Edit"
@@ -280,7 +280,7 @@ Categories,Categories
 "This attribute set no longer exists.","This attribute set no longer exists."
 "You saved the attribute set.","You saved the attribute set."
 "An error occurred while saving the attribute set.","An error occurred while saving the attribute set."
-"New Product Template","New Product Template"
+"New Attribute Set","New Attribute Set"
 "The attribute set has been removed.","The attribute set has been removed."
 "An error occurred while deleting this set.","An error occurred while deleting this set."
 "Search Terms","Search Terms"
diff --git a/app/code/Magento/Catalog/i18n/es_ES.csv b/app/code/Magento/Catalog/i18n/es_ES.csv
index 83b48a5ad10..2c45038e94f 100644
--- a/app/code/Magento/Catalog/i18n/es_ES.csv
+++ b/app/code/Magento/Catalog/i18n/es_ES.csv
@@ -160,7 +160,7 @@ Empty,Vacío(a)
 "Based On","Basado en"
 "Add New Attribute Set","Agregar nuevo conjunto de atributos"
 "Add New Set","Agregar nuevo conjunto"
-"Product Templates","Product Templates"
+"Attribute Sets","Attribute Sets"
 "Close Window","Cerrar Ventana"
 "New Product","Nuevo producto"
 "Save & Edit","Save & Edit"
@@ -280,7 +280,7 @@ Categories,Categorías
 "This attribute set no longer exists.","Este conjunto de atributos ya no existe."
 "You saved the attribute set.","You saved the attribute set."
 "An error occurred while saving the attribute set.","Se produjo un error mientras se guardaba el conjunto de atributos."
-"New Product Template","New Product Template"
+"New Attribute Set","New Attribute Set"
 "The attribute set has been removed.","The attribute set has been removed."
 "An error occurred while deleting this set.","An error occurred while deleting this set."
 "Search Terms","Search Terms"
diff --git a/app/code/Magento/Catalog/i18n/fr_FR.csv b/app/code/Magento/Catalog/i18n/fr_FR.csv
index 62cb82be609..37740e1e7db 100644
--- a/app/code/Magento/Catalog/i18n/fr_FR.csv
+++ b/app/code/Magento/Catalog/i18n/fr_FR.csv
@@ -160,7 +160,7 @@ Empty,Vide
 "Based On","Basé sur"
 "Add New Attribute Set","Ajouter un nouveau jeu d'attributs"
 "Add New Set","Ajouter une nouvelle série"
-"Product Templates","Product Templates"
+"Attribute Sets","Attribute Sets"
 "Close Window","Fermer la fenêtre"
 "New Product","Nouveau produit"
 "Save & Edit","Save & Edit"
@@ -280,7 +280,7 @@ Categories,catégories
 "This attribute set no longer exists.","La série d'attributs n'existe plus."
 "You saved the attribute set.","You saved the attribute set."
 "An error occurred while saving the attribute set.","Une erreur est survenue pendant la sauvegarde de la série d'attributs."
-"New Product Template","New Product Template"
+"New Attribute Set","New Attribute Set"
 "The attribute set has been removed.","The attribute set has been removed."
 "An error occurred while deleting this set.","An error occurred while deleting this set."
 "Search Terms","Search Terms"
diff --git a/app/code/Magento/Catalog/i18n/nl_NL.csv b/app/code/Magento/Catalog/i18n/nl_NL.csv
index ee1eb9baee9..650ef846383 100644
--- a/app/code/Magento/Catalog/i18n/nl_NL.csv
+++ b/app/code/Magento/Catalog/i18n/nl_NL.csv
@@ -160,7 +160,7 @@ Empty,Leeg
 "Based On","Gebaseerd op"
 "Add New Attribute Set","Voeg Nieuwe Attribuut Set toe"
 "Add New Set","Voeg Nieuwe Reeks Toe"
-"Product Templates","Product Templates"
+"Attribute Sets","Attribute Sets"
 "Close Window","Venster Sluiten"
 "New Product","Nieuw Product"
 "Save & Edit","Save & Edit"
@@ -280,7 +280,7 @@ Categories,Categoriën
 "This attribute set no longer exists.","Deze attribuutset bestaat niet meer."
 "You saved the attribute set.","You saved the attribute set."
 "An error occurred while saving the attribute set.","Er is een fout opgetreden tijdens het opslaan van de attribuut set."
-"New Product Template","New Product Template"
+"New Attribute Set","New Attribute Set"
 "The attribute set has been removed.","The attribute set has been removed."
 "An error occurred while deleting this set.","An error occurred while deleting this set."
 "Search Terms","Search Terms"
diff --git a/app/code/Magento/Catalog/i18n/pt_BR.csv b/app/code/Magento/Catalog/i18n/pt_BR.csv
index 3e0887c8754..d2c337913df 100644
--- a/app/code/Magento/Catalog/i18n/pt_BR.csv
+++ b/app/code/Magento/Catalog/i18n/pt_BR.csv
@@ -160,7 +160,7 @@ Empty,Vazio
 "Based On","Baseado Em"
 "Add New Attribute Set","Adicionar Novo Conjunto de Atributos"
 "Add New Set","Adicionar Novo Conjunto"
-"Product Templates","Product Templates"
+"Attribute Sets","Attribute Sets"
 "Close Window","Fechar Janela"
 "New Product","Novo Produto"
 "Save & Edit","Save & Edit"
@@ -280,7 +280,7 @@ Categories,Categorias
 "This attribute set no longer exists.","Este conjunto de atributos não existe mais."
 "You saved the attribute set.","You saved the attribute set."
 "An error occurred while saving the attribute set.","Ocorreu um erro ao salvar o conjunto de atributos."
-"New Product Template","New Product Template"
+"New Attribute Set","New Attribute Set"
 "The attribute set has been removed.","The attribute set has been removed."
 "An error occurred while deleting this set.","An error occurred while deleting this set."
 "Search Terms","Search Terms"
diff --git a/app/code/Magento/Catalog/i18n/zh_Hans_CN.csv b/app/code/Magento/Catalog/i18n/zh_Hans_CN.csv
index 4774b64706d..ed8938feb0f 100644
--- a/app/code/Magento/Catalog/i18n/zh_Hans_CN.csv
+++ b/app/code/Magento/Catalog/i18n/zh_Hans_CN.csv
@@ -160,7 +160,7 @@ Empty,空
 "Based On",基于
 "Add New Attribute Set",添加新属性集
 "Add New Set",添加新集
-"Product Templates","Product Templates"
+"Attribute Sets","Attribute Sets"
 "Close Window",关闭窗口
 "New Product",新产品
 "Save & Edit","Save & Edit"
@@ -280,7 +280,7 @@ Categories,分类
 "This attribute set no longer exists.",该属性已不存在。
 "You saved the attribute set.","You saved the attribute set."
 "An error occurred while saving the attribute set.",保存属性集时发生错误。
-"New Product Template","New Product Template"
+"New Attribute Set","New Attribute Set"
 "The attribute set has been removed.","The attribute set has been removed."
 "An error occurred while deleting this set.","An error occurred while deleting this set."
 "Search Terms","Search Terms"
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml
index 06edcfbaa25..dc12f76eb2f 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml
@@ -354,7 +354,7 @@
                         rightBeforeAppend : function(tree, nodeThis, node, newParent) {
                             if (node.attributes.is_user_defined == 0) {
                                 alert({
-                                    content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('You can\'t remove attributes from this product template.')) ?>'
+                                    content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('You can\'t remove attributes from this attribute set.')) ?>'
                                 });
                                 return false;
                             } else {
@@ -370,7 +370,7 @@
 
                             if (node.attributes.is_unassignable == 0) {
                                 alert({
-                                    content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('You can\'t remove attributes from this product template.')) ?>'
+                                    content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('You can\'t remove attributes from this attribute set.')) ?>'
                                 });
                                 return false;
                             } else {
diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product.php b/app/code/Magento/CatalogImportExport/Model/Import/Product.php
index a2a98fcdbc5..24475736833 100644
--- a/app/code/Magento/CatalogImportExport/Model/Import/Product.php
+++ b/app/code/Magento/CatalogImportExport/Model/Import/Product.php
@@ -207,7 +207,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
         ValidatorInterface::ERROR_INVALID_SCOPE => 'Invalid value in Scope column',
         ValidatorInterface::ERROR_INVALID_WEBSITE => 'Invalid value in Website column (website does not exists?)',
         ValidatorInterface::ERROR_INVALID_STORE => 'Invalid value in Store column (store doesn\'t exist?)',
-        ValidatorInterface::ERROR_INVALID_ATTR_SET => 'Invalid value for Product Template column (set doesn\'t exist?)',
+        ValidatorInterface::ERROR_INVALID_ATTR_SET => 'Invalid value for Attribute Set column (set doesn\'t exist?)',
         ValidatorInterface::ERROR_INVALID_TYPE => 'Product Type is invalid or not supported',
         ValidatorInterface::ERROR_INVALID_CATEGORY => 'Category does not exists',
         ValidatorInterface::ERROR_VALUE_IS_REQUIRED => 'Please make sure attribute "%s" is not empty.',
@@ -217,7 +217,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
         ValidatorInterface::ERROR_CHANGE_TYPE => 'Product type change is not allowed',
         ValidatorInterface::ERROR_DUPLICATE_SCOPE => 'Duplicate scope',
         ValidatorInterface::ERROR_DUPLICATE_SKU => 'Duplicate SKU',
-        ValidatorInterface::ERROR_CHANGE_ATTR_SET => 'Product template change is not allowed',
+        ValidatorInterface::ERROR_CHANGE_ATTR_SET => 'Attribute set change is not allowed',
         ValidatorInterface::ERROR_TYPE_UNSUPPORTED => 'Product type is not supported',
         ValidatorInterface::ERROR_ROW_IS_ORPHAN => 'Orphan rows that will be skipped due default row errors',
         ValidatorInterface::ERROR_INVALID_TIER_PRICE_QTY => 'Tier Price data price or quantity value is invalid',
diff --git a/app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/ProductTemplate/Form.php b/app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/ProductTemplate/Form.php
index 09370fdce3e..65c88dd19a0 100644
--- a/app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/ProductTemplate/Form.php
+++ b/app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/ProductTemplate/Form.php
@@ -7,7 +7,7 @@
 /**
  * Product attribute set selector form
  */
-namespace Magento\ConfigurableProduct\Block\Adminhtml\Product\Edit\ProductTemplate;
+namespace Magento\ConfigurableProduct\Block\Adminhtml\Product\Edit\AttributeSet;
 
 class Form extends \Magento\Backend\Block\Widget\Form\Generic
 {
@@ -57,7 +57,7 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic
             'radio',
             [
                 'after_element_html' => __(
-                    'Add configurable attributes to the current Product Template ("%1")',
+                    'Add configurable attributes to the current Attribute Set ("%1")',
                     sprintf('<span data-role="name-container">%s</span>', $this->getCurrentAttributeSetName())
                 ),
                 'name' => 'affected-attribute-set',
@@ -70,7 +70,7 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic
             'new-affected-attribute-set',
             'radio',
             [
-                'after_element_html' => __('Add configurable attributes to the new Product Template based on current'),
+                'after_element_html' => __('Add configurable attributes to the new Attribute Set based on current'),
                 'name' => 'affected-attribute-set',
                 'class' => 'admin__control-radio',
                 'value' => 'new'
@@ -80,7 +80,7 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic
             'new-attribute-set-name',
             'text',
             [
-                'label' => __('New product template name'),
+                'label' => __('New attribute set name'),
                 'name' => 'new-attribute-set-name',
                 'required' => true,
                 'css_class' => 'no-display',
@@ -92,7 +92,7 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic
             'existing-affected-attribute-set',
             'radio',
             [
-                'after_element_html' => __('Add configurable attributes to the existing Product Template'),
+                'after_element_html' => __('Add configurable attributes to the existing Attribute Set'),
                 'name' => 'affected-attribute-set',
                 'required' => true,
                 'class' => 'admin__control-radio no-display',
@@ -103,7 +103,7 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic
             'choose-affected-attribute-set',
             'select',
             [
-                'label' => __('Choose existing Product Template'),
+                'label' => __('Choose existing Attribute Set'),
                 'name' => 'attribute-set-name',
                 'required' => true,
                 'css_class' => 'no-display',
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/layout/catalog_product_new.xml b/app/code/Magento/ConfigurableProduct/view/adminhtml/layout/catalog_product_new.xml
index b6683bdeca4..322360d8703 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/layout/catalog_product_new.xml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/layout/catalog_product_new.xml
@@ -16,7 +16,7 @@
         </referenceContainer>
         <referenceContainer name="content">
             <block class="Magento\Framework\View\Element\Template" name="affected-attribute-set-selector" template="Magento_ConfigurableProduct::product/configurable/affected-attribute-set-selector/form.phtml">
-                <block class="Magento\ConfigurableProduct\Block\Adminhtml\Product\Edit\ProductTemplate\Form" name="affected-attribute-set-form" />
+                <block class="Magento\ConfigurableProduct\Block\Adminhtml\Product\Edit\AttributeSet\Form" name="affected-attribute-set-form" />
             </block>
         </referenceContainer>
     </body>
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/set/js.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/set/js.phtml
index ea036bbf5d6..c9aeeddfd2b 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/set/js.phtml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/set/js.phtml
@@ -40,7 +40,7 @@ editSet.submit = editSet.submit.wrap(function(original) {
 editSet.rightBeforeAppend = editSet.rightBeforeAppend.wrap(function(original, tree, nodeThis, node, newParent) {
     if (node.attributes.is_configurable == 1) {
         alert({
-            content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This attribute is used in configurable products. You cannot remove it from the product template.')) ?>'
+            content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This attribute is used in configurable products. You cannot remove it from the attribute set.')) ?>'
         });
         return false;
     }
@@ -50,7 +50,7 @@ editSet.rightBeforeAppend = editSet.rightBeforeAppend.wrap(function(original, tr
 editSet.rightBeforeInsert = editSet.rightBeforeInsert.wrap(function(original, tree, nodeThis, node, newParent) {
     if (node.attributes.is_configurable == 1) {
         alert({
-            content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This attribute is used in configurable products. You cannot remove it from the product template.')) ?>'
+            content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This attribute is used in configurable products. You cannot remove it from the attribute set.')) ?>'
         });
         return false;
     }
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml
index 70456828374..5922a2fbf3a 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml
@@ -42,7 +42,7 @@
 
         $form
             .modal({
-                title: '<?php /* @escapeNotVerified */ echo __('Choose Affected Product Template'); ?>',
+                title: '<?php /* @escapeNotVerified */ echo __('Choose Affected Attribute Set'); ?>',
                 closed: function () {
                     resetValidation();
                 },
diff --git a/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php b/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php
index c2184950d83..784a78e5a4c 100644
--- a/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php
+++ b/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php
@@ -153,7 +153,7 @@ abstract class AbstractProduct extends \Magento\Rule\Model\Condition\AbstractCon
      */
     protected function _addSpecialAttributes(array &$attributes)
     {
-        $attributes['attribute_set_id'] = __('Product Template');
+        $attributes['attribute_set_id'] = __('Attribute Set');
         $attributes['category_ids'] = __('Category');
     }
 
diff --git a/app/code/Magento/Weee/README.md b/app/code/Magento/Weee/README.md
index 3fda5bbc12b..0218dcd85ed 100644
--- a/app/code/Magento/Weee/README.md
+++ b/app/code/Magento/Weee/README.md
@@ -18,7 +18,7 @@ Magento_Weee module can be installed automatically (using native Magento install
 Magento installation with existing products with FPT:
 * Disable FPT on the backend
 * Remove all products with FPT
-* Remove all FPT attributes from product templates
+* Remove all FPT attributes from attribute sets
 * Delete all FPT attributes
 * Remove module directory from the code base
 * New Magento installation:
diff --git a/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/_module.less b/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/_module.less
index 16606bb518d..3d25c7dbf0b 100644
--- a/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/_module.less
+++ b/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/_module.less
@@ -11,7 +11,7 @@
 @import 'module/components/_navigation-bar.less'; // Navigation Bar
 @import 'module/components/_grid.less'; // Grid styles
 @import 'module/components/_currency-addon.less'; // Currency Addon Styles
-@import 'module/components/_attributes_template_popup.less'; // Choose Affected Product Template popup
+@import 'module/components/_attributes_template_popup.less'; // Choose Affected Attribute Set popup
 
 //  Main Steps
 @import 'module/steps/_select-attributes.less';
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/Set/GridPageActions.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/Set/GridPageActions.php
index 49d3f926aa6..9373e1ab10f 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/Set/GridPageActions.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/Set/GridPageActions.php
@@ -10,7 +10,7 @@ use Magento\Backend\Test\Block\GridPageActions as AbstractGridPageActions;
 
 /**
  * Class GridPageActions
- * Grid page actions block on Product Templates page
+ * Grid page actions block on Attribute Sets page
  */
 class GridPageActions extends AbstractGridPageActions
 {
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAddedProductAttributeOnProductForm.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAddedProductAttributeOnProductForm.php
index 22cc3977640..eeb6257ee1f 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAddedProductAttributeOnProductForm.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAddedProductAttributeOnProductForm.php
@@ -28,7 +28,7 @@ class AssertAddedProductAttributeOnProductForm extends AbstractConstraint
      * @param CatalogProductIndex $productGrid
      * @param CatalogProductEdit $productEdit
      * @param CatalogProductAttribute $attribute
-     * @param CatalogAttributeSet $productTemplate
+     * @param CatalogAttributeSet $attributeSet
      * @param CatalogProductAttribute $productAttributeOriginal
      * @throws \Exception
      * @return void
@@ -38,11 +38,11 @@ class AssertAddedProductAttributeOnProductForm extends AbstractConstraint
         CatalogProductIndex $productGrid,
         CatalogProductEdit $productEdit,
         CatalogProductAttribute $attribute,
-        CatalogAttributeSet $productTemplate,
+        CatalogAttributeSet $attributeSet,
         CatalogProductAttribute $productAttributeOriginal = null
     ) {
         if (!$product->hasData('sku')) {
-            $product = $this->createProductWithAttributeSet($productAttributeOriginal, $productTemplate);
+            $product = $this->createProductWithAttributeSet($productAttributeOriginal, $attributeSet);
         }
         $filterProduct = ['sku' => $product->getSku()];
         $productGrid->open();
@@ -62,16 +62,16 @@ class AssertAddedProductAttributeOnProductForm extends AbstractConstraint
      * Create Product With AttributeSet.
      *
      * @param CatalogProductAttribute $attribute
-     * @param CatalogAttributeSet $productTemplate
+     * @param CatalogAttributeSet $attributeSet
      * @return CatalogProductSimple
      */
     protected function createProductWithAttributeSet(
         CatalogProductAttribute $attribute,
-        CatalogAttributeSet $productTemplate
+        CatalogAttributeSet $attributeSet
     ) {
         $product = ObjectManager::getInstance()->create(
-            'Magento\Catalog\Test\TestStep\AddAttributeToProductTemplateStep',
-            ['attribute' => $attribute, 'productTemplate' => $productTemplate]
+            'Magento\Catalog\Test\TestStep\AddAttributeToAttributeSetStep',
+            ['attribute' => $attribute, 'attributeSet' => $attributeSet]
         )->run();
         return $product['product'];
     }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeAbsenceInSearchOnProductForm.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeAbsenceInSearchOnProductForm.php
index 4052a470a60..6ba9ad8b078 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeAbsenceInSearchOnProductForm.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeAbsenceInSearchOnProductForm.php
@@ -12,12 +12,12 @@ use Magento\Catalog\Test\Page\Adminhtml\CatalogProductNew;
 use Magento\Mtf\Constraint\AbstractConstraint;
 
 /**
- * Checks that product attribute cannot be added to product template on Product Page via Add Attribute control.
+ * Checks that product attribute cannot be added to attribute set on Product Page via Add Attribute control.
  */
 class AssertProductAttributeAbsenceInSearchOnProductForm extends AbstractConstraint
 {
     /**
-     * Assert that deleted attribute can't be added to product template on Product Page via Add Attribute control.
+     * Assert that deleted attribute can't be added to attribute set on Product Page via Add Attribute control.
      *
      * @param CatalogProductAttribute $productAttribute
      * @param CatalogProductIndex $productGrid
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeAbsenceInTemplateGroups.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeAbsenceInTemplateGroups.php
index 821d96b2db2..3d865b5ccdd 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeAbsenceInTemplateGroups.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeAbsenceInTemplateGroups.php
@@ -13,45 +13,45 @@ use Magento\Mtf\Constraint\AbstractConstraint;
 
 /**
  * Class AssertProductAttributeAbsenceInTemplateGroups
- * Checks that product attribute isn't displayed in Product template's Groups section
+ * Checks that product attribute isn't displayed in Attribute set's Groups section
  */
 class AssertProductAttributeAbsenceInTemplateGroups extends AbstractConstraint
 {
     /**
-     * Assert that deleted attribute isn't displayed in Product template's Groups section
+     * Assert that deleted attribute isn't displayed in Attribute set's Groups section
      *
-     * @param CatalogAttributeSet $productTemplate
+     * @param CatalogAttributeSet $attributeSet
      * @param CatalogProductSetIndex $productSetIndex
      * @param CatalogProductSetEdit $productSetEdit
      * @return void
      */
     public function processAssert(
-        CatalogAttributeSet $productTemplate,
+        CatalogAttributeSet $attributeSet,
         CatalogProductSetIndex $productSetIndex,
         CatalogProductSetEdit $productSetEdit
     ) {
-        $filter = ['set_name' => $productTemplate->getAttributeSetName()];
+        $filter = ['set_name' => $attributeSet->getAttributeSetName()];
         $productSetIndex->open();
         $productSetIndex->getGrid()->searchAndOpen($filter);
 
-        $attributeCode = $productTemplate
+        $attributeCode = $attributeSet
             ->getDataFieldConfig('assigned_attributes')['source']
             ->getAttributes()[0]
             ->getAttributeCode();
 
         \PHPUnit_Framework_Assert::assertFalse(
             $productSetEdit->getAttributeSetEditBlock()->checkProductAttribute($attributeCode),
-            "Attribute " . $attributeCode . " is present in Product template's Groups section."
+            "Attribute " . $attributeCode . " is present in Attribute set's Groups section."
         );
     }
 
     /**
-     * Text absent Product Attribute in Product template's Groups section
+     * Text absent Product Attribute in Attribute set's Groups section
      *
      * @return string
      */
     public function toString()
     {
-        return "Product Attribute is absent in Product template's Groups section.";
+        return "Product Attribute is absent in Attribute set's Groups section.";
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeAbsenceInUnassignedAttributes.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeAbsenceInUnassignedAttributes.php
index d1f2f5e1eff..460d46cf55d 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeAbsenceInUnassignedAttributes.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeAbsenceInUnassignedAttributes.php
@@ -13,45 +13,45 @@ use Magento\Mtf\Constraint\AbstractConstraint;
 
 /**
  * Class AssertProductAttributeAbsenceInUnassignedAttributes
- * Checks that product attribute isn't displayed in Product template's Unassigned Attributes section
+ * Checks that product attribute isn't displayed in Attribute set's Unassigned Attributes section
  */
 class AssertProductAttributeAbsenceInUnassignedAttributes extends AbstractConstraint
 {
     /**
-     * Assert that deleted attribute isn't displayed in Product template's Unassigned Attributes section
+     * Assert that deleted attribute isn't displayed in Attribute set's Unassigned Attributes section
      *
-     * @param CatalogAttributeSet $productTemplate
+     * @param CatalogAttributeSet $attributeSet
      * @param CatalogProductSetIndex $productSetIndex
      * @param CatalogProductSetEdit $productSetEdit
      * @return void
      */
     public function processAssert(
-        CatalogAttributeSet $productTemplate,
+        CatalogAttributeSet $attributeSet,
         CatalogProductSetIndex $productSetIndex,
         CatalogProductSetEdit $productSetEdit
     ) {
-        $filter = ['set_name' => $productTemplate->getAttributeSetName()];
+        $filter = ['set_name' => $attributeSet->getAttributeSetName()];
         $productSetIndex->open();
         $productSetIndex->getGrid()->searchAndOpen($filter);
 
-        $attributeCode = $productTemplate
+        $attributeCode = $attributeSet
             ->getDataFieldConfig('assigned_attributes')['source']
             ->getAttributes()[0]
             ->getAttributeCode();
 
         \PHPUnit_Framework_Assert::assertFalse(
             $productSetEdit->getAttributeSetEditBlock()->checkUnassignedProductAttribute($attributeCode),
-            "Attribute " . $attributeCode . " is present in Unassigned Product template's section."
+            "Attribute " . $attributeCode . " is present in Unassigned Attribute set's section."
         );
     }
 
     /**
-     * Text absent Product Attribute Unassigned Product template's section
+     * Text absent Product Attribute Unassigned Attribute set's section
      *
      * @return string
      */
     public function toString()
     {
-        return "Product Attribute is absent in Unassigned Product template's section.";
+        return "Product Attribute is absent in Unassigned Attribute set's section.";
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductDuplicatedInGrid.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductDuplicatedInGrid.php
index 64fcf763899..59462fc83da 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductDuplicatedInGrid.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductDuplicatedInGrid.php
@@ -16,7 +16,7 @@ use Magento\Mtf\Fixture\FixtureInterface;
 class AssertProductDuplicatedInGrid extends AbstractConstraint
 {
     /**
-     * Assert that duplicated product is found by sku and has correct product type, product template,
+     * Assert that duplicated product is found by sku and has correct product type, attribute set,
      * product status disabled and out of stock
      *
      * @param FixtureInterface $product
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateForm.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateForm.php
index 4a634c7d23d..527f609aa60 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateForm.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateForm.php
@@ -13,14 +13,14 @@ use Magento\Catalog\Test\Page\Adminhtml\CatalogProductSetIndex;
 use Magento\Mtf\Constraint\AbstractConstraint;
 
 /**
- * Class AssertProductTemplateForm
- * Checking data from Product Template form with data fixture
+ * Class AssertAttributeSetForm
+ * Checking data from Attribute Set form with data fixture
  */
-class AssertProductTemplateForm extends AbstractConstraint
+class AssertAttributeSetForm extends AbstractConstraint
 {
     /**
-     * Assert that after save a product template on edit product set page displays:
-     * 1. Correct product template name in Attribute set name field passed from fixture
+     * Assert that after save a attribute set on edit product set page displays:
+     * 1. Correct attribute set name in Attribute set name field passed from fixture
      * 2. Created Product Attribute (if was added)
      *
      * @param CatalogProductSetIndex $productSet
@@ -43,7 +43,7 @@ class AssertProductTemplateForm extends AbstractConstraint
         \PHPUnit_Framework_Assert::assertEquals(
             $filterAttribute['set_name'],
             $productSetEdit->getAttributeSetEditBlock()->getAttributeSetName(),
-            'Product Template not found'
+            'Attribute Set not found'
             . "\nExpected: " . $filterAttribute['set_name']
             . "\nActual: " . $productSetEdit->getAttributeSetEditBlock()->getAttributeSetName()
         );
@@ -51,7 +51,7 @@ class AssertProductTemplateForm extends AbstractConstraint
             $attributeLabel = $productAttribute->getFrontendLabel();
             \PHPUnit_Framework_Assert::assertTrue(
                 $productSetEdit->getAttributeSetEditBlock()->checkProductAttribute($attributeLabel),
-                "Product Attribute is absent on Product Template Groups"
+                "Product Attribute is absent on Attribute Set Groups"
             );
         }
     }
@@ -63,6 +63,6 @@ class AssertProductTemplateForm extends AbstractConstraint
      */
     public function toString()
     {
-        return 'Data from the Product Template form matched with fixture';
+        return 'Data from the Attribute Set form matched with fixture';
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateGroupOnProductForm.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateGroupOnProductForm.php
index 2baac340525..3aa7d3e9361 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateGroupOnProductForm.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateGroupOnProductForm.php
@@ -17,15 +17,15 @@ use Magento\Catalog\Test\Page\Adminhtml\CatalogProductIndex;
 use Magento\Catalog\Test\Page\Adminhtml\CatalogProductEdit;
 
 /**
- * Class AssertProductTemplateGroupOnProductForm
- * Check that created product template displays in product template suggest container dropdown and
+ * Class AssertAttributeSetGroupOnProductForm
+ * Check that created attribute set displays in attribute set suggest container dropdown and
  * can be used for new created product
  */
-class AssertProductTemplateGroupOnProductForm extends AbstractConstraint
+class AssertAttributeSetGroupOnProductForm extends AbstractConstraint
 {
     /**
-     * Assert that created product template:
-     * 1. Displays in product template suggest container dropdown
+     * Assert that created attribute set:
+     * 1. Displays in attribute set suggest container dropdown
      * 2. Can be used for new created product.
      *
      * @param FixtureFactory $fixtureFactory
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateInGrid.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateInGrid.php
index 281327b9f8c..6e6d02c3241 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateInGrid.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateInGrid.php
@@ -11,13 +11,13 @@ use Magento\Catalog\Test\Page\Adminhtml\CatalogProductSetIndex;
 use Magento\Mtf\Constraint\AbstractConstraint;
 
 /**
- * Class AssertProductTemplateInGrid
- * Checks present product template in Product Templates grid
+ * Class AssertAttributeSetInGrid
+ * Checks present attribute set in Attribute Sets grid
  */
-class AssertProductTemplateInGrid extends AbstractConstraint
+class AssertAttributeSetInGrid extends AbstractConstraint
 {
     /**
-     * Assert that new product template displays in Product Templates grid
+     * Assert that new attribute set displays in Attribute Sets grid
      *
      * @param CatalogProductSetIndex $productSetPage
      * @param CatalogAttributeSet $attributeSet
@@ -32,17 +32,17 @@ class AssertProductTemplateInGrid extends AbstractConstraint
         $productSetPage->open();
         \PHPUnit_Framework_Assert::assertTrue(
             $productSetPage->getGrid()->isRowVisible($filterAttributeSet),
-            'Product Template \'' . $filterAttributeSet['set_name'] . '\' is absent in Product Template grid.'
+            'Attribute Set \'' . $filterAttributeSet['set_name'] . '\' is absent in Attribute Set grid.'
         );
     }
 
     /**
-     * Text present new product template in grid
+     * Text present new attribute set in grid
      *
      * @return string
      */
     public function toString()
     {
-        return 'Product template is present in Product Templates grid';
+        return 'Attribute set is present in Attribute Sets grid';
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateNotInGrid.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateNotInGrid.php
index 02d8435fb25..7d5ed1707c6 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateNotInGrid.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateNotInGrid.php
@@ -11,42 +11,42 @@ use Magento\Catalog\Test\Page\Adminhtml\CatalogProductSetIndex;
 use Magento\Mtf\Constraint\AbstractConstraint;
 
 /**
- * Class AssertProductTemplateNotInGrid
- * Assert that Product Template absence on grid
+ * Class AssertAttributeSetNotInGrid
+ * Assert that Attribute Set absence on grid
  */
-class AssertProductTemplateNotInGrid extends AbstractConstraint
+class AssertAttributeSetNotInGrid extends AbstractConstraint
 {
     /* tags */
     const SEVERITY = 'low';
     /* end tags */
 
     /**
-     * Assert that product template is not displayed in Product Templates grid
+     * Assert that attribute set is not displayed in Attribute Sets grid
      *
      * @param CatalogProductSetIndex $productSetPage
-     * @param CatalogAttributeSet $productTemplate
+     * @param CatalogAttributeSet $attributeSet
      * @return void
      */
-    public function processAssert(CatalogProductSetIndex $productSetPage, CatalogAttributeSet $productTemplate)
+    public function processAssert(CatalogProductSetIndex $productSetPage, CatalogAttributeSet $attributeSet)
     {
         $filterAttributeSet = [
-            'set_name' => $productTemplate->getAttributeSetName(),
+            'set_name' => $attributeSet->getAttributeSetName(),
         ];
 
         $productSetPage->open();
         \PHPUnit_Framework_Assert::assertFalse(
             $productSetPage->getGrid()->isRowVisible($filterAttributeSet),
-            'An attribute set named "' . $filterAttributeSet['set_name'] . '" is present in Product Template grid.'
+            'An attribute set named "' . $filterAttributeSet['set_name'] . '" is present in Attribute Set grid.'
         );
     }
 
     /**
-     * Text absent new product template in grid
+     * Text absent new attribute set in grid
      *
      * @return string
      */
     public function toString()
     {
-        return 'Product template is absent in Product Templates grid';
+        return 'Attribute set is absent in Attribute Sets grid';
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateOnProductForm.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateOnProductForm.php
index cf3e50c9f09..0f66f26036d 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateOnProductForm.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateOnProductForm.php
@@ -16,14 +16,14 @@ use Magento\Mtf\Constraint\AbstractConstraint;
 use Magento\Mtf\Fixture\FixtureFactory;
 
 /**
- * Class AssertProductTemplateOnProductForm
+ * Class AssertAttributeSetOnProductForm
  * Check Attribute Set and Product Attribute on Product form
  */
-class AssertProductTemplateOnProductForm extends AbstractConstraint
+class AssertAttributeSetOnProductForm extends AbstractConstraint
 {
     /**
-     * Assert that created product template:
-     * 1. Displays in product template suggest container dropdown
+     * Assert that created attribute set:
+     * 1. Displays in attribute set suggest container dropdown
      * 2. Can be used for new created product.
      *
      * @param FixtureFactory $fixtureFactory
@@ -66,7 +66,7 @@ class AssertProductTemplateOnProductForm extends AbstractConstraint
         \PHPUnit_Framework_Assert::assertEquals(
             $attributeSet->getAttributeSetName(),
             $formAttributeSet,
-            'Product Template not found on Product form.'
+            'Attribute Set not found on Product form.'
             . "\nExpected: " . $attributeSet->getAttributeSetName()
             . "\nActual: " . $formAttributeSet
         );
@@ -88,6 +88,6 @@ class AssertProductTemplateOnProductForm extends AbstractConstraint
      */
     public function toString()
     {
-        return 'Product Attribute and Product Template are present on the Product form.';
+        return 'Product Attribute and Attribute Set are present on the Product form.';
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateSuccessDeleteMessage.php
index 43cff91896a..c1c55d90030 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateSuccessDeleteMessage.php
@@ -10,18 +10,18 @@ use Magento\Catalog\Test\Page\Adminhtml\CatalogProductSetIndex;
 use Magento\Mtf\Constraint\AbstractConstraint;
 
 /**
- * Class AssertProductTemplateSuccessDeleteMessage
- * Check Product Templates success delete message
+ * Class AssertAttributeSetSuccessDeleteMessage
+ * Check Attribute Sets success delete message
  */
-class AssertProductTemplateSuccessDeleteMessage extends AbstractConstraint
+class AssertAttributeSetSuccessDeleteMessage extends AbstractConstraint
 {
     /**
      * Text value to be checked
      */
-    const SUCCESS_DELETE_MESSAGE = 'The product template has been removed.';
+    const SUCCESS_DELETE_MESSAGE = 'The attribute set has been removed.';
 
     /**
-     * Assert that after deleting product template success delete message appears
+     * Assert that after deleting attribute set success delete message appears
      *
      * @param CatalogProductSetIndex $productSetIndex
      * @return void
@@ -45,6 +45,6 @@ class AssertProductTemplateSuccessDeleteMessage extends AbstractConstraint
      */
     public function toString()
     {
-        return 'Product Templates success delete message is present.';
+        return 'Attribute Sets success delete message is present.';
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateSuccessSaveMessage.php
index 457cac5b708..3a61e2de496 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateSuccessSaveMessage.php
@@ -10,18 +10,18 @@ use Magento\Catalog\Test\Page\Adminhtml\CatalogProductSetIndex;
 use Magento\Mtf\Constraint\AbstractConstraint;
 
 /**
- * Class AssertProductTemplateSuccessSaveMessage
- * Check Product Templates success save message
+ * Class AssertAttributeSetSuccessSaveMessage
+ * Check Attribute Sets success save message
  */
-class AssertProductTemplateSuccessSaveMessage extends AbstractConstraint
+class AssertAttributeSetSuccessSaveMessage extends AbstractConstraint
 {
     /**
      * Text value to be checked
      */
-    const SUCCESS_MESSAGE = 'You saved the product template.';
+    const SUCCESS_MESSAGE = 'You saved the attribute set.';
 
     /**
-     * Assert that after save a product template "You saved the attribute set." successful message appears
+     * Assert that after save a attribute set "You saved the attribute set." successful message appears
      *
      * @param CatalogProductSetIndex $productSetIndex
      * @return void
@@ -45,6 +45,6 @@ class AssertProductTemplateSuccessSaveMessage extends AbstractConstraint
      */
     public function toString()
     {
-        return 'Product Templates success save message is present.';
+        return 'Attribute Sets success save message is present.';
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/Product/AttributeSetId.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/Product/AttributeSetId.php
index 9a314c06e7d..4865ef44562 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/Product/AttributeSetId.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/Product/AttributeSetId.php
@@ -11,7 +11,7 @@ use Magento\Mtf\Fixture\FixtureFactory;
 use Magento\Catalog\Test\Fixture\CatalogAttributeSet;
 
 /**
- * Product template entity data source.
+ * Attribute set entity data source.
  *
  *  Data keys:
  *  - dataset
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/NavigateMenuTest.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/NavigateMenuTest.xml
index f38ac7d9baf..847a1f2c242 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/NavigateMenuTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/NavigateMenuTest.xml
@@ -23,8 +23,8 @@
             <constraint name="Magento\Backend\Test\Constraint\AssertBackendPageIsAvailable"/>
         </variation>
         <variation name="NavigateMenuTest12">
-            <data name="menuItem" xsi:type="string">Stores > Product Template</data>
-            <data name="pageTitle" xsi:type="string">Product Templates</data>
+            <data name="menuItem" xsi:type="string">Stores > Attribute Set</data>
+            <data name="pageTitle" xsi:type="string">Attribute Sets</data>
             <constraint name="Magento\Backend\Test\Constraint\AssertBackendPageIsAvailable"/>
         </variation>
     </testCase>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateAttributeSetEntityTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateAttributeSetEntityTest.php
index 7ddb966ed99..835086f15fa 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateAttributeSetEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateAttributeSetEntityTest.php
@@ -18,12 +18,12 @@ use Magento\Mtf\TestCase\Injectable;
  *
  * Test Flow:
  * 1. Log in to Backend.
- * 2. Navigate to Stores > Attributes > Product Template.
- * 3. Start to create new Product Template.
+ * 2. Navigate to Stores > Attributes > Attribute Set.
+ * 3. Start to create new Attribute Set.
  * 4. Fill out fields data according to data set.
- * 5. Add created Product Attribute to Product Template.
- * 6. Save new Product Template.
- * 7. Verify created Product Template.
+ * 5. Add created Product Attribute to Attribute Set.
+ * 6. Save new Attribute Set.
+ * 7. Verify created Attribute Set.
  *
  * @group Product_Attributes_(MX)
  * @ZephyrId MAGETWO-25104
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateAttributeSetEntityTest.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateAttributeSetEntityTest.xml
index 68b4d38d82e..2db56cfeb20 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateAttributeSetEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateAttributeSetEntityTest.xml
@@ -6,14 +6,14 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/variations.xsd">
-    <testCase name="Magento\Catalog\Test\TestCase\ProductAttribute\CreateAttributeSetEntityTest" summary="Create Attribute Set (Product Template)" ticketId="MAGETWO-25104">
+    <testCase name="Magento\Catalog\Test\TestCase\ProductAttribute\CreateAttributeSetEntityTest" summary="Create Attribute Set (Attribute Set)" ticketId="MAGETWO-25104">
         <variation name="CreateAttributeSetEntityTestVariation1">
-            <data name="attributeSet/data/attribute_set_name" xsi:type="string">ProductTemplate%isolation%</data>
+            <data name="attributeSet/data/attribute_set_name" xsi:type="string">AttributeSet%isolation%</data>
             <data name="attributeSet/data/skeleton_set/dataset" xsi:type="string">default</data>
-            <constraint name="Magento\Catalog\Test\Constraint\AssertProductTemplateSuccessSaveMessage" />
-            <constraint name="Magento\Catalog\Test\Constraint\AssertProductTemplateForm" />
-            <constraint name="Magento\Catalog\Test\Constraint\AssertProductTemplateInGrid" />
-            <constraint name="Magento\Catalog\Test\Constraint\AssertProductTemplateOnProductForm" />
+            <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeSetSuccessSaveMessage" />
+            <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeSetForm" />
+            <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeSetInGrid" />
+            <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeSetOnProductForm" />
         </variation>
     </testCase>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateProductAttributeEntityTest.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateProductAttributeEntityTest.xml
index 03cf25cfa8a..750f44011cb 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateProductAttributeEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateProductAttributeEntityTest.xml
@@ -8,7 +8,7 @@
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/variations.xsd">
     <testCase name="Magento\Catalog\Test\TestCase\ProductAttribute\CreateProductAttributeEntityTest" summary="Create Product Attribute" ticketId="MAGETWO-24767">
         <variation name="CreateProductAttributeEntityTestVariation1">
-            <data name="productTemplate/dataset" xsi:type="string">custom_attribute_set</data>
+            <data name="attributeSet/dataset" xsi:type="string">custom_attribute_set</data>
             <data name="productAttribute/data/frontend_label" xsi:type="string">Text_Field_Admin_%isolation%</data>
             <data name="productAttribute/data/frontend_input" xsi:type="string">Text Field</data>
             <data name="productAttribute/data/is_required" xsi:type="string">No</data>
@@ -19,7 +19,7 @@
             <constraint name="Magento\Catalog\Test\Constraint\AssertAddedProductAttributeOnProductForm" />
         </variation>
         <variation name="CreateProductAttributeEntityTestVariation2">
-            <data name="productTemplate/dataset" xsi:type="string">custom_attribute_set</data>
+            <data name="attributeSet/dataset" xsi:type="string">custom_attribute_set</data>
             <data name="productAttribute/data/frontend_label" xsi:type="string">Text_Field_Admin_%isolation%</data>
             <data name="productAttribute/data/frontend_input" xsi:type="string">Text Area</data>
             <data name="productAttribute/data/is_required" xsi:type="string">Yes</data>
@@ -41,7 +41,7 @@
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeIsComparable" />
         </variation>
         <variation name="CreateProductAttributeEntityTestVariation3">
-            <data name="productTemplate/dataset" xsi:type="string">custom_attribute_set</data>
+            <data name="attributeSet/dataset" xsi:type="string">custom_attribute_set</data>
             <data name="productAttribute/data/frontend_label" xsi:type="string">Date_Admin_%isolation%</data>
             <data name="productAttribute/data/frontend_input" xsi:type="string">Date</data>
             <data name="productAttribute/data/is_required" xsi:type="string">No</data>
@@ -63,7 +63,7 @@
             <constraint name="Magento\CatalogRule\Test\Constraint\AssertProductAttributeIsUsedPromoRules" />
         </variation>
         <variation name="CreateProductAttributeEntityTestVariation4">
-            <data name="productTemplate/dataset" xsi:type="string">custom_attribute_set</data>
+            <data name="attributeSet/dataset" xsi:type="string">custom_attribute_set</data>
             <data name="productAttribute/data/frontend_label" xsi:type="string">Yes/No_Admin_%isolation%</data>
             <data name="productAttribute/data/frontend_input" xsi:type="string">Yes/No</data>
             <data name="productAttribute/data/is_required" xsi:type="string">Yes</data>
@@ -76,7 +76,7 @@
             <constraint name="Magento\Catalog\Test\Constraint\AssertAddedProductAttributeOnProductForm" />
         </variation>
         <variation name="CreateProductAttributeEntityTestVariation5">
-            <data name="productTemplate/dataset" xsi:type="string">custom_attribute_set</data>
+            <data name="attributeSet/dataset" xsi:type="string">custom_attribute_set</data>
             <data name="productAttribute/data/frontend_label" xsi:type="string">Multiple_Select_Admin_%isolation%</data>
             <data name="productAttribute/data/frontend_input" xsi:type="string">Multiple Select</data>
             <data name="productAttribute/data/options/dataset" xsi:type="string">default</data>
@@ -104,7 +104,7 @@
             <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeOptionsOnProductForm" />
         </variation>
         <variation name="CreateProductAttributeEntityTestVariation6">
-            <data name="productTemplate/dataset" xsi:type="string">custom_attribute_set</data>
+            <data name="attributeSet/dataset" xsi:type="string">custom_attribute_set</data>
             <data name="productAttribute/data/frontend_label" xsi:type="string">Dropdown_Admin_%isolation%</data>
             <data name="productAttribute/data/frontend_input" xsi:type="string">Dropdown</data>
             <data name="productAttribute/data/options/dataset" xsi:type="string">default</data>
@@ -137,7 +137,7 @@
             <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeOptionsOnProductForm" />
         </variation>
         <variation name="CreateProductAttributeEntityTestVariation7">
-            <data name="productTemplate/dataset" xsi:type="string">custom_attribute_set</data>
+            <data name="attributeSet/dataset" xsi:type="string">custom_attribute_set</data>
             <data name="productAttribute/data/frontend_label" xsi:type="string">Price_Admin_%isolation%</data>
             <data name="productAttribute/data/frontend_input" xsi:type="string">Price</data>
             <data name="productAttribute/data/is_required" xsi:type="string">No</data>
@@ -158,7 +158,7 @@
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeIsFilterableInSearch" />
         </variation>
         <variation name="CreateProductAttributeEntityTestVariation8">
-            <data name="productTemplate/dataset" xsi:type="string">custom_attribute_set</data>
+            <data name="attributeSet/dataset" xsi:type="string">custom_attribute_set</data>
             <data name="productAttribute/data/frontend_label" xsi:type="string">Fixed_Product_Tax_Admin_%isolation%</data>
             <data name="productAttribute/data/frontend_input" xsi:type="string">Fixed Product Tax</data>
             <data name="productAttribute/data/attribute_code" xsi:type="string">attr_fpt_code_%isolation%</data>
@@ -168,7 +168,7 @@
             <constraint name="Magento\Catalog\Test\Constraint\AssertAddedProductAttributeOnProductForm" />
         </variation>
         <variation name="CreateProductAttributeEntityTestVariation9">
-            <data name="productTemplate/dataset" xsi:type="string">custom_attribute_set</data>
+            <data name="attributeSet/dataset" xsi:type="string">custom_attribute_set</data>
             <data name="productAttribute/data/frontend_label" xsi:type="string">Text_Field_Admin_%isolation%</data>
             <data name="productAttribute/data/frontend_input" xsi:type="string">Text Field</data>
             <data name="productAttribute/data/is_required" xsi:type="string">Yes</data>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.php
index a3c0028f6e7..32b9303f802 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.php
@@ -13,7 +13,7 @@ use Magento\Mtf\TestCase\Injectable;
 
 /**
  * Preconditions:
- * 1. Create Product template, based on Default.
+ * 1. Create Attribute set, based on Default.
  * 2. Create product attribute and add to created template.
  *
  * Test Flow:
@@ -64,14 +64,14 @@ class DeleteAssignedToTemplateProductAttributeTest extends Injectable
     /**
      * Run test.
      *
-     * @param CatalogAttributeSet $productTemplate
+     * @param CatalogAttributeSet $attributeSet
      * @return array
      */
-    public function test(CatalogAttributeSet $productTemplate)
+    public function test(CatalogAttributeSet $attributeSet)
     {
         // Precondition
-        $productTemplate->persist();
-        $attribute = $productTemplate->getDataFieldConfig('assigned_attributes')['source']->getAttributes()[0];
+        $attributeSet->persist();
+        $attribute = $attributeSet->getDataFieldConfig('assigned_attributes')['source']->getAttributes()[0];
 
         // Steps
         $filter = ['attribute_code' => $attribute->getAttributeCode()];
@@ -80,6 +80,6 @@ class DeleteAssignedToTemplateProductAttributeTest extends Injectable
         $this->attributeNew->getPageActions()->delete();
         $this->attributeNew->getModalBlock()->acceptAlert();
 
-        return ['productTemplate' => $productTemplate, 'attribute' => $attribute];
+        return ['attributeSet' => $attributeSet, 'attribute' => $attribute];
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.xml
index 75b7694459a..f864cc8afa7 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.xml
@@ -8,16 +8,16 @@
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/variations.xsd">
     <testCase name="Magento\Catalog\Test\TestCase\ProductAttribute\DeleteAssignedToTemplateProductAttributeTest" summary="Delete Assigned to Template Product Attribute" ticketId="MAGETWO-26011">
         <variation name="DeleteAssignedToTemplateProductAttributeTestVariation1">
-            <data name="productTemplate/dataset" xsi:type="string">custom_attribute_set</data>
-            <data name="productTemplate/data/assigned_attributes/dataset" xsi:type="string">attribute_type_dropdown</data>
+            <data name="attributeSet/dataset" xsi:type="string">custom_attribute_set</data>
+            <data name="attributeSet/data/assigned_attributes/dataset" xsi:type="string">attribute_type_dropdown</data>
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeSuccessDeleteMessage" />
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeAbsenceInGrid" />
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeAbsenceInTemplateGroups" />
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeAbsenceInUnassignedAttributes" />
         </variation>
         <variation name="DeleteAssignedToTemplateProductAttributeTestVariation2">
-            <data name="productTemplate/dataset" xsi:type="string">default</data>
-            <data name="productTemplate/data/assigned_attributes/dataset" xsi:type="string">attribute_type_text_field</data>
+            <data name="attributeSet/dataset" xsi:type="string">default</data>
+            <data name="attributeSet/data/assigned_attributes/dataset" xsi:type="string">attribute_type_text_field</data>
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeSuccessDeleteMessage" />
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeAbsenceInGrid" />
             <constraint name="Magento\ConfigurableProduct\Test\Constraint\AssertProductAttributeAbsenceInVariationsSearch" />
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAttributeSetTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAttributeSetTest.php
index d996e70adb4..b6c3875db64 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAttributeSetTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAttributeSetTest.php
@@ -13,7 +13,7 @@ use Magento\Mtf\Fixture\FixtureFactory;
 use Magento\Mtf\TestCase\Injectable;
 
 /**
- * Test Creation for Delete Attribute Set (Product Template)
+ * Test Creation for Delete Attribute Set (Attribute Set)
  *
  * Preconditions:
  * 1. An attribute is created.
@@ -22,8 +22,8 @@ use Magento\Mtf\TestCase\Injectable;
  *
  * Test Flow:
  * 1. Log in to Backend.
- * 2. Navigate to Stores > Attributes > Product Template.
- * 3. Open created Product Template.
+ * 2. Navigate to Stores > Attributes > Attribute Set.
+ * 3. Open created Attribute Set.
  * 4. Click 'Delete' button.
  * 5. Perform all assertions.
  *
@@ -70,26 +70,26 @@ class DeleteAttributeSetTest extends Injectable
      * Run DeleteAttributeSet test
      *
      * @param FixtureFactory $fixtureFactory
-     * @param CatalogAttributeSet $productTemplate
+     * @param CatalogAttributeSet $attributeSet
      * @return array
      */
-    public function test(FixtureFactory $fixtureFactory, CatalogAttributeSet $productTemplate)
+    public function test(FixtureFactory $fixtureFactory, CatalogAttributeSet $attributeSet)
     {
         // Precondition
-        $productTemplate->persist();
+        $attributeSet->persist();
         $product = $fixtureFactory->createByCode(
             'catalogProductSimple',
             [
                 'dataset' => 'default',
                 'data' => [
-                    'attribute_set_id' => ['attribute_set' => $productTemplate],
+                    'attribute_set_id' => ['attribute_set' => $attributeSet],
                 ],
             ]
         );
         $product->persist();
 
         // Steps
-        $filter = ['set_name' => $productTemplate->getAttributeSetName()];
+        $filter = ['set_name' => $attributeSet->getAttributeSetName()];
         $this->productSetIndex->open();
         $this->productSetIndex->getGrid()->searchAndOpen($filter);
         $this->productSetEdit->getPageActions()->delete();
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAttributeSetTest.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAttributeSetTest.xml
index b4e1608eef6..b10b1444aa3 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAttributeSetTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAttributeSetTest.xml
@@ -6,13 +6,13 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/variations.xsd">
-    <testCase name="Magento\Catalog\Test\TestCase\ProductAttribute\DeleteAttributeSetTest" summary="Delete Attribute Set (Product Template)" ticketId="MAGETWO-25473">
+    <testCase name="Magento\Catalog\Test\TestCase\ProductAttribute\DeleteAttributeSetTest" summary="Delete Attribute Set (Attribute Set)" ticketId="MAGETWO-25473">
         <variation name="DeleteAttributeSetTestVariation1">
-            <data name="productTemplate/dataset" xsi:type="string">custom_attribute_set</data>
-            <data name="productTemplate/data/assigned_attributes/dataset" xsi:type="string">default</data>
+            <data name="attributeSet/dataset" xsi:type="string">custom_attribute_set</data>
+            <data name="attributeSet/data/assigned_attributes/dataset" xsi:type="string">default</data>
             <data name="product/dataset" xsi:type="string">default</data>
-            <constraint name="Magento\Catalog\Test\Constraint\AssertProductTemplateSuccessDeleteMessage" />
-            <constraint name="Magento\Catalog\Test\Constraint\AssertProductTemplateNotInGrid" />
+            <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeSetSuccessDeleteMessage" />
+            <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeSetNotInGrid" />
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductNotInGrid" />
         </variation>
     </testCase>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/UpdateAttributeSetTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/UpdateAttributeSetTest.php
index 0939c76aadb..96b3e5971e1 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/UpdateAttributeSetTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/UpdateAttributeSetTest.php
@@ -21,12 +21,12 @@ use Magento\Mtf\TestCase\Injectable;
  *
  * Test Flow:
  * 1. Log in to Backend.
- * 2. Navigate to Stores > Attributes > Product Template.
- * 3. Open created Product Template.
+ * 2. Navigate to Stores > Attributes > Attribute Set.
+ * 3. Open created Attribute Set.
  * 4. Click 'Add New' button to create new group
  * 5. Add created Product Attribute to created group.
  * 6. Fill out other fields data according to data set.
- * 7. Save Product Template.
+ * 7. Save Attribute Set.
  * 8. Preform all assertions.
  *
  * @group Product_Attributes_(MX)
@@ -69,7 +69,7 @@ class UpdateAttributeSetTest extends Injectable
     }
 
     /**
-     * Run UpdateProductTemplate test
+     * Run UpdateAttributeSet test
      *
      * @param CatalogAttributeSet $attributeSet
      * @param CatalogAttributeSet $attributeSetOriginal
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/UpdateAttributeSetTest.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/UpdateAttributeSetTest.xml
index 7a24dab7243..4c10e0aa85c 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/UpdateAttributeSetTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/UpdateAttributeSetTest.xml
@@ -6,17 +6,17 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/variations.xsd">
-    <testCase name="Magento\Catalog\Test\TestCase\ProductAttribute\UpdateAttributeSetTest" summary="Update Product Template" ticketId="MAGETWO-26251">
+    <testCase name="Magento\Catalog\Test\TestCase\ProductAttribute\UpdateAttributeSetTest" summary="Update Attribute Set" ticketId="MAGETWO-26251">
         <variation name="UpdateAttributeSetTestVariation1">
-            <data name="attributeSet/data/attribute_set_name" xsi:type="string">ProductTemplateEdit1%isolation%</data>
+            <data name="attributeSet/data/attribute_set_name" xsi:type="string">AttributeSetEdit1%isolation%</data>
             <data name="attributeSet/data/group" xsi:type="string">Custom-group%isolation%</data>
             <data name="attributeSetOriginal/dataset" xsi:type="string">custom_attribute_set</data>
             <data name="productAttributeOriginal/dataset" xsi:type="string">attribute_type_text_field</data>
-            <constraint name="Magento\Catalog\Test\Constraint\AssertProductTemplateSuccessSaveMessage" />
-            <constraint name="Magento\Catalog\Test\Constraint\AssertProductTemplateForm" />
-            <constraint name="Magento\Catalog\Test\Constraint\AssertProductTemplateInGrid" />
-            <constraint name="Magento\Catalog\Test\Constraint\AssertProductTemplateOnProductForm" />
-            <constraint name="Magento\Catalog\Test\Constraint\AssertProductTemplateGroupOnProductForm" />
+            <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeSetSuccessSaveMessage" />
+            <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeSetForm" />
+            <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeSetInGrid" />
+            <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeSetOnProductForm" />
+            <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeSetGroupOnProductForm" />
         </variation>
     </testCase>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/UpdateProductAttributeEntityTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/UpdateProductAttributeEntityTest.php
index 8429c349f0c..1f346283461 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/UpdateProductAttributeEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/UpdateProductAttributeEntityTest.php
@@ -16,7 +16,7 @@ use Magento\Mtf\TestCase\Injectable;
  * Preconditions:
  * Dataset : AttributeOptions
  * 1. Attribute is created (Attribute)
- * 2. Attribute set is created (Product Template)
+ * 2. Attribute set is created (Attribute Set)
  *
  * Test Flow:
  * 1. Log in to Backend.
@@ -41,7 +41,7 @@ class UpdateProductAttributeEntityTest extends Injectable
      *
      * @param CatalogProductAttribute $productAttributeOriginal
      * @param CatalogProductAttribute $attribute
-     * @param CatalogAttributeSet $productTemplate
+     * @param CatalogAttributeSet $attributeSet
      * @param CatalogProductAttributeIndex $attributeIndex
      * @param CatalogProductAttributeNew $attributeNew
      * @return void
@@ -49,12 +49,12 @@ class UpdateProductAttributeEntityTest extends Injectable
     public function testUpdateProductAttribute(
         CatalogProductAttribute $productAttributeOriginal,
         CatalogProductAttribute $attribute,
-        CatalogAttributeSet $productTemplate,
+        CatalogAttributeSet $attributeSet,
         CatalogProductAttributeIndex $attributeIndex,
         CatalogProductAttributeNew $attributeNew
     ) {
         //Precondition
-        $productTemplate->persist();
+        $attributeSet->persist();
         $productAttributeOriginal->persist();
 
         $filter = [
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/UpdateProductAttributeEntityTest.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/UpdateProductAttributeEntityTest.xml
index 11b2cbcd6b5..c9378de1a26 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/UpdateProductAttributeEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/UpdateProductAttributeEntityTest.xml
@@ -8,7 +8,7 @@
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/variations.xsd">
     <testCase name="Magento\Catalog\Test\TestCase\ProductAttribute\UpdateProductAttributeEntityTest" summary="Update Product Attribute" ticketId="MAGETWO-23459">
         <variation name="UpdateProductAttributeEntityTestVariation1">
-            <data name="productTemplate/dataset" xsi:type="string">custom_attribute_set</data>
+            <data name="attributeSet/dataset" xsi:type="string">custom_attribute_set</data>
             <data name="productAttributeOriginal/dataset" xsi:type="string">attribute_type_text_field</data>
             <data name="attribute/data/frontend_label" xsi:type="string">Text_Field_%isolation%</data>
             <data name="attribute/data/is_required" xsi:type="string">Yes</data>
@@ -28,7 +28,7 @@
             <constraint name="Magento\Catalog\Test\Constraint\AssertAddedProductAttributeOnProductForm" />
         </variation>
         <variation name="UpdateProductAttributeEntityTestVariation2">
-            <data name="productTemplate/dataset" xsi:type="string">custom_attribute_set</data>
+            <data name="attributeSet/dataset" xsi:type="string">custom_attribute_set</data>
             <data name="productAttributeOriginal/dataset" xsi:type="string">attribute_type_dropdown</data>
             <data name="attribute/data/frontend_label" xsi:type="string">Dropdown_%isolation%</data>
             <data name="attribute/data/options/dataset" xsi:type="string">default</data>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/AddAttributeToProductTemplateStep.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/AddAttributeToProductTemplateStep.php
index e022906b29b..78cb0adbca2 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/AddAttributeToProductTemplateStep.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/AddAttributeToProductTemplateStep.php
@@ -16,7 +16,7 @@ use Magento\Mtf\TestStep\TestStepInterface;
 /**
  * Move attribute To attribute set.
  */
-class AddAttributeToProductTemplateStep implements TestStepInterface
+class AddAttributeToAttributeSetStep implements TestStepInterface
 {
     /**
      * Catalog ProductSet Index page.
@@ -44,27 +44,27 @@ class AddAttributeToProductTemplateStep implements TestStepInterface
      *
      * @var CatalogAttributeSet
      */
-    protected $productTemplate;
+    protected $attributeSet;
 
     /**
      * @constructor
      * @param CatalogProductSetIndex $catalogProductSetIndex
      * @param CatalogProductSetEdit $catalogProductSetEdit
      * @param CatalogProductAttribute $attribute
-     * @param CatalogAttributeSet $productTemplate
+     * @param CatalogAttributeSet $attributeSet
      * @param FixtureFactory $fixtureFactory
      */
     public function __construct(
         CatalogProductSetIndex $catalogProductSetIndex,
         CatalogProductSetEdit $catalogProductSetEdit,
         CatalogProductAttribute $attribute,
-        CatalogAttributeSet $productTemplate,
+        CatalogAttributeSet $attributeSet,
         FixtureFactory $fixtureFactory
     ) {
         $this->catalogProductSetIndex = $catalogProductSetIndex;
         $this->catalogProductSetEdit = $catalogProductSetEdit;
         $this->attribute = $attribute;
-        $this->productTemplate = $productTemplate;
+        $this->attributeSet = $attributeSet;
         $this->fixtureFactory = $fixtureFactory;
     }
 
@@ -75,7 +75,7 @@ class AddAttributeToProductTemplateStep implements TestStepInterface
      */
     public function run()
     {
-        $filterAttribute = ['set_name' => $this->productTemplate->getAttributeSetName()];
+        $filterAttribute = ['set_name' => $this->attributeSet->getAttributeSetName()];
         $this->catalogProductSetIndex->open()->getGrid()->searchAndOpen($filterAttribute);
         $this->catalogProductSetEdit->getAttributeSetEditBlock()->moveAttribute($this->attribute->getData());
         $this->catalogProductSetEdit->getPageActions()->save();
@@ -86,7 +86,7 @@ class AddAttributeToProductTemplateStep implements TestStepInterface
             [
                 'dataset' => 'product_with_category_with_anchor',
                 'data' => [
-                    'attribute_set_id' => ['attribute_set' => $this->productTemplate],
+                    'attribute_set_id' => ['attribute_set' => $this->attributeSet],
                 ],
             ]
         );
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/CreateProductTemplateStep.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/CreateProductTemplateStep.php
index e8b106042af..d844cccdc24 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/CreateProductTemplateStep.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/CreateProductTemplateStep.php
@@ -12,24 +12,24 @@ use Magento\Mtf\TestStep\TestStepInterface;
 /**
  * Create product attribute template using handler.
  */
-class CreateProductTemplateStep implements TestStepInterface
+class CreateAttributeSetStep implements TestStepInterface
 {
     /**
      * CatalogAttributeSet fixture.
      *
      * @var string
      */
-    protected $productTemplate;
+    protected $attributeSet;
 
     /**
      * Preparing step properties.
      *
      * @constructor
-     * @param CatalogAttributeSet $productTemplate
+     * @param CatalogAttributeSet $attributeSet
      */
-    public function __construct(CatalogAttributeSet $productTemplate)
+    public function __construct(CatalogAttributeSet $attributeSet)
     {
-        $this->productTemplate = $productTemplate;
+        $this->attributeSet = $attributeSet;
     }
 
     /**
@@ -39,8 +39,8 @@ class CreateProductTemplateStep implements TestStepInterface
      */
     public function run()
     {
-        $this->productTemplate->persist();
+        $this->attributeSet->persist();
 
-        return ['productTemplate' => $this->productTemplate];
+        return ['attributeSet' => $this->attributeSet];
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/SaveProductTemplateStep.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/SaveProductTemplateStep.php
index 759f036f3f8..2b7e0ac641f 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/SaveProductTemplateStep.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/SaveProductTemplateStep.php
@@ -12,7 +12,7 @@ use Magento\Mtf\TestStep\TestStepInterface;
 /**
  * Save attributeSet on attribute set page.
  */
-class SaveProductTemplateStep implements TestStepInterface
+class SaveAttributeSetStep implements TestStepInterface
 {
     /**
      * Catalog ProductSet Edit page.
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/etc/di.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/etc/di.xml
index c02f461a875..6d79f29a5ed 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/etc/di.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/etc/di.xml
@@ -76,22 +76,22 @@
             <argument name="severity" xsi:type="string">middle</argument>
         </arguments>
     </type>
-    <type name="Magento\Catalog\Test\Constraint\AssertProductTemplateSuccessSaveMessage">
+    <type name="Magento\Catalog\Test\Constraint\AssertAttributeSetSuccessSaveMessage">
         <arguments>
             <argument name="severity" xsi:type="string">high</argument>
         </arguments>
     </type>
-    <type name="Magento\Catalog\Test\Constraint\AssertProductTemplateForm">
+    <type name="Magento\Catalog\Test\Constraint\AssertAttributeSetForm">
         <arguments>
             <argument name="severity" xsi:type="string">high</argument>
         </arguments>
     </type>
-    <type name="Magento\Catalog\Test\Constraint\AssertProductTemplateInGrid">
+    <type name="Magento\Catalog\Test\Constraint\AssertAttributeSetInGrid">
         <arguments>
             <argument name="severity" xsi:type="string">high</argument>
         </arguments>
     </type>
-    <type name="Magento\Catalog\Test\Constraint\AssertProductTemplateOnProductForm">
+    <type name="Magento\Catalog\Test\Constraint\AssertAttributeSetOnProductForm">
         <arguments>
             <argument name="severity" xsi:type="string">high</argument>
         </arguments>
@@ -126,7 +126,7 @@
             <argument name="severity" xsi:type="string">high</argument>
         </arguments>
     </type>
-    <type name="Magento\Catalog\Test\Constraint\AssertProductTemplateGroupOnProductForm">
+    <type name="Magento\Catalog\Test\Constraint\AssertAttributeSetGroupOnProductForm">
         <arguments>
             <argument name="severity" xsi:type="string">high</argument>
         </arguments>
@@ -136,7 +136,7 @@
             <argument name="severity" xsi:type="string">high</argument>
         </arguments>
     </type>
-    <type name="Magento\Catalog\Test\Constraint\AssertProductTemplateSuccessDeleteMessage">
+    <type name="Magento\Catalog\Test\Constraint\AssertAttributeSetSuccessDeleteMessage">
         <arguments>
             <argument name="severity" xsi:type="string">high</argument>
         </arguments>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/etc/testcase.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/etc/testcase.xml
index 4e02d8c777c..c1d721c45f3 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/etc/testcase.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/etc/testcase.xml
@@ -16,12 +16,12 @@
         <step name="setDefaultAttributeValue" module="Magento_Catalog" next="saveProduct"/>
         <step name="saveProduct" module="Magento_Catalog"/>
     </scenario>
-    <scenario name="CreateProductAttributeEntityTest" firstStep="createProductTemplate">
-        <step name="createProductTemplate" module="Magento_Catalog" next="openProductAttributesPage"/>
+    <scenario name="CreateProductAttributeEntityTest" firstStep="createAttributeSet">
+        <step name="createAttributeSet" module="Magento_Catalog" next="openProductAttributesPage"/>
         <step name="openProductAttributesPage" module="Magento_Catalog" next="addNewAttribute"/>
         <step name="addNewAttribute" module="Magento_Catalog" next="fillAttributeForm"/>
         <step name="fillAttributeForm" module="Magento_Catalog" next="saveAttribute"/>
-        <step name="saveAttribute" module="Magento_Catalog" next="addAttributeToProductTemplate"/>
-        <step name="addAttributeToProductTemplate" module="Magento_Catalog"/>
+        <step name="saveAttribute" module="Magento_Catalog" next="addAttributeToAttributeSet"/>
+        <step name="addAttributeToAttributeSet" module="Magento_Catalog"/>
     </scenario>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertProductAttributeAbsenceInVariationsSearch.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertProductAttributeAbsenceInVariationsSearch.php
index 1c7edf16fe5..192296493ba 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertProductAttributeAbsenceInVariationsSearch.php
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertProductAttributeAbsenceInVariationsSearch.php
@@ -15,7 +15,7 @@ use Magento\Mtf\Constraint\AbstractConstraint;
 
 /**
  * Class AssertProductAttributeAbsenceInVariationsSearch
- * Check that deleted attribute can't be added to product template on Product Page via Add Attribute control
+ * Check that deleted attribute can't be added to attribute set on Product Page via Add Attribute control
  */
 class AssertProductAttributeAbsenceInVariationsSearch extends AbstractConstraint
 {
@@ -25,7 +25,7 @@ class AssertProductAttributeAbsenceInVariationsSearch extends AbstractConstraint
     const TAB_VARIATIONS = 'variations';
 
     /**
-     * Assert that deleted attribute can't be added to product template on Product Page via Add Attribute control
+     * Assert that deleted attribute can't be added to attribute set on Product Page via Add Attribute control
      *
      * @param CatalogProductAttribute $productAttribute
      * @param CatalogProductIndex $productGrid
diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/CreateSalesRuleEntityTest.xml b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/CreateSalesRuleEntityTest.xml
index 4c384ea3f88..c75becfb6b4 100644
--- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/CreateSalesRuleEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/CreateSalesRuleEntityTest.xml
@@ -249,7 +249,7 @@
             <data name="salesRule/data/website_ids/0" xsi:type="string">Main Website</data>
             <data name="salesRule/data/customer_group_ids/0" xsi:type="string">NOT LOGGED IN</data>
             <data name="salesRule/data/coupon_type" xsi:type="string">No Coupon</data>
-            <data name="salesRule/data/conditions_serialized" xsi:type="string">{Product attribute combination:[Product Template|is|Default]}</data>
+            <data name="salesRule/data/conditions_serialized" xsi:type="string">{Product attribute combination:[Attribute Set|is|Default]}</data>
             <data name="salesRule/data/simple_action" xsi:type="string">Percent of product price discount</data>
             <data name="salesRule/data/discount_amount" xsi:type="string">50</data>
             <data name="salesRule/data/apply_to_shipping" xsi:type="string">No</data>
diff --git a/dev/tests/functional/tests/app/Magento/Weee/Test/TestCase/CreateTaxWithFptTest.php b/dev/tests/functional/tests/app/Magento/Weee/Test/TestCase/CreateTaxWithFptTest.php
index 1bdedf647cb..ce13fcc3741 100644
--- a/dev/tests/functional/tests/app/Magento/Weee/Test/TestCase/CreateTaxWithFptTest.php
+++ b/dev/tests/functional/tests/app/Magento/Weee/Test/TestCase/CreateTaxWithFptTest.php
@@ -24,15 +24,15 @@ use Magento\Mtf\TestCase\Injectable;
  * 7. Go to Stores > Attributes > Product and add new attribute.
  * 8. Select Fixed Product Tax type and fill attribute label.
  * 9. Save attribute.
- * 10. Go to Stores > Attributes > Product Template.
- * 11. Add new product template based on default.
+ * 10. Go to Stores > Attributes > Attribute Set.
+ * 11. Add new attribute set based on default.
  * 12. Add created FPT attribute to Product Details group and fill set name.
  * 13. Save attribute set.
  *
  * Steps:
  * 1. Go to Products > Catalog.
  * 2. Add new product.
- * 3. Select created product template.
+ * 3. Select created attribute set.
  * 4. Fill data according to dataset.
  * 5. Save product.
  * 6. Go to Stores > Configuration.
@@ -69,12 +69,12 @@ class CreateTaxWithFptTest extends Injectable
         $this->fixtureFactory = $fixtureFactory;
         $customer = $fixtureFactory->createByCode('customer', ['dataset' => 'johndoe_with_addresses']);
         $customer->persist();
-        $productTemplate = $this->fixtureFactory
+        $attributeSet = $this->fixtureFactory
             ->createByCode('catalogAttributeSet', ['dataset' => 'custom_attribute_set_with_fpt']);
-        $productTemplate->persist();
+        $attributeSet->persist();
         return [
             'customer' => $customer,
-            'productTemplate' => $productTemplate
+            'attributeSet' => $attributeSet
         ];
     }
 
@@ -97,7 +97,7 @@ class CreateTaxWithFptTest extends Injectable
      *
      * @param string $configData
      * @param Customer $customer
-     * @param CatalogAttributeSet $productTemplate
+     * @param CatalogAttributeSet $attributeSet
      * @param array $productData
      * @return array
      */
@@ -105,12 +105,12 @@ class CreateTaxWithFptTest extends Injectable
         $productData,
         $configData,
         Customer $customer,
-        CatalogAttributeSet $productTemplate
+        CatalogAttributeSet $attributeSet
     ) {
         $this->fixtureFactory->createByCode('taxRule', ['dataset' => 'tax_rule_default'])->persist();
         $product = $this->fixtureFactory->createByCode(
             'catalogProductSimple',
-            ['dataset' => $productData, 'data' => ['attribute_set_id' => ['attribute_set' => $productTemplate]]]
+            ['dataset' => $productData, 'data' => ['attribute_set_id' => ['attribute_set' => $attributeSet]]]
         );
         $product->persist();
         $this->objectManager->create(
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/Set/DeleteTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/Set/DeleteTest.php
index 6fdab58458c..ddd37fc1cb6 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/Set/DeleteTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/Set/DeleteTest.php
@@ -21,7 +21,7 @@ class DeleteTest extends \Magento\TestFramework\TestCase\AbstractBackendControll
 
         $this->assertNull($this->getAttributeSetByName('empty_attribute_set'));
         $this->assertSessionMessages(
-            $this->equalTo(['The product template has been removed.']),
+            $this->equalTo(['The attribute set has been removed.']),
             MessageInterface::TYPE_SUCCESS
         );
         $this->assertRedirect($this->stringContains('catalog/product_set/index/'));
diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
index cf42cd0950a..600e6d97eaa 100755
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
@@ -3949,8 +3949,8 @@ return [
     ['Magento\Catalog\Ui\Component\Listing\Filters'],
     ['Magento\Customer\Ui\Component\Listing\Filters'],
     ['Magento\Catalog\Block\Product\TemplateSelector'],
-    ['Magento\Downloadable\Controller\Adminhtml\Downloadable\Product\Edit\SuggestProductTemplates'],
-    ['Magento\Bundle\Controller\Adminhtml\Bundle\Product\Edit\SuggestProductTemplates'],
+    ['Magento\Downloadable\Controller\Adminhtml\Downloadable\Product\Edit\SuggestAttributeSets'],
+    ['Magento\Bundle\Controller\Adminhtml\Bundle\Product\Edit\SuggestAttributeSets'],
     ['Magento\ConfigurableProduct\Block\Adminhtml\Product\Edit\Tab\Super\Config\Attribute'],
     ['Magento\Wishlist\Model\Observer'],
     ['Magento\Swatches\Model\Observer', 'Magento\Swatches\Observer\*'],
-- 
GitLab


From dbabe3dd62b7417794295a3cd5a93b598cb9a177 Mon Sep 17 00:00:00 2001
From: Vitalii Zabaznov <vzabaznov@ebay.com>
Date: Tue, 20 Oct 2015 16:33:57 +0300
Subject: [PATCH 099/370] MAGETWO-44109: Import Custom Options grid contains
 Downloadable product if Import Custom Options for Simple product

---
 .../Block/Adminhtml/Product/Edit/Tab/Options/Option.php      | 5 +++++
 .../Block/Adminhtml/Product/Edit/Tab/Options/Popup/Grid.php  | 2 --
 .../templates/catalog/product/edit/options/option.phtml      | 2 +-
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Option.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Option.php
index f507d9ee30e..3b1b57e3535 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Option.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Option.php
@@ -461,4 +461,9 @@ class Option extends Widget
     {
         return $this->getUrl('catalog/*/customOptions');
     }
+
+    public function getCurrentProductId()
+    {
+        return $this->getProduct()->getId();
+    }
 }
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Popup/Grid.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Popup/Grid.php
index e7aeff7affa..d98abfd533f 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Popup/Grid.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Popup/Grid.php
@@ -75,8 +75,6 @@ class Grid extends \Magento\Catalog\Block\Adminhtml\Product\Grid
             null
         );
 
-        $this->_productFactory->create()->getMediaGalleryEntries();
-
         return $this;
     }
 
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options/option.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options/option.phtml
index f0baae3a2bd..778c8657a83 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options/option.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/options/option.phtml
@@ -97,7 +97,7 @@ jQuery(function ($) {
             'customOptionsUrl' => $block->getCustomOptionsUrl(),
             'isReadonly' => $block->isReadonly(),
             'itemCount' => $block->getItemCount(),
-            'currentProductId' => $block->getRequest()->getParam('id'),
+            'currentProductId' => $block->getCurrentProductId(),
         ]
     )?>);
     //adding data to templates
-- 
GitLab


From 35bbb0a79b240cc3bd0ce480b3f1feddb67fbcaa Mon Sep 17 00:00:00 2001
From: Vitalii Zabaznov <vzabaznov@ebay.com>
Date: Tue, 20 Oct 2015 16:44:54 +0300
Subject: [PATCH 100/370] MAGETWO-44109: Import Custom Options grid contains
 Downloadable product if Import Custom Options for Simple product

---
 .../Block/Adminhtml/Product/Edit/Tab/Options/Option.php      | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Option.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Option.php
index 3b1b57e3535..7dbacd96990 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Option.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Option.php
@@ -462,6 +462,11 @@ class Option extends Widget
         return $this->getUrl('catalog/*/customOptions');
     }
 
+    /**
+     * Return current product id
+     *
+     * @return null|int
+     */
     public function getCurrentProductId()
     {
         return $this->getProduct()->getId();
-- 
GitLab


From 7a164e215e20be788c61d369c1efebfb70792e2b Mon Sep 17 00:00:00 2001
From: Mikalai_Shostka <mikalai_shostka@epam.com>
Date: Tue, 20 Oct 2015 16:45:59 +0300
Subject: [PATCH 101/370] MAGETWO-44332: After click to add video button
 appears alert message

Fix text
---
 .../Block/Adminhtml/Product/Edit/NewVideo.php         | 11 ++++++-----
 .../Magento/ProductVideo/etc/adminhtml/system.xml     |  2 +-
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php b/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
index 82c7ac0de8a..b04602152ee 100644
--- a/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
+++ b/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
@@ -270,15 +270,16 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
      */
     protected function getNoteVideoUrl()
     {
-        $result = __('Youtube or Vimeo supported');
+        $result = __('Youtube and Vimeo services are supported.');
         if (is_null($this->mediaHelper->getYouTubeApiKey())) {
             $result = __(
-                '<div class="note_youtube_api_key">'
-                . 'Vimeo supported. '
-                . '<br>In order to add YouTube video please <a href="%1">add YouTube API key</a> in video configuration settings.'
-                . '</div>',
+                'The vimeo service is supported,'
+                . ' in order to add an support for the youtube service'
+                . ' please <a href="%1">specify</a> an youtube API key within a system configurations.'
+                ,
                 $this->getConfigApiKeyUrl()
             );
+            $result = '<div class="note_youtube_api_key">' . $result . '</div>';
         }
         return $result;
     }
diff --git a/app/code/Magento/ProductVideo/etc/adminhtml/system.xml b/app/code/Magento/ProductVideo/etc/adminhtml/system.xml
index 5d828ad2cdb..11884674b83 100644
--- a/app/code/Magento/ProductVideo/etc/adminhtml/system.xml
+++ b/app/code/Magento/ProductVideo/etc/adminhtml/system.xml
@@ -11,7 +11,7 @@
             <group id="product_video" translate="label" type="text" sortOrder="350" showInDefault="1" showInWebsite="1" showInStore="0">
                 <label>Product Video</label>
                 <field id="youtube_api_key" translate="label" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="0">
-                    <label>YouTube API key</label>
+                    <label>Youtube API key</label>
                 </field>
             </group>
         </section>
-- 
GitLab


From d1c84b7d8898e3550704689e4229c016d1836f2c Mon Sep 17 00:00:00 2001
From: Sergey Ivashchenko <sivashchenko@ebay.com>
Date: Tue, 20 Oct 2015 16:58:24 +0300
Subject: [PATCH 102/370] MAGETWO-44155: [GITHUB] Inconsistency of the
 Attribute set / Product teamplace naming

---
 .../{SuggestProductTemplates.php => SuggestAttributeSets.php}     | 0
 .../Product/Edit/{ProductTemplate => AttributeSet}/Form.php       | 0
 .../{AssertProductTemplateForm.php => AssertAttributeSetForm.php} | 0
 ...OnProductForm.php => AssertAttributeSetGroupOnProductForm.php} | 0
 ...sertProductTemplateInGrid.php => AssertAttributeSetInGrid.php} | 0
 ...oductTemplateNotInGrid.php => AssertAttributeSetNotInGrid.php} | 0
 ...plateOnProductForm.php => AssertAttributeSetOnProductForm.php} | 0
 ...leteMessage.php => AssertAttributeSetSuccessDeleteMessage.php} | 0
 ...ssSaveMessage.php => AssertAttributeSetSuccessSaveMessage.php} | 0
 ...ProductTemplateStep.php => AddAttributeToAttributeSetStep.php} | 0
 .../{CreateProductTemplateStep.php => CreateAttributeSetStep.php} | 0
 .../{SaveProductTemplateStep.php => SaveAttributeSetStep.php}     | 0
 12 files changed, 0 insertions(+), 0 deletions(-)
 rename app/code/Magento/Catalog/Controller/Adminhtml/Product/{SuggestProductTemplates.php => SuggestAttributeSets.php} (100%)
 rename app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/{ProductTemplate => AttributeSet}/Form.php (100%)
 rename dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/{AssertProductTemplateForm.php => AssertAttributeSetForm.php} (100%)
 rename dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/{AssertProductTemplateGroupOnProductForm.php => AssertAttributeSetGroupOnProductForm.php} (100%)
 rename dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/{AssertProductTemplateInGrid.php => AssertAttributeSetInGrid.php} (100%)
 rename dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/{AssertProductTemplateNotInGrid.php => AssertAttributeSetNotInGrid.php} (100%)
 rename dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/{AssertProductTemplateOnProductForm.php => AssertAttributeSetOnProductForm.php} (100%)
 rename dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/{AssertProductTemplateSuccessDeleteMessage.php => AssertAttributeSetSuccessDeleteMessage.php} (100%)
 rename dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/{AssertProductTemplateSuccessSaveMessage.php => AssertAttributeSetSuccessSaveMessage.php} (100%)
 rename dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/{AddAttributeToProductTemplateStep.php => AddAttributeToAttributeSetStep.php} (100%)
 rename dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/{CreateProductTemplateStep.php => CreateAttributeSetStep.php} (100%)
 rename dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/{SaveProductTemplateStep.php => SaveAttributeSetStep.php} (100%)

diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/SuggestProductTemplates.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/SuggestAttributeSets.php
similarity index 100%
rename from app/code/Magento/Catalog/Controller/Adminhtml/Product/SuggestProductTemplates.php
rename to app/code/Magento/Catalog/Controller/Adminhtml/Product/SuggestAttributeSets.php
diff --git a/app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/ProductTemplate/Form.php b/app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/AttributeSet/Form.php
similarity index 100%
rename from app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/ProductTemplate/Form.php
rename to app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/AttributeSet/Form.php
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateForm.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAttributeSetForm.php
similarity index 100%
rename from dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateForm.php
rename to dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAttributeSetForm.php
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateGroupOnProductForm.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAttributeSetGroupOnProductForm.php
similarity index 100%
rename from dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateGroupOnProductForm.php
rename to dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAttributeSetGroupOnProductForm.php
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateInGrid.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAttributeSetInGrid.php
similarity index 100%
rename from dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateInGrid.php
rename to dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAttributeSetInGrid.php
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateNotInGrid.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAttributeSetNotInGrid.php
similarity index 100%
rename from dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateNotInGrid.php
rename to dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAttributeSetNotInGrid.php
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateOnProductForm.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAttributeSetOnProductForm.php
similarity index 100%
rename from dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateOnProductForm.php
rename to dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAttributeSetOnProductForm.php
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAttributeSetSuccessDeleteMessage.php
similarity index 100%
rename from dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateSuccessDeleteMessage.php
rename to dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAttributeSetSuccessDeleteMessage.php
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAttributeSetSuccessSaveMessage.php
similarity index 100%
rename from dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateSuccessSaveMessage.php
rename to dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertAttributeSetSuccessSaveMessage.php
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/AddAttributeToProductTemplateStep.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/AddAttributeToAttributeSetStep.php
similarity index 100%
rename from dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/AddAttributeToProductTemplateStep.php
rename to dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/AddAttributeToAttributeSetStep.php
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/CreateProductTemplateStep.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/CreateAttributeSetStep.php
similarity index 100%
rename from dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/CreateProductTemplateStep.php
rename to dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/CreateAttributeSetStep.php
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/SaveProductTemplateStep.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/SaveAttributeSetStep.php
similarity index 100%
rename from dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/SaveProductTemplateStep.php
rename to dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/SaveAttributeSetStep.php
-- 
GitLab


From 4696a9b4d2d63824856ec5915aeda97e8a7ceb0b Mon Sep 17 00:00:00 2001
From: Andriy Nasinnyk <anasinnyk@ebay.com>
Date: Tue, 20 Oct 2015 16:58:54 +0300
Subject: [PATCH 103/370] MAGETWO-44304: Product grid is broken on Storefront
 Category page if HTML files minification is enabled

---
 lib/internal/Magento/Framework/View/Template/Html/Minifier.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/internal/Magento/Framework/View/Template/Html/Minifier.php b/lib/internal/Magento/Framework/View/Template/Html/Minifier.php
index af80583da16..6b9017a1972 100644
--- a/lib/internal/Magento/Framework/View/Template/Html/Minifier.php
+++ b/lib/internal/Magento/Framework/View/Template/Html/Minifier.php
@@ -117,7 +117,7 @@ class Minifier implements MinifierInterface
             '</',
             preg_replace(
                 '#((?:<\?php\s+(?!echo|print|if|elseif|else)[^\?]*)\?>)\s+#',
-                '$1',
+                '$1 ',
                 preg_replace(
                     '#(?<!' . implode('|', $this->inlineHtmlTags) . ')\> \<#',
                     '><',
-- 
GitLab


From d202e5059ca313db7b699954cf1e85a900ec3ec8 Mon Sep 17 00:00:00 2001
From: Natalia Momotenko <nmomotenko@ebay.com>
Date: Tue, 20 Oct 2015 17:06:26 +0300
Subject: [PATCH 104/370] MAGETWO-44091: Error in registration email after
 static content deployment

---
 .../Magento/luma/Magento_Sales/web/css/source/_email.less   | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/app/design/frontend/Magento/luma/Magento_Sales/web/css/source/_email.less b/app/design/frontend/Magento/luma/Magento_Sales/web/css/source/_email.less
index 8d002c55b8e..9fbeb9458d0 100644
--- a/app/design/frontend/Magento/luma/Magento_Sales/web/css/source/_email.less
+++ b/app/design/frontend/Magento/luma/Magento_Sales/web/css/source/_email.less
@@ -100,7 +100,7 @@
 // ----------------------------------------------
 
 .shipment-track {
-    .table(@table__width, 0);
+    .lib-table(@table__width, 0);
 
     thead,
     tbody {
@@ -127,7 +127,7 @@
 // ----------------------------------------------
 
 .email-items {
-    .table(@table__width, 0);
+    .lib-table(@table__width, 0);
     tfoot {
         > tr {
             > th,
@@ -241,6 +241,6 @@
 
 .email-non-inline() {
     .email-items {
-        .table-overflow();
+        .lib-table-overflow();
     }
 }
-- 
GitLab


From 6a3ecbcd041a234a90f98358d7bcc0fb2850c4aa Mon Sep 17 00:00:00 2001
From: Andriy Nasinnyk <anasinnyk@ebay.com>
Date: Tue, 20 Oct 2015 17:07:39 +0300
Subject: [PATCH 105/370] MAGETWO-44182: Customer custom attribute of type
 'file' prevent to save customer

---
 app/code/Magento/Eav/Model/Entity/AbstractEntity.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Eav/Model/Entity/AbstractEntity.php b/app/code/Magento/Eav/Model/Entity/AbstractEntity.php
index 14147d6849d..c52d87b51b4 100644
--- a/app/code/Magento/Eav/Model/Entity/AbstractEntity.php
+++ b/app/code/Magento/Eav/Model/Entity/AbstractEntity.php
@@ -1296,11 +1296,11 @@ abstract class AbstractEntity extends AbstractResource implements EntityInterfac
                 } elseif (!is_numeric($v) && $v !== $origData[$k] || is_numeric($v) && $v != $origData[$k]) {
                     $update[$attrId] = [
                         'value_id' => $attribute->getBackend()->getEntityValueId($newObject),
-                        'value' => $v,
+                        'value' => is_array($v) ? array_shift($v) : $v,//@TODO: MAGETWO-44182,
                     ];
                 }
             } elseif (!$this->_isAttributeValueEmpty($attribute, $v)) {
-                $insert[$attrId] = $v;
+                $insert[$attrId] = is_array($v) ? array_shift($v) : $v;//@TODO: MAGETWO-44182
             }
         }
 
-- 
GitLab


From 5ef31f3204e73a8e831c15bcdf97d34e1b497919 Mon Sep 17 00:00:00 2001
From: Ivan Gavryshko <igavryshko@ebay.com>
Date: Tue, 20 Oct 2015 09:11:36 -0500
Subject: [PATCH 106/370] MAGETWO-43906: Long database prefix length breaks
 setup

- added prefix length rule description to tooltip
---
 setup/view/magento/setup/add-database.phtml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/setup/view/magento/setup/add-database.phtml b/setup/view/magento/setup/add-database.phtml
index 193630700bb..2417dca08b5 100644
--- a/setup/view/magento/setup/add-database.phtml
+++ b/setup/view/magento/setup/add-database.phtml
@@ -335,7 +335,7 @@
             id="dbTablePrefix"
             class="form-el-input"
             tooltip-placement="right"
-            tooltip="Enter a prefix for database tables created in this installation. Use letters, numbers or underscores, and begin with a letter (Ex: ‘mg1_’)"
+            tooltip="Enter a prefix for database tables created in this installation. Use letters, numbers or underscores, and begin with a letter (Ex: ‘mg1_’). Table prefix length can't be more than 5 characters."
             tooltip-trigger="focus"
             tooltip-append-to-body="true"
             type="text"
-- 
GitLab


From 5872cb296efde2cfb636f50d6bbfe544e6992006 Mon Sep 17 00:00:00 2001
From: "Yushkin, Dmytro" <dyushkin@ebay.com>
Date: Tue, 20 Oct 2015 18:07:35 +0300
Subject: [PATCH 107/370] MAGETWO-44299: Verify @noEscape outputs for shipment
 and payments modules

---
 .../adminhtml/templates/directpost/info.phtml  | 10 +++++-----
 .../view/adminhtml/templates/form.phtml        |  2 +-
 .../frontend/templates/PayPal/shortcut.phtml   |  2 +-
 .../frontend/templates/creditcard/edit.phtml   |  2 +-
 .../view/frontend/templates/form.phtml         |  2 +-
 .../frontend/templates/checkout/success.phtml  | 10 +++++-----
 .../view/adminhtml/templates/form/cc.phtml     |  2 +-
 .../adminhtml/templates/transparent/form.phtml |  6 +++---
 .../adminhtml/templates/transparent/info.phtml |  2 +-
 .../view/frontend/templates/form/cc.phtml      |  2 +-
 .../frontend/templates/transparent/form.phtml  |  6 +++---
 .../frontend/templates/transparent/info.phtml  |  2 +-
 .../templates/billing/agreement/form.phtml     |  2 +-
 .../payment/form/billing/agreement.phtml       |  2 +-
 .../frontend/templates/express/review.phtml    | 12 +++++++-----
 .../express/review/shipping/method.phtml       |  4 ++--
 .../frontend/templates/express/shortcut.phtml  |  4 +---
 .../view/frontend/templates/hss/info.phtml     |  2 +-
 .../templates/payflowadvanced/info.phtml       |  2 +-
 .../frontend/templates/payflowlink/info.phtml  |  2 +-
 .../payment/form/billing/agreement.phtml       |  2 +-
 .../frontend/templates/payment/redirect.phtml  |  2 +-
 .../system/shipping/carrier_config.phtml       | 18 +++++++++---------
 23 files changed, 50 insertions(+), 50 deletions(-)

diff --git a/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/info.phtml b/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/info.phtml
index 6c02076b5a7..9251ad16e72 100644
--- a/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/info.phtml
+++ b/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/info.phtml
@@ -9,7 +9,7 @@
  * @var \Magento\Authorizenet\Block\Transparent\Iframe $block
  * @see \Magento\Authorizenet\Block\Transparent\Iframe
  */
-$code = $block->getMethodCode();
+$code = $block->escapeHtml($block->getMethodCode());
 $method = $block->getMethod();
 $controller = $block->escapeHtml($block->getRequest()->getControllerName());
 $orderUrl = $block->escapeUrl($this->helper('Magento\Authorizenet\Helper\Backend\Data')->getPlaceOrderAdminUrl());
@@ -20,12 +20,12 @@ $ccExpYear = $block->getInfoData('cc_exp_year');
 <!-- IFRAME for request to our server -->
 <iframe id="order-directpost-iframe" allowtransparency="true" frameborder="0" name="iframeSubmitOrder"
         style="display:none;width:100%;background-color:transparent"
-        src="<?php /* @noEscape */ echo $block->getViewFileUrl('blank.html'); ?>">
+        src="<?php echo $block->escapeUrl($block->getViewFileUrl('blank.html')); ?>">
 </iframe>
 <!-- IFRAME for request to Authorize.net -->
 <iframe id="directpost-iframe" allowtransparency="true" frameborder="0"  name="iframeDirectPost"
         style="display:none;width:100%;background-color:transparent"
-        src="<?php /* @noEscape */ echo $block->getViewFileUrl('blank.html'); ?>">
+        src="<?php echo $block->escapeUrl($block->getViewFileUrl('blank.html')); ?>">
 </iframe>
 <fieldset class="admin__fieldset payment-method" id="payment_form_<?php /* @noEscape */ echo $code; ?>"
           style="display:none;">
@@ -124,9 +124,9 @@ $ccExpYear = $block->getInfoData('cc_exp_year');
             '<?php /* @noEscape */ echo $controller; ?>',
             '<?php /* @noEscape */ echo $orderUrl; ?>',
             '<?php echo $block->escapeUrl($method->getCgiUrl()); ?>',
-            '<?php /* @noEscape */ echo $block->getUrl('*/*/save', [
+            '<?php echo $block->escapeUrl($block->getUrl('*/*/save', [
                 '_secure' => $block->getRequest()->isSecure()
-            ]);?>');
+            ]));?>');
 
         <?php if (!$block->isAjaxRequest()): ?>
             });
diff --git a/app/code/Magento/Braintree/view/adminhtml/templates/form.phtml b/app/code/Magento/Braintree/view/adminhtml/templates/form.phtml
index 5610e082e17..508313a2552 100644
--- a/app/code/Magento/Braintree/view/adminhtml/templates/form.phtml
+++ b/app/code/Magento/Braintree/view/adminhtml/templates/form.phtml
@@ -7,7 +7,7 @@
 // @codingStandardsIgnoreFile
 
 /** @var \Magento\Braintree\Block\Form $block */
-$code = $block->getMethodCode();
+$code = $block->escapeHtml($block->getMethodCode());
 $storedCards = $this->helper('\Magento\Braintree\Helper\Createorder')->getLoggedInCustomerCards();
 $useVault = $block->useVault();
 $useCvv = $block->useCvv();
diff --git a/app/code/Magento/Braintree/view/frontend/templates/PayPal/shortcut.phtml b/app/code/Magento/Braintree/view/frontend/templates/PayPal/shortcut.phtml
index 267a6fede06..6edb66bd04c 100644
--- a/app/code/Magento/Braintree/view/frontend/templates/PayPal/shortcut.phtml
+++ b/app/code/Magento/Braintree/view/frontend/templates/PayPal/shortcut.phtml
@@ -42,7 +42,7 @@ $config = [
      class="paypal checkout <?php echo $block->escapeHtml($block->getShowOrPosition()) ?> paypal-logo"
     >
     <fieldset class="fieldset paypal items">
-        <div id="<?php /* @noEscape */ echo $containerId ?>"
+        <div id="<?php echo $block->escapeHtml($containerId); ?>"
              data-mage-init='<?php /* @noEscape */ echo json_encode($config); ?>'></div>
     </fieldset>
 </div>
diff --git a/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml b/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml
index 6fcac2eae9c..44dc85b5404 100644
--- a/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml
+++ b/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml
@@ -164,7 +164,7 @@ $serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonE
                                 class="year required-entry"
                                 data-validate="{required:true}">
                                 <?php foreach ($block->getCcYears() as $k => $v): ?>
-                                    <option value="<?php /* @noEscape */ echo $k ? $k : ''; ?>"
+                                    <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : ''; ?>"
                                         <?php if ($k == $defaultExpYear): ?> selected="selected"<?php endif; ?>>
                                         <?php echo $block->escapeHtml($v); ?>
                                     </option>
diff --git a/app/code/Magento/Braintree/view/frontend/templates/form.phtml b/app/code/Magento/Braintree/view/frontend/templates/form.phtml
index 459a61568cf..41029526cc3 100644
--- a/app/code/Magento/Braintree/view/frontend/templates/form.phtml
+++ b/app/code/Magento/Braintree/view/frontend/templates/form.phtml
@@ -7,7 +7,7 @@
 // @codingStandardsIgnoreFile
 
 /** @var \Magento\Braintree\Block\Form $block */
-$code = $block->getMethodCode();
+$code = $block->escapeHtml($block->getMethodCode());
 $loggedIn = $block->isCustomerLoggedIn();
 $storedCards = $block->getStoredCards();
 $useVault = $loggedIn && $block->useVault() && count($storedCards);
diff --git a/app/code/Magento/Multishipping/view/frontend/templates/checkout/success.phtml b/app/code/Magento/Multishipping/view/frontend/templates/checkout/success.phtml
index dc0c669468d..21b83793d7d 100644
--- a/app/code/Magento/Multishipping/view/frontend/templates/checkout/success.phtml
+++ b/app/code/Magento/Multishipping/view/frontend/templates/checkout/success.phtml
@@ -8,16 +8,16 @@
 
 ?>
 <div class="multicheckout success">
-    <h2 class="subtitle"><?php /* @noEscape */ echo __('Thank you for your purchase!') ?></h2>
-    <p><?php /* @escapeNotVerified */ echo __('Thanks for your order. We\'ll email you order details and tracking information.') ?></p>
+    <h2 class="subtitle"><?php echo $block->escapeHtml(__('Thank you for your purchase!')) ?></h2>
+    <p><?php echo $block->escapeHtml(__('Thanks for your order. We\'ll email you order details and tracking information.')) ?></p>
     <?php if ($_orderIds = $block->getOrderIds()): ?>
     <p class="order-number">
         <?php $flag = false ?>
         <span>
             <?php if (count($_orderIds) > 1): ?>
-                <?php /* @noEscape */ echo __('Your order numbers are: ') ?>
+                <?php echo $block->escapeHtml(__('Your order numbers are: ')) ?>
             <?php else : ?>
-                <?php /* @noEscape */ echo __('Your order number is: ') ?>
+                <?php echo $block->escapeHtml(__('Your order number is: ')) ?>
             <?php endif; ?>
         </span>
         <?php foreach ($_orderIds as $orderId => $incrementId): ?><?php if ($flag): ?><?php echo ', ' ?><?php endif; ?><?php $flag = true ?><a href="<?php /* @escapeNotVerified */ echo $block->getViewOrderUrl($orderId) ?>"><?php /* @escapeNotVerified */ echo $incrementId ?></a><?php endforeach; ?>
@@ -25,6 +25,6 @@
     <?php endif; ?>
     <?php echo $block->getChildHtml() ?>
     <div class="actions">
-        <a class="action continue" title="<?php /* @noEscape */ echo __('Continue Shopping') ?>" href="<?php /* @escapeNotVerified */ echo $block->getContinueUrl() ?>"><span><?php /* @noEscape */ echo __('Continue Shopping') ?></span></a>
+        <a class="action continue" title="<?php echo $block->escapeHtml(__('Continue Shopping')) ?>" href="<?php /* @escapeNotVerified */ echo $block->getContinueUrl() ?>"><span><?php echo $block->escapeHtml(__('Continue Shopping')) ?></span></a>
     </div>
 </div>
diff --git a/app/code/Magento/Payment/view/adminhtml/templates/form/cc.phtml b/app/code/Magento/Payment/view/adminhtml/templates/form/cc.phtml
index ab38d3752a6..f1109afb797 100644
--- a/app/code/Magento/Payment/view/adminhtml/templates/form/cc.phtml
+++ b/app/code/Magento/Payment/view/adminhtml/templates/form/cc.phtml
@@ -8,7 +8,7 @@
 /**
  * @var \Magento\Payment\Block\Adminhtml\Transparent\Form $block
  */
-$code = $block->getMethodCode();
+$code = $block->escapeHtml($block->getMethodCode());
 $ccType = $block->getInfoData('cc_type');
 $ccExpMonth = $block->getInfoData('cc_exp_month');
 $ccExpYear = $block->getInfoData('cc_exp_year');
diff --git a/app/code/Magento/Payment/view/adminhtml/templates/transparent/form.phtml b/app/code/Magento/Payment/view/adminhtml/templates/transparent/form.phtml
index 1bb248e6fd5..0d28d33caea 100644
--- a/app/code/Magento/Payment/view/adminhtml/templates/transparent/form.phtml
+++ b/app/code/Magento/Payment/view/adminhtml/templates/transparent/form.phtml
@@ -7,7 +7,7 @@
 // @codingStandardsIgnoreFile
 
 /** @var \Magento\Payment\Block\Transparent\Form $block */
-$code = $block->getMethodCode();
+$code = $block->escapeHtml($block->getMethodCode());
 $ccType = $block->getInfoData('cc_type');
 $ccExpYear = $block->getInfoData('cc_exp_year');
 $ccExpMonth = $block->getInfoData('cc_exp_month');
@@ -29,7 +29,7 @@ $ccExpMonth = $block->getInfoData('cc_exp_month');
         "controller":"<?php echo $block->escapeHtml($block->getRequest()->getControllerName()); ?>",
         "gateway":"<?php /* @noEscape */ echo $code; ?>",
         "dateDelim":"<?php echo $block->escapeHtml($block->getDateDelim()); ?>",
-        "cardFieldsMap":<?php /* @noEscape */ echo $block->getCardFieldsMap(); ?>,
+        "cardFieldsMap":<?php echo $block->escapeHtml($block->getCardFieldsMap()); ?>,
         "orderSaveUrl":"<?php echo $block->escapeUrl($block->getOrderUrl()); ?>",
         "cgiUrl":"<?php echo $block->escapeUrl($block->getCgiUrl()); ?>",
         "expireYearLength":"<?php echo $block->escapeHtml($block->getMethodConfigData('cc_year_length')); ?>",
@@ -102,7 +102,7 @@ $ccExpMonth = $block->getInfoData('cc_exp_month');
                     data-container="<?php /* @noEscape */ echo $code; ?>-cc-year" data-validate='{required:true}'>
                 <?php foreach ($block->getCcYears() as $k => $v): ?>
                     <option
-                        value="<?php /* @noEscape */ echo $k ? $k : '' ?>"
+                        value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : '' ?>"
                         <?php if ($k == $ccExpYear): ?> selected="selected"<?php endif ?>>
                         <?php echo $block->escapeHtml($v); ?>
                     </option>
diff --git a/app/code/Magento/Payment/view/adminhtml/templates/transparent/info.phtml b/app/code/Magento/Payment/view/adminhtml/templates/transparent/info.phtml
index 8deddb094d1..8b20f64b5a6 100644
--- a/app/code/Magento/Payment/view/adminhtml/templates/transparent/info.phtml
+++ b/app/code/Magento/Payment/view/adminhtml/templates/transparent/info.phtml
@@ -11,6 +11,6 @@
  * @see \Magento\Payment\Block\Transparent\Info
  */
 ?>
-<fieldset id="payment_form_<?php /* @noEscape */ echo $block->getMethodCode(); ?>" style="display:none" class="fieldset items redirect">
+<fieldset id="payment_form_<?php echo $block->escapeHtml($block->getMethodCode()); ?>" style="display:none" class="fieldset items redirect">
     <div><?php echo $block->escapeHtml(__('We\'ll ask for your payment details before you place an order.')); ?></div>
 </fieldset>
diff --git a/app/code/Magento/Payment/view/frontend/templates/form/cc.phtml b/app/code/Magento/Payment/view/frontend/templates/form/cc.phtml
index 05d8d3c02c8..a02de6dbaff 100644
--- a/app/code/Magento/Payment/view/frontend/templates/form/cc.phtml
+++ b/app/code/Magento/Payment/view/frontend/templates/form/cc.phtml
@@ -8,7 +8,7 @@
 /**
  * @var \Magento\Payment\Block\Transparent\Form $block
  */
-$code = $block->getMethodCode();
+$code = $block->escapeHtml($block->getMethodCode());
 $ccType = $block->getInfoData('cc_type');
 $ccExpMonth = $block->getInfoData('cc_exp_month');
 $ccExpYear = $block->getInfoData('cc_exp_year');
diff --git a/app/code/Magento/Payment/view/frontend/templates/transparent/form.phtml b/app/code/Magento/Payment/view/frontend/templates/transparent/form.phtml
index 64ea503996c..a589900d623 100644
--- a/app/code/Magento/Payment/view/frontend/templates/transparent/form.phtml
+++ b/app/code/Magento/Payment/view/frontend/templates/transparent/form.phtml
@@ -7,7 +7,7 @@
 // @codingStandardsIgnoreFile
 
 /** @var \Magento\Payment\Block\Transparent\Form $block */
-$code = $block->getMethodCode();
+$code = $block->escapeHtml($block->getMethodCode());
 $ccExpMonth = $block->getInfoData('cc_exp_month');
 $ccExpYear = $block->getInfoData('cc_exp_year');
 $ccType = $block->getInfoData('cc_type');
@@ -20,7 +20,7 @@ $content = '<img src=\"' . $block->getViewFileUrl('Magento_Checkout::cvv.png') .
 <iframe width="0" height="0" id="<?php /* @noescape */ echo $code; ?>-transparent-iframe"
         data-container="<?php /* @noEscape */ echo $code; ?>-transparent-iframe" allowtransparency="true"
         frameborder="0"  name="iframeTransparent" style="display:none;width:100%;background-color:transparent"
-        src="<?php /* @noEscape */ echo $block->getViewFileUrl('blank.html') ?>"></iframe>
+        src="<?php echo $block->escapeUrl($block->getViewFileUrl('blank.html')) ?>"></iframe>
 <form class="form" id="co-transparent-form" action="#" method="post" data-mage-init='{
     "transparent":{
         "controller":"<?php echo $block->escapeHtml($block->getRequest()->getControllerName()); ?>",
@@ -28,7 +28,7 @@ $content = '<img src=\"' . $block->getViewFileUrl('Magento_Checkout::cvv.png') .
         "orderSaveUrl":"<?php echo $block->escapeUrl($block->getOrderUrl()); ?>",
         "cgiUrl":"<?php echo $block->escapeUrl($block->getCgiUrl()); ?>",
         "dateDelim":"<?php echo $block->escapeHtml($block->getDateDelim()); ?>",
-        "cardFieldsMap":<?php /* @noEscape */ echo $block->getCardFieldsMap(); ?>,
+        "cardFieldsMap":<?php echo $block->escapeHtml($block->getCardFieldsMap()); ?>,
         "nativeAction":"<?php echo $block->escapeUrl($block->getUrl('checkout/onepage/saveOrder', ['_secure' => $block->getRequest()->isSecure()])); ?>"
     }, "validation":[]}'>
     <fieldset class="fieldset ccard <?php /* @noEscape */ echo $code; ?>" id="payment_form_<?php /* @noEscape */ echo $code; ?>">
diff --git a/app/code/Magento/Payment/view/frontend/templates/transparent/info.phtml b/app/code/Magento/Payment/view/frontend/templates/transparent/info.phtml
index c3ce1e5dbb7..84cd69f6e4f 100644
--- a/app/code/Magento/Payment/view/frontend/templates/transparent/info.phtml
+++ b/app/code/Magento/Payment/view/frontend/templates/transparent/info.phtml
@@ -11,7 +11,7 @@
  * @see \Magento\Payment\Block\Transparent\Info
  */
 ?>
-<fieldset id="payment_form_<?php /* @noEscape */ echo $block->getMethodCode(); ?>" style="display:none" class="fieldset items redirect">
+<fieldset id="payment_form_<?php echo $block->escapeHtml($block->getMethodCode()); ?>" style="display:none" class="fieldset items redirect">
     <div>
         <?php echo $block->escapeHtml(__('We\'ll ask for your payment details before you place an order.')); ?>
     </div>
diff --git a/app/code/Magento/Paypal/view/adminhtml/templates/billing/agreement/form.phtml b/app/code/Magento/Paypal/view/adminhtml/templates/billing/agreement/form.phtml
index 0d933a861b5..e1f6c1ac965 100644
--- a/app/code/Magento/Paypal/view/adminhtml/templates/billing/agreement/form.phtml
+++ b/app/code/Magento/Paypal/view/adminhtml/templates/billing/agreement/form.phtml
@@ -7,7 +7,7 @@
 // @codingStandardsIgnoreFile
 /** @var \Magento\Paypal\Block\Adminhtml\Billing\Agreement\View\Form $block */
 ?>
-<?php $code = $block->getMethodCode() ?>
+<?php $code = $block->escapeHtml($block->getMethodCode()) ?>
 <fieldset class="form-list" id="payment_form_<?php /* @noEscape */ echo $code; ?>" style="display:none;">
     <div class="admin__field _required">
         <label for="<?php /* @noEscape */ echo $code; ?>_ba_agreement_id" class="admin__field-label">
diff --git a/app/code/Magento/Paypal/view/adminhtml/templates/payment/form/billing/agreement.phtml b/app/code/Magento/Paypal/view/adminhtml/templates/payment/form/billing/agreement.phtml
index d3a6bab1298..66c2184c310 100644
--- a/app/code/Magento/Paypal/view/adminhtml/templates/payment/form/billing/agreement.phtml
+++ b/app/code/Magento/Paypal/view/adminhtml/templates/payment/form/billing/agreement.phtml
@@ -7,7 +7,7 @@
 // @codingStandardsIgnoreFile
 /* @var $block \Magento\Paypal\Block\Payment\Form\Billing\Agreement */
 ?>
-<?php $code = $block->getMethodCode() ?>
+<?php $code = $block->escapeHtml($block->getMethodCode()) ?>
 <fieldset class="admin__fieldset payment-method form-list"
           id="payment_form_<?php /* @noEscape */ echo $code; ?>" style="display:none;">
     <div class="admin__field _required">
diff --git a/app/code/Magento/Paypal/view/frontend/templates/express/review.phtml b/app/code/Magento/Paypal/view/frontend/templates/express/review.phtml
index 892e8771da7..5d3c0b5c720 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/express/review.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/express/review.phtml
@@ -42,8 +42,8 @@
                                                             <?php echo($currentRate === $rate) ?
                                                                 ' selected="selected"' : '';
                                                             ?>>
-                                                            <?php /* @noEscape */ echo
-                                                                $block->renderShippingRateOption($rate);
+                                                            <?php echo
+                                                                $block->escapeHtml($block->renderShippingRateOption($rate));
                                                             ?>
                                                         </option>
                                                     <?php endforeach; ?>
@@ -70,8 +70,10 @@
                                 <?php endif; ?>
                             <?php else: ?>
                                 <p>
-                                    <?php /* @noEscape */ echo $block->renderShippingRateOption(
-                                        $block->getCurrentShippingRate()
+                                    <?php echo $block->escapeHtml(
+                                        $block->renderShippingRateOption(
+                                            $block->getCurrentShippingRate()
+                                        )
                                     ); ?>
                                 </p>
                             <?php endif; ?>
@@ -84,7 +86,7 @@
                     </strong>
                     <div class="box-content">
                         <address>
-                            <?php /* @noEscape */ echo $block->renderAddress($block->getShippingAddress()); ?>
+                            <?php echo $block->escapeHtml($block->renderAddress($block->getShippingAddress())); ?>
                         </address>
                     </div>
                     <?php if ($block->getCanEditShippingAddress()): ?>
diff --git a/app/code/Magento/Paypal/view/frontend/templates/express/review/shipping/method.phtml b/app/code/Magento/Paypal/view/frontend/templates/express/review/shipping/method.phtml
index 909d0e1c762..ce8952a08d3 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/express/review/shipping/method.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/express/review/shipping/method.phtml
@@ -24,7 +24,7 @@
                             <option
                                 value="<?php echo $block->escapeHtml($block->renderShippingRateValue($rate)); ?>"
                                     <?php echo($currentRate === $rate) ? ' selected="selected"' : ''; ?>>
-                                <?php /* @noEscape */ echo $block->renderShippingRateOption($rate); ?>
+                                <?php echo $block->escapeHtml($block->renderShippingRateOption($rate)); ?>
                             </option>
                         <?php endforeach; ?>
                     </optgroup>
@@ -40,7 +40,7 @@
     <?php else: ?>
         <p>
             <strong>
-                <?php /* @noEscape */ echo $block->renderShippingRateOption($block->getCurrentShippingRate()); ?>
+                <?php echo $block->escapeHtml($block->renderShippingRateOption($block->getCurrentShippingRate())); ?>
             </strong>
         </p>
     <?php endif; ?>
diff --git a/app/code/Magento/Paypal/view/frontend/templates/express/shortcut.phtml b/app/code/Magento/Paypal/view/frontend/templates/express/shortcut.phtml
index fa9afa80e5f..ffedc6e6dc7 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/express/shortcut.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/express/shortcut.phtml
@@ -43,9 +43,7 @@ if ($block->getConfirmationUrl() || $block->getIsInCatalogProduct()) {
     {
         ".paypal-logo.<?php /* @noEscape */ echo $shortcutHtmlId; ?>": {
             "paypalCheckout": {
-                "confirmMessage": "<?php /* @noEscape */ echo $block->escapeJsQuote(
-                        $block->getConfirmationMessage()
-                    ); ?>",
+                "confirmMessage": "<?php echo $block->escapeJsQuote($block->getConfirmationMessage()); ?>",
                 "confirmUrl": "<?php /* @noEscape */ echo !empty($confirmationUrl) ? $confirmationUrl : false; ?>",
                 "isCatalogProduct": "<?php /* @noEscape */ echo !empty($isInCatalogProduct) ?
                         (bool)$isInCatalogProduct : false;
diff --git a/app/code/Magento/Paypal/view/frontend/templates/hss/info.phtml b/app/code/Magento/Paypal/view/frontend/templates/hss/info.phtml
index 69bf40f9314..8998aaa81f1 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/hss/info.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/hss/info.phtml
@@ -11,7 +11,7 @@
  * @see \Magento\Paypal\Block\Payflow\Link\Info
  */
 ?>
-<div id="payment_form_<?php /* @noEscape */ echo $block->getMethodCode(); ?>" style="display:none" class="hss items">
+<div id="payment_form_<?php echo $block->escapeHtml($block->getMethodCode()); ?>" style="display:none" class="hss items">
     <?php echo $block->escapeHtml(__(
         'You will be required to enter your payment details after you place an order.'
     )); ?>
diff --git a/app/code/Magento/Paypal/view/frontend/templates/payflowadvanced/info.phtml b/app/code/Magento/Paypal/view/frontend/templates/payflowadvanced/info.phtml
index a11a3786c2c..252622af0f4 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/payflowadvanced/info.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/payflowadvanced/info.phtml
@@ -9,7 +9,7 @@
  * @var \Magento\Paypal\Block\Payflow\Advanced\Form $block
  */
 ?>
-<fieldset id="payment_form_<?php /* @noEscape */ echo $block->getMethodCode(); ?>" style="display:none"
+<fieldset id="payment_form_<?php echo $block->escapeHtml($block->getMethodCode()); ?>" style="display:none"
           class="fieldset payflowadvanced items redirect">
     <div>
         <?php echo $block->escapeHtml(__('You will be required to enter your payment details after you place an order.')); ?>
diff --git a/app/code/Magento/Paypal/view/frontend/templates/payflowlink/info.phtml b/app/code/Magento/Paypal/view/frontend/templates/payflowlink/info.phtml
index 629141539e2..7296aaabccf 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/payflowlink/info.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/payflowlink/info.phtml
@@ -8,7 +8,7 @@
  * @var \Magento\Paypal\Block\Payflow\Link\Form $block
  */
 ?>
-<div class="payflowlink items" id="payment_form_<?php /* @noEscape */ echo $block->getMethodCode(); ?>"
+<div class="payflowlink items" id="payment_form_<?php echo $block->escapeHtml($block->getMethodCode()); ?>"
      style="display:none">
     <?php echo $block->escapeHtml(__('You will be required to enter your payment details after you place an order.'));?>
 </div>
diff --git a/app/code/Magento/Paypal/view/frontend/templates/payment/form/billing/agreement.phtml b/app/code/Magento/Paypal/view/frontend/templates/payment/form/billing/agreement.phtml
index 834a623d65b..7eb9423ce3b 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/payment/form/billing/agreement.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/payment/form/billing/agreement.phtml
@@ -8,7 +8,7 @@
 /**
  * @var \Magento\Paypal\Block\Payment\Form\Billing\Agreement $block
  */
-$code = $block->getMethodCode();
+$code = $block->escapeHtml($block->getMethodCode());
 ?>
 <div class="field items required" id="payment_form_<?php /* @noEscape */ echo $code; ?>" style="display:none;">
     <label for="<?php /* @noEscape */ echo $code; ?>_ba_agreement_id" class="label">
diff --git a/app/code/Magento/Paypal/view/frontend/templates/payment/redirect.phtml b/app/code/Magento/Paypal/view/frontend/templates/payment/redirect.phtml
index 5397d9aba46..b10e2f97596 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/payment/redirect.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/payment/redirect.phtml
@@ -12,7 +12,7 @@
 $code = $block->escapeHtml($block->getBillingAgreementCode());
 ?>
 <fieldset class="fieldset paypal items redirect" style="display:none;"
-          id="payment_form_<?php /* @noEscape */ echo $block->getMethodCode(); ?>">
+          id="payment_form_<?php echo $block->escapeHtml($block->getMethodCode()); ?>">
     <div><?php echo $block->escapeHtml($block->getRedirectMessage()); ?></div>
     <?php  ?>
     <?php if ($code): ?>
diff --git a/app/code/Magento/Ups/view/adminhtml/templates/system/shipping/carrier_config.phtml b/app/code/Magento/Ups/view/adminhtml/templates/system/shipping/carrier_config.phtml
index c3ca415c7c2..7cffb845b93 100644
--- a/app/code/Magento/Ups/view/adminhtml/templates/system/shipping/carrier_config.phtml
+++ b/app/code/Magento/Ups/view/adminhtml/templates/system/shipping/carrier_config.phtml
@@ -20,19 +20,19 @@ if (!$storeCode && $websiteCode) {
     /** @var $web \Magento\Store\Model\Website */
     $web = $block->getWebsiteModel()->load($websiteCode);
     $storedAllowedMethods = explode(',', $web->getConfig('carriers/ups/allowed_methods'));
-    $storedOriginShipment = $web->getConfig('carriers/ups/origin_shipment');
-    $storedFreeShipment   = $web->getConfig('carriers/ups/free_method');
-    $storedUpsType        = $web->getConfig('carriers/ups/type');
+    $storedOriginShipment = $block->escapeHtml($web->getConfig('carriers/ups/origin_shipment'));
+    $storedFreeShipment   = $block->escapeHtml($web->getConfig('carriers/ups/free_method'));
+    $storedUpsType        = $block->escapeHtml($web->getConfig('carriers/ups/type'));
 } elseif ($storeCode) {
     $storedAllowedMethods = explode(',', $block->getConfig('carriers/ups/allowed_methods', $storeCode));
-    $storedOriginShipment = $block->getConfig('carriers/ups/origin_shipment', $storeCode);
-    $storedFreeShipment   = $block->getConfig('carriers/ups/free_method', $storeCode);
-    $storedUpsType        = $block->getConfig('carriers/ups/type', $storeCode);
+    $storedOriginShipment = $block->escapeHtml($block->getConfig('carriers/ups/origin_shipment', $storeCode));
+    $storedFreeShipment   = $block->escapeHtml($block->getConfig('carriers/ups/free_method', $storeCode));
+    $storedUpsType        = $block->escapeHtml($block->getConfig('carriers/ups/type', $storeCode));
 } else {
     $storedAllowedMethods = explode(',', $block->getConfig('carriers/ups/allowed_methods'));
-    $storedOriginShipment = $block->getConfig('carriers/ups/origin_shipment');
-    $storedFreeShipment   = $block->getConfig('carriers/ups/free_method');
-    $storedUpsType        = $block->getConfig('carriers/ups/type');
+    $storedOriginShipment = $block->escapeHtml($block->getConfig('carriers/ups/origin_shipment'));
+    $storedFreeShipment   = $block->escapeHtml($block->getConfig('carriers/ups/free_method'));
+    $storedUpsType        = $block->escapeHtml($block->getConfig('carriers/ups/type'));
 }
 ?>
 <script>
-- 
GitLab


From 8be61694ba781a7ea0ebf2d2b0400842fb41904b Mon Sep 17 00:00:00 2001
From: Ivan Gavryshko <igavryshko@ebay.com>
Date: Tue, 20 Oct 2015 10:22:55 -0500
Subject: [PATCH 108/370] MAGETWO-43907 Custom admin URL breaks admin log in
 after installation

- added validation for magento admin URL suffix
---
 setup/view/magento/setup/web-configuration.phtml | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/setup/view/magento/setup/web-configuration.phtml b/setup/view/magento/setup/web-configuration.phtml
index a87a668915f..0b91a4f2f7e 100644
--- a/setup/view/magento/setup/web-configuration.phtml
+++ b/setup/view/magento/setup/web-configuration.phtml
@@ -20,7 +20,7 @@ $hints = [
     ),
     'admin' => sprintf(
         '<p>%s</p>',
-        'A unique URL helps keep store and customer info safer.'
+        'A unique URL helps keep store and customer info safer. Use letters, numbers or underscores.'
     )
 ];
 ?>
@@ -101,6 +101,7 @@ $hints = [
                         class="form-el-input"
                         type="text"
                         name="admin"
+                        ng-pattern="/^[a-zA-Z0-9_]+$/"
                         ng-model="config.address.admin"
                         ng-class="{'invalid' : webconfig.admin.$invalid && webconfig.submitted }"
                         ng-init="config.address.admin = '<?php echo $this->autoAdminPath ?>';"
@@ -111,8 +112,8 @@ $hints = [
                         tooltip-append-to-body="true"
                         >
                     <div class="error-container">
-                        <span ng-show="webconfig.admin.$error.required">
-                            Please enter a valid admin URL path.
+                        <span ng-show="webconfig.admin.$error">
+                            Please enter a valid admin URL path. Use letters, numbers or underscores.
                         </span>
                     </div>
                 </div>
-- 
GitLab


From bead645178a2920de929197d706de6b84e191ec8 Mon Sep 17 00:00:00 2001
From: "Yushkin, Dmytro" <dyushkin@ebay.com>
Date: Tue, 20 Oct 2015 18:40:35 +0300
Subject: [PATCH 109/370] MAGETWO-44299: Verify @noEscape outputs for shipment
 and payments modules

---
 .../Paypal/view/frontend/templates/express/shortcut.phtml      | 2 +-
 app/code/Magento/Paypal/view/frontend/templates/hss/info.phtml | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Paypal/view/frontend/templates/express/shortcut.phtml b/app/code/Magento/Paypal/view/frontend/templates/express/shortcut.phtml
index ffedc6e6dc7..5858917ed89 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/express/shortcut.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/express/shortcut.phtml
@@ -43,7 +43,7 @@ if ($block->getConfirmationUrl() || $block->getIsInCatalogProduct()) {
     {
         ".paypal-logo.<?php /* @noEscape */ echo $shortcutHtmlId; ?>": {
             "paypalCheckout": {
-                "confirmMessage": "<?php echo $block->escapeJsQuote($block->getConfirmationMessage()); ?>",
+                "confirmMessage": "<?php /* @noEscape */ echo $block->escapeJsQuote($block->getConfirmationMessage()); ?>",
                 "confirmUrl": "<?php /* @noEscape */ echo !empty($confirmationUrl) ? $confirmationUrl : false; ?>",
                 "isCatalogProduct": "<?php /* @noEscape */ echo !empty($isInCatalogProduct) ?
                         (bool)$isInCatalogProduct : false;
diff --git a/app/code/Magento/Paypal/view/frontend/templates/hss/info.phtml b/app/code/Magento/Paypal/view/frontend/templates/hss/info.phtml
index 8998aaa81f1..c29f82418f8 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/hss/info.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/hss/info.phtml
@@ -11,7 +11,8 @@
  * @see \Magento\Paypal\Block\Payflow\Link\Info
  */
 ?>
-<div id="payment_form_<?php echo $block->escapeHtml($block->getMethodCode()); ?>" style="display:none" class="hss items">
+<div id="payment_form_<?php echo $block->escapeHtml($block->getMethodCode()); ?>"
+     style="display:none" class="hss items">
     <?php echo $block->escapeHtml(__(
         'You will be required to enter your payment details after you place an order.'
     )); ?>
-- 
GitLab


From 7fb9c49ba5b4ea3481d5c5eb77c198dd57d61bdd Mon Sep 17 00:00:00 2001
From: Oleksandr Karpenko <okarpenko@ebay.com>
Date: Tue, 20 Oct 2015 18:53:30 +0300
Subject: [PATCH 110/370] MAGETWO-44017: Exception appears when user opens
 scheduled import export without installed imort/export

---
 .../Framework/Module/DependencyChecker.php    | 21 ++++---
 .../Magento/Framework/Module/PackageInfo.php  | 63 ++++++++++++++++++-
 2 files changed, 76 insertions(+), 8 deletions(-)

diff --git a/lib/internal/Magento/Framework/Module/DependencyChecker.php b/lib/internal/Magento/Framework/Module/DependencyChecker.php
index 44f771fb6ca..b4e5d043e47 100644
--- a/lib/internal/Magento/Framework/Module/DependencyChecker.php
+++ b/lib/internal/Magento/Framework/Module/DependencyChecker.php
@@ -33,6 +33,9 @@ class DependencyChecker
      */
     private $graph;
 
+    /** @var PackageInfo */
+    private $packageInfo;
+
     /**
      * Constructor
      *
@@ -44,8 +47,8 @@ class DependencyChecker
     {
         $this->enabledModuleList = $list->getNames();
         $this->fullModuleList = $loader->load();
-        $packageInfo = $packageInfoFactory->create();
-        $this->graph = $this->createGraph($packageInfo);
+        $this->packageInfo = $packageInfoFactory->create();
+        $this->graph = $this->createGraph();
     }
 
     /**
@@ -93,7 +96,10 @@ class DependencyChecker
         foreach ($moduleNames as $moduleName) {
             $dependenciesMissing = [];
             $paths = $this->graph->findPathsToReachableNodes($moduleName, $graphMode);
-            foreach (array_keys($this->fullModuleList) as $module) {
+            $modules = array_merge(
+                array_keys($this->fullModuleList), $this->packageInfo->getNonExistingDependencies()
+            );
+            foreach ($modules as $module) {
                 if (isset($paths[$module])) {
                     if ($isEnable && !in_array($module, $enabledModules)) {
                         $dependenciesMissing[$module] = $paths[$module];
@@ -110,10 +116,9 @@ class DependencyChecker
     /**
      * Create the dependency graph
      *
-     * @param PackageInfo $packageInfo
      * @return Graph
      */
-    private function createGraph(PackageInfo $packageInfo)
+    private function createGraph()
     {
         $nodes = [];
         $dependencies = [];
@@ -121,13 +126,15 @@ class DependencyChecker
         // build the graph data
         foreach (array_keys($this->fullModuleList) as $moduleName) {
             $nodes[] = $moduleName;
-            foreach ($packageInfo->getRequire($moduleName) as $dependModuleName) {
+            foreach ($this->packageInfo->getRequire($moduleName) as $dependModuleName) {
                 if ($dependModuleName) {
                     $dependencies[] = [$moduleName, $dependModuleName];
                 }
             }
         }
-        $nodes = array_unique($nodes);
+        $nodes = array_unique(
+            array_merge($nodes, $this->packageInfo->getNonExistingDependencies())
+        );
 
         return new Graph($nodes, $dependencies);
     }
diff --git a/lib/internal/Magento/Framework/Module/PackageInfo.php b/lib/internal/Magento/Framework/Module/PackageInfo.php
index 97fd828c36d..938d357b0a2 100644
--- a/lib/internal/Magento/Framework/Module/PackageInfo.php
+++ b/lib/internal/Magento/Framework/Module/PackageInfo.php
@@ -53,6 +53,9 @@ class PackageInfo
      */
     private $componentRegistrar;
 
+    /** @var array */
+    protected $nonExistingDependencies = [];
+
     /**
      * Constructor
      *
@@ -104,7 +107,65 @@ class PackageInfo
     public function getModuleName($packageName)
     {
         $this->load();
-        return isset($this->packageModuleMap[$packageName]) ? $this->packageModuleMap[$packageName] : '';
+
+        $moduleName = null;
+        if (isset($this->packageModuleMap[$packageName])) {
+            $moduleName = $this->packageModuleMap[$packageName];
+        } else if ($this->isInternalPackage($packageName)) {
+            $moduleName = $this->convertPackageNameToModuleName($packageName);
+            $this->addNonExistingDependency($moduleName);
+        }
+
+        return $moduleName;
+    }
+
+    /**
+     * Add non existing dependency
+     *
+     * @param $dependency
+     */
+    protected function addNonExistingDependency($dependency)
+    {
+        if (!isset($this->nonExistingDependencies[$dependency])) {
+            $this->nonExistingDependencies[$dependency] = $dependency;
+        }
+    }
+
+    /**
+     * Return list of non existing dependencies
+     *
+     * @return array
+     */
+    public function getNonExistingDependencies()
+    {
+        return $this->nonExistingDependencies;
+    }
+
+    /**
+     * Build module name based on internal package name
+     *
+     * @param string $packageName
+     * @return string|null
+     */
+    protected function convertPackageNameToModuleName($packageName)
+    {
+        $moduleName = str_replace('magento/module-', '', $packageName);
+        $moduleName = str_replace('-', ' ', $moduleName);
+        $moduleName = ucwords($moduleName);
+        $moduleName = str_replace(' ', '', $moduleName);
+
+        return 'Magento_' . $moduleName;
+    }
+
+    /**
+     * Check if package is internal magento module
+     *
+     * @param string $packageName
+     * @return bool
+     */
+    protected function isInternalPackage($packageName)
+    {
+        return strpos($packageName, 'magento/module-') === 0;
     }
 
     /**
-- 
GitLab


From ff4ac7c54d39ae81602a391c0be19253a7a4e32c Mon Sep 17 00:00:00 2001
From: Oleksandr Karpenko <okarpenko@ebay.com>
Date: Tue, 20 Oct 2015 19:13:46 +0300
Subject: [PATCH 111/370] MAGETWO-44017: Exception appears when user opens
 scheduled import export without installed imort/export

---
 .../Magento/Framework/Module/DependencyChecker.php |  6 ++++--
 .../Magento/Framework/Module/PackageInfo.php       | 14 ++++++++------
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/lib/internal/Magento/Framework/Module/DependencyChecker.php b/lib/internal/Magento/Framework/Module/DependencyChecker.php
index b4e5d043e47..e84e2b99a11 100644
--- a/lib/internal/Magento/Framework/Module/DependencyChecker.php
+++ b/lib/internal/Magento/Framework/Module/DependencyChecker.php
@@ -33,8 +33,10 @@ class DependencyChecker
      */
     private $graph;
 
-    /** @var PackageInfo */
-    private $packageInfo;
+    /**
+     * @var PackageInfo
+     */
+    protected $packageInfo;
 
     /**
      * Constructor
diff --git a/lib/internal/Magento/Framework/Module/PackageInfo.php b/lib/internal/Magento/Framework/Module/PackageInfo.php
index 938d357b0a2..1e2ed5064c8 100644
--- a/lib/internal/Magento/Framework/Module/PackageInfo.php
+++ b/lib/internal/Magento/Framework/Module/PackageInfo.php
@@ -53,7 +53,9 @@ class PackageInfo
      */
     private $componentRegistrar;
 
-    /** @var array */
+    /**
+     * @var array
+     */
     protected $nonExistingDependencies = [];
 
     /**
@@ -111,7 +113,7 @@ class PackageInfo
         $moduleName = null;
         if (isset($this->packageModuleMap[$packageName])) {
             $moduleName = $this->packageModuleMap[$packageName];
-        } else if ($this->isInternalPackage($packageName)) {
+        } elseif ($this->isMagentoPackage($packageName)) {
             $moduleName = $this->convertPackageNameToModuleName($packageName);
             $this->addNonExistingDependency($moduleName);
         }
@@ -122,7 +124,8 @@ class PackageInfo
     /**
      * Add non existing dependency
      *
-     * @param $dependency
+     * @param string $dependency
+     * @return void
      */
     protected function addNonExistingDependency($dependency)
     {
@@ -151,8 +154,7 @@ class PackageInfo
     {
         $moduleName = str_replace('magento/module-', '', $packageName);
         $moduleName = str_replace('-', ' ', $moduleName);
-        $moduleName = ucwords($moduleName);
-        $moduleName = str_replace(' ', '', $moduleName);
+        $moduleName = str_replace(' ', '', ucwords($moduleName));
 
         return 'Magento_' . $moduleName;
     }
@@ -163,7 +165,7 @@ class PackageInfo
      * @param string $packageName
      * @return bool
      */
-    protected function isInternalPackage($packageName)
+    protected function isMagentoPackage($packageName)
     {
         return strpos($packageName, 'magento/module-') === 0;
     }
-- 
GitLab


From ddbc07e9b3bf5fcaab8bcbdd62f222e913dc9e35 Mon Sep 17 00:00:00 2001
From: Olga Nakonechna <onakonechna@ebay.com>
Date: Tue, 20 Oct 2015 19:17:28 +0300
Subject: [PATCH 112/370] MAGETWO-44340: required-option class value does not
 work

---
 .../catalog/product/attribute/text.phtml      | 27 ++++++++++++-------
 .../catalog/product/attribute/visual.phtml    | 27 ++++++++++++-------
 lib/web/mage/validation.js                    | 11 ++++++++
 3 files changed, 45 insertions(+), 20 deletions(-)

diff --git a/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/text.phtml b/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/text.phtml
index 63af3ebae14..1cdb50d54a3 100644
--- a/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/text.phtml
+++ b/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/text.phtml
@@ -8,7 +8,7 @@
 
 /** @var $block \Magento\Swatches\Block\Adminhtml\Attribute\Edit\Options\Text */
 ?>
-<fieldset class="fieldset ignore-validate">
+<fieldset class="fieldset">
     <legend class="legend"><span><?php /* @escapeNotVerified */ echo __('Manage Swatch (values of your attribute)') ?></span></legend>
     <div id="swatch-text-options-panel">
         <?php //@todo move style to css file ?>
@@ -33,16 +33,23 @@
                 <th class="col-delete">&nbsp;</th>
             </tr>
             </thead>
-            <tbody data-role="swatch-text-options-container"></tbody>
+            <tbody data-role="swatch-text-options-container" class="ignore-validate"></tbody>
             <tfoot>
-            <th colspan="<?php /* @escapeNotVerified */ echo $storetotal; ?>" class="col-actions-add">
-                <?php if (!$block->getReadOnly() && !$block->canManageOptionDefaultOnly()):?>
-                    <button id="add_new_swatch_text_option_button" title="<?php /* @escapeNotVerified */ echo __('Add Swatch'); ?>"
-                            type="button" class="action- scalable add">
-                        <span><?php /* @escapeNotVerified */ echo __('Add Swatch'); ?></span>
-                    </button>
-                <?php endif; ?>
-            </th>
+            <tr>
+                <th colspan="<?php /* @escapeNotVerified */ echo $storetotal; ?>">
+                    <input type="hidden" class="required-swatch-entry"/>
+                </th>
+            </tr>
+            <tr>
+                <th colspan="<?php /* @escapeNotVerified */ echo $storetotal; ?>" class="col-actions-add">
+                    <?php if (!$block->getReadOnly() && !$block->canManageOptionDefaultOnly()):?>
+                        <button id="add_new_swatch_text_option_button" title="<?php /* @escapeNotVerified */ echo __('Add Swatch'); ?>"
+                                type="button" class="action- scalable add">
+                            <span><?php /* @escapeNotVerified */ echo __('Add Swatch'); ?></span>
+                        </button>
+                    <?php endif; ?>
+                </th>
+            </tr>
             </tfoot>
         </table>
         <input type="hidden" id="swatch-text-option-count-check" value="" />
diff --git a/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/visual.phtml b/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/visual.phtml
index a236cf00dd1..3871ccda9a3 100644
--- a/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/visual.phtml
+++ b/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/visual.phtml
@@ -8,7 +8,7 @@
 
 /** @var $block \Magento\Swatches\Block\Adminhtml\Attribute\Edit\Options\Visual */
 ?>
-<fieldset class="fieldset ignore-validate">
+<fieldset class="fieldset">
     <legend class="legend"><span><?php /* @escapeNotVerified */ echo __('Manage Swatch (values of your attribute)') ?></span></legend>
     <div id="swatch-visual-options-panel">
         <?php //@todo move style to css file ?>
@@ -29,16 +29,23 @@
                 <th class="col-delete">&nbsp;</th>
             </tr>
             </thead>
-            <tbody data-role="swatch-visual-options-container"></tbody>
+            <tbody data-role="swatch-visual-options-container" class="ignore-validate"></tbody>
             <tfoot>
-            <th colspan="<?php /* @escapeNotVerified */ echo $storetotal; ?>" class="col-actions-add">
-                <?php if (!$block->getReadOnly() && !$block->canManageOptionDefaultOnly()):?>
-                    <button id="add_new_swatch_visual_option_button" title="<?php /* @escapeNotVerified */ echo __('Add Swatch'); ?>"
-                            type="button" class="action- scalable add">
-                        <span><?php /* @escapeNotVerified */ echo __('Add Swatch'); ?></span>
-                    </button>
-                <?php endif; ?>
-            </th>
+            <tr>
+                <th colspan="<?php /* @escapeNotVerified */ echo $storetotal; ?>">
+                    <input type="hidden" class="required-swatch-entry"/>
+                </th>
+            </tr>
+            <tr>
+                <th colspan="<?php /* @escapeNotVerified */ echo $storetotal; ?>" class="col-actions-add">
+                    <?php if (!$block->getReadOnly() && !$block->canManageOptionDefaultOnly()):?>
+                        <button id="add_new_swatch_visual_option_button" title="<?php /* @escapeNotVerified */ echo __('Add Swatch'); ?>"
+                                type="button" class="action- scalable add">
+                            <span><?php /* @escapeNotVerified */ echo __('Add Swatch'); ?></span>
+                        </button>
+                    <?php endif; ?>
+                </th>
+            </tr>
             </tfoot>
         </table>
         <input type="hidden" id="swatch-visual-option-count-check" value="" />
diff --git a/lib/web/mage/validation.js b/lib/web/mage/validation.js
index 98240eb8cfa..982a7ecf73e 100644
--- a/lib/web/mage/validation.js
+++ b/lib/web/mage/validation.js
@@ -1224,6 +1224,17 @@
             },
             'Please enter a valid number.'
         ],
+        'required-swatch-entry': [
+            function (value, element) {
+                var empty = $(element).closest('table')
+                    .find('input.required-option')
+                    .filter(function(i, el){
+                        return $.mage.isEmpty(el.value);
+                    })
+                    .length;
+                return empty === 0;
+            }, 'Admin is a required field in the each row.'
+        ],
         'validate-item-quantity': [
             function (value, element, params) {
                 // obtain values for validation
-- 
GitLab


From 1129ce29d52a7aeb11910676a0fb889b11e47679 Mon Sep 17 00:00:00 2001
From: Hayder Sharhan <hsharhan@ebay.com>
Date: Tue, 20 Oct 2015 11:40:39 -0500
Subject: [PATCH 113/370] MAGETWO-44239: Text change to Full Page Cache ->
 Built-in Application option

- Changed text to add disclaimer.
---
 .../Model/System/Config/Source/Application.php      | 13 ++++++++++---
 app/code/Magento/PageCache/i18n/de_DE.csv           |  2 +-
 app/code/Magento/PageCache/i18n/en_US.csv           |  2 +-
 app/code/Magento/PageCache/i18n/es_ES.csv           |  2 +-
 app/code/Magento/PageCache/i18n/fr_FR.csv           |  2 +-
 app/code/Magento/PageCache/i18n/nl_NL.csv           |  2 +-
 app/code/Magento/PageCache/i18n/pt_BR.csv           |  2 +-
 app/code/Magento/PageCache/i18n/zh_Hans_CN.csv      |  2 +-
 8 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/app/code/Magento/PageCache/Model/System/Config/Source/Application.php b/app/code/Magento/PageCache/Model/System/Config/Source/Application.php
index 45233bb59c7..eb428f7c030 100644
--- a/app/code/Magento/PageCache/Model/System/Config/Source/Application.php
+++ b/app/code/Magento/PageCache/Model/System/Config/Source/Application.php
@@ -23,8 +23,14 @@ class Application implements \Magento\Framework\Option\ArrayInterface
     public function toOptionArray()
     {
         return [
-            ['value' => \Magento\PageCache\Model\Config::BUILT_IN, 'label' => __('Built-in Application')],
-            ['value' => \Magento\PageCache\Model\Config::VARNISH, 'label' => __('Varnish Caching')]
+            [
+                'value' => \Magento\PageCache\Model\Config::BUILT_IN,
+                'label' => __('Built-in Application (Not Recommended for Production Use)')
+            ],
+            [
+                'value' => \Magento\PageCache\Model\Config::VARNISH,
+                'label' => __('Varnish Caching')
+            ]
         ];
     }
 
@@ -36,7 +42,8 @@ class Application implements \Magento\Framework\Option\ArrayInterface
     public function toArray()
     {
         return [
-            \Magento\PageCache\Model\Config::BUILT_IN => __('Built-in Application'),
+            \Magento\PageCache\Model\Config::BUILT_IN =>
+                __('Built-in Application (Not Recommended for Production Use)'),
             \Magento\PageCache\Model\Config::VARNISH => __('Varnish Caching')
         ];
     }
diff --git a/app/code/Magento/PageCache/i18n/de_DE.csv b/app/code/Magento/PageCache/i18n/de_DE.csv
index 0d57f18488d..701e1230059 100644
--- a/app/code/Magento/PageCache/i18n/de_DE.csv
+++ b/app/code/Magento/PageCache/i18n/de_DE.csv
@@ -1,6 +1,6 @@
 "Export VCL","Export VCL"
 "Ttl value ""%1"" is not valid. Please use only numbers equal or greater than zero.","Ttl value ""%1"" is not valid. Please use only numbers equal or greater than zero."
-"Built-in Application","Built-in Application"
+"Built-in Application (Not Recommended for Production Use)","Built-in Application (Not Recommended for Production Use)"
 "Varnish Caching","Varnish Caching"
 "Full Page Cache","Full Page Cache"
 "Caching Application","Caching Application"
diff --git a/app/code/Magento/PageCache/i18n/en_US.csv b/app/code/Magento/PageCache/i18n/en_US.csv
index 0d57f18488d..701e1230059 100644
--- a/app/code/Magento/PageCache/i18n/en_US.csv
+++ b/app/code/Magento/PageCache/i18n/en_US.csv
@@ -1,6 +1,6 @@
 "Export VCL","Export VCL"
 "Ttl value ""%1"" is not valid. Please use only numbers equal or greater than zero.","Ttl value ""%1"" is not valid. Please use only numbers equal or greater than zero."
-"Built-in Application","Built-in Application"
+"Built-in Application (Not Recommended for Production Use)","Built-in Application (Not Recommended for Production Use)"
 "Varnish Caching","Varnish Caching"
 "Full Page Cache","Full Page Cache"
 "Caching Application","Caching Application"
diff --git a/app/code/Magento/PageCache/i18n/es_ES.csv b/app/code/Magento/PageCache/i18n/es_ES.csv
index 0d57f18488d..701e1230059 100644
--- a/app/code/Magento/PageCache/i18n/es_ES.csv
+++ b/app/code/Magento/PageCache/i18n/es_ES.csv
@@ -1,6 +1,6 @@
 "Export VCL","Export VCL"
 "Ttl value ""%1"" is not valid. Please use only numbers equal or greater than zero.","Ttl value ""%1"" is not valid. Please use only numbers equal or greater than zero."
-"Built-in Application","Built-in Application"
+"Built-in Application (Not Recommended for Production Use)","Built-in Application (Not Recommended for Production Use)"
 "Varnish Caching","Varnish Caching"
 "Full Page Cache","Full Page Cache"
 "Caching Application","Caching Application"
diff --git a/app/code/Magento/PageCache/i18n/fr_FR.csv b/app/code/Magento/PageCache/i18n/fr_FR.csv
index 0d57f18488d..701e1230059 100644
--- a/app/code/Magento/PageCache/i18n/fr_FR.csv
+++ b/app/code/Magento/PageCache/i18n/fr_FR.csv
@@ -1,6 +1,6 @@
 "Export VCL","Export VCL"
 "Ttl value ""%1"" is not valid. Please use only numbers equal or greater than zero.","Ttl value ""%1"" is not valid. Please use only numbers equal or greater than zero."
-"Built-in Application","Built-in Application"
+"Built-in Application (Not Recommended for Production Use)","Built-in Application (Not Recommended for Production Use)"
 "Varnish Caching","Varnish Caching"
 "Full Page Cache","Full Page Cache"
 "Caching Application","Caching Application"
diff --git a/app/code/Magento/PageCache/i18n/nl_NL.csv b/app/code/Magento/PageCache/i18n/nl_NL.csv
index 0d57f18488d..701e1230059 100644
--- a/app/code/Magento/PageCache/i18n/nl_NL.csv
+++ b/app/code/Magento/PageCache/i18n/nl_NL.csv
@@ -1,6 +1,6 @@
 "Export VCL","Export VCL"
 "Ttl value ""%1"" is not valid. Please use only numbers equal or greater than zero.","Ttl value ""%1"" is not valid. Please use only numbers equal or greater than zero."
-"Built-in Application","Built-in Application"
+"Built-in Application (Not Recommended for Production Use)","Built-in Application (Not Recommended for Production Use)"
 "Varnish Caching","Varnish Caching"
 "Full Page Cache","Full Page Cache"
 "Caching Application","Caching Application"
diff --git a/app/code/Magento/PageCache/i18n/pt_BR.csv b/app/code/Magento/PageCache/i18n/pt_BR.csv
index 0d57f18488d..701e1230059 100644
--- a/app/code/Magento/PageCache/i18n/pt_BR.csv
+++ b/app/code/Magento/PageCache/i18n/pt_BR.csv
@@ -1,6 +1,6 @@
 "Export VCL","Export VCL"
 "Ttl value ""%1"" is not valid. Please use only numbers equal or greater than zero.","Ttl value ""%1"" is not valid. Please use only numbers equal or greater than zero."
-"Built-in Application","Built-in Application"
+"Built-in Application (Not Recommended for Production Use)","Built-in Application (Not Recommended for Production Use)"
 "Varnish Caching","Varnish Caching"
 "Full Page Cache","Full Page Cache"
 "Caching Application","Caching Application"
diff --git a/app/code/Magento/PageCache/i18n/zh_Hans_CN.csv b/app/code/Magento/PageCache/i18n/zh_Hans_CN.csv
index 0d57f18488d..701e1230059 100644
--- a/app/code/Magento/PageCache/i18n/zh_Hans_CN.csv
+++ b/app/code/Magento/PageCache/i18n/zh_Hans_CN.csv
@@ -1,6 +1,6 @@
 "Export VCL","Export VCL"
 "Ttl value ""%1"" is not valid. Please use only numbers equal or greater than zero.","Ttl value ""%1"" is not valid. Please use only numbers equal or greater than zero."
-"Built-in Application","Built-in Application"
+"Built-in Application (Not Recommended for Production Use)","Built-in Application (Not Recommended for Production Use)"
 "Varnish Caching","Varnish Caching"
 "Full Page Cache","Full Page Cache"
 "Caching Application","Caching Application"
-- 
GitLab


From 6c73c31351fc07a9b4c2cf20444bcbfe1d526bb6 Mon Sep 17 00:00:00 2001
From: Sergey Semenov <ssemenov@ebay.com>
Date: Tue, 20 Oct 2015 19:47:00 +0300
Subject: [PATCH 114/370] MAGETWO-44025: Can't edit bundle product from
 wishlist

---
 .../Magento/Bundle/Model/Product/Price.php    |  23 +++-
 .../Test/Unit/Model/Product/PriceTest.php     | 117 ++++++++++++++++++
 2 files changed, 137 insertions(+), 3 deletions(-)

diff --git a/app/code/Magento/Bundle/Model/Product/Price.php b/app/code/Magento/Bundle/Model/Product/Price.php
index d7dd23bc893..73902761e14 100644
--- a/app/code/Magento/Bundle/Model/Product/Price.php
+++ b/app/code/Magento/Bundle/Model/Product/Price.php
@@ -118,9 +118,8 @@ class Price extends \Magento\Catalog\Model\Product\Type\Price
     {
         $price = 0.0;
         if ($product->hasCustomOptions()) {
-            $customOption = $product->getCustomOption('bundle_selection_ids');
-            if ($customOption) {
-                $selectionIds = unserialize($customOption->getValue());
+            $selectionIds = $this->getBundleSelectionIds($product);
+            if ($selectionIds) {
                 $selections = $product->getTypeInstance()->getSelectionsByIds($selectionIds, $product);
                 $selections->addTierPriceData();
                 $this->_eventManager->dispatch(
@@ -145,6 +144,24 @@ class Price extends \Magento\Catalog\Model\Product\Type\Price
         return $price;
     }
 
+    /**
+     * Retrieve array of bundle selection IDs
+     *
+     * @param \Magento\Catalog\Model\Product $product
+     * @return array
+     */
+    protected function getBundleSelectionIds(\Magento\Catalog\Model\Product $product)
+    {
+        $customOption = $product->getCustomOption('bundle_selection_ids');
+        if ($customOption) {
+            $selectionIds = unserialize($customOption->getValue());
+            if (!empty($selectionIds) && is_array($selectionIds)) {
+                return $selectionIds;
+            }
+        }
+        return [];
+    }
+
     /**
      * Get product final price
      *
diff --git a/app/code/Magento/Bundle/Test/Unit/Model/Product/PriceTest.php b/app/code/Magento/Bundle/Test/Unit/Model/Product/PriceTest.php
index 226418b97ae..887d772ea40 100644
--- a/app/code/Magento/Bundle/Test/Unit/Model/Product/PriceTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Model/Product/PriceTest.php
@@ -146,4 +146,121 @@ class PriceTest extends \PHPUnit_Framework_TestCase
             [10, 100, 1, true, 10],
         ];
     }
+
+    public function testGetTotalBundleItemsPriceWithNoCustomOptions()
+    {
+        $productMock = $this->getMockBuilder('Magento\Catalog\Model\Product')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $productMock->expects($this->once())
+            ->method('hasCustomOptions')
+            ->willReturn(false);
+
+        $this->assertEquals(0, $this->model->getTotalBundleItemsPrice($productMock));
+    }
+
+    /**
+     * @param string|null $value
+     * @dataProvider dataProviderWithEmptyOptions
+     */
+    public function testGetTotalBundleItemsPriceWithEmptyOptions($value)
+    {
+        $dataObjectMock = $this->getMockBuilder('Magento\Framework\DataObject')
+            ->setMethods(['getValue'])
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $productMock = $this->getMockBuilder('Magento\Catalog\Model\Product')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $productMock->expects($this->once())
+            ->method('hasCustomOptions')
+            ->willReturn(true);
+        $productMock->expects($this->once())
+            ->method('getCustomOption')
+            ->with('bundle_selection_ids')
+            ->willReturn($dataObjectMock);
+
+        $dataObjectMock->expects($this->once())
+            ->method('getValue')
+            ->willReturn($value);
+
+        $this->assertEquals(0, $this->model->getTotalBundleItemsPrice($productMock));
+    }
+
+    /**
+     * @return array
+     */
+    public function dataProviderWithEmptyOptions()
+    {
+        return [
+            ['a:0:{}'],
+            [''],
+            [null],
+        ];
+    }
+
+    public function testGetTotalBundleItemsPriceWithNoItems()
+    {
+        $storeId = 1;
+
+        $dataObjectMock = $this->getMockBuilder('Magento\Framework\DataObject')
+            ->setMethods(['getValue'])
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $productMock = $this->getMockBuilder('Magento\Catalog\Model\Product')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $productTypeMock = $this->getMockBuilder('Magento\Bundle\Model\Product\Type')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $selectionsMock = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Selection\Collection')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $productMock->expects($this->once())
+            ->method('hasCustomOptions')
+            ->willReturn(true);
+        $productMock->expects($this->once())
+            ->method('getCustomOption')
+            ->with('bundle_selection_ids')
+            ->willReturn($dataObjectMock);
+        $productMock->expects($this->once())
+            ->method('getTypeInstance')
+            ->willReturn($productTypeMock);
+        $productMock->expects($this->once())
+            ->method('getStoreId')
+            ->willReturn($storeId);
+
+        $dataObjectMock->expects($this->once())
+            ->method('getValue')
+            ->willReturn('a:1:{i:0;s:1:"1";}');
+
+        $productTypeMock->expects($this->once())
+            ->method('getSelectionsByIds')
+            ->with([1], $productMock)
+            ->willReturn($selectionsMock);
+
+        $selectionsMock->expects($this->once())
+            ->method('addTierPriceData')
+            ->willReturnSelf();
+        $selectionsMock->expects($this->once())
+            ->method('getItems')
+            ->willReturn([]);
+
+        $this->eventManagerMock->expects($this->once())
+            ->method('dispatch')
+            ->with(
+                'prepare_catalog_product_collection_prices',
+                ['collection' => $selectionsMock, 'store_id' => $storeId]
+            )
+            ->willReturnSelf();
+
+        $this->assertEquals(0, $this->model->getTotalBundleItemsPrice($productMock));
+    }
 }
-- 
GitLab


From d2ccf5b532081dc7bd932446068534bc0e27fc2f Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Tue, 20 Oct 2015 13:43:37 -0500
Subject: [PATCH 115/370] MAGETWO-44154: Random PAT build failures due to
 400/503 HTTP response errors being thrown

---
 .../Code/Test/Unit/Generator/IoTest.php       | 96 +++++++++----------
 1 file changed, 46 insertions(+), 50 deletions(-)

diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php
index d15295f9fef..bae88f1e729 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php
@@ -38,10 +38,10 @@ class IoTest extends \PHPUnit_Framework_TestCase
     protected $_filesystemDriverMock;
 
     /** @var string */
-    protected $existingFile;
+    protected $existingFile = '/Magento/Class/Exists.php';
 
     /** @var string */
-    protected $nonExistingFile;
+    protected $nonExistingFile = '/Magento/Class/Does/Not/Exists.php';
 
     protected function setUp()
     {
@@ -53,8 +53,6 @@ class IoTest extends \PHPUnit_Framework_TestCase
             $this->_filesystemDriverMock,
             self::GENERATION_DIRECTORY
         );
-        $this->existingFile = BP . '/Magento/Class/Exists.php';
-        $this->nonExistingFile = BP . '/Magento/Class/Does/Not/Exists.php';
     }
 
     protected function tearDown()
@@ -77,67 +75,65 @@ class IoTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals($expectedFileName, $this->_object->getResultFileName(self::CLASS_NAME));
     }
 
-    public function testWriteResultFile()
-    {
-        $this->_filesystemDriverMock->expects($this->once())
-            ->method('filePutContents')
-            ->with(
-                $this->stringContains($this->existingFile),
-                "<?php\n" . self::FILE_CONTENT
-            )->willReturn(true);
-
-        $this->_filesystemDriverMock->expects($this->once())
-            ->method('rename')
-            ->with(
-                $this->stringContains($this->existingFile),
-                $this->existingFile
-            )->willReturn(true);
-
-        $this->assertTrue($this->_object->writeResultFile($this->existingFile, self::FILE_CONTENT));
-    }
-
-    public function testWriteResultFileAlreadyExists()
+    /**
+     * @dataProvider testWriteResultFileAlreadyExistsDataProvider
+     */
+    public function testWriteResultFileAlreadyExists($resultFileName, $fileExists, $exceptionDuringRename, $success)
     {
         $this->_filesystemDriverMock->expects($this->once())
             ->method('filePutContents')
             ->with(
-                $this->stringContains($this->existingFile),
+                $this->stringContains($resultFileName),
                 "<?php\n" . self::FILE_CONTENT
             )->willReturn(true);
-        $this->_filesystemDriverMock->expects($this->once())
+        $isExistsInvocationCount = $exceptionDuringRename ? 1 : 0;
+        $this->_filesystemDriverMock->expects($this->exactly($isExistsInvocationCount))
             ->method('isExists')
-            ->willReturn(true);
+            ->willReturn($fileExists);
+
+        if (!$exceptionDuringRename) {
+            $renameMockEvent = $this->returnValue(true);
+        } else if ($fileExists) {
+            $renameMockEvent = $this->throwException(new FileSystemException(new Phrase('File already exists')));
+        } else {
+            $exceptionMessage = 'Some error renaming file';
+            $renameMockEvent = $this->throwException(new FileSystemException(new Phrase($exceptionMessage)));
+            $this->setExpectedException('\Magento\Framework\Exception\FileSystemException', $exceptionMessage);
+        }
 
         $this->_filesystemDriverMock->expects($this->once())
             ->method('rename')
             ->with(
-                $this->stringContains($this->existingFile),
-                $this->existingFile
-            )->willThrowException(new FileSystemException(new Phrase('File already exists')));
+                $this->stringContains($resultFileName),
+                $resultFileName
+            )->will($renameMockEvent); //Throw exception or return true
 
-        $this->assertTrue($this->_object->writeResultFile($this->existingFile, self::FILE_CONTENT));
+        $this->assertSame($success, $this->_object->writeResultFile($resultFileName, self::FILE_CONTENT));
     }
 
-    /**
-     * @expectedException \Magento\Framework\Exception\FileSystemException
-     */
-    public function testWriteResultFileThrowsException()
+    public function testWriteResultFileAlreadyExistsDataProvider()
     {
-        $this->_filesystemDriverMock->expects($this->once())
-            ->method('filePutContents')
-            ->with(
-                $this->stringContains($this->nonExistingFile),
-                "<?php\n" . self::FILE_CONTENT
-            )->willReturn(true);
-
-        $this->_filesystemDriverMock->expects($this->once())
-            ->method('rename')
-            ->with(
-                $this->stringContains($this->nonExistingFile),
-                $this->nonExistingFile
-            )->willThrowException(new FileSystemException(new Phrase('File already exists')));
-
-        $this->assertTrue($this->_object->writeResultFile($this->nonExistingFile, self::FILE_CONTENT));
+        return [
+            'Writing file succeeds: writeResultFile succeeds' => [
+                'resultFileName' => $this->nonExistingFile,
+                'fileExists' => false,
+                'exceptionDuringRename' => false,
+                'success' => true
+
+            ],
+            'Writing file fails because class already exists on disc: writeResultFile succeeds' => [
+                'resultFileName' => $this->existingFile,
+                'fileExists' => true,
+                'exceptionDuringRename' => true,
+                'success' => true
+            ],
+            'Error renaming file, btu class does not exist on disc: writeResultFile throws exception and fails' => [
+                'resultFileName' => $this->nonExistingFile,
+                'fileExists' => false,
+                'exceptionDuringRename' => true,
+                'success' => false
+            ]
+        ];
     }
 
     public function testMakeGenerationDirectoryWritable()
-- 
GitLab


From 84372e00efd267586bb716afb3f3142379632809 Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Wed, 21 Oct 2015 10:58:15 +0300
Subject: [PATCH 116/370] MAGETWO-44321: Magento\Email\Model\TemplateTest
 integration test fails in PHP 7

---
 .../Magento/Email/Model/TemplateTest.php      | 38 ++++++++++++++++---
 1 file changed, 32 insertions(+), 6 deletions(-)

diff --git a/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php b/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php
index 48d237cd8d6..26e30abc245 100644
--- a/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php
+++ b/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php
@@ -122,17 +122,19 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
             ->getArea(Area::AREA_FRONTEND)
             ->load();
 
-        $this->setNotDefaultThemeForFixtureStore();
         $expectedViewUrl = 'static/frontend/Magento/blank/en_US/Magento_Theme/favicon.ico';
-        $this->model->setTemplateText('{{view url="Magento_Theme::favicon.ico"}}');
-        $this->assertStringEndsNotWith($expectedViewUrl, $this->model->getProcessedTemplate());
         $this->model->setDesignConfig([
             'area' => 'frontend',
             'store' => $this->objectManager->get('Magento\Store\Model\StoreManagerInterface')
                 ->getStore('fixturestore')
                 ->getId(),
         ]);
+        $this->model->setTemplateText('{{view url="Magento_Theme::favicon.ico"}}');
 
+        $this->setNotDefaultThemeForFixtureStore();
+        $this->assertStringEndsNotWith($expectedViewUrl, $this->model->getProcessedTemplate());
+
+        $this->setDefaultThemeForFixtureStore();
         $this->assertStringEndsWith($expectedViewUrl, $this->model->getProcessedTemplate());
     }
 
@@ -524,11 +526,33 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * Set 'Magento/luma' for the 'fixturestore' store.
+     * Set 'Magento/blank' for the 'fixturestore' store.
      * Application isolation is required, if a test uses this method.
      */
     protected function setNotDefaultThemeForFixtureStore()
     {
+        /** @var \Magento\Framework\View\Design\ThemeInterface $theme */
+        $theme = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
+            'Magento\Framework\View\Design\ThemeInterface'
+        );
+        $theme->load('Magento/luma', 'theme_path');
+        \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
+            'Magento\Framework\App\Config\MutableScopeConfigInterface'
+        )->setValue(
+            \Magento\Framework\View\DesignInterface::XML_PATH_THEME_ID,
+            $theme->getId(),
+            \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
+            'fixturestore'
+        );
+    }
+
+    /**
+     * Set 'Magento/blank' for the 'fixturestore' store.
+     * Application isolation is required, if a test uses this method.
+     */
+    protected function setDefaultThemeForFixtureStore()
+    {
+        /** @var \Magento\Framework\View\Design\ThemeInterface $theme */
         $theme = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
             'Magento\Framework\View\Design\ThemeInterface'
         );
@@ -554,10 +578,8 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
             ->getArea(Area::AREA_FRONTEND)
             ->load();
 
-        $this->setNotDefaultThemeForFixtureStore();
         $expectedViewUrl = 'static/frontend/Magento/blank/en_US/Magento_Theme/favicon.ico';
         $this->model->setTemplateSubject('{{view url="Magento_Theme::favicon.ico"}}');
-        $this->assertStringEndsNotWith($expectedViewUrl, $this->model->getProcessedTemplateSubject([]));
         $this->model->setDesignConfig([
             'area' => 'frontend',
             'store' => $this->objectManager->get('Magento\Store\Model\StoreManagerInterface')
@@ -565,6 +587,10 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
                 ->getId(),
         ]);
 
+        $this->setNotDefaultThemeForFixtureStore();
+        $this->assertStringEndsNotWith($expectedViewUrl, $this->model->getProcessedTemplateSubject([]));
+
+        $this->setDefaultThemeForFixtureStore();
         $this->assertStringEndsWith($expectedViewUrl, $this->model->getProcessedTemplateSubject([]));
     }
 
-- 
GitLab


From 27972acd81a0df5ea58d667de49ebe9b508d40c0 Mon Sep 17 00:00:00 2001
From: Oleksandr Karpenko <okarpenko@ebay.com>
Date: Wed, 21 Oct 2015 11:17:13 +0300
Subject: [PATCH 117/370] MAGETWO-44017: Exception appears when user opens
 scheduled import export without installed imort/export

---
 .../Framework/Module/DependencyChecker.php     |  3 ++-
 .../Module/Test/Unit/DependencyCheckerTest.php | 18 ++++++++++++++----
 .../Module/Test/Unit/PackageInfoTest.php       |  5 +++++
 3 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/lib/internal/Magento/Framework/Module/DependencyChecker.php b/lib/internal/Magento/Framework/Module/DependencyChecker.php
index e84e2b99a11..71c811daf3c 100644
--- a/lib/internal/Magento/Framework/Module/DependencyChecker.php
+++ b/lib/internal/Magento/Framework/Module/DependencyChecker.php
@@ -99,7 +99,8 @@ class DependencyChecker
             $dependenciesMissing = [];
             $paths = $this->graph->findPathsToReachableNodes($moduleName, $graphMode);
             $modules = array_merge(
-                array_keys($this->fullModuleList), $this->packageInfo->getNonExistingDependencies()
+                array_keys($this->fullModuleList),
+                $this->packageInfo->getNonExistingDependencies()
             );
             foreach ($modules as $module) {
                 if (isset($paths[$module])) {
diff --git a/lib/internal/Magento/Framework/Module/Test/Unit/DependencyCheckerTest.php b/lib/internal/Magento/Framework/Module/Test/Unit/DependencyCheckerTest.php
index eb09d4a41ac..0d7774d8dda 100644
--- a/lib/internal/Magento/Framework/Module/Test/Unit/DependencyCheckerTest.php
+++ b/lib/internal/Magento/Framework/Module/Test/Unit/DependencyCheckerTest.php
@@ -70,10 +70,12 @@ class DependencyCheckerTest extends \PHPUnit_Framework_TestCase
 
     public function testCheckDependenciesWhenDisableModules()
     {
-        $this->listMock
-            ->expects($this->any())
+        $this->listMock->expects($this->any())
             ->method('getNames')
             ->will($this->returnValue(['A', 'B', 'C', 'D', 'E']));
+        $this->packageInfoMock->expects($this->atLeastOnce())
+            ->method('getNonExistingDependencies')
+            ->willReturn([]);
         $this->checker = new DependencyChecker($this->listMock, $this->loaderMock, $this->packageInfoFactoryMock);
 
         $actual = $this->checker->checkDependenciesWhenDisableModules(['B', 'D']);
@@ -83,6 +85,9 @@ class DependencyCheckerTest extends \PHPUnit_Framework_TestCase
 
     public function testCheckDependenciesWhenDisableModulesWithCurEnabledModules()
     {
+        $this->packageInfoMock->expects($this->atLeastOnce())
+            ->method('getNonExistingDependencies')
+            ->willReturn([]);
         $this->checker = new DependencyChecker($this->listMock, $this->loaderMock, $this->packageInfoFactoryMock);
 
         $actual = $this->checker->checkDependenciesWhenDisableModules(['B', 'D'], ['C', 'D', 'E']);
@@ -92,10 +97,12 @@ class DependencyCheckerTest extends \PHPUnit_Framework_TestCase
 
     public function testCheckDependenciesWhenEnableModules()
     {
-        $this->listMock
-            ->expects($this->any())
+        $this->listMock->expects($this->any())
             ->method('getNames')
             ->will($this->returnValue(['C']));
+        $this->packageInfoMock->expects($this->atLeastOnce())
+            ->method('getNonExistingDependencies')
+            ->willReturn([]);
         $this->checker = new DependencyChecker($this->listMock, $this->loaderMock, $this->packageInfoFactoryMock);
         $actual = $this->checker->checkDependenciesWhenEnableModules(['B', 'D']);
         $expected = [
@@ -107,6 +114,9 @@ class DependencyCheckerTest extends \PHPUnit_Framework_TestCase
 
     public function testCheckDependenciesWhenEnableModulesWithCurEnabledModules()
     {
+        $this->packageInfoMock->expects($this->atLeastOnce())
+            ->method('getNonExistingDependencies')
+            ->willReturn([]);
         $this->checker = new DependencyChecker($this->listMock, $this->loaderMock, $this->packageInfoFactoryMock);
         $actual = $this->checker->checkDependenciesWhenEnableModules(['B', 'D'], ['C']);
         $expected = [
diff --git a/lib/internal/Magento/Framework/Module/Test/Unit/PackageInfoTest.php b/lib/internal/Magento/Framework/Module/Test/Unit/PackageInfoTest.php
index 8a2512c485f..4328b62c0c6 100644
--- a/lib/internal/Magento/Framework/Module/Test/Unit/PackageInfoTest.php
+++ b/lib/internal/Magento/Framework/Module/Test/Unit/PackageInfoTest.php
@@ -57,6 +57,11 @@ class PackageInfoTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals('C', $this->packageInfo->getModuleName('c'));
         $this->assertEquals('D', $this->packageInfo->getModuleName('d'));
         $this->assertEquals('E', $this->packageInfo->getModuleName('e'));
+        $this->assertEquals(
+            'Magento_TestModuleName',
+            $this->packageInfo->getModuleName('magento/module-test-module-name')
+        );
+        $this->assertArrayHasKey('Magento_TestModuleName', $this->packageInfo->getNonExistingDependencies());
     }
 
     public function testGetPackageName()
-- 
GitLab


From b7ed155b56c737cfb26f087d547701d761be1a5a Mon Sep 17 00:00:00 2001
From: Mikalai_Eutsikhieu <Mikalai_Eutsikhieu@epam.com>
Date: Wed, 21 Oct 2015 11:22:44 +0300
Subject: [PATCH 118/370] MAGETWO-44261: Bug fixed; MAGETWO-44253: Bug fixed

---
 .../web/js/fotorama-add-video-events.js       | 23 ++++++++++++++++++-
 .../web/css/source/_module.less               |  4 ++--
 2 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
index 3fa62c44903..c2795990c58 100644
--- a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
+++ b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
@@ -96,6 +96,7 @@ define([
         VI: 'vimeo', // [CONST]
         FTVC: 'fotorama__video-close',
         FTAR: 'fotorama__arr',
+        isFullscreen: 0,
         Base: 0, //on check for video is base this setting become true if there is any video with base role
         MobileMaxWidth: 767,
         GP: 'gallery-placeholder', //gallery placeholder class is needed to find and erase <script> tag
@@ -106,6 +107,7 @@ define([
          */
         _init: function () {
             if (this._checkForVideoExist()) {
+                this._checkFullscreen();
                 this._checkForVimeo();
                 this._isVideoBase();
                 this._initFotoramaVideo();
@@ -113,6 +115,16 @@ define([
             }
         },
 
+        /**
+         *
+         * @private
+         */
+        _checkFullscreen: function () {
+            if ($(this.element).find('.fotorama__fullscreen-icon')) {
+                this.isFullscreen = true;
+            }
+        },
+
         /**
          *
          * @param {Object} inputData
@@ -367,6 +379,11 @@ define([
             $(this.element).on('fotorama:showend', $.proxy(function (e, fotorama) {
                 this._startPrepareForPlayer(e, fotorama);
             }, this));
+
+            $(this.element).on('fotorama:fullscreenexit', $.proxy(function (e, fotorama) {
+                fotorama.activeFrame.$stageFrame.parent().find('.' + this.PV).remove();
+                this._startPrepareForPlayer(e, fotorama);
+            }, this));
         },
 
         /**
@@ -403,6 +420,7 @@ define([
             if ($image && videoData && videoData.mediaType === this.VID) {
                 $(fotorama.activeFrame.$stageFrame).removeAttr('href');
                 this._prepareForVideoContainer($image, videoData, fotorama, number);
+                $('.fotorama-video-container').addClass('video-unplayed');
             }
         },
 
@@ -470,7 +488,10 @@ define([
                 if ($(this).hasClass('video-unplayed') && $(this).find('iframe').length === 0) {
                     $(this).removeClass('video-unplayed');
                     $(this).find('.' + PV).productVideoLoader();
-                    self._showCloseVideo();
+
+                    if (!self.isFullscreen) {
+                        self._showCloseVideo();
+                    }
                 }
             });
             this._handleBaseVideo(fotorama, number); //check for video is it base and handle it if it's base
diff --git a/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less
index d51b978a97e..50983ca119e 100644
--- a/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less
+++ b/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less
@@ -45,8 +45,8 @@
 }
 
 .product-video {
-    height: 85%;
-    margin-top: 15%;
+    height: 93%;
+    margin-top: 5%;
     position: absolute;
     top: 0;
     width: 100%;
-- 
GitLab


From 8c692e6181bcb4a6caa5c243c20fd97a276fd896 Mon Sep 17 00:00:00 2001
From: Michail Slabko <mslabko@ebay.com>
Date: Wed, 21 Oct 2015 11:30:22 +0300
Subject: [PATCH 119/370] MAGETWO-44274: SQL error appears if Save & Duplicate
 product with images

---
 .../Catalog/Model/Product/Attribute/Backend/Media.php        | 2 +-
 .../Model/ResourceModel/Product/Attribute/Backend/Media.php  | 5 ++++-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Media.php b/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Media.php
index 8ca5ffbc429..f7fd135a134 100644
--- a/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Media.php
+++ b/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Media.php
@@ -85,7 +85,7 @@ class Media extends Product\Attribute\Backend\AbstractMedia
             // For duplicating we need copy original images.
             $duplicate = [];
             foreach ($value['images'] as &$image) {
-                if (empty($image['value_id'])) {
+                if (empty($image['value_id']) || !empty($image['removed'])) {
                     continue;
                 }
                 $duplicate[$image['value_id']] = $this->copyImage($image['file']);
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php
index a77ea68ae16..0ac7a8c1a7b 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php
@@ -324,11 +324,12 @@ class Media extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
         foreach ($this->getConnection()->fetchAll($select) as $row) {
             $data = [
                 'attribute_id' => $attributeId,
-                'entity_id' => $newProductId,
                 'value' => isset($newFiles[$row['value_id']]) ? $newFiles[$row['value_id']] : $row['value'],
             ];
 
             $valueIdMap[$row['value_id']] = $this->insertGallery($data);
+            $this->bindValueToEntity($valueIdMap[$row['value_id']], $newProductId);
+
         }
 
         if (count($valueIdMap) == 0) {
@@ -344,6 +345,8 @@ class Media extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
         );
 
         foreach ($this->getConnection()->fetchAll($select) as $row) {
+            unset($row['record_id']);
+            $row['entity_id'] = $newProductId;
             $row['value_id'] = $valueIdMap[$row['value_id']];
             $this->insertGalleryValueInStore($row);
         }
-- 
GitLab


From 932d984cedfa49816effd38dd3c5c01995d20ddd Mon Sep 17 00:00:00 2001
From: Olga Matviienko <omatviienko@ebay.com>
Date: Wed, 21 Oct 2015 12:16:07 +0300
Subject: [PATCH 120/370] MAGETWO-44303: "Gift options" block is not aligned on
 Multishipping Checkout

---
 .../web/css/source/_module.less                    | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/app/design/frontend/Magento/blank/Magento_Multishipping/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_Multishipping/web/css/source/_module.less
index fd2eb640f58..9e80d998043 100644
--- a/app/design/frontend/Magento/blank/Magento_Multishipping/web/css/source/_module.less
+++ b/app/design/frontend/Magento/blank/Magento_Multishipping/web/css/source/_module.less
@@ -253,8 +253,8 @@
                 margin-bottom: @indent__m;
             }
             > .primary {
-                margin-right: 0;
                 margin-bottom: @indent__m;
+                margin-right: 0;
             }
         }
     }
@@ -295,9 +295,19 @@
                 width: 25%;
             }
             .box-shipping-method {
-                padding-right: @indent__m;
                 padding-left: @indent__m;
+                padding-right: @indent__m;
                 width: 50%;
+                .fieldset {
+                    .legend {
+                        &:extend(.abs-reset-left-margin-desktop-s all);
+                    }
+                    .field {
+                        &:before {
+                            display: none;
+                        }
+                    }
+                }
             }
         }
 
-- 
GitLab


From 0b633ca9f7218b1146feae2c3a0e3c821f7a0a96 Mon Sep 17 00:00:00 2001
From: Bohdan Korablov <bkorablov@ebay.com>
Date: Wed, 21 Oct 2015 12:16:28 +0300
Subject: [PATCH 121/370] MAGETWO-44346: Error in browser console about Captcha
 on Multi Shipping Flow

---
 .../frontend/layout/multishipping_checkout.xml | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/app/code/Magento/Multishipping/view/frontend/layout/multishipping_checkout.xml b/app/code/Magento/Multishipping/view/frontend/layout/multishipping_checkout.xml
index 097574d3107..46ec2dcccad 100644
--- a/app/code/Magento/Multishipping/view/frontend/layout/multishipping_checkout.xml
+++ b/app/code/Magento/Multishipping/view/frontend/layout/multishipping_checkout.xml
@@ -7,6 +7,24 @@
 -->
 <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="2columns-left" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd" label="Multishipping Checkout" design_abstraction="custom">
     <body>
+        <referenceBlock name="authentication-popup">
+            <arguments>
+                <argument name="jsLayout" xsi:type="array">
+                    <item name="components" xsi:type="array">
+                        <item name="authenticationPopup" xsi:type="array">
+                            <item name="children" xsi:type="array">
+                                <item name="captcha" xsi:type="array">
+                                    <item name="component" xsi:type="string">Magento_Captcha/js/view/checkout/loginCaptcha</item>
+                                    <item name="displayArea" xsi:type="string">additional-login-form-fields</item>
+                                    <item name="formId" xsi:type="string">user_login</item>
+                                    <item name="configSource" xsi:type="string">authenticationPopup</item>
+                                </item>
+                            </item>
+                        </item>
+                    </item>
+                </argument>
+            </arguments>
+        </referenceBlock>
         <referenceContainer name="sidebar.main">
             <block class="Magento\Multishipping\Block\Checkout\State" name="checkout_state" template="checkout/state.phtml" cacheable="false"/>
         </referenceContainer>
-- 
GitLab


From 0274021ca2b7b6d4835040a20a88d2c9ccea6d20 Mon Sep 17 00:00:00 2001
From: Mikalai Shostka <mikalai_shostka@epam.com>
Date: Wed, 21 Oct 2015 12:31:07 +0300
Subject: [PATCH 122/370] MAGETWO-44332: After click to add video button
 appears alert message

Fix text
---
 .../Block/Adminhtml/Product/Edit/NewVideo.php             | 8 +++-----
 app/code/Magento/ProductVideo/etc/adminhtml/system.xml    | 2 +-
 .../Magento_ProductVideo/web/css/source/_module.less      | 3 ---
 3 files changed, 4 insertions(+), 9 deletions(-)

diff --git a/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php b/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
index b04602152ee..0cc9119d506 100644
--- a/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
+++ b/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
@@ -270,16 +270,14 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
      */
     protected function getNoteVideoUrl()
     {
-        $result = __('Youtube and Vimeo services are supported.');
+        $result = __('YouTube and Vimeo supported.');
         if (is_null($this->mediaHelper->getYouTubeApiKey())) {
             $result = __(
-                'The vimeo service is supported,'
-                . ' in order to add an support for the youtube service'
-                . ' please <a href="%1">specify</a> an youtube API key within a system configurations.'
+                'Vimeo supported.<br>'
+                . 'To add YouTube video, please <a href="%1">enter YouTube API Key</a> first.'
                 ,
                 $this->getConfigApiKeyUrl()
             );
-            $result = '<div class="note_youtube_api_key">' . $result . '</div>';
         }
         return $result;
     }
diff --git a/app/code/Magento/ProductVideo/etc/adminhtml/system.xml b/app/code/Magento/ProductVideo/etc/adminhtml/system.xml
index 11884674b83..d00f9a78e6b 100644
--- a/app/code/Magento/ProductVideo/etc/adminhtml/system.xml
+++ b/app/code/Magento/ProductVideo/etc/adminhtml/system.xml
@@ -11,7 +11,7 @@
             <group id="product_video" translate="label" type="text" sortOrder="350" showInDefault="1" showInWebsite="1" showInStore="0">
                 <label>Product Video</label>
                 <field id="youtube_api_key" translate="label" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="0">
-                    <label>Youtube API key</label>
+                    <label>YouTube API Key</label>
                 </field>
             </group>
         </section>
diff --git a/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less b/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
index 032185bc423..7f4e8a590ac 100644
--- a/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
+++ b/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
@@ -234,6 +234,3 @@
 .image.base-image:hover .image-label {
     display: none;
 }
-.note .note_youtube_api_key {
-    background-color: #fffbbb;
-}
-- 
GitLab


From b100744447f9171b242ba6bac89ef8be8538d725 Mon Sep 17 00:00:00 2001
From: Maxim Medinskiy <mmedinskiy@ebay.com>
Date: Wed, 21 Oct 2015 12:43:13 +0300
Subject: [PATCH 123/370] MAGETWO-43869: The "Header contains invalid
 attribute(s)..." message appears wher user tries to import customers

---
 .../Model/Import/Customer.php                 | 51 +++++++++++--------
 .../Model/Import/CustomerComposite.php        | 22 +++++---
 .../Model/Import/AbstractEntity.php           | 12 ++++-
 .../Model/Import/Entity/AbstractEntity.php    | 12 ++++-
 4 files changed, 67 insertions(+), 30 deletions(-)

diff --git a/app/code/Magento/CustomerImportExport/Model/Import/Customer.php b/app/code/Magento/CustomerImportExport/Model/Import/Customer.php
index 6cf06f839c1..ef92b5194c5 100644
--- a/app/code/Magento/CustomerImportExport/Model/Import/Customer.php
+++ b/app/code/Magento/CustomerImportExport/Model/Import/Customer.php
@@ -5,6 +5,7 @@
  */
 namespace Magento\CustomerImportExport\Model\Import;
 
+use Magento\Customer\Api\Data\CustomerInterface;
 use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingErrorAggregatorInterface;
 
 /**
@@ -135,25 +136,25 @@ class Customer extends AbstractCustomer
     /**
      * Customer fields in file
      */
-    public $customerFields = [
-        'group_id',
-        'store_id',
-        'updated_at',
-        'created_at',
-        'created_in',
-        'prefix',
-        'firstname',
-        'middlename',
-        'lastname',
-        'suffix',
-        'dob',
+    protected $customerFields = [
+        CustomerInterface::GROUP_ID,
+        CustomerInterface::STORE_ID,
+        CustomerInterface::UPDATED_AT,
+        CustomerInterface::CREATED_AT,
+        CustomerInterface::CREATED_IN,
+        CustomerInterface::PREFIX,
+        CustomerInterface::FIRSTNAME,
+        CustomerInterface::MIDDLENAME,
+        CustomerInterface::LASTNAME,
+        CustomerInterface::SUFFIX,
+        CustomerInterface::DOB,
         'password_hash',
-        'taxvat',
-        'confirmation',
-        'gender',
+        CustomerInterface::TAXVAT,
+        CustomerInterface::CONFIRMATION,
+        CustomerInterface::GENDER,
         'rp_token',
         'rp_token_created_at',
-        ];
+    ];
 
     /**
      * @param \Magento\Framework\Stdlib\StringUtils $string
@@ -237,11 +238,6 @@ class Customer extends AbstractCustomer
 
         $this->_initStores(true)->_initAttributes();
 
-        $this->validColumnNames = array_merge(
-            $this->validColumnNames,
-            $this->customerFields
-        );
-
         $this->_customerModel = $customerFactory->create();
         /** @var $customerResource \Magento\Customer\Model\ResourceModel\Customer */
         $customerResource = $this->_customerModel->getResource();
@@ -562,4 +558,17 @@ class Customer extends AbstractCustomer
     {
         return $this->_entityTable;
     }
+
+    /**
+     * @inheritDoc
+     */
+    public function getValidColumnNames()
+    {
+        $this->validColumnNames = array_merge(
+            $this->validColumnNames,
+            $this->customerFields
+        );
+
+        return $this->validColumnNames;
+    }
 }
diff --git a/app/code/Magento/CustomerImportExport/Model/Import/CustomerComposite.php b/app/code/Magento/CustomerImportExport/Model/Import/CustomerComposite.php
index ed7d2f8fe9e..97d2407a780 100644
--- a/app/code/Magento/CustomerImportExport/Model/Import/CustomerComposite.php
+++ b/app/code/Magento/CustomerImportExport/Model/Import/CustomerComposite.php
@@ -224,13 +224,6 @@ class CustomerComposite extends \Magento\ImportExport\Model\Import\AbstractEntit
         }
         $this->_initAddressAttributes();
 
-        $this->validColumnNames = array_merge(
-            $this->validColumnNames,
-            $this->_customerAttributes,
-            $this->_addressAttributes,
-            $this->_customerEntity->customerFields
-        );
-
         // next customer id
         if (isset($data['next_customer_id'])) {
             $this->_nextCustomerId = $data['next_customer_id'];
@@ -489,4 +482,19 @@ class CustomerComposite extends \Magento\ImportExport\Model\Import\AbstractEntit
 
         return parent::_prepareRowForDb($rowData);
     }
+
+    /**
+     * @inheritDoc
+     */
+    public function getValidColumnNames()
+    {
+        $this->validColumnNames = array_merge(
+            $this->validColumnNames,
+            $this->_customerAttributes,
+            $this->_addressAttributes,
+            $this->_customerEntity->customerFields
+        );
+
+        return $this->validColumnNames;
+    }
 }
diff --git a/app/code/Magento/ImportExport/Model/Import/AbstractEntity.php b/app/code/Magento/ImportExport/Model/Import/AbstractEntity.php
index e9b684c2bd2..085c9261e34 100644
--- a/app/code/Magento/ImportExport/Model/Import/AbstractEntity.php
+++ b/app/code/Magento/ImportExport/Model/Import/AbstractEntity.php
@@ -792,7 +792,7 @@ abstract class AbstractEntity
                         $emptyHeaderColumns[] = $columnNumber;
                     } elseif (!preg_match('/^[a-z][a-z0-9_]*$/', $columnName)) {
                         $invalidColumns[] = $columnName;
-                    } elseif ($this->needColumnCheck && !in_array($columnName, $this->validColumnNames)) {
+                    } elseif ($this->needColumnCheck && !in_array($columnName, $this->getValidColumnNames())) {
                         $invalidAttributes[] = $columnName;
                     }
                 }
@@ -854,4 +854,14 @@ abstract class AbstractEntity
         $this->countItemsDeleted = count($deleted);
         return $this;
     }
+
+    /**
+     * Retrieve valid column names
+     *
+     * @return array
+     */
+    public function getValidColumnNames()
+    {
+        return $this->validColumnNames;
+    }
 }
diff --git a/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEntity.php b/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEntity.php
index 81422c45e13..9a0971d18e1 100644
--- a/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEntity.php
+++ b/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEntity.php
@@ -763,7 +763,7 @@ abstract class AbstractEntity
                             $emptyHeaderColumns[] = $columnNumber;
                         } elseif (!preg_match('/^[a-z][a-z0-9_]*$/', $columnName)) {
                             $invalidColumns[] = $columnName;
-                        } elseif ($this->needColumnCheck && !in_array($columnName, $this->validColumnNames)) {
+                        } elseif ($this->needColumnCheck && !in_array($columnName, $this->getValidColumnNames())) {
                             $invalidAttributes[] = $columnName;
                         }
                     }
@@ -818,4 +818,14 @@ abstract class AbstractEntity
     {
         return $this->countItemsDeleted;
     }
+
+    /**
+     * Retrieve valid column names
+     *
+     * @return array
+     */
+    public function getValidColumnNames()
+    {
+        return $this->validColumnNames;
+    }
 }
-- 
GitLab


From 441e3f43a52a88efcf458f02c9ffb994baf7dc1b Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Wed, 21 Oct 2015 12:46:03 +0300
Subject: [PATCH 124/370] MAGETWO-44321: Magento\Email\Model\TemplateTest
 integration test fails in PHP 7

---
 .../integration/testsuite/Magento/Email/Model/TemplateTest.php  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php b/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php
index 26e30abc245..5680b57d0fc 100644
--- a/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php
+++ b/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php
@@ -526,7 +526,7 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * Set 'Magento/blank' for the 'fixturestore' store.
+     * Set 'Magento/luma' for the 'fixturestore' store.
      * Application isolation is required, if a test uses this method.
      */
     protected function setNotDefaultThemeForFixtureStore()
-- 
GitLab


From a6e09a53b509090cb6add70279a030d8877ca3f5 Mon Sep 17 00:00:00 2001
From: Andrii Kasian <akasian@magento.com>
Date: Wed, 21 Oct 2015 13:34:35 +0300
Subject: [PATCH 125/370] MAGETWO-44159: Configurable product price in store
 front doesn't reflect price change from backend

---
 .../Product/Indexer/Price/DefaultPrice.php    | 37 ++++++++++---
 .../Adapter/Mysql/Dynamic/DataProvider.php    |  5 +-
 .../Product/Indexer/Price/Configurable.php    | 52 +++++++++++++++++--
 3 files changed, 81 insertions(+), 13 deletions(-)

diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php
index 0df889441d2..c5eb2405bcb 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php
@@ -224,6 +224,20 @@ class DefaultPrice extends AbstractIndexer implements PriceInterface
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
     protected function _prepareFinalPriceData($entityIds = null)
+    {
+       return $this->prepareFinalPriceDataForType($entityIds, $this->getTypeId());
+    }
+
+    /**
+     * Prepare products default final price in temporary index table
+     *
+     * @param int|array $entityIds the entity ids limitation
+     * @param string|null $type product type, all if null
+     * @return $this
+     * @throws \Magento\Framework\Exception\LocalizedException
+     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
+     */
+    protected function prepareFinalPriceDataForType($entityIds, $type)
     {
         $this->_prepareDefaultFinalPriceTable();
 
@@ -260,10 +274,13 @@ class DefaultPrice extends AbstractIndexer implements PriceInterface
             'tp.entity_id = e.entity_id AND tp.website_id = cw.website_id' .
             ' AND tp.customer_group_id = cg.customer_group_id',
             []
-        )->where(
-            'e.type_id = ?',
-            $this->getTypeId()
         );
+        if ($type !== null){
+            $select->where(
+                'e.type_id = ?',
+                $type
+            );
+        }
 
         // add enable products limitation
         $statusCond = $connection->quoteInto(
@@ -299,10 +316,10 @@ class DefaultPrice extends AbstractIndexer implements PriceInterface
 
         $select->columns(
             [
-                'orig_price' => $price,
-                'price' => $finalPrice,
-                'min_price' => $finalPrice,
-                'max_price' => $finalPrice,
+                'orig_price' => $connection->getIfNullSql($price, 0),
+                'price' => $connection->getIfNullSql($finalPrice, 0),
+                'min_price' => $connection->getIfNullSql($finalPrice, 0),
+                'max_price' => $connection->getIfNullSql($finalPrice, 0),
                 'tier_price' => new \Zend_Db_Expr('tp.min_price'),
                 'base_tier' => new \Zend_Db_Expr('tp.min_price'),
             ]
@@ -556,7 +573,7 @@ class DefaultPrice extends AbstractIndexer implements PriceInterface
      *
      * @return $this
      */
-    protected function _movePriceDataToIndexTable()
+    protected function _movePriceDataToIndexTable($entityIds = null)
     {
         $columns = [
             'entity_id' => 'entity_id',
@@ -574,6 +591,10 @@ class DefaultPrice extends AbstractIndexer implements PriceInterface
         $table = $this->_getDefaultFinalPriceTable();
         $select = $connection->select()->from($table, $columns);
 
+        if ($entityIds !== null) {
+            $select->where('entity_id in (?)', $entityIds);
+        }
+
         $query = $select->insertFromSelect($this->getIdxTable(), [], false);
         $connection->query($query);
 
diff --git a/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Dynamic/DataProvider.php b/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Dynamic/DataProvider.php
index b486feeafb6..cedd874dbde 100644
--- a/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Dynamic/DataProvider.php
+++ b/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Dynamic/DataProvider.php
@@ -135,7 +135,10 @@ class DataProvider implements DataProviderInterface
         $column = $select->getPart(Select::COLUMNS)[0];
         $select->reset(Select::COLUMNS);
         $rangeExpr = new \Zend_Db_Expr(
-            $this->connection->quoteInto('(FLOOR(' . $column[1] . ' / ? ) + 1)', $range)
+            $this->connection->getIfNullSql(
+                $this->connection->quoteInto('FLOOR(' . $column[1] . ' / ? ) + 1', $range),
+                1
+            )
         );
 
         $select
diff --git a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
index 814508cd629..d21d0931218 100644
--- a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
+++ b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
@@ -48,14 +48,58 @@ class Configurable extends \Magento\Catalog\Model\ResourceModel\Product\Indexer\
     protected function reindex($entityIds = null)
     {
         if ($this->hasEntity() || !empty($entityIds)) {
-            $this->_prepareFinalPriceData($entityIds);
+            if (!empty($entityIds)) {
+                $allEntityIds = $this->getRelatedProduct($entityIds);
+                $this->prepareFinalPriceDataForType($allEntityIds, null);
+            } else {
+                $this->_prepareFinalPriceData($entityIds);
+            }
             $this->_applyCustomOption();
-            $this->_applyConfigurableOption();
-            $this->_movePriceDataToIndexTable();
+            $this->_applyConfigurableOption($entityIds);
+            $this->_movePriceDataToIndexTable($entityIds);
         }
         return $this;
     }
 
+    /**
+     * Get related product
+     *
+     * @param int[] $entityIds
+     */
+    private function getRelatedProduct($entityIds)
+    {
+        $select = $this->getConnection()->select()->union([
+            $this->getConnection()
+                ->select()
+                ->from(
+                    $this->getTable('catalog_product_super_link'),
+                    'parent_id'
+                )->where(
+                    'parent_id in (?)', $entityIds
+                ),
+            $this->getConnection()
+                ->select()
+                ->from(
+                    $this->getTable('catalog_product_super_link'),
+                    'product_id'
+                )->where(
+                    'parent_id in (?)', $entityIds
+                ),
+            $this->getConnection()
+                 ->select()
+                 ->from(
+                     $this->getTable('catalog_product_super_link'),
+                     'product_id'
+                 )->where(
+                     'product_id in (?)', $entityIds
+                 )
+        ]);
+        return array_map(
+            'intval',
+             $this->getConnection()->fetchCol($select)
+        );
+    }
+
     /**
      * Retrieve table name for custom option temporary aggregation data
      *
@@ -105,7 +149,7 @@ class Configurable extends \Magento\Catalog\Model\ResourceModel\Product\Indexer\
      * @return \Magento\ConfigurableProduct\Model\ResourceModel\Product\Indexer\Price\Configurable
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
-    protected function _applyConfigurableOption()
+    protected function _applyConfigurableOption($entityIds)
     {
         $connection = $this->getConnection();
         $coaTable = $this->_getConfigurableOptionAggregateTable();
-- 
GitLab


From 3e3ef2452207a022381855eb39c3ad793339cb6e Mon Sep 17 00:00:00 2001
From: Olga Matviienko <omatviienko@ebay.com>
Date: Wed, 21 Oct 2015 13:44:00 +0300
Subject: [PATCH 126/370] MAGETWO-44312: "Scope" selector is not aligned in
 Admin

---
 .../web/css/source/module/main/_collapsible-blocks.less        | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/main/_collapsible-blocks.less b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/main/_collapsible-blocks.less
index 730f3d53ff5..78129d62a70 100644
--- a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/main/_collapsible-blocks.less
+++ b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/main/_collapsible-blocks.less
@@ -253,6 +253,9 @@
             .scope-label {
                 padding: 31px 1.5rem 0 0;
             }
+            .use-default {
+                padding: 29px 1.5rem 0 0;
+            }
             .value {
                 padding-right: 4rem;
             }
-- 
GitLab


From 59f9e53cd06299799dc49752105135f36bd504eb Mon Sep 17 00:00:00 2001
From: Michail Slabko <mslabko@ebay.com>
Date: Wed, 21 Oct 2015 13:45:08 +0300
Subject: [PATCH 127/370] =?UTF-8?q?MAGETWO-44055:=20[GITHUB]=20Admin=20pro?=
 =?UTF-8?q?duct=20=C2=ABCustom=20Options=C2=BB=20tab=20controls=20(=C2=ABI?=
 =?UTF-8?q?mport=20Options=C2=BB,=20=C2=ABAdd=20New=20Option=C2=BB=20butto?=
 =?UTF-8?q?ns)=20do=20not=20work=20when=20non-English=20locale=20is=20used?=
 =?UTF-8?q?=20#1971?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Catalog/Model/Config/Source/Product/Options/Type.php    | 2 +-
 .../Magento/Catalog/view/adminhtml/web/js/custom-options.js | 3 ++-
 lib/internal/Magento/Framework/View/Element/Html/Select.php | 6 +++---
 3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/app/code/Magento/Catalog/Model/Config/Source/Product/Options/Type.php b/app/code/Magento/Catalog/Model/Config/Source/Product/Options/Type.php
index 5d0c1f24872..ca62402f23a 100644
--- a/app/code/Magento/Catalog/Model/Config/Source/Product/Options/Type.php
+++ b/app/code/Magento/Catalog/Model/Config/Source/Product/Options/Type.php
@@ -43,7 +43,7 @@ class Type implements \Magento\Framework\Option\ArrayInterface
                 $types[] = ['label' => __($type['label']), 'value' => $type['name']];
             }
             if (count($types)) {
-                $groups[] = ['label' => __($option['label']), 'value' => $types];
+                $groups[] = ['label' => __($option['label']), 'value' => $types, 'optgroup-name' => $option['label']];
             }
         }
 
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js b/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
index 69072252e41..ae23c3476b8 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
@@ -194,7 +194,8 @@ define([
                     var widget = this,
                         currentElement = $(event.target),
                         parentId = '#' + currentElement.closest('.fieldset-alt').attr('id'),
-                        group = currentElement.find('[value="' + currentElement.val() + '"]').closest('optgroup').attr('data-name'),
+                        group = currentElement.find('[value="' + currentElement.val() + '"]')
+                            .closest('optgroup').attr('data-optgroup-name'),
                         previousGroup = $(parentId + '_previous_group').val(),
                         previousBlock = $(parentId + '_type_' + previousGroup),
                         tmpl;
diff --git a/lib/internal/Magento/Framework/View/Element/Html/Select.php b/lib/internal/Magento/Framework/View/Element/Html/Select.php
index 2b240270ba7..1bdbd099cc7 100644
--- a/lib/internal/Magento/Framework/View/Element/Html/Select.php
+++ b/lib/internal/Magento/Framework/View/Element/Html/Select.php
@@ -151,21 +151,21 @@ class Select extends \Magento\Framework\View\Element\AbstractBlock
 
         $isArrayOption = true;
         foreach ($this->getOptions() as $key => $option) {
+            $optgroupName = '';
             if ($isArrayOption && is_array($option)) {
                 $value = $option['value'];
                 $label = (string)$option['label'];
-                $name = $option['label'] instanceof \Magento\Framework\Phrase ? $option['label']->getText() : $label;
+                $optgroupName = isset($option['optgroup-name']) ? $option['optgroup-name'] : $label;
                 $params = !empty($option['params']) ? $option['params'] : [];
             } else {
                 $value = (string)$key;
                 $label = (string)$option;
-                $name = $label;
                 $isArrayOption = false;
                 $params = [];
             }
 
             if (is_array($value)) {
-                $html .= '<optgroup label="' . $label . '" data-name="' . $name . '">';
+                $html .= '<optgroup label="' . $label . '" data-optgroup-name="' . $optgroupName . '">';
                 foreach ($value as $keyGroup => $optionGroup) {
                     if (!is_array($optionGroup)) {
                         $optionGroup = ['value' => $keyGroup, 'label' => $optionGroup];
-- 
GitLab


From 38a6712542a565973a4b5bce7d8ea965ecc3b0cc Mon Sep 17 00:00:00 2001
From: Oleksandr Miroshnichenko <omiroshnichenko@ebay.com>
Date: Wed, 21 Oct 2015 13:48:50 +0300
Subject: [PATCH 128/370] MAGETWO-44351: Gallery image sliding opens
 full-screen mode after mouse up event

---
 lib/web/mage/gallery/gallery.js | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index 245f08f824b..75594a9dfd0 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -90,13 +90,15 @@ define([
             this.initApi();
             this.setupBreakpoints();
             this.initFullscreenSettings();
-            this.settings.$element.on('click', '.fotorama__stage__frame', function () {
-                $('[data-gallery-role="gallery"]').data('fotorama').requestFullScreen();
-                $('[data-gallery-role="fotorama__fullscreen-icon"]').css({
-                    opacity: 1,
-                    visibility: 'visible',
-                    display: 'block'
-                });
+            this.settings.$element.on('mouseup', '.fotorama__stage__frame', function () {
+                if (!$(this).parents('.fotorama__shadows--left').length) {
+                    $('[data-gallery-role="gallery"]').data('fotorama').requestFullScreen();
+                    $('[data-gallery-role="fotorama__fullscreen-icon"]').css({
+                        opacity: 1,
+                        visibility: 'visible',
+                        display: 'block'
+                    });
+                }
             });
         },
 
-- 
GitLab


From f1aeee4b31cc14bbb312d692e5b105c85d20ae80 Mon Sep 17 00:00:00 2001
From: Michail Slabko <mslabko@ebay.com>
Date: Wed, 21 Oct 2015 14:05:48 +0300
Subject: [PATCH 129/370] =?UTF-8?q?MAGETWO-44055:=20[GITHUB]=20Admin=20pro?=
 =?UTF-8?q?duct=20=C2=ABCustom=20Options=C2=BB=20tab=20controls=20(=C2=ABI?=
 =?UTF-8?q?mport=20Options=C2=BB,=20=C2=ABAdd=20New=20Option=C2=BB=20butto?=
 =?UTF-8?q?ns)=20do=20not=20work=20when=20non-English=20locale=20is=20used?=
 =?UTF-8?q?=20#1971=20-=20fix=20tests?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/code/Magento/Catalog/Model/CategoryLinkManagement.php       | 2 +-
 .../Test/Unit/Model/Config/Source/Product/Options/TypeTest.php  | 2 +-
 .../Catalog/view/adminhtml/templates/catalog/product/edit.phtml | 2 +-
 .../adminhtml/templates/product/edit/attribute/search.phtml     | 2 +-
 .../Model/Product/Option/Type/File/ValidatorFileTest.php        | 2 +-
 lib/internal/Magento/Framework/View/Element/Html/Select.php     | 1 +
 .../Framework/View/Test/Unit/Element/Html/SelectTest.php        | 2 +-
 7 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/app/code/Magento/Catalog/Model/CategoryLinkManagement.php b/app/code/Magento/Catalog/Model/CategoryLinkManagement.php
index f0405be4621..4ff351dc3d7 100644
--- a/app/code/Magento/Catalog/Model/CategoryLinkManagement.php
+++ b/app/code/Magento/Catalog/Model/CategoryLinkManagement.php
@@ -45,7 +45,7 @@ class CategoryLinkManagement implements \Magento\Catalog\Api\CategoryLinkManagem
         $links = [];
 
         /** @var \Magento\Catalog\Model\Product $product */
-        foreach ($products->getItems() as $productId => $product) {
+        foreach ($products->getItems() as $product) {
             /** @var \Magento\Catalog\Api\Data\CategoryProductLinkInterface $link */
             $link = $this->productLinkFactory->create();
             $link->setSku($product->getSku())
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Config/Source/Product/Options/TypeTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Config/Source/Product/Options/TypeTest.php
index aa686d39ce8..3b3adabdfbc 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Config/Source/Product/Options/TypeTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Config/Source/Product/Options/TypeTest.php
@@ -51,7 +51,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
         ];
         $expect = [
             ['value' => '', 'label' => __('-- Please select --')],
-            ['label' => 'optionLabel', 'value' => [['label' => 'typeLabel', 'value' => 'typeName']]],
+            ['label' => 'optionLabel', 'optgroup-name' => 'optionLabel', 'value' => [['label' => 'typeLabel', 'value' => 'typeName']]],
         ];
 
         $this->productOptionConfig->expects($this->any())->method('getAll')->will($this->returnValue($allOptions));
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit.phtml
index d21c1ee5ad8..30048cce246 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit.phtml
@@ -21,7 +21,7 @@
                 </button>
                 <ul class="dropdown-menu">
                     <li><input type="text" id="product-template-suggest" class="search"
-                           placeholder="<?php echo __('start typing to search template'); ?>"/></li>
+                           placeholder="<?php /* @noEscape */ echo __('start typing to search template'); ?>"/></li>
                 </ul>
             </div>
         </div>
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/product/edit/attribute/search.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/product/edit/attribute/search.phtml
index 4536143416c..8d2cca19f20 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/product/edit/attribute/search.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/product/edit/attribute/search.phtml
@@ -17,7 +17,7 @@
             <input data-role="product-attribute-search"
                    data-group="<?php echo $block->escapeHtml($block->getGroupCode()); ?>"
                    class="search" type="text"
-                   placeholder="<?php echo __('start typing to search attribute'); ?>" />
+                   placeholder="<?php /* @noEscape */ echo __('start typing to search attribute'); ?>" />
         </div>
     </div>
 
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Option/Type/File/ValidatorFileTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Option/Type/File/ValidatorFileTest.php
index a22645bf6b7..b005c52813a 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Option/Type/File/ValidatorFileTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Option/Type/File/ValidatorFileTest.php
@@ -16,7 +16,7 @@ class ValidatorFileTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Framework\ObjectManager
+     * @var \Magento\Framework\ObjectManagerInterface
      */
     protected $objectManager;
 
diff --git a/lib/internal/Magento/Framework/View/Element/Html/Select.php b/lib/internal/Magento/Framework/View/Element/Html/Select.php
index 1bdbd099cc7..884c11fe919 100644
--- a/lib/internal/Magento/Framework/View/Element/Html/Select.php
+++ b/lib/internal/Magento/Framework/View/Element/Html/Select.php
@@ -125,6 +125,7 @@ class Select extends \Magento\Framework\View\Element\AbstractBlock
      * @return string
      *
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
+     * @SuppressWarnings(PHPMD.NPathComplexity)
      */
     protected function _toHtml()
     {
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Element/Html/SelectTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Element/Html/SelectTest.php
index d3660f32178..3321d1eeaf8 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Element/Html/SelectTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Element/Html/SelectTest.php
@@ -127,7 +127,7 @@ class SelectTest extends \PHPUnit_Framework_TestCase
             .   '<option value="testValue"  paramKey="paramValue" >testLabel</option>'
             .   '<option value="selectedValue" selected="selected"  paramKey="paramValue" '
             .       ' paramKey2="paramValue2" >selectedLabel</option>'
-            .   '<optgroup label="groupLabel">'
+            .   '<optgroup label="groupLabel" data-optgroup-name="groupLabel">'
             .       '<option value="groupElementValue" >GroupElementLabel</option>'
             .       '<option value="selectedGroupElementValue" selected="selected" >SelectedGroupElementLabel</option>'
             .   '</optgroup>'
-- 
GitLab


From fa0b95e04a77152fc2cbf0248a8fc9ee30d1cde6 Mon Sep 17 00:00:00 2001
From: Michail Slabko <mslabko@ebay.com>
Date: Wed, 21 Oct 2015 14:14:23 +0300
Subject: [PATCH 130/370] =?UTF-8?q?MAGETWO-44055:=20[GITHUB]=20Admin=20pro?=
 =?UTF-8?q?duct=20=C2=ABCustom=20Options=C2=BB=20tab=20controls=20(=C2=ABI?=
 =?UTF-8?q?mport=20Options=C2=BB,=20=C2=ABAdd=20New=20Option=C2=BB=20butto?=
 =?UTF-8?q?ns)=20do=20not=20work=20when=20non-English=20locale=20is=20used?=
 =?UTF-8?q?=20#1971=20-=20fix=20tests?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Edit/Chooser/_files/design-abstraction_select.html        | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/_files/design-abstraction_select.html b/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/_files/design-abstraction_select.html
index 15e322c12df..ec08d09ec6b 100644
--- a/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/_files/design-abstraction_select.html
+++ b/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/_files/design-abstraction_select.html
@@ -6,9 +6,9 @@
 -->
 <select name="design_abstractions" id="design_abstraction_select" class="design-abstraction-select" title="Design Abstraction Select">
     <option value="">-- Please Select --</option>
-    <optgroup label="Custom Layouts">
+    <optgroup data-optgroup-name="Custom Layouts" label="Custom Layouts">
         <option value="customer_account" >Customer My Account (All Pages)</option>
     </optgroup>
-    <optgroup label="Page Layouts">
+    <optgroup data-optgroup-name="Page Layouts" label="Page Layouts">
         <option value="page_empty" >All Empty Layout Pages</option>
     </optgroup></select>
-- 
GitLab


From 162e6b383540bce143551cd3e9de2c4f76b34228 Mon Sep 17 00:00:00 2001
From: Michail Slabko <mslabko@ebay.com>
Date: Wed, 21 Oct 2015 15:15:06 +0300
Subject: [PATCH 131/370] =?UTF-8?q?MAGETWO-44055:=20[GITHUB]=20Admin=20pro?=
 =?UTF-8?q?duct=20=C2=ABCustom=20Options=C2=BB=20tab=20controls=20(=C2=ABI?=
 =?UTF-8?q?mport=20Options=C2=BB,=20=C2=ABAdd=20New=20Option=C2=BB=20butto?=
 =?UTF-8?q?ns)=20do=20not=20work=20when=20non-English=20locale=20is=20used?=
 =?UTF-8?q?=20#1971=20-=20fix=20unit?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Unit/Model/Config/Source/Product/Options/TypeTest.php   | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Config/Source/Product/Options/TypeTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Config/Source/Product/Options/TypeTest.php
index 3b3adabdfbc..0696faaa934 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Config/Source/Product/Options/TypeTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Config/Source/Product/Options/TypeTest.php
@@ -51,7 +51,11 @@ class TypeTest extends \PHPUnit_Framework_TestCase
         ];
         $expect = [
             ['value' => '', 'label' => __('-- Please select --')],
-            ['label' => 'optionLabel', 'optgroup-name' => 'optionLabel', 'value' => [['label' => 'typeLabel', 'value' => 'typeName']]],
+            [
+                'label' => 'optionLabel',
+                'optgroup-name' => 'optionLabel',
+                'value' => [['label' => 'typeLabel', 'value' => 'typeName']]
+            ],
         ];
 
         $this->productOptionConfig->expects($this->any())->method('getAll')->will($this->returnValue($allOptions));
-- 
GitLab


From d857d569a01c1f3f5ab3fa7559992ddac04cb464 Mon Sep 17 00:00:00 2001
From: Vitalii Zabaznov <vzabaznov@ebay.com>
Date: Wed, 21 Oct 2015 15:16:50 +0300
Subject: [PATCH 132/370] MAGETWO-44109: Import Custom Options grid contains
 Downloadable product if Import Custom Options for Simple product

---
 .../Block/Adminhtml/Product/Edit/Tab/Options/Popup/Grid.php    | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Popup/Grid.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Popup/Grid.php
index d98abfd533f..646db241f82 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Popup/Grid.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Popup/Grid.php
@@ -65,7 +65,8 @@ class Grid extends \Magento\Catalog\Block\Adminhtml\Product\Grid
 
         if (null !== $this->getRequest()->getParam('current_product_id')) {
             $this->getCollection()->getSelect()->where(
-                'e.entity_id != ?', $this->getRequest()->getParam('current_product_id')
+                'e.entity_id != ?',
+                $this->getRequest()->getParam('current_product_id')
             );
         }
 
-- 
GitLab


From 04de8c253f8e87f7d485dbb11896f427a89dc5a1 Mon Sep 17 00:00:00 2001
From: Arkadii Chyzhov <achyzhov@ebay.com>
Date: Wed, 21 Oct 2015 13:30:07 +0300
Subject: [PATCH 133/370] MAGETWO-43683: Magento 2 translation tools does not
 allow to translate Magento

- removed an exception if i18n tools use default locale
- added per module, lib, theme translation
---
 .../I18n/Dictionary/_files/expected/with_context.csv     | 6 ++++--
 setup/src/Magento/Setup/Module/I18n/Locale.php           | 4 +---
 .../src/Magento/Setup/Module/I18n/Parser/Contextual.php  | 2 +-
 .../Magento/Setup/Test/Unit/Module/I18n/LocaleTest.php   | 9 ---------
 4 files changed, 6 insertions(+), 15 deletions(-)

diff --git a/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/expected/with_context.csv b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/expected/with_context.csv
index 0895edb09f3..6c873fee5c8 100644
--- a/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/expected/with_context.csv
+++ b/dev/tests/integration/testsuite/Magento/Setup/Module/I18n/Dictionary/_files/expected/with_context.csv
@@ -1,9 +1,11 @@
 Helper,Helper,module,Magento_FirstModule
-Model,Model,module,"Magento_FirstModule,Magento_SecondModule"
+Model,Model,module,Magento_FirstModule
 "Module template","Module template",module,Magento_FirstModule
+Model,Model,module,Magento_SecondModule
 "Theme template","Theme template",theme,adminhtml/default/backend
 "Module js","Module js",module,Magento_FirstModule
-"Lib js","Lib js",lib,"lib/web/mage/file.js,lib/web/varien/file.js"
+"Lib js","Lib js",lib,lib/web/mage/file.js
+"Lib js","Lib js",lib,lib/web/varien/file.js
 "Module layout label","Module layout label",module,Magento_FirstModule
 "Module layout title","Module layout title",module,Magento_FirstModule
 "Theme layout label","Theme layout label",theme,adminhtml/default/backend
diff --git a/setup/src/Magento/Setup/Module/I18n/Locale.php b/setup/src/Magento/Setup/Module/I18n/Locale.php
index e3bb79e9adb..053ee398a2f 100644
--- a/setup/src/Magento/Setup/Module/I18n/Locale.php
+++ b/setup/src/Magento/Setup/Module/I18n/Locale.php
@@ -30,9 +30,7 @@ class Locale
      */
     public function __construct($locale)
     {
-        if ($locale == self::DEFAULT_SYSTEM_LOCALE) {
-            throw new \InvalidArgumentException('Target locale is system default locale.');
-        } elseif (!preg_match('/[a-z]{2}_[A-Z]{2}/', $locale)) {
+        if (!preg_match('/[a-z]{2}_[A-Z]{2}/', $locale)) {
             throw new \InvalidArgumentException('Target locale must match the following format: "aa_AA".');
         }
         $this->_locale = $locale;
diff --git a/setup/src/Magento/Setup/Module/I18n/Parser/Contextual.php b/setup/src/Magento/Setup/Module/I18n/Parser/Contextual.php
index d759eb11b2b..cbeca7d79d6 100644
--- a/setup/src/Magento/Setup/Module/I18n/Parser/Contextual.php
+++ b/setup/src/Magento/Setup/Module/I18n/Parser/Contextual.php
@@ -63,7 +63,7 @@ class Contextual extends AbstractParser
      */
     protected function _addPhrase($phraseData, $contextType, $contextValue)
     {
-        $phraseKey = $contextType . stripslashes($phraseData['phrase']);
+        $phraseKey = $contextType . $contextValue. stripslashes($phraseData['phrase']);
 
         if (isset($this->_phrases[$phraseKey])) {
             /** @var \Magento\Setup\Module\I18n\Dictionary\Phrase $phrase */
diff --git a/setup/src/Magento/Setup/Test/Unit/Module/I18n/LocaleTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/LocaleTest.php
index 09914f78631..9eec9b69014 100644
--- a/setup/src/Magento/Setup/Test/Unit/Module/I18n/LocaleTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/LocaleTest.php
@@ -9,15 +9,6 @@ use \Magento\Setup\Module\I18n\Locale;
 
 class LocaleTest extends \PHPUnit_Framework_TestCase
 {
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage Target locale is system default locale.
-     */
-    public function testLocaleIsSystemDefaultLocaleException()
-    {
-        new Locale('en_US');
-    }
-
     /**
      * @expectedException \InvalidArgumentException
      * @expectedExceptionMessage Target locale must match the following format: "aa_AA".
-- 
GitLab


From e9b656a74f73134a05f5011c11b42df1ec61cb75 Mon Sep 17 00:00:00 2001
From: Valeriy Nayda <vnayda@ebay.com>
Date: Wed, 21 Oct 2015 15:38:40 +0300
Subject: [PATCH 134/370] MAGETWO-44222: Multi-store: Bulk update assign to
 website does not create appropriate URL rewrite

---
 .../ProductToWebsiteChangeObserver.php        | 78 +++++++++++++++++++
 .../etc/adminhtml/events.xml                  |  3 +
 2 files changed, 81 insertions(+)
 create mode 100644 app/code/Magento/CatalogUrlRewrite/Observer/ProductToWebsiteChangeObserver.php

diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/ProductToWebsiteChangeObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/ProductToWebsiteChangeObserver.php
new file mode 100644
index 00000000000..cd094719838
--- /dev/null
+++ b/app/code/Magento/CatalogUrlRewrite/Observer/ProductToWebsiteChangeObserver.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\CatalogUrlRewrite\Observer;
+
+use Magento\Catalog\Api\ProductRepositoryInterface;
+use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
+use Magento\Framework\App\RequestInterface;
+use Magento\Framework\Event\ObserverInterface;
+use Magento\Store\Model\Store;
+use Magento\UrlRewrite\Model\UrlPersistInterface;
+use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
+
+class ProductToWebsiteChangeObserver implements ObserverInterface
+{
+    /**
+     * @var ProductUrlRewriteGenerator
+     */
+    protected $productUrlRewriteGenerator;
+
+    /**
+     * @var UrlPersistInterface
+     */
+    protected $urlPersist;
+
+    /**
+     * @var ProductRepositoryInterface
+     */
+    protected $productRepository;
+
+    /**
+     * @var RequestInterface
+     */
+    protected $request;
+
+    /**
+     * @param ProductUrlRewriteGenerator $productUrlRewriteGenerator
+     * @param UrlPersistInterface $urlPersist
+     * @param ProductRepositoryInterface $productRepository
+     * @param RequestInterface $request
+     */
+    public function __construct(
+        ProductUrlRewriteGenerator $productUrlRewriteGenerator,
+        UrlPersistInterface $urlPersist,
+        ProductRepositoryInterface $productRepository,
+        RequestInterface $request
+    ) {
+        $this->productUrlRewriteGenerator = $productUrlRewriteGenerator;
+        $this->urlPersist = $urlPersist;
+        $this->productRepository = $productRepository;
+        $this->request = $request;
+    }
+
+    /**
+     * Generate urls for UrlRewrite and save it in storage
+     *
+     * @param \Magento\Framework\Event\Observer $observer
+     * @return void
+     */
+    public function execute(\Magento\Framework\Event\Observer $observer)
+    {
+        foreach ($observer->getEvent()->getProducts() as $productId) {
+            $product = $this->productRepository->getById(
+                $productId,
+                false,
+                $this->request->getParam('store_id', Store::DEFAULT_STORE_ID)
+            );
+
+            $this->urlPersist->deleteByData([
+                UrlRewrite::ENTITY_ID => $product->getId(),
+                UrlRewrite::ENTITY_TYPE => ProductUrlRewriteGenerator::ENTITY_TYPE,
+            ]);
+            $this->urlPersist->replace($this->productUrlRewriteGenerator->generate($product));
+        }
+    }
+}
diff --git a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml
index 194b45d59a4..477a6cf338b 100644
--- a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml
+++ b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml
@@ -27,4 +27,7 @@
     <event name="catalog_category_move_after">
         <observer name="process_url_rewrite_moving" instance="Magento\CatalogUrlRewrite\Observer\CategoryProcessUrlRewriteMovingObserver"/>
     </event>
+    <event name="catalog_product_to_website_change">
+        <observer name="catalog_product_to_website_change" instance="Magento\CatalogUrlRewrite\Observer\ProductToWebsiteChangeObserver"/>
+    </event>
 </config>
-- 
GitLab


From dde0f563f9dbe8625ce559e482bcdbae88b0f7ae Mon Sep 17 00:00:00 2001
From: Olga Matviienko <omatviienko@ebay.com>
Date: Wed, 21 Oct 2015 16:09:24 +0300
Subject: [PATCH 135/370] MAGETWO-44311: Items in Mini Shopping Cart have
 action buttons not aligned for Blank Theme

---
 .../web/css/source/module/_minicart.less      | 22 ++---
 .../web/css/source/module/_minicart.less      | 83 +++++++++----------
 2 files changed, 52 insertions(+), 53 deletions(-)

diff --git a/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/_minicart.less b/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/_minicart.less
index fb76486d528..a0396d05315 100644
--- a/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/_minicart.less
+++ b/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/_minicart.less
@@ -49,8 +49,6 @@
         }
         .subtitle {
             display: none;
-        }
-        .subtitle {
             &.empty {
                 display: block;
                 font-size: 14px;
@@ -124,10 +122,14 @@
                 right: 26px;
             }
         }
-        .product.actions {
-            text-align: right;
-            > .primary, > .secondary {
-                display: inline;
+        .product {
+            .actions {
+                float: right;
+                margin: -24px 0 0;
+                text-align: right;
+                > .primary, > .secondary {
+                    display: inline;
+                }
             }
         }
 
@@ -165,7 +167,7 @@
                     text-align: center;
                     white-space: normal;
                     &.empty {
-                        &:extend(.abs-no-display all);
+                        display: none;
                     }
                     .loader {
                         > img {
@@ -184,8 +186,8 @@
     }
 
     .minicart-items-wrapper {
-        .lib-css(margin, 0 -@minicart__padding-horizontal);
         .lib-css(border, 1px solid @minicart__border-color);
+        .lib-css(margin, 0 -@minicart__padding-horizontal);
         border-left: 0;
         border-right: 0;
         overflow-x: auto;
@@ -301,12 +303,12 @@
             text-align: center;
             width: 40px;
         }
-        .item-update {
+        .update-cart-item {
             .lib-font-size(11);
             vertical-align: top;
         }
         .subtitle {
-            &:extend(.abs-no-display all);
+            display: none;
         }
         .action {
             &.edit,
diff --git a/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/_minicart.less b/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/_minicart.less
index e4a039fac1d..10a28b07bdd 100644
--- a/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/_minicart.less
+++ b/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/_minicart.less
@@ -12,7 +12,6 @@
 
 @minicart-qty__height: 24px;
 
-
 //
 //  Common
 //  _____________________________________________
@@ -52,9 +51,9 @@
             display: none;
             &.empty {
                 display: block;
+                font-size: 14px;
                 padding: @indent__l 0 @indent__base;
                 text-align: center;
-                font-size: 14px;
             }
         }
         .text {
@@ -95,18 +94,18 @@
 
     .minicart-wrapper {
         .lib-dropdown(
-            @_toggle-selector: ~".action.showcart",
-            @_options-selector: ~".block-minicart",
-            @_dropdown-toggle-icon-content: @icon-cart,
-            @_dropdown-toggle-active-icon-content: @icon-cart,
-            @_dropdown-list-item-padding: false,
-            @_dropdown-list-item-hover: false,
-            @_icon-font-position: before,
-            @_icon-font-size: 22px,
-            @_icon-font-line-height: 28px,
-            @_icon-font-color: @minicart-icons-color,
-            @_icon-font-color-hover: @minicart-icons-color-hover,
-            @_icon-font-color-active: @minicart-icons-color
+        @_toggle-selector: ~".action.showcart",
+        @_options-selector: ~".block-minicart",
+        @_dropdown-toggle-icon-content: @icon-cart,
+        @_dropdown-toggle-active-icon-content: @icon-cart,
+        @_dropdown-list-item-padding: false,
+        @_dropdown-list-item-hover: false,
+        @_icon-font-position: before,
+        @_icon-font-size: 22px,
+        @_icon-font-line-height: 28px,
+        @_icon-font-color: @minicart-icons-color,
+        @_icon-font-color-hover: @minicart-icons-color-hover,
+        @_icon-font-color-active: @minicart-icons-color
         );
         float: right;
         .block-minicart {
@@ -140,11 +139,11 @@
         }
         .action {
             &.close {
-                width: 40px;
                 height: 40px;
-                top: 0;
-                right: 0;
                 position: absolute;
+                right: 0;
+                top: 0;
+                width: 40px;
                 .lib-button-reset();
                 .lib-button-icon(
                     @icon-remove,
@@ -155,10 +154,10 @@
                 );
             }
             &.showcart {
+                white-space: nowrap;
                 .text {
                     &:extend(.abs-visually-hidden all);
                 }
-                white-space: nowrap;
                 .counter.qty {
                     .lib-css(background, @active__color);
                     .lib-css(color, @page__background-color);
@@ -203,10 +202,10 @@
     .minicart-items {
         .lib-list-reset-styles();
         .product-item {
+            padding: @indent__base 0;
             &:not(:first-child) {
                 .lib-css(border-top, 1px solid @minicart__border-color);
             }
-            padding: @indent__base 0;
             &:first-child {
                 padding-top: 0;
             }
@@ -260,9 +259,9 @@
             .toggle {
                 &:extend(.abs-toggling-title all);
                 &:after {
-                    position: static;
-                    margin: 0 0 0 @indent__xs;
                     .lib-css(color, @color-gray56);
+                    margin: 0 0 0 @indent__xs;
+                    position: static;
                 }
                 border: 0;
                 padding: 0 @indent__xl @indent__xs 0;
@@ -281,12 +280,12 @@
             &.options {
                 .tooltip.toggle {
                     .lib-icon-font(
-                        @icon-down,
-                        @_icon-font-size: 12px,
-                        @_icon-font-line-height: 12px,
-                        @_icon-font-text-hide: true,
-                        @_icon-font-margin: -3px 0 0 7px,
-                        @_icon-font-position: after
+                    @icon-down,
+                    @_icon-font-size: 12px,
+                    @_icon-font-line-height: 12px,
+                    @_icon-font-text-hide: true,
+                    @_icon-font-margin: -3px 0 0 7px,
+                    @_icon-font-position: after
                     );
                 }
                 .details {
@@ -301,38 +300,37 @@
             }
         }
         .item-qty {
-            width: 40px;
-            text-align: center;
             margin-right: @indent__s;
+            text-align: center;
+            width: 40px;
         }
         .update-cart-item {
-            vertical-align: top;
             .lib-font-size(11);
+            vertical-align: top;
+        }
+        .subtitle {
+            display: none;
         }
         .action {
             &.edit,
             &.delete {
                 .lib-icon-font(
-                    @icon-edit,
-                    @_icon-font-size: 18px,
-                    @_icon-font-line-height: 20px,
-                    @_icon-font-text-hide: true,
-                    @_icon-font-color: @minicart-icons-color,
-                    @_icon-font-color-hover: @primary__color,
-                    @_icon-font-color-active: @minicart-icons-color
+                @icon-edit,
+                @_icon-font-size: 18px,
+                @_icon-font-line-height: 20px,
+                @_icon-font-text-hide: true,
+                @_icon-font-color: @minicart-icons-color,
+                @_icon-font-color-hover: @primary__color,
+                @_icon-font-color-active: @minicart-icons-color
                 );
             }
             &.delete {
                 .lib-icon-font-symbol(
-                    @_icon-font-content: @icon-trash
+                @_icon-font-content: @icon-trash
                 );
             }
         }
-        .subtitle {
-            display: none;
-        }
     }
-
 }
 
 //
@@ -351,7 +349,6 @@
     }
 }
 
-
 //
 //  Desktop
 //  _____________________________________________
-- 
GitLab


From cf3c476ac241b139e2d567fde31712be21125a32 Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Wed, 21 Oct 2015 16:25:32 +0300
Subject: [PATCH 136/370] MAGETWO-44306: Backend Page "Find Partners &
 Extensions" is untranslatable

---
 .../Marketplace/view/adminhtml/templates/index.phtml | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/app/code/Magento/Marketplace/view/adminhtml/templates/index.phtml b/app/code/Magento/Marketplace/view/adminhtml/templates/index.phtml
index 53c60cf1d7a..df305664564 100644
--- a/app/code/Magento/Marketplace/view/adminhtml/templates/index.phtml
+++ b/app/code/Magento/Marketplace/view/adminhtml/templates/index.phtml
@@ -6,7 +6,7 @@
 ?>
 
 <section class="page-partners">
-    <h2 class="page-sub-title">Platinum Partners</h2>
+    <h2 class="page-sub-title"><?php /* @escapeNotVerified */ echo __('Platinum Partners'); ?></h2>
     <p class="partners-description">
         Representing Magento's highest level of partner engagement,
         Magento Platinum Partners have established themselves as
@@ -17,7 +17,7 @@
         functions, and tools, as well as back-end systems and operations,
         to extend and enhance the power of the Magento commerce platform.
     </p>
-    <h3 class="page-sub-sub-title">Featured Platinum Partners</h3>
+    <h3 class="page-sub-sub-title"><?php /* @escapeNotVerified */ echo __('Featured Platinum Partners'); ?></h3>
     <div data-role="partners-block">
         <div data-role="spinner" class="admin__data-grid-loading-mask" data-bind="visible: loading">
             <div class="spinner">
@@ -30,7 +30,7 @@
     <div class="row row-gutter partners-footer">
         <div class="col-m-5">
             <div class="partners-search">
-                <h2 class="page-sub-title">Partner search</h2>
+                <h2 class="page-sub-title"><?php /* @escapeNotVerified */ echo __('Partner search'); ?></h2>
                 <p>
                     Magento has a thriving ecosystem of technology partners to
                     help merchants and brands deliver the best possible
@@ -42,7 +42,7 @@
                 </p>
                 <a class="action-secondary" target="_blank"
                    href="http://partners.magento.com/partner_locator/search.aspx">
-                    More Partners
+                    <?php /* @escapeNotVerified */ echo __('More Partners'); ?>
                 </a>
             </div>
         </div>
@@ -55,7 +55,7 @@
                 alt="Partner"/>
         </div>
         <div class="col-m-4">
-            <h2 class="page-sub-title">Magento Marketplace</h2>
+            <h2 class="page-sub-title"><?php /* @escapeNotVerified */ echo __('Magento Marketplace'); ?></h2>
             <p class="partner-description">
                 Extensions and Themes are an essential component of the Magento
                 Ecosystem. Please visit the Magento Marketplace
@@ -64,7 +64,7 @@
             </p>
             <a class="action-secondary" target="_blank"
                href="http://www.magentocommerce.com/magento-connect/">
-                Visit Magento Marketplaces
+                <?php /* @escapeNotVerified */ echo __('Visit Magento Marketplaces'); ?>
             </a>
         </div>
     </div>
-- 
GitLab


From 755583225d9fccf133211de18a06768bb15e526f Mon Sep 17 00:00:00 2001
From: Maksym Aposov <maposov@ebay.com>
Date: Wed, 21 Oct 2015 16:49:17 +0300
Subject: [PATCH 137/370] MAGETWO-40789: Incorrectly calculated Regular price
 for simple product with Custom option of Percent type

---
 .../Magento/Catalog/Block/Product/View.php    |  1 -
 .../Catalog/Block/Product/View/Options.php    |  3 +-
 .../Catalog/Model/Product/Option/Value.php    | 15 +++++
 .../Block/Product/View/OptionsTest.php        | 54 +++++++++++++++--
 .../_files/product_with_dropdown_option.php   | 60 +++++++++++++++++++
 .../product_with_dropdown_option_rollback.php | 21 +++++++
 6 files changed, 146 insertions(+), 8 deletions(-)
 create mode 100644 dev/tests/integration/testsuite/Magento/Catalog/_files/product_with_dropdown_option.php
 create mode 100644 dev/tests/integration/testsuite/Magento/Catalog/_files/product_with_dropdown_option_rollback.php

diff --git a/app/code/Magento/Catalog/Block/Product/View.php b/app/code/Magento/Catalog/Block/Product/View.php
index 5a2ceac3be7..193dee6b511 100644
--- a/app/code/Magento/Catalog/Block/Product/View.php
+++ b/app/code/Magento/Catalog/Block/Product/View.php
@@ -219,7 +219,6 @@ class View extends AbstractProduct implements \Magento\Framework\DataObject\Iden
         /* @var $product \Magento\Catalog\Model\Product */
         $product = $this->getProduct();
 
-        $config = [];
         if (!$this->hasOptions()) {
             $config = [
                 'productId' => $product->getId(),
diff --git a/app/code/Magento/Catalog/Block/Product/View/Options.php b/app/code/Magento/Catalog/Block/Product/View/Options.php
index 5e4efdb8e56..e23b253872e 100644
--- a/app/code/Magento/Catalog/Block/Product/View/Options.php
+++ b/app/code/Magento/Catalog/Block/Product/View/Options.php
@@ -162,7 +162,7 @@ class Options extends \Magento\Framework\View\Element\Template
         $data = [
             'prices' => [
                 'oldPrice' => [
-                    'amount' => $this->pricingHelper->currency($option->getPrice(false), false, false),
+                    'amount' => $this->pricingHelper->currency($option->getRegularPrice(), false, false),
                     'adjustments' => [],
                 ],
                 'basePrice' => [
@@ -208,7 +208,6 @@ class Options extends \Magento\Framework\View\Element\Template
         $config = [];
         foreach ($this->getOptions() as $option) {
             /* @var $option \Magento\Catalog\Model\Product\Option */
-            $priceValue = 0;
             if ($option->getGroupByType() == \Magento\Catalog\Model\Product\Option::OPTION_GROUP_SELECT) {
                 $tmpPriceValues = [];
                 foreach ($option->getValues() as $value) {
diff --git a/app/code/Magento/Catalog/Model/Product/Option/Value.php b/app/code/Magento/Catalog/Model/Product/Option/Value.php
index 863c3a374b1..9a84ec22921 100644
--- a/app/code/Magento/Catalog/Model/Product/Option/Value.php
+++ b/app/code/Magento/Catalog/Model/Product/Option/Value.php
@@ -238,6 +238,21 @@ class Value extends AbstractModel implements \Magento\Catalog\Api\Data\ProductCu
         return $this->_getData(self::KEY_PRICE);
     }
 
+    /**
+     * Return regular price.
+     *
+     * @return float|int
+     */
+    public function getRegularPrice()
+    {
+        if ($this->getPriceType() == self::TYPE_PERCENT) {
+            $basePrice = $this->getOption()->getProduct()->getPriceInfo()->getPrice('regular_price')->getAmount()->getValue();
+            $price = $basePrice * ($this->_getData(self::KEY_PRICE) / 100);
+            return $price;
+        }
+        return $this->_getData(self::KEY_PRICE);
+    }
+
     /**
      * Enter description here...
      *
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/View/OptionsTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/View/OptionsTest.php
index 5f715b8c674..5d7fd4623aa 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/View/OptionsTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/View/OptionsTest.php
@@ -7,8 +7,6 @@ namespace Magento\Catalog\Block\Product\View;
 
 /**
  * Test class for \Magento\Catalog\Block\Product\View\Options.
- *
- * @magentoDataFixture Magento/Catalog/_files/product_simple.php
  */
 class OptionsTest extends \PHPUnit_Framework_TestCase
 {
@@ -39,6 +37,9 @@ class OptionsTest extends \PHPUnit_Framework_TestCase
         );
     }
 
+    /**
+     * @magentoDataFixture Magento/Catalog/_files/product_simple.php
+     */
     public function testSetGetProduct()
     {
         $this->assertSame($this->_product, $this->_block->getProduct());
@@ -50,11 +51,17 @@ class OptionsTest extends \PHPUnit_Framework_TestCase
         $this->assertSame($product, $this->_block->getProduct());
     }
 
+    /**
+     * @magentoDataFixture Magento/Catalog/_files/product_simple.php
+     */
     public function testGetGroupOfOption()
     {
         $this->assertEquals('default', $this->_block->getGroupOfOption('test'));
     }
 
+    /**
+     * @magentoDataFixture Magento/Catalog/_files/product_simple.php
+     */
     public function testGetOptions()
     {
         $options = $this->_block->getOptions();
@@ -64,15 +71,52 @@ class OptionsTest extends \PHPUnit_Framework_TestCase
         }
     }
 
+    /**
+     * @magentoDataFixture Magento/Catalog/_files/product_simple.php
+     */
     public function testHasOptions()
     {
         $this->assertTrue($this->_block->hasOptions());
     }
 
+    /**
+     * @magentoDataFixture Magento/Catalog/_files/product_with_dropdown_option.php
+     */
     public function testGetJsonConfig()
     {
-        $config = json_decode($this->_block->getJsonConfig());
-        $this->assertNotNull($config);
-        $this->assertNotEmpty($config);
+        $config = json_decode($this->_block->getJsonConfig(), true);
+        $configValues = array_values($config);
+        $this->assertEquals($this->getExpectedJsonConfig(), array_values($configValues[0]));
+    }
+
+    /**
+     * Expected data for testGetJsonConfig
+     *
+     * @return array
+     */
+    private function getExpectedJsonConfig()
+    {
+        return [
+            0 =>
+                ['prices' =>
+                    ['oldPrice' =>
+                        ['amount' => 10, 'adjustments' => []],
+                        'basePrice' => ['amount' => 10],
+                        'finalPrice' => ['amount' => 10]
+                    ],
+                    'type' => 'fixed',
+                    'name' => 'drop_down option 1',
+                ],
+            1 =>
+                ['prices' =>
+                    ['oldPrice' =>
+                        ['amount' => 40, 'adjustments' => []],
+                        'basePrice' => ['amount' => 40],
+                        'finalPrice' => ['amount' => 40],
+                    ],
+                    'type' => 'percent',
+                    'name' => 'drop_down option 2',
+                ],
+        ];
     }
 }
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_with_dropdown_option.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_with_dropdown_option.php
new file mode 100644
index 00000000000..9fe6ead6d9c
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_with_dropdown_option.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+/** @var $product \Magento\Catalog\Model\Product */
+$product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Catalog\Model\Product');
+$product->setTypeId(
+    'simple'
+)->setId(
+    1
+)->setAttributeSetId(
+    4
+)->setWebsiteIds(
+    [1]
+)->setName(
+    'Simple Product With Custom Options'
+)->setSku(
+    'simple'
+)->setPrice(
+    200
+)->setMetaTitle(
+    'meta title'
+)->setMetaKeyword(
+    'meta keyword'
+)->setMetaDescription(
+    'meta description'
+)->setVisibility(
+    \Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH
+)->setStatus(
+    \Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED
+)->setCanSaveCustomOptions(
+    true
+)->setProductOptions(
+    [
+        [
+            'title' => 'drop_down option',
+            'type' => 'drop_down',
+            'is_require' => true,
+            'sort_order' => 4,
+            'values' => [
+                [
+                    'title' => 'drop_down option 1',
+                    'price' => 10,
+                    'price_type' => 'fixed',
+                    'sku' => 'drop_down option 1 sku',
+                    'sort_order' => 1,
+                ],
+                [
+                    'title' => 'drop_down option 2',
+                    'price' => 20,
+                    'price_type' => 'percent',
+                    'sku' => 'drop_down option 2 sku',
+                    'sort_order' => 2,
+                ],
+            ],
+        ]
+    ]
+)->save();
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_with_dropdown_option_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_with_dropdown_option_rollback.php
new file mode 100644
index 00000000000..5bc5625837d
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_with_dropdown_option_rollback.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+/** @var \Magento\Framework\Registry $registry */
+$registry = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Framework\Registry');
+
+$registry->unregister('isSecureArea');
+$registry->register('isSecureArea', true);
+
+/** @var $product \Magento\Catalog\Model\Product */
+$product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Catalog\Model\Product');
+$product->load(1);
+if ($product->getId()) {
+    $product->delete();
+}
+
+$registry->unregister('isSecureArea');
+$registry->register('isSecureArea', false);
-- 
GitLab


From 071e731248e17e661dcddc216976c990c4def9cc Mon Sep 17 00:00:00 2001
From: Bohdan Korablov <bkorablov@ebay.com>
Date: Wed, 21 Oct 2015 16:55:10 +0300
Subject: [PATCH 138/370] MAGETWO-43793: [github] broken references when
 viewing admin after initial install #1795

---
 .../Framework/View/Layout/Data/Structure.php  |  19 +++-
 .../View/Layout/ScheduledStructure/Helper.php |  22 +++-
 .../Test/Unit/Layout/Data/StructureTest.php   |  94 ++++++++++++++++
 .../Layout/ScheduledStructure/HelperTest.php  | 105 ++++++++++++++++--
 4 files changed, 222 insertions(+), 18 deletions(-)
 create mode 100644 lib/internal/Magento/Framework/View/Test/Unit/Layout/Data/StructureTest.php

diff --git a/lib/internal/Magento/Framework/View/Layout/Data/Structure.php b/lib/internal/Magento/Framework/View/Layout/Data/Structure.php
index 79e514b42b2..643b2cdf942 100644
--- a/lib/internal/Magento/Framework/View/Layout/Data/Structure.php
+++ b/lib/internal/Magento/Framework/View/Layout/Data/Structure.php
@@ -6,6 +6,7 @@
 namespace Magento\Framework\View\Layout\Data;
 
 use Magento\Framework\Data\Structure as DataStructure;
+use Magento\Framework\App\State;
 
 /**
  * An associative data structure, that features "nested set" parent-child relations
@@ -24,17 +25,25 @@ class Structure extends DataStructure
      */
     protected $logger;
 
+    /**
+     * @var \Magento\Framework\App\State
+     */
+    protected $state;
+
     /**
      * Constructor
      *
      * @param \Psr\Log\LoggerInterface $logger
+     * @param \Magento\Framework\App\State $state
      * @param array $elements
      */
     public function __construct(
         \Psr\Log\LoggerInterface $logger,
+        \Magento\Framework\App\State $state,
         array $elements = null
     ) {
         $this->logger = $logger;
+        $this->state = $state;
         parent::__construct($elements);
     }
 
@@ -109,10 +118,12 @@ class Structure extends DataStructure
             if ($childName !== $sibling) {
                 $siblingParentName = $this->getParentId($sibling);
                 if ($parentName !== $siblingParentName) {
-                    $this->logger->critical(
-                        "Broken reference: the '{$childName}' tries to reorder itself towards '{$sibling}', but " .
-                        "their parents are different: '{$parentName}' and '{$siblingParentName}' respectively."
-                    );
+                    if ($this->state->getMode() == State::MODE_DEVELOPER) {
+                        $this->logger->critical(
+                            "Broken reference: the '{$childName}' tries to reorder itself towards '{$sibling}', but " .
+                            "their parents are different: '{$parentName}' and '{$siblingParentName}' respectively."
+                        );
+                    }
                     return;
                 }
                 $this->reorderToSibling($parentName, $childName, $sibling, $after ? 1 : -1);
diff --git a/lib/internal/Magento/Framework/View/Layout/ScheduledStructure/Helper.php b/lib/internal/Magento/Framework/View/Layout/ScheduledStructure/Helper.php
index aaa2e5fe1ec..e433a42056f 100644
--- a/lib/internal/Magento/Framework/View/Layout/ScheduledStructure/Helper.php
+++ b/lib/internal/Magento/Framework/View/Layout/ScheduledStructure/Helper.php
@@ -6,6 +6,7 @@
 namespace Magento\Framework\View\Layout\ScheduledStructure;
 
 use Magento\Framework\View\Layout;
+use Magento\Framework\App\State;
 
 class Helper
 {
@@ -31,13 +32,21 @@ class Helper
      */
     protected $logger;
 
+    /**
+     * @var \Magento\Framework\App\State
+     */
+    protected $state;
+
     /**
      * @param \Psr\Log\LoggerInterface $logger
+     * @param \Magento\Framework\App\State $state
      */
     public function __construct(
-        \Psr\Log\LoggerInterface $logger
+        \Psr\Log\LoggerInterface $logger,
+        \Magento\Framework\App\State $state
     ) {
         $this->logger = $logger;
+        $this->state = $state;
     }
 
     /**
@@ -190,10 +199,13 @@ class Helper
                 }
             } else {
                 $scheduledStructure->setElementToBrokenParentList($key);
-                $this->logger->critical(
-                    "Broken reference: the '{$name}' element cannot be added as child to '{$parentName}', " .
-                    'because the latter doesn\'t exist'
-                );
+
+                if ($this->state->getMode() == State::MODE_DEVELOPER) {
+                    $this->logger->critical(
+                        "Broken reference: the '{$name}' element cannot be added as child to '{$parentName}', " .
+                        'because the latter doesn\'t exist'
+                    );
+                }
             }
         }
 
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Data/StructureTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Data/StructureTest.php
new file mode 100644
index 00000000000..b6e836b2441
--- /dev/null
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Data/StructureTest.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
+use Magento\Framework\App\State;
+
+class StructureTest extends PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Psr\Log\LoggerInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $loggerMock;
+
+    /**
+     * @var \Magento\Framework\App\State|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $stateMock;
+
+    /**
+     * @var ObjectManagerHelper
+     */
+    protected $objectManagerHelper;
+
+    /**
+     * @var \Magento\Framework\View\Layout\Data\Structure
+     */
+    protected $dataStructure;
+
+    /**
+     * @return void
+     */
+    protected function setUp()
+    {
+        $this->loggerMock = $this->getMock('Psr\Log\LoggerInterface');
+        $this->stateMock = $this->getMock('Magento\Framework\App\State', [], [], '', false);
+
+        $this->objectManagerHelper = new ObjectManagerHelper($this);
+        $this->dataStructure = $this->objectManagerHelper->getObject(
+            'Magento\Framework\View\Layout\Data\Structure',
+            [
+                'logger' => $this->loggerMock,
+                'state' => $this->stateMock
+            ]
+        );
+    }
+
+    /**
+     * @param \PHPUnit_Framework_MockObject_Matcher_InvokedCount $loggerExpects
+     * @param string $stateMode
+     * @return void
+     * @dataProvider reorderChildElementLogDataProvider
+     */
+    public function testReorderChildElementLog($loggerExpects, $stateMode)
+    {
+        $parentName = 'parent';
+        $childName = 'child';
+        $offsetOrSibling = '-';
+
+        $this->stateMock->expects($this->once())
+            ->method('getMode')
+            ->willReturn($stateMode);
+
+        $this->loggerMock->expects($loggerExpects)
+            ->method('critical')
+            ->with("Broken reference: the '{$childName}' tries to reorder itself towards '', but " .
+                "their parents are different: '{$parentName}' and '' respectively.");
+
+        $this->dataStructure->reorderChildElement($parentName, $childName, $offsetOrSibling);
+    }
+
+    /**
+     * @return array
+     */
+    public function reorderChildElementLogDataProvider()
+    {
+        return [
+            [
+                'loggerExpects' => $this->once(),
+                'stateMode' => State::MODE_DEVELOPER
+            ],
+            [
+                'loggerExpects' => $this->never(),
+                'stateMode' => State::MODE_DEFAULT
+            ],
+            [
+                'loggerExpects' => $this->never(),
+                'stateMode' => State::MODE_PRODUCTION
+            ]
+        ];
+    }
+}
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php
index 4aeff78304d..1157ea28777 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php
@@ -7,6 +7,7 @@
 namespace Magento\Framework\View\Test\Unit\Layout\ScheduledStructure;
 
 use Magento\Framework\View\Layout;
+use Magento\Framework\App\State;
 
 /**
  * Class HelperTest
@@ -22,7 +23,17 @@ class HelperTest extends \PHPUnit_Framework_TestCase
     /**
      * @var \Magento\Framework\View\Layout\Data\Structure|\PHPUnit_Framework_MockObject_MockObject
      */
-    protected $dataStructure;
+    protected $dataStructureMock;
+
+    /**
+     * @var \Psr\Log\LoggerInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $loggerMock;
+
+    /**
+     * @var \Magento\Framework\App\State|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $stateMock;
 
     /**
      * @var \Magento\Framework\View\Layout\ScheduledStructure\Helper
@@ -37,13 +48,20 @@ class HelperTest extends \PHPUnit_Framework_TestCase
         $this->scheduledStructureMock = $this->getMockBuilder('Magento\Framework\View\Layout\ScheduledStructure')
             ->disableOriginalConstructor()
             ->getMock();
-
-        $this->dataStructure = $this->getMockBuilder('Magento\Framework\View\Layout\Data\Structure')
+        $this->dataStructureMock = $this->getMockBuilder('Magento\Framework\View\Layout\Data\Structure')
             ->disableOriginalConstructor()
             ->getMock();
+        $this->loggerMock = $this->getMock('Psr\Log\LoggerInterface');
+        $this->stateMock = $this->getMock('Magento\Framework\App\State', [], [], '', false);
 
         $helperObjectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $this->helper = $helperObjectManager->getObject('Magento\Framework\View\Layout\ScheduledStructure\Helper');
+        $this->helper = $helperObjectManager->getObject(
+            'Magento\Framework\View\Layout\ScheduledStructure\Helper',
+            [
+                'logger' => $this->loggerMock,
+                'state' => $this->stateMock
+            ]
+        );
     }
 
     /**
@@ -122,7 +140,76 @@ class HelperTest extends \PHPUnit_Framework_TestCase
         $this->scheduledStructureMock->expects($this->once())->method('unsetPathElement')->with($key);
         $this->scheduledStructureMock->expects($this->once())->method('unsetStructureElement')->with($key);
 
-        $this->helper->scheduleElement($this->scheduledStructureMock, $this->dataStructure, $key);
+        $this->helper->scheduleElement($this->scheduledStructureMock, $this->dataStructureMock, $key);
+    }
+
+    /**
+     * @param \PHPUnit_Framework_MockObject_Matcher_InvokedCount $loggerExpects
+     * @param string $stateMode
+     * @return void
+     * @dataProvider scheduleElementLogDataProvider
+     */
+    public function testScheduleElementLog($loggerExpects, $stateMode)
+    {
+        $key = 'key';
+        $parentName = 'parent';
+        $alias = 'alias';
+        $block = 'block';
+        $siblingName = null;
+        $isAfter = false;
+
+        $this->scheduledStructureMock->expects($this->once())
+            ->method('getStructureElement')
+            ->willReturn(
+                [
+                    Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_TYPE => $block,
+                    Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_ALIAS => $alias,
+                    Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_PARENT_NAME => $parentName,
+                    Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_SIBLING_NAME => $siblingName,
+                    Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_IS_AFTER => $isAfter
+                ]
+            );
+        $this->scheduledStructureMock->expects($this->once())
+            ->method('hasStructureElement')
+            ->with($parentName)
+            ->willReturn(false);
+
+        $this->dataStructureMock->expects($this->once())
+            ->method('hasElement')
+            ->with($parentName)
+            ->willReturn(false);
+
+        $this->stateMock->expects($this->once())
+            ->method('getMode')
+            ->willReturn($stateMode);
+
+        $this->loggerMock->expects($loggerExpects)
+            ->method('critical')
+            ->with("Broken reference: the '{$key}' element cannot be added as child to '{$parentName}', " .
+                'because the latter doesn\'t exist');
+
+        $this->helper->scheduleElement($this->scheduledStructureMock, $this->dataStructureMock, $key);
+    }
+
+    /**
+     * @return array
+     */
+    public function scheduleElementLogDataProvider()
+    {
+        return [
+            [
+                'loggerExpects' => $this->once(),
+                'stateMode' => State::MODE_DEVELOPER
+            ],
+            [
+                'loggerExpects' => $this->never(),
+                'stateMode' => State::MODE_DEFAULT
+            ],
+            [
+                'loggerExpects' => $this->never(),
+                'stateMode' => State::MODE_PRODUCTION
+            ]
+        ];
     }
 
     /**
@@ -171,9 +258,9 @@ class HelperTest extends \PHPUnit_Framework_TestCase
         $this->scheduledStructureMock->expects($this->any())->method('hasStructureElement')->willReturn(true);
         $this->scheduledStructureMock->expects($this->once())->method('setElement')->with($key, [$block, $data]);
 
-        $this->dataStructure->expects($this->once())->method('createElement')->with($key, ['type' => $block]);
-        $this->dataStructure->expects($this->once())->method('hasElement')->with($parentName)->willReturn($hasParent);
-        $this->dataStructure->expects($this->exactly($setAsChild))
+        $this->dataStructureMock->expects($this->once())->method('createElement')->with($key, ['type' => $block]);
+        $this->dataStructureMock->expects($this->once())->method('hasElement')->with($parentName)->willReturn($hasParent);
+        $this->dataStructureMock->expects($this->exactly($setAsChild))
             ->method('setAsChild')
             ->with($key, $parentName, $alias)
             ->willReturn(true);
@@ -185,7 +272,7 @@ class HelperTest extends \PHPUnit_Framework_TestCase
             ->method('setElementToSortList')
             ->with($parentName, $key, $siblingName, $isAfter);
 
-        $this->helper->scheduleElement($this->scheduledStructureMock, $this->dataStructure, $key);
+        $this->helper->scheduleElement($this->scheduledStructureMock, $this->dataStructureMock, $key);
     }
 
     /**
-- 
GitLab


From 13bcc629eabaa77960b3ec5246a5c4744863c7e4 Mon Sep 17 00:00:00 2001
From: Andrii Kasian <akasian@magento.com>
Date: Wed, 21 Oct 2015 16:56:57 +0300
Subject: [PATCH 139/370] MAGETWO-44159: Configurable product price in store
 front doesn't reflect price change from backend

---
 .../Product/Indexer/Price/DefaultPrice.php            | 11 +++++------
 .../Product/Indexer/Price/Configurable.php            |  3 ++-
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php
index c5eb2405bcb..dd5a49a9af6 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php
@@ -225,7 +225,7 @@ class DefaultPrice extends AbstractIndexer implements PriceInterface
      */
     protected function _prepareFinalPriceData($entityIds = null)
     {
-       return $this->prepareFinalPriceDataForType($entityIds, $this->getTypeId());
+        return $this->prepareFinalPriceDataForType($entityIds, $this->getTypeId());
     }
 
     /**
@@ -275,11 +275,9 @@ class DefaultPrice extends AbstractIndexer implements PriceInterface
             ' AND tp.customer_group_id = cg.customer_group_id',
             []
         );
-        if ($type !== null){
-            $select->where(
-                'e.type_id = ?',
-                $type
-            );
+
+        if ($type !== null) {
+            $select->where('e.type_id = ?', $type);
         }
 
         // add enable products limitation
@@ -571,6 +569,7 @@ class DefaultPrice extends AbstractIndexer implements PriceInterface
     /**
      * Mode Final Prices index to primary temporary index table
      *
+     * @param int[]|null $entityIds
      * @return $this
      */
     protected function _movePriceDataToIndexTable($entityIds = null)
diff --git a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
index d21d0931218..662ac5e6091 100644
--- a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
+++ b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
@@ -65,6 +65,7 @@ class Configurable extends \Magento\Catalog\Model\ResourceModel\Product\Indexer\
      * Get related product
      *
      * @param int[] $entityIds
+     * @return int[]
      */
     private function getRelatedProduct($entityIds)
     {
@@ -149,7 +150,7 @@ class Configurable extends \Magento\Catalog\Model\ResourceModel\Product\Indexer\
      * @return \Magento\ConfigurableProduct\Model\ResourceModel\Product\Indexer\Price\Configurable
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
-    protected function _applyConfigurableOption($entityIds)
+    protected function _applyConfigurableOption()
     {
         $connection = $this->getConnection();
         $coaTable = $this->_getConfigurableOptionAggregateTable();
-- 
GitLab


From b593fb9aa836d5b9bb4b6282de77e6c6b8e7c979 Mon Sep 17 00:00:00 2001
From: Andrii Kasian <akasian@magento.com>
Date: Wed, 21 Oct 2015 17:06:30 +0300
Subject: [PATCH 140/370] MAGETWO-44159: Configurable product price in store
 front doesn't reflect price change from backend

---
 .../Product/Indexer/Price/Configurable.php    | 53 +++++++++----------
 1 file changed, 26 insertions(+), 27 deletions(-)

diff --git a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
index 662ac5e6091..d4719318ae8 100644
--- a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
+++ b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
@@ -69,35 +69,34 @@ class Configurable extends \Magento\Catalog\Model\ResourceModel\Product\Indexer\
      */
     private function getRelatedProduct($entityIds)
     {
-        $select = $this->getConnection()->select()->union([
-            $this->getConnection()
-                ->select()
-                ->from(
-                    $this->getTable('catalog_product_super_link'),
-                    'parent_id'
-                )->where(
-                    'parent_id in (?)', $entityIds
-                ),
-            $this->getConnection()
-                ->select()
-                ->from(
-                    $this->getTable('catalog_product_super_link'),
-                    'product_id'
-                )->where(
-                    'parent_id in (?)', $entityIds
-                ),
-            $this->getConnection()
-                 ->select()
-                 ->from(
-                     $this->getTable('catalog_product_super_link'),
-                     'product_id'
-                 )->where(
-                     'product_id in (?)', $entityIds
-                 )
-        ]);
+        $select = $this->getConnection()->select()->union(
+            [
+                $this->getConnection()->select()->from(
+                        $this->getTable('catalog_product_super_link'),
+                        'parent_id'
+                    )->where(
+                        'parent_id in (?)',
+                        $entityIds
+                    ),
+                $this->getConnection()->select()->from(
+                        $this->getTable('catalog_product_super_link'),
+                        'product_id'
+                    )->where(
+                        'parent_id in (?)',
+                        $entityIds
+                    ),
+                $this->getConnection()->select()->from(
+                        $this->getTable('catalog_product_super_link'),
+                        'product_id'
+                    )->where(
+                        'product_id in (?)',
+                        $entityIds
+                    ),
+            ]
+        );
         return array_map(
             'intval',
-             $this->getConnection()->fetchCol($select)
+            $this->getConnection()->fetchCol($select)
         );
     }
 
-- 
GitLab


From 53b49147bd1342951add2e68c4fc28e6f8b0dffa Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Wed, 21 Oct 2015 17:07:49 +0300
Subject: [PATCH 141/370] MAGETWO-44306: Backend Page "Find Partners &
 Extensions" is untranslatable

---
 app/code/Magento/Marketplace/i18n/en_US.csv   |  8 +++++++
 .../view/adminhtml/templates/index.phtml      | 22 +++----------------
 2 files changed, 11 insertions(+), 19 deletions(-)
 create mode 100644 app/code/Magento/Marketplace/i18n/en_US.csv

diff --git a/app/code/Magento/Marketplace/i18n/en_US.csv b/app/code/Magento/Marketplace/i18n/en_US.csv
new file mode 100644
index 00000000000..3d18ce49acd
--- /dev/null
+++ b/app/code/Magento/Marketplace/i18n/en_US.csv
@@ -0,0 +1,8 @@
+"Platinum Partners","Platinum Partners"
+"Representing Magento's highest level of partner engagement, Magento Platinum Partners have established themselves as leaders and innovators of key products and services designed to help merchants and brands grow their business. Magento reserves the Platinum level for select trusted partners that are committed to offering integrations of commerce features, functions, and tools, as well as back-end systems and operations, to extend and enhance the power of the Magento commerce platform.","Representing Magento's highest level of partner engagement, Magento Platinum Partners have established themselves as leaders and innovators of key products and services designed to help merchants and brands grow their business. Magento reserves the Platinum level for select trusted partners that are committed to offering integrations of commerce features, functions, and tools, as well as back-end systems and operations, to extend and enhance the power of the Magento commerce platform."
+"Featured Platinum Partners","Featured Platinum Partners"
+"Partner search","Partner search"
+"Magento has a thriving ecosystem of technology partners to help merchants and brands deliver the best possiblecustomer experiences. They are recognized as experts in eCommerce, search, email marketing, payments, tax, fraud, optimization and analytics, fulfillment, and more. Visit the Magento Partner Directory to see all of our trusted partners.","Magento has a thriving ecosystem of technology partners to help merchants and brands deliver the best possiblecustomer experiences. They are recognized as experts in eCommerce, search, email marketing, payments, tax, fraud, optimization and analytics, fulfillment, and more. Visit the Magento Partner Directory to see all of our trusted partners."
+"Magento Marketplace","Magento Marketplace"
+"Extensions and Themes are an essential component of the Magento Ecosystem. Please visit the Magento Marketplace to see the latest innovations that developers have created to enhance your Magento Store.","Extensions and Themes are an essential component of the Magento Ecosystem. Please visit the Magento Marketplace to see the latest innovations that developers have created to enhance your Magento Store."
+"Visit Magento Marketplaces","Visit Magento Marketplaces"
diff --git a/app/code/Magento/Marketplace/view/adminhtml/templates/index.phtml b/app/code/Magento/Marketplace/view/adminhtml/templates/index.phtml
index df305664564..4b3a62e49d1 100644
--- a/app/code/Magento/Marketplace/view/adminhtml/templates/index.phtml
+++ b/app/code/Magento/Marketplace/view/adminhtml/templates/index.phtml
@@ -8,14 +8,7 @@
 <section class="page-partners">
     <h2 class="page-sub-title"><?php /* @escapeNotVerified */ echo __('Platinum Partners'); ?></h2>
     <p class="partners-description">
-        Representing Magento's highest level of partner engagement,
-        Magento Platinum Partners have established themselves as
-        leaders and innovators of key products and services designed
-        to help merchants and brands grow their business. Magento
-        reserves the Platinum level for select trusted partners that
-        are committed to offering integrations of commerce features,
-        functions, and tools, as well as back-end systems and operations,
-        to extend and enhance the power of the Magento commerce platform.
+        <?php /* @escapeNotVerified */ echo __('Representing Magento\'s highest level of partner engagement, Magento Platinum Partners have established themselves as leaders and innovators of key products and services designed to help merchants and brands grow their business. Magento reserves the Platinum level for select trusted partners that are committed to offering integrations of commerce features, functions, and tools, as well as back-end systems and operations, to extend and enhance the power of the Magento commerce platform.'); ?>
     </p>
     <h3 class="page-sub-sub-title"><?php /* @escapeNotVerified */ echo __('Featured Platinum Partners'); ?></h3>
     <div data-role="partners-block">
@@ -32,13 +25,7 @@
             <div class="partners-search">
                 <h2 class="page-sub-title"><?php /* @escapeNotVerified */ echo __('Partner search'); ?></h2>
                 <p>
-                    Magento has a thriving ecosystem of technology partners to
-                    help merchants and brands deliver the best possible
-                    customer experiences. They are recognized as experts in
-                    eCommerce, search, email marketing, payments, tax,
-                    fraud, optimization and analytics, fulfillment, and more.
-                    Visit the Magento Partner Directory to see all of
-                    our trusted partners.
+                    <?php /* @escapeNotVerified */ echo __('Magento has a thriving ecosystem of technology partners to help merchants and brands deliver the best possible customer experiences. They are recognized as experts in eCommerce, search, email marketing, payments, tax, fraud, optimization and analytics, fulfillment, and more. Visit the Magento Partner Directory to see all of our trusted partners.'); ?>
                 </p>
                 <a class="action-secondary" target="_blank"
                    href="http://partners.magento.com/partner_locator/search.aspx">
@@ -57,10 +44,7 @@
         <div class="col-m-4">
             <h2 class="page-sub-title"><?php /* @escapeNotVerified */ echo __('Magento Marketplace'); ?></h2>
             <p class="partner-description">
-                Extensions and Themes are an essential component of the Magento
-                Ecosystem. Please visit the Magento Marketplace
-                to see the latest innovations that developers
-                have created to enhance your Magento Store.
+                <?php /* @escapeNotVerified */ echo __('Extensions and Themes are an essential component of the Magento Ecosystem. Please visit the Magento Marketplace to see the latest innovations that developers have created to enhance your Magento Store.'); ?>
             </p>
             <a class="action-secondary" target="_blank"
                href="http://www.magentocommerce.com/magento-connect/">
-- 
GitLab


From 59cb5455cb735753ed13616a5da869ee88764a43 Mon Sep 17 00:00:00 2001
From: Mikalai_Shostka <mikalai_shostka@epam.com>
Date: Wed, 21 Oct 2015 17:13:47 +0300
Subject: [PATCH 142/370] MAGETWO-44332: After click to add video button
 appears alert message

Fix text
---
 .../view/adminhtml/web/js/get-video-information.js            | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
index 136a6dde21c..f926f8c5e61 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
+++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
@@ -395,7 +395,7 @@ require([
                             errReason = tmpError.reason;
 
                             if (['keyInvalid'].indexOf(errReason) !== -1) {
-                                errorsMessage.push('Youtube API key is an invalid');
+                                errorsMessage.push('Youtube API key is invalid');
 
                                 break;
                             }
@@ -403,7 +403,7 @@ require([
                             errorsMessage.push(tmpError.message);
                         }
 
-                        return 'Video can\'t be shown by reason: ' + $.unique(errorsMessage).join(', ');
+                        return 'Video cannot be shown due to the following reason: ' + $.unique(errorsMessage).join(', ');
                     };
 
                     if (data.error && data.error.code === 400) {
-- 
GitLab


From dae56d5b5fdb2d51ac3be93ff625ccd456aa0ac7 Mon Sep 17 00:00:00 2001
From: Bohdan Korablov <bkorablov@ebay.com>
Date: Wed, 21 Oct 2015 17:15:42 +0300
Subject: [PATCH 143/370] MAGETWO-43793: [github] broken references when
 viewing admin after initial install #1795

---
 .../View/Test/Unit/Layout/Data/StructureTest.php      |  9 ++++++---
 .../Unit/Layout/ScheduledStructure/HelperTest.php     | 11 ++++++++---
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Data/StructureTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Data/StructureTest.php
index b6e836b2441..da88b71ac38 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Data/StructureTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Data/StructureTest.php
@@ -3,11 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
+namespace Magento\Framework\View\Test\Unit\Layout\Data;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 use Magento\Framework\App\State;
 
-class StructureTest extends PHPUnit_Framework_TestCase
+class StructureTest extends \PHPUnit_Framework_TestCase
 {
     /**
      * @var \Psr\Log\LoggerInterface|\PHPUnit_Framework_MockObject_MockObject
@@ -65,8 +66,10 @@ class StructureTest extends PHPUnit_Framework_TestCase
 
         $this->loggerMock->expects($loggerExpects)
             ->method('critical')
-            ->with("Broken reference: the '{$childName}' tries to reorder itself towards '', but " .
-                "their parents are different: '{$parentName}' and '' respectively.");
+            ->with(
+                "Broken reference: the '{$childName}' tries to reorder itself towards '', but " .
+                "their parents are different: '{$parentName}' and '' respectively."
+            );
 
         $this->dataStructure->reorderChildElement($parentName, $childName, $offsetOrSibling);
     }
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php
index 1157ea28777..66bcad03943 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php
@@ -185,8 +185,10 @@ class HelperTest extends \PHPUnit_Framework_TestCase
 
         $this->loggerMock->expects($loggerExpects)
             ->method('critical')
-            ->with("Broken reference: the '{$key}' element cannot be added as child to '{$parentName}', " .
-                'because the latter doesn\'t exist');
+            ->with(
+                "Broken reference: the '{$key}' element cannot be added as child to '{$parentName}', " .
+                'because the latter doesn\'t exist'
+            );
 
         $this->helper->scheduleElement($this->scheduledStructureMock, $this->dataStructureMock, $key);
     }
@@ -259,7 +261,10 @@ class HelperTest extends \PHPUnit_Framework_TestCase
         $this->scheduledStructureMock->expects($this->once())->method('setElement')->with($key, [$block, $data]);
 
         $this->dataStructureMock->expects($this->once())->method('createElement')->with($key, ['type' => $block]);
-        $this->dataStructureMock->expects($this->once())->method('hasElement')->with($parentName)->willReturn($hasParent);
+        $this->dataStructureMock->expects($this->once())
+            ->method('hasElement')
+            ->with($parentName)
+            ->willReturn($hasParent);
         $this->dataStructureMock->expects($this->exactly($setAsChild))
             ->method('setAsChild')
             ->with($key, $parentName, $alias)
-- 
GitLab


From 5857035c5e52bbadc5b8bdd58b98e051de885040 Mon Sep 17 00:00:00 2001
From: Mikalai_Eutsikhieu <Mikalai_Eutsikhieu@epam.com>
Date: Wed, 21 Oct 2015 17:30:46 +0300
Subject: [PATCH 144/370] MAGETWO-44261: slightly changed style

---
 .../blank/Magento_ProductVideo/web/css/source/_module.less      | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less
index 50983ca119e..880d0f6fbda 100644
--- a/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less
+++ b/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less
@@ -45,7 +45,7 @@
 }
 
 .product-video {
-    height: 93%;
+    height: 90%;
     margin-top: 5%;
     position: absolute;
     top: 0;
-- 
GitLab


From ba972c7ac9a6ef2719998311ac9d1e3416176cb4 Mon Sep 17 00:00:00 2001
From: Mikalai_Eutsikhieu <Mikalai_Eutsikhieu@epam.com>
Date: Wed, 21 Oct 2015 17:56:01 +0300
Subject: [PATCH 145/370] MAGETWO-44405: Unable to change item cart qty from
 item configure page

---
 .../view/frontend/layout/catalog_product_view.xml             | 4 ----
 .../Magento/ProductVideo/view/frontend/requirejs-config.js    | 3 ++-
 2 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/app/code/Magento/ProductVideo/view/frontend/layout/catalog_product_view.xml b/app/code/Magento/ProductVideo/view/frontend/layout/catalog_product_view.xml
index 18417e1619d..59d2ef3e2cd 100644
--- a/app/code/Magento/ProductVideo/view/frontend/layout/catalog_product_view.xml
+++ b/app/code/Magento/ProductVideo/view/frontend/layout/catalog_product_view.xml
@@ -6,10 +6,6 @@
 */
 -->
 <page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
-    <head>
-        <link src="Magento_ProductVideo::js/fotorama-add-video-events.js"/>
-        <link src="Magento_ProductVideo::js/load-player.js"/>
-    </head>
     <body>
         <referenceContainer name="product.info.media">
             <block class="Magento\ProductVideo\Block\Product\View\Gallery" name="product.info.media.video" after="product.info.media.image" template="product/view/gallery.phtml"/>
diff --git a/app/code/Magento/ProductVideo/view/frontend/requirejs-config.js b/app/code/Magento/ProductVideo/view/frontend/requirejs-config.js
index e19b89135b4..7f488a2fa2f 100644
--- a/app/code/Magento/ProductVideo/view/frontend/requirejs-config.js
+++ b/app/code/Magento/ProductVideo/view/frontend/requirejs-config.js
@@ -6,7 +6,8 @@
 var config = {
     map: {
         '*': {
-            loadPlayer: 'Magento_ProductVideo/js/load-player'
+            loadPlayer: 'Magento_ProductVideo/js/load-player',
+            fotoramaVideoEvents: 'Magento_ProductVideo/js/fotorama-add-video-events'
         }
     }
 };
-- 
GitLab


From d6676d0b9fc06e7d9db0ae14226cde34a58d6318 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Wed, 21 Oct 2015 10:03:59 -0500
Subject: [PATCH 146/370] MAGETWO-44154: Random PAT build failures due to
 400/503 HTTP response errors being thrown

---
 setup/pub/magento/setup/readiness-check.js | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/setup/pub/magento/setup/readiness-check.js b/setup/pub/magento/setup/readiness-check.js
index d150e2f5cb1..3afd8fdde73 100644
--- a/setup/pub/magento/setup/readiness-check.js
+++ b/setup/pub/magento/setup/readiness-check.js
@@ -322,10 +322,8 @@ angular.module('readiness-check', [])
             angular.forEach($scope.items, function(item) {
                 item.show();
             });
-            var $delay = 0;
             angular.forEach($scope.items, function(item) {
-                $timeout(function() { $scope.query(item); }, $delay * 1000);
-                $delay++;
+                $scope.query(item);
             });
         };
 
-- 
GitLab


From 1d3fb90a8e2908b3da2a203004645d76117b0eac Mon Sep 17 00:00:00 2001
From: Andrii Kasian <akasian@magento.com>
Date: Wed, 21 Oct 2015 18:06:16 +0300
Subject: [PATCH 147/370] MAGETWO-44159: Configurable product price in store
 front doesn't reflect price change from backend

---
 .../Product/Indexer/Price/Configurable.php    | 30 ++++++-------------
 1 file changed, 9 insertions(+), 21 deletions(-)

diff --git a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
index d4719318ae8..bc74ed80980 100644
--- a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
+++ b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
@@ -71,27 +71,15 @@ class Configurable extends \Magento\Catalog\Model\ResourceModel\Product\Indexer\
     {
         $select = $this->getConnection()->select()->union(
             [
-                $this->getConnection()->select()->from(
-                        $this->getTable('catalog_product_super_link'),
-                        'parent_id'
-                    )->where(
-                        'parent_id in (?)',
-                        $entityIds
-                    ),
-                $this->getConnection()->select()->from(
-                        $this->getTable('catalog_product_super_link'),
-                        'product_id'
-                    )->where(
-                        'parent_id in (?)',
-                        $entityIds
-                    ),
-                $this->getConnection()->select()->from(
-                        $this->getTable('catalog_product_super_link'),
-                        'product_id'
-                    )->where(
-                        'product_id in (?)',
-                        $entityIds
-                    ),
+                $this->getConnection()->select()
+                    ->from( $this->getTable('catalog_product_super_link'), 'parent_id')
+                    ->where('parent_id in (?)', $entityIds),
+                $this->getConnection()->select()
+                    ->from($this->getTable('catalog_product_super_link'), 'product_id')
+                    ->where('parent_id in (?)', $entityIds),
+                $this->getConnection()->select()
+                    ->from($this->getTable('catalog_product_super_link'), 'product_id')
+                    ->where('product_id in (?)', $entityIds),
             ]
         );
         return array_map(
-- 
GitLab


From b37faa38de69e26ed0a549916066b18d25de6fd0 Mon Sep 17 00:00:00 2001
From: Andrii Kasian <akasian@magento.com>
Date: Wed, 21 Oct 2015 18:23:00 +0300
Subject: [PATCH 148/370] MAGETWO-44159: Configurable product price in store
 front doesn't reflect price change from backend

---
 .../Model/ResourceModel/Product/Indexer/Price/Configurable.php  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
index bc74ed80980..d81a4e96af0 100644
--- a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
+++ b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
@@ -72,7 +72,7 @@ class Configurable extends \Magento\Catalog\Model\ResourceModel\Product\Indexer\
         $select = $this->getConnection()->select()->union(
             [
                 $this->getConnection()->select()
-                    ->from( $this->getTable('catalog_product_super_link'), 'parent_id')
+                    ->from($this->getTable('catalog_product_super_link'), 'parent_id')
                     ->where('parent_id in (?)', $entityIds),
                 $this->getConnection()->select()
                     ->from($this->getTable('catalog_product_super_link'), 'product_id')
-- 
GitLab


From 6e62e869b9899c85cf98515a3e9a539a3a4c666f Mon Sep 17 00:00:00 2001
From: Yu Tang <ytang1@ebay.com>
Date: Wed, 21 Oct 2015 10:27:15 -0500
Subject: [PATCH 149/370] MAGETWO-44075: Incorrect prices on product page for
 products with custom option

---
 .../Tax/Model/Calculation/AbstractAggregateCalculator.php | 2 +-
 .../Magento/Tax/Model/Calculation/AbstractCalculator.php  | 8 ++++++--
 .../Magento/Tax/Model/Calculation/UnitBaseCalculator.php  | 2 +-
 3 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/app/code/Magento/Tax/Model/Calculation/AbstractAggregateCalculator.php b/app/code/Magento/Tax/Model/Calculation/AbstractAggregateCalculator.php
index 05bd7fd103d..488cba181ad 100644
--- a/app/code/Magento/Tax/Model/Calculation/AbstractAggregateCalculator.php
+++ b/app/code/Magento/Tax/Model/Calculation/AbstractAggregateCalculator.php
@@ -28,7 +28,7 @@ abstract class AbstractAggregateCalculator extends AbstractCalculator
         $priceInclTax = $this->calculationTool->round($item->getUnitPrice());
         $rowTotalInclTax = $priceInclTax * $quantity;
         if (!$this->isSameRateAsStore($rate, $storeRate)) {
-            $priceInclTax = $this->calculatePriceInclTax($priceInclTax, $storeRate, $rate);
+            $priceInclTax = $this->calculatePriceInclTax($priceInclTax, $storeRate, $rate, $round);
             $rowTotalInclTax = $priceInclTax * $quantity;
         }
         $rowTaxExact = $this->calculationTool->calcTaxAmount($rowTotalInclTax, $rate, true, false);
diff --git a/app/code/Magento/Tax/Model/Calculation/AbstractCalculator.php b/app/code/Magento/Tax/Model/Calculation/AbstractCalculator.php
index d8ab3e259b2..8f37546c839 100644
--- a/app/code/Magento/Tax/Model/Calculation/AbstractCalculator.php
+++ b/app/code/Magento/Tax/Model/Calculation/AbstractCalculator.php
@@ -433,14 +433,18 @@ abstract class AbstractCalculator
      * @param float $storePriceInclTax
      * @param float $storeRate
      * @param float $customerRate
+     * @param boolean $round
      * @return float
      */
-    protected function calculatePriceInclTax($storePriceInclTax, $storeRate, $customerRate)
+    protected function calculatePriceInclTax($storePriceInclTax, $storeRate, $customerRate, $round = true)
     {
         $storeTax = $this->calculationTool->calcTaxAmount($storePriceInclTax, $storeRate, true, false);
         $priceExclTax = $storePriceInclTax - $storeTax;
         $customerTax = $this->calculationTool->calcTaxAmount($priceExclTax, $customerRate, false, false);
-        $customerPriceInclTax = $this->calculationTool->round($priceExclTax + $customerTax);
+        $customerPriceInclTax = $priceExclTax + $customerTax;
+        if ($round) {
+            $customerPriceInclTax = $this->calculationTool->round($customerPriceInclTax);
+        }
         return $customerPriceInclTax;
     }
 }
diff --git a/app/code/Magento/Tax/Model/Calculation/UnitBaseCalculator.php b/app/code/Magento/Tax/Model/Calculation/UnitBaseCalculator.php
index 37c22cf5e14..fa8fa613792 100644
--- a/app/code/Magento/Tax/Model/Calculation/UnitBaseCalculator.php
+++ b/app/code/Magento/Tax/Model/Calculation/UnitBaseCalculator.php
@@ -45,7 +45,7 @@ class UnitBaseCalculator extends AbstractCalculator
         $applyTaxAfterDiscount = $this->config->applyTaxAfterDiscount($this->storeId);
         $priceInclTax = $this->calculationTool->round($item->getUnitPrice());
         if (!$this->isSameRateAsStore($rate, $storeRate)) {
-            $priceInclTax = $this->calculatePriceInclTax($priceInclTax, $storeRate, $rate);
+            $priceInclTax = $this->calculatePriceInclTax($priceInclTax, $storeRate, $rate, $round);
         }
         $uniTax = $this->calculationTool->calcTaxAmount($priceInclTax, $rate, true, false);
         $deltaRoundingType = self::KEY_REGULAR_DELTA_ROUNDING;
-- 
GitLab


From 43f1fbcd10b98f6b7886ae51397369eee6ebe54a Mon Sep 17 00:00:00 2001
From: Mikalai_Shostka <mikalai_shostka@epam.com>
Date: Wed, 21 Oct 2015 18:27:17 +0300
Subject: [PATCH 150/370] MAGETWO-44274: SQL error appears if Save & Duplicate
 product with images

Fix duplicate images
---
 .../Model/ResourceModel/Product/Attribute/Backend/Media.php     | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php
index a77ea68ae16..1edaa8d87fd 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php
@@ -345,7 +345,9 @@ class Media extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 
         foreach ($this->getConnection()->fetchAll($select) as $row) {
             $row['value_id'] = $valueIdMap[$row['value_id']];
+            unset($row['record_id']);
             $this->insertGalleryValueInStore($row);
+            $this->bindValueToEntity($row['value_id'], $newProductId);
         }
 
         return $this;
-- 
GitLab


From 459561601d5bd7fd09edaed2b6babc6677443b3e Mon Sep 17 00:00:00 2001
From: Ievgen Sentiabov <isentiabov@ebay.com>
Date: Wed, 21 Oct 2015 18:29:39 +0300
Subject: [PATCH 151/370] MAGETWO-44295: Refund transaction does not appear in
 Transactions tab for eWay

 - Added transaction generating for all refund actions
 - Added unit tests
---
 .../Authorizenet/Model/Authorizenet.php       |  12 +-
 .../Magento/Authorizenet/Model/Directpost.php |   8 +-
 .../Test/Unit/Model/DirectpostTest.php        | 236 +++++++++++++++++-
 .../Magento/Braintree/Model/PaymentMethod.php |   1 -
 .../Test/Unit/Model/PaymentMethodTest.php     |   1 -
 app/code/Magento/Paypal/Model/Payflowpro.php  |   3 +-
 .../Paypal/Test/Unit/Model/PayflowproTest.php |  25 +-
 .../Magento/Sales/Model/Order/Payment.php     |  29 ++-
 .../Test/Unit/Model/Order/PaymentTest.php     |  86 ++++++-
 9 files changed, 370 insertions(+), 31 deletions(-)

diff --git a/app/code/Magento/Authorizenet/Model/Authorizenet.php b/app/code/Magento/Authorizenet/Model/Authorizenet.php
index b35e4f4c399..4ad08d89cc4 100644
--- a/app/code/Magento/Authorizenet/Model/Authorizenet.php
+++ b/app/code/Magento/Authorizenet/Model/Authorizenet.php
@@ -6,6 +6,7 @@
 namespace Magento\Authorizenet\Model;
 
 use Magento\Authorizenet\Model\TransactionService;
+use Magento\Framework\HTTP\ZendClientFactory;
 
 /**
  * @SuppressWarnings(PHPMD.TooManyFields)
@@ -97,6 +98,11 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc
      */
     protected $_debugReplacePrivateDataKeys = ['merchantAuthentication', 'x_login'];
 
+    /**
+     * @var \Magento\Framework\HTTP\ZendClientFactory
+     */
+    protected $httpClientFactory;
+
     /**
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
@@ -111,6 +117,7 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc
      * @param \Magento\Authorizenet\Model\Request\Factory $requestFactory
      * @param \Magento\Authorizenet\Model\Response\Factory $responseFactory
      * @param \Magento\Authorizenet\Model\TransactionService $transactionService
+     * @param \Magento\Framework\HTTP\ZendClientFactory $httpClientFactory
      * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
@@ -130,6 +137,7 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc
         \Magento\Authorizenet\Model\Request\Factory $requestFactory,
         \Magento\Authorizenet\Model\Response\Factory $responseFactory,
         TransactionService $transactionService,
+        ZendClientFactory $httpClientFactory,
         \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
@@ -138,6 +146,7 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc
         $this->requestFactory = $requestFactory;
         $this->responseFactory = $responseFactory;
         $this->transactionService = $transactionService;
+        $this->httpClientFactory = $httpClientFactory;
 
         parent::__construct(
             $context,
@@ -370,7 +379,8 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc
     protected function postRequest(\Magento\Authorizenet\Model\Request $request)
     {
         $result = $this->responseFactory->create();
-        $client = new \Magento\Framework\HTTP\ZendClient();
+        /** @var \Magento\Framework\HTTP\ZendClient $client */
+        $client = $this->httpClientFactory->create();
         $url = $this->getConfigData('cgi_url') ?: self::CGI_URL;
         $debugData = ['url' => $url, 'request' => $request->getData()];
         $client->setUri($url);
diff --git a/app/code/Magento/Authorizenet/Model/Directpost.php b/app/code/Magento/Authorizenet/Model/Directpost.php
index bbfcd0f7d6e..68fd630f21f 100644
--- a/app/code/Magento/Authorizenet/Model/Directpost.php
+++ b/app/code/Magento/Authorizenet/Model/Directpost.php
@@ -6,6 +6,7 @@
 namespace Magento\Authorizenet\Model;
 
 use Magento\Authorizenet\Model\TransactionService;
+use Magento\Framework\HTTP\ZendClientFactory;
 use Magento\Payment\Model\Method\ConfigInterface;
 use Magento\Payment\Model\Method\TransparentInterface;
 use Magento\Sales\Model\Order\Email\Sender\OrderSender;
@@ -132,6 +133,7 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra
      * @param Directpost\Request\Factory $requestFactory
      * @param Directpost\Response\Factory $responseFactory
      * @param \Magento\Authorizenet\Model\TransactionService $transactionService
+     * @param \Magento\Framework\HTTP\ZendClientFactory $httpClientFactory
      * @param \Magento\Sales\Model\OrderFactory $orderFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
@@ -156,6 +158,7 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra
         \Magento\Authorizenet\Model\Directpost\Request\Factory $requestFactory,
         \Magento\Authorizenet\Model\Directpost\Response\Factory $responseFactory,
         TransactionService $transactionService,
+        ZendClientFactory $httpClientFactory,
         \Magento\Sales\Model\OrderFactory $orderFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Quote\Model\QuoteRepository $quoteRepository,
@@ -187,6 +190,7 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra
             $requestFactory,
             $responseFactory,
             $transactionService,
+            $httpClientFactory,
             $resource,
             $resourceCollection,
             $data
@@ -404,9 +408,7 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra
                     if ($result->getXTransId() != $payment->getParentTransactionId()) {
                         $payment->setTransactionId($result->getXTransId());
                     }
-                    $shouldCloseCaptureTransaction = $payment->getOrder()->canCreditmemo() ? 0 : 1;
-                    $payment->setIsTransactionClosed(1)
-                        ->setShouldCloseParentTransaction($shouldCloseCaptureTransaction)
+                    $payment->setIsTransactionClosed(true)
                         ->setTransactionAdditionalInfo(self::REAL_TRANSACTION_ID_KEY, $result->getXTransId());
                     return $this;
                 }
diff --git a/app/code/Magento/Authorizenet/Test/Unit/Model/DirectpostTest.php b/app/code/Magento/Authorizenet/Test/Unit/Model/DirectpostTest.php
index 3247ed2cb93..f2203f2fbe1 100644
--- a/app/code/Magento/Authorizenet/Test/Unit/Model/DirectpostTest.php
+++ b/app/code/Magento/Authorizenet/Test/Unit/Model/DirectpostTest.php
@@ -9,6 +9,9 @@ use Magento\Framework\Simplexml\Element;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 use Magento\Authorizenet\Model\Directpost;
 use Magento\Authorizenet\Model\TransactionService;
+use Magento\Authorizenet\Model\Request;
+use Magento\Authorizenet\Model\Directpost\Request\Factory;
+use Magento\Sales\Model\Order;
 use Magento\Sales\Model\Order\Payment\Transaction\Repository as TransactionRepository;
 
 /**
@@ -16,6 +19,10 @@ use Magento\Sales\Model\Order\Payment\Transaction\Repository as TransactionRepos
  */
 class DirectpostTest extends \PHPUnit_Framework_TestCase
 {
+    const TOTAL_AMOUNT = 100.02;
+    const INVOICE_NUM = '00000001';
+    const TRANSACTION_ID = '41a23x34fd124';
+
     /**
      * @var \Magento\Authorizenet\Model\Directpost
      */
@@ -56,6 +63,16 @@ class DirectpostTest extends \PHPUnit_Framework_TestCase
      */
     protected $transactionServiceMock;
 
+    /**
+     * @var \Magento\Framework\HTTP\ZendClient|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $httpClientMock;
+
+    /**
+     * @var \Magento\Authorizenet\Model\Directpost\Request\Factory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $requestFactory;
+
     protected function setUp()
     {
         $this->scopeConfigMock = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface')
@@ -64,7 +81,8 @@ class DirectpostTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods([
                 'getOrder', 'getId', 'setAdditionalInformation', 'getAdditionalInformation',
-                'setIsTransactionDenied', 'setIsTransactionClosed'
+                'setIsTransactionDenied', 'setIsTransactionClosed', 'decrypt', 'getCcLast4',
+                'getParentTransactionId', 'getPoNumber'
             ])
             ->getMock();
         $this->dataHelperMock = $this->getMockBuilder('Magento\Authorizenet\Helper\Data')
@@ -85,15 +103,20 @@ class DirectpostTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['getTransactionDetails'])
             ->getMock();
 
+        $this->requestFactory = $this->getRequestFactoryMock();
+        $httpClientFactoryMock = $this->getHttpClientFactoryMock();
+
         $helper = new ObjectManagerHelper($this);
         $this->directpost = $helper->getObject(
             'Magento\Authorizenet\Model\Directpost',
             [
                 'scopeConfig' => $this->scopeConfigMock,
                 'dataHelper' => $this->dataHelperMock,
+                'requestFactory' => $this->requestFactory,
                 'responseFactory' => $this->responseFactoryMock,
                 'transactionRepository' => $this->transactionRepositoryMock,
-                'transactionService' => $this->transactionServiceMock
+                'transactionService' => $this->transactionServiceMock,
+                'httpClientFactory' => $httpClientFactoryMock
             ]
         );
     }
@@ -376,7 +399,7 @@ class DirectpostTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Authorizenet\Model\Directpost::fetchTransactionInfo
+     * @covers       \Magento\Authorizenet\Model\Directpost::fetchTransactionInfo
      *
      * @param $transactionId
      * @param $resultStatus
@@ -440,6 +463,72 @@ class DirectpostTest extends \PHPUnit_Framework_TestCase
         $this->directpost->fetchTransactionInfo($this->paymentMock, $transactionId);
     }
 
+    /**
+     * @covers \Magento\Authorizenet\Model\Directpost::refund()
+     * @return void
+     */
+    public function testSuccessRefund()
+    {
+        $card = 1111;
+
+        $this->paymentMock->expects(static::exactly(2))
+            ->method('getCcLast4')
+            ->willReturn($card);
+        $this->paymentMock->expects(static::once())
+            ->method('decrypt')
+            ->willReturn($card);
+        $this->paymentMock->expects(static::exactly(3))
+            ->method('getParentTransactionId')
+            ->willReturn(self::TRANSACTION_ID . '-capture');
+        $this->paymentMock->expects(static::once())
+            ->method('getPoNumber')
+            ->willReturn(self::INVOICE_NUM);
+        $this->paymentMock->expects(static::once())
+            ->method('setIsTransactionClosed')
+            ->with(true)
+            ->willReturnSelf();
+
+        $orderMock = $this->getOrderMock();
+
+        $this->paymentMock->expects(static::exactly(2))
+            ->method('getOrder')
+            ->willReturn($orderMock);
+
+        $transactionMock = $this->getMockBuilder(Order\Payment\Transaction::class)
+            ->disableOriginalConstructor()
+            ->setMethods(['getAdditionalInformation'])
+            ->getMock();
+        $transactionMock->expects(static::once())
+            ->method('getAdditionalInformation')
+            ->with(Directpost::REAL_TRANSACTION_ID_KEY)
+            ->willReturn(self::TRANSACTION_ID);
+
+        $this->transactionRepositoryMock->expects(static::once())
+            ->method('getByTransactionId')
+            ->willReturn($transactionMock);
+
+        $response = $this->getRefundResponseBody(
+            Directpost::RESPONSE_CODE_APPROVED,
+            Directpost::RESPONSE_REASON_CODE_APPROVED,
+            'Successful'
+        );
+        $this->httpClientMock->expects(static::once())
+            ->method('getBody')
+            ->willReturn($response);
+
+        $this->responseMock->expects(static::once())
+            ->method('getXResponseCode')
+            ->willReturn(Directpost::RESPONSE_CODE_APPROVED);
+        $this->responseMock->expects(static::once())
+            ->method('getXResponseReasonCode')
+            ->willReturn(Directpost::RESPONSE_REASON_CODE_APPROVED);
+
+        $this->dataHelperMock->expects(static::never())
+            ->method('wrapGatewayError');
+
+        $this->directpost->refund($this->paymentMock, self::TOTAL_AMOUNT);
+    }
+
     /**
      * Get data for tests
      * @return array
@@ -468,14 +557,48 @@ class DirectpostTest extends \PHPUnit_Framework_TestCase
         $this->responseMock = $this->getMockBuilder('Magento\Authorizenet\Model\Directpost\Response')
             ->setMethods(
                 [
-                    'setData', 'isValidHash', 'getXTransId',
-                    'getXResponseCode', 'getXResponseReasonText',
-                    'getXAmount'
+                    'isValidHash',
+                    'getXTransId', 'getXResponseCode', 'getXResponseReasonCode', 'getXResponseReasonText', 'getXAmount',
+                    'setXResponseCode', 'setXResponseReasonCode', 'setXAvsCode', 'setXResponseReasonText',
+                    'setXTransId', 'setXInvoiceNum', 'setXAmount', 'setXMethod', 'setXType', 'setData',
+                    'setXAccountNumber',
+                    '__wakeup'
                 ]
             )
             ->disableOriginalConstructor()
             ->getMock();
 
+        $this->responseMock->expects(static::any())
+            ->method('setXResponseCode')
+            ->willReturnSelf();
+        $this->responseMock->expects(static::any())
+            ->method('setXResponseReasonCode')
+            ->willReturnSelf();
+        $this->responseMock->expects(static::any())
+            ->method('setXResponseReasonText')
+            ->willReturnSelf();
+        $this->responseMock->expects(static::any())
+            ->method('setXAvsCode')
+            ->willReturnSelf();
+        $this->responseMock->expects(static::any())
+            ->method('setXTransId')
+            ->willReturnSelf();
+        $this->responseMock->expects(static::any())
+            ->method('setXInvoiceNum')
+            ->willReturnSelf();
+        $this->responseMock->expects(static::any())
+            ->method('setXAmount')
+            ->willReturnSelf();
+        $this->responseMock->expects(static::any())
+            ->method('setXMethod')
+            ->willReturnSelf();
+        $this->responseMock->expects(static::any())
+            ->method('setXType')
+            ->willReturnSelf();
+        $this->responseMock->expects(static::any())
+            ->method('setData')
+            ->willReturnSelf();
+
         $this->responseFactoryMock->expects($this->any())
             ->method('create')
             ->willReturn($this->responseMock);
@@ -530,4 +653,105 @@ class DirectpostTest extends \PHPUnit_Framework_TestCase
         libxml_use_internal_errors(false);
         return $document;
     }
+
+    /**
+     * Get mock for authorize.net request factory
+     * @return \PHPUnit_Framework_MockObject_MockBuilder
+     */
+    private function getRequestFactoryMock()
+    {
+        $requestFactory = $this->getMockBuilder(Factory::class)
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+        $request = $this->getMockBuilder(Request::class)
+            ->disableOriginalConstructor()
+            ->setMethods(['__wakeup'])
+            ->getMock();
+        $requestFactory->expects(static::any())
+            ->method('create')
+            ->willReturn($request);
+        return $requestFactory;
+    }
+
+    /**
+     * Get mock for order
+     * @return \PHPUnit_Framework_MockObject_MockObject
+     */
+    private function getOrderMock()
+    {
+        $orderMock = $this->getMockBuilder(Order::class)
+            ->disableOriginalConstructor()
+            ->setMethods([
+                'getId', 'getIncrementId', 'getStoreId', 'getBillingAddress', 'getShippingAddress',
+                'getBaseCurrencyCode', 'getBaseTaxAmount', '__wakeup'
+            ])
+            ->getMock();
+
+        $orderMock->expects(static::once())
+            ->method('getId')
+            ->willReturn(1);
+
+        $orderMock->expects(static::exactly(2))
+            ->method('getIncrementId')
+            ->willReturn(self::INVOICE_NUM);
+
+        $orderMock->expects(static::once())
+            ->method('getStoreId')
+            ->willReturn(1);
+
+        $orderMock->expects(static::once())
+            ->method('getBaseCurrencyCode')
+            ->willReturn('USD');
+        return $orderMock;
+    }
+
+    /**
+     * Create and return mock for http client factory
+     * @return \PHPUnit_Framework_MockObject_MockObject
+     */
+    private function getHttpClientFactoryMock()
+    {
+        $this->httpClientMock = $this->getMockBuilder(\Magento\Framework\HTTP\ZendClient::class)
+            ->disableOriginalConstructor()
+            ->setMethods(['request', 'getBody', '__wakeup'])
+            ->getMock();
+
+        $this->httpClientMock->expects(static::any())
+            ->method('request')
+            ->willReturnSelf();
+
+        $httpClientFactoryMock = $this->getMockBuilder(\Magento\Framework\HTTP\ZendClientFactory::class)
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+
+        $httpClientFactoryMock->expects(static::any())
+            ->method('create')
+            ->willReturn($this->httpClientMock);
+        return $httpClientFactoryMock;
+    }
+
+    /**
+     * Get mocked response for refund transaction
+     * @param $code
+     * @param $reasonCode
+     * @param $reasonText
+     * @return string
+     */
+    private function getRefundResponseBody($code, $reasonCode, $reasonText)
+    {
+        $result = array_fill(0, 50, '');
+        $result[0] = $code; // XResponseCode
+        $result[2] = $reasonCode; // XResponseReasonCode
+        $result[3] = $reasonText; // XResponseReasonText
+        $result[6] = self::TRANSACTION_ID; // XTransId
+        $result[7] = self::INVOICE_NUM; // XInvoiceNum
+        $result[9] = self::TOTAL_AMOUNT; // XAmount
+        $result[10] = Directpost::REQUEST_METHOD_CC; // XMethod
+        $result[11] = Directpost::REQUEST_TYPE_CREDIT; // XType
+        $result[37] = md5(self::TRANSACTION_ID); // x_MD5_Hash
+        $result[50] = '48329483921'; // setXAccountNumber
+        return implode(Directpost::RESPONSE_DELIM_CHAR, $result);
+    }
 }
diff --git a/app/code/Magento/Braintree/Model/PaymentMethod.php b/app/code/Magento/Braintree/Model/PaymentMethod.php
index 45171956e87..7b045d5dcde 100644
--- a/app/code/Magento/Braintree/Model/PaymentMethod.php
+++ b/app/code/Magento/Braintree/Model/PaymentMethod.php
@@ -657,7 +657,6 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc
                 : $this->braintreeTransaction->refund($transactionId, $amount);
             $this->_debug($this->_convertObjToArray($result));
             if ($result->success) {
-                $payment->setTransactionId($transactionId . '-' . Transaction::TYPE_REFUND);
                 $payment->setIsTransactionClosed(true);
             } else {
                 throw new LocalizedException($this->errorHelper->parseBraintreeError($result));
diff --git a/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php b/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php
index e20af765062..9e90e201f6b 100644
--- a/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php
@@ -2379,7 +2379,6 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
 
         $this->model->refund($paymentObject, $amount);
         $this->assertEquals(1, $paymentObject->getIsTransactionClosed());
-        $this->assertEquals($refundTransactionId . '-' .Transaction::TYPE_REFUND, $paymentObject->getTransactionId());
     }
 
     /**
diff --git a/app/code/Magento/Paypal/Model/Payflowpro.php b/app/code/Magento/Paypal/Model/Payflowpro.php
index 6efc7e7cca4..894c0792a99 100644
--- a/app/code/Magento/Paypal/Model/Payflowpro.php
+++ b/app/code/Magento/Paypal/Model/Payflowpro.php
@@ -500,8 +500,7 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc implements GatewayInte
         $this->processErrors($response);
 
         if ($response->getResultCode() == self::RESPONSE_CODE_APPROVED) {
-            $payment->setTransactionId($response->getPnref())->setIsTransactionClosed(1);
-            $payment->setShouldCloseParentTransaction(!$payment->getCreditmemo()->getInvoice()->canRefund());
+            $payment->setTransactionId($response->getPnref())->setIsTransactionClosed(true);
         }
         return $this;
     }
diff --git a/app/code/Magento/Paypal/Test/Unit/Model/PayflowproTest.php b/app/code/Magento/Paypal/Test/Unit/Model/PayflowproTest.php
index 21568085222..c6250a24903 100644
--- a/app/code/Magento/Paypal/Test/Unit/Model/PayflowproTest.php
+++ b/app/code/Magento/Paypal/Test/Unit/Model/PayflowproTest.php
@@ -175,7 +175,6 @@ class PayflowproTest extends \PHPUnit_Framework_TestCase
         $this->payflowpro->fetchTransactionInfo($payment, 'AD49G8N825');
     }
 
-
     /**
      * @param $response
      * @dataProvider setTransStatusDataProvider
@@ -323,6 +322,22 @@ class PayflowproTest extends \PHPUnit_Framework_TestCase
         ];
     }
 
+    /**
+     * @covers \Magento\Paypal\Model\Payflowpro::refund()
+     */
+    public function testRefund()
+    {
+        /** @var \Magento\Sales\Model\Order\Payment $paymentMock */
+        $paymentMock = $this->getPaymentMock();
+
+        $response = $this->execGatewayRequest();
+
+        $amount = 213.04;
+        $this->payflowpro->refund($paymentMock, $amount);
+        static::assertEquals($response['pnref'], $paymentMock->getTransactionId());
+        static::assertTrue($paymentMock->getIsTransactionClosed());
+    }
+
     /**
      * Create mock object for store model
      * @return void
@@ -399,16 +414,16 @@ class PayflowproTest extends \PHPUnit_Framework_TestCase
             'year' => 18,
             'cvv' => 123
         ];
-        $paymentMock->expects(static::once())
+        $paymentMock->expects(static::any())
             ->method('getCcNumber')
             ->willReturn($cardData['number']);
-        $paymentMock->expects(static::once())
+        $paymentMock->expects(static::any())
             ->method('getCcExpMonth')
             ->willReturn($cardData['month']);
-        $paymentMock->expects(static::once())
+        $paymentMock->expects(static::any())
             ->method('getCcExpYear')
             ->willReturn($cardData['year']);
-        $paymentMock->expects(static::once())
+        $paymentMock->expects(static::any())
             ->method('getCcCid')
             ->willReturn($cardData['cvv']);
         return $paymentMock;
diff --git a/app/code/Magento/Sales/Model/Order/Payment.php b/app/code/Magento/Sales/Model/Order/Payment.php
index 690bde68d5c..885838781ee 100644
--- a/app/code/Magento/Sales/Model/Order/Payment.php
+++ b/app/code/Magento/Sales/Model/Order/Payment.php
@@ -139,7 +139,8 @@ class Payment extends Info implements OrderPaymentInterface
         \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
-    ) {
+    )
+    {
         $this->priceCurrency = $priceCurrency;
         $this->creditmemoFactory = $creditmemoFactory;
         $this->transactionRepository = $transactionRepository;
@@ -629,7 +630,7 @@ class Payment extends Info implements OrderPaymentInterface
                     $this->getOrder()->getId()
                 );
                 if ($captureTxn) {
-                    $this->setParentTransactionId($captureTxn->getTxnId());
+                    $this->setTransactionIdsForRefund($captureTxn);
                 }
                 $this->setShouldCloseParentTransaction(true);
                 // TODO: implement multiple refunds per capture
@@ -638,10 +639,7 @@ class Payment extends Info implements OrderPaymentInterface
                         $this->getOrder()->getStoreId()
                     );
                     $this->setRefundTransactionId($invoice->getTransactionId());
-                    $gateway->refund(
-                        $this,
-                        $baseAmountToRefund
-                    );
+                    $gateway->refund($this, $baseAmountToRefund);
 
                     $creditmemo->setTransactionId($this->getLastTransId());
                 } catch (\Magento\Framework\Exception\LocalizedException $e) {
@@ -2414,5 +2412,24 @@ class Payment extends Info implements OrderPaymentInterface
         return (bool)$this->getData('should_close_parent_transaction');
     }
 
+    /**
+     * Set payment parent transaction id and current transaction id if it not set
+     * @param Transaction $transaction
+     * @return void
+     */
+    private function setTransactionIdsForRefund(Transaction $transaction)
+    {
+        if (!$this->getTransactionId()) {
+            $this->setTransactionId(
+                $this->transactionManager->generateTransactionId(
+                    $this,
+                    Transaction::TYPE_REFUND,
+                    $transaction
+                )
+            );
+        }
+        $this->setParentTransactionId($transaction->getTxnId());
+    }
+
     //@codeCoverageIgnoreEnd
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/PaymentTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/PaymentTest.php
index 29757fc570f..e9b65325df8 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/PaymentTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/PaymentTest.php
@@ -17,6 +17,8 @@ use Magento\Sales\Model\Order\Payment\Transaction;
  */
 class PaymentTest extends \PHPUnit_Framework_TestCase
 {
+    const TRANSACTION_ID = 'ewr34fM49V0';
+
     private $mockContext;
     /**
      * @var Payment
@@ -166,6 +168,7 @@ class PaymentTest extends \PHPUnit_Framework_TestCase
                     'order',
                     'isInitializeNeeded',
                     'initialize',
+                    'refund'
                 ]
             )
             ->getMock();
@@ -258,7 +261,10 @@ class PaymentTest extends \PHPUnit_Framework_TestCase
                 'register',
                 'addComment',
                 'save',
-                'getGrandTotal'
+                'getGrandTotal',
+                'getBaseGrandTotal',
+                'getDoTransaction',
+                'getInvoice'
             ],
             [],
             '',
@@ -268,7 +274,7 @@ class PaymentTest extends \PHPUnit_Framework_TestCase
         $this->payment = $this->initPayment();
         $this->payment->setMethod('any');
         $this->payment->setOrder($this->orderMock);
-        $this->transactionId = 100;
+        $this->transactionId = self::TRANSACTION_ID;
     }
 
     protected function tearDown()
@@ -825,13 +831,13 @@ class PaymentTest extends \PHPUnit_Framework_TestCase
      */
     protected function mockInvoice($transactionId, $countCall = 1)
     {
-        $this->invoiceMock->expects($this->once())
+        $this->invoiceMock->expects(static::any())
             ->method('getTransactionId')
             ->willReturn($transactionId);
-        $this->invoiceMock->expects($this->once())
+        $this->invoiceMock->expects(static::any())
             ->method('load')
             ->with($transactionId);
-        $this->invoiceMock->expects($this->once())
+        $this->invoiceMock->expects(static::any())
             ->method('getId')
             ->willReturn($transactionId);
         $this->orderMock->expects($this->exactly($countCall))
@@ -1314,7 +1320,8 @@ class PaymentTest extends \PHPUnit_Framework_TestCase
      */
     public function testRegisterRefundNotification()
     {
-        $message = 'Registered notification about refunded amount of . Transaction ID: "100-refund"';
+        $message = 'Registered notification about refunded amount of . Transaction ID: "' .
+            self::TRANSACTION_ID . '-refund"';
         $amount = 50;
         $grandTotalCreditMemo = 50;
         $invoiceBaseGrandTotal = 50;
@@ -1429,6 +1436,73 @@ class PaymentTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals($canRefund, $this->payment->canRefund());
     }
 
+    /**
+     * @covers \Magento\Sales\Model\Order\Payment::refund()
+     */
+    public function testRefund()
+    {
+        $amount = 204.04;
+        $this->creditMemoMock->expects(static::once())
+            ->method('getBaseGrandTotal')
+            ->willReturn($amount);
+        $this->creditMemoMock->expects(static::once())
+            ->method('getGrandTotal')
+            ->willReturn($amount);
+        $this->creditMemoMock->expects(static::once())
+            ->method('getDoTransaction')
+            ->willReturn(true);
+
+        $this->paymentMethodMock->expects(static::once())
+            ->method('canRefund')
+            ->willReturn(true);
+
+        $this->mockInvoice(self::TRANSACTION_ID, 0);
+        $this->creditMemoMock->expects(static::once())
+            ->method('getInvoice')
+            ->willReturn($this->invoiceMock);
+
+        $captureTranId = self::TRANSACTION_ID . '-' . Transaction::TYPE_CAPTURE;
+        $captureTransaction = $this->getMockBuilder(Transaction::class)
+            ->disableOriginalConstructor()
+            ->setMethods(['getTxnId'])
+            ->getMock();
+
+        $refundTranId = $captureTranId . '-' . Transaction::TYPE_REFUND;
+        $this->transactionManagerMock->expects(static::once())
+            ->method('generateTransactionId')
+            ->willReturn($refundTranId);
+        $captureTransaction->expects(static::once())
+            ->method('getTxnId')
+            ->willReturn($captureTranId);
+        $this->transactionRepositoryMock->expects(static::once())
+            ->method('getByTransactionId')
+            ->willReturn($captureTransaction);
+
+        $this->paymentMethodMock->expects(static::once())
+            ->method('refund')
+            ->with($this->payment, $amount);
+
+        $isOnline = true;
+        $this->getTransactionBuilderMock([], $isOnline, Transaction::TYPE_REFUND, $refundTranId);
+
+        $this->currencyMock->expects(static::once())
+            ->method('formatTxt')
+            ->willReturn($amount);
+        $this->orderMock->expects(static::once())
+            ->method('getBaseCurrency')
+            ->willReturn($this->currencyMock);
+
+        $status = 'status';
+        $message = 'We refunded ' . $amount . ' online. Transaction ID: "' . $refundTranId . '"';
+        $this->mockGetDefaultStatus(Order::STATE_PROCESSING, $status);
+        $this->assertOrderUpdated(Order::STATE_PROCESSING, $status, $message);
+
+        static::assertSame($this->payment, $this->payment->refund($this->creditMemoMock));
+        static::assertEquals($amount, $this->payment->getData('amount_refunded'));
+        static::assertEquals($amount, $this->payment->getData('base_amount_refunded_online'));
+        static::assertEquals($amount, $this->payment->getData('base_amount_refunded'));
+    }
+
     public function boolProvider()
     {
         return [
-- 
GitLab


From 7802b8b1a13bc4f1c0534cea014771bef9b60e4a Mon Sep 17 00:00:00 2001
From: Oleksandr Karpenko <okarpenko@ebay.com>
Date: Wed, 21 Oct 2015 18:30:19 +0300
Subject: [PATCH 152/370] MAGETWO-44411: CLONE - Container
 "page.bottom.container" isn't created in empty layout file

---
 app/code/Magento/Theme/view/base/page_layout/empty.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Theme/view/base/page_layout/empty.xml b/app/code/Magento/Theme/view/base/page_layout/empty.xml
index 09d5658a86c..d69d34f79e6 100644
--- a/app/code/Magento/Theme/view/base/page_layout/empty.xml
+++ b/app/code/Magento/Theme/view/base/page_layout/empty.xml
@@ -16,7 +16,7 @@
                     <container name="main" label="Main Content Container" htmlTag="div" htmlClass="column main"/>
                 </container>
             </container>
-            <container name="page.bottom" as="page_bottom" label="Before Page Footer Container" after="main.content" htmlTag="div" htmlClass="page-bottom"/>
+            <container name="page.bottom.container" as="page_bottom_container" label="Before Page Footer Container" after="main.content" htmlTag="div" htmlClass="page-bottom"/>
             <container name="before.body.end" as="before_body_end" after="-" label="Page Bottom"/>
         </container>
     </container>
-- 
GitLab


From 13b741c54c0fb77c1d85c0b35a6aa74a6e9687c0 Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Wed, 21 Oct 2015 18:33:34 +0300
Subject: [PATCH 153/370] MAGETWO-44306: Backend Page "Find Partners &
 Extensions" is untranslatable

---
 .../view/adminhtml/templates/index.phtml      | 20 ++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/app/code/Magento/Marketplace/view/adminhtml/templates/index.phtml b/app/code/Magento/Marketplace/view/adminhtml/templates/index.phtml
index 4b3a62e49d1..4a2301057c6 100644
--- a/app/code/Magento/Marketplace/view/adminhtml/templates/index.phtml
+++ b/app/code/Magento/Marketplace/view/adminhtml/templates/index.phtml
@@ -3,12 +3,18 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
+
+// @codingStandardsIgnoreFile
 ?>
 
 <section class="page-partners">
     <h2 class="page-sub-title"><?php /* @escapeNotVerified */ echo __('Platinum Partners'); ?></h2>
     <p class="partners-description">
-        <?php /* @escapeNotVerified */ echo __('Representing Magento\'s highest level of partner engagement, Magento Platinum Partners have established themselves as leaders and innovators of key products and services designed to help merchants and brands grow their business. Magento reserves the Platinum level for select trusted partners that are committed to offering integrations of commerce features, functions, and tools, as well as back-end systems and operations, to extend and enhance the power of the Magento commerce platform.'); ?>
+        <?php /* @escapeNotVerified */
+        echo __(
+            'Representing Magento\'s highest level of partner engagement, Magento Platinum Partners have established themselves as leaders and innovators of key products and services designed to help merchants and brands grow their business. ' .
+            'Magento reserves the Platinum level for select trusted partners that are committed to offering integrations of commerce features, functions, and tools, as well as back-end systems and operations, to extend and enhance the power of the Magento commerce platform.'
+        ); ?>
     </p>
     <h3 class="page-sub-sub-title"><?php /* @escapeNotVerified */ echo __('Featured Platinum Partners'); ?></h3>
     <div data-role="partners-block">
@@ -25,7 +31,12 @@
             <div class="partners-search">
                 <h2 class="page-sub-title"><?php /* @escapeNotVerified */ echo __('Partner search'); ?></h2>
                 <p>
-                    <?php /* @escapeNotVerified */ echo __('Magento has a thriving ecosystem of technology partners to help merchants and brands deliver the best possible customer experiences. They are recognized as experts in eCommerce, search, email marketing, payments, tax, fraud, optimization and analytics, fulfillment, and more. Visit the Magento Partner Directory to see all of our trusted partners.'); ?>
+                    <?php /* @escapeNotVerified */
+                    echo __(
+                        'Magento has a thriving ecosystem of technology partners to help merchants and brands deliver the best possible customer experiences. ' .
+                        'They are recognized as experts in eCommerce, search, email marketing, payments, tax, fraud, optimization and analytics, fulfillment, and more. ' .
+                        'Visit the Magento Partner Directory to see all of our trusted partners.'
+                    ); ?>
                 </p>
                 <a class="action-secondary" target="_blank"
                    href="http://partners.magento.com/partner_locator/search.aspx">
@@ -44,7 +55,10 @@
         <div class="col-m-4">
             <h2 class="page-sub-title"><?php /* @escapeNotVerified */ echo __('Magento Marketplace'); ?></h2>
             <p class="partner-description">
-                <?php /* @escapeNotVerified */ echo __('Extensions and Themes are an essential component of the Magento Ecosystem. Please visit the Magento Marketplace to see the latest innovations that developers have created to enhance your Magento Store.'); ?>
+                <?php /* @escapeNotVerified */ echo __(
+                    'Extensions and Themes are an essential component of the Magento Ecosystem. ' .
+                    'Please visit the Magento Marketplace to see the latest innovations that developers have created to enhance your Magento Store.'
+                ); ?>
             </p>
             <a class="action-secondary" target="_blank"
                href="http://www.magentocommerce.com/magento-connect/">
-- 
GitLab


From 7c1c47fcfc25ae6f3b7435632ace13d3c75f8a81 Mon Sep 17 00:00:00 2001
From: Ievgen Sentiabov <isentiabov@ebay.com>
Date: Wed, 21 Oct 2015 18:53:09 +0300
Subject: [PATCH 154/370] MAGETWO-44295: Refund transaction does not appear in
 Transactions tab for eWay

 - Refactored code related to failed tests
---
 app/code/Magento/Authorizenet/Test/Unit/Model/DirectpostTest.php | 1 +
 1 file changed, 1 insertion(+)

diff --git a/app/code/Magento/Authorizenet/Test/Unit/Model/DirectpostTest.php b/app/code/Magento/Authorizenet/Test/Unit/Model/DirectpostTest.php
index f2203f2fbe1..3726d4e5108 100644
--- a/app/code/Magento/Authorizenet/Test/Unit/Model/DirectpostTest.php
+++ b/app/code/Magento/Authorizenet/Test/Unit/Model/DirectpostTest.php
@@ -16,6 +16,7 @@ use Magento\Sales\Model\Order\Payment\Transaction\Repository as TransactionRepos
 
 /**
  * Class DirectpostTest
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
 class DirectpostTest extends \PHPUnit_Framework_TestCase
 {
-- 
GitLab


From d85e46d5f1dbdb1e02f20f47375c9684185da0d4 Mon Sep 17 00:00:00 2001
From: Ivan Gavryshko <igavryshko@ebay.com>
Date: Wed, 21 Oct 2015 10:58:06 -0500
Subject: [PATCH 155/370] MAGETWO-43907 Custom admin URL breaks admin log in
 after installation

- improved error message
---
 setup/view/magento/setup/web-configuration.phtml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/setup/view/magento/setup/web-configuration.phtml b/setup/view/magento/setup/web-configuration.phtml
index 0b91a4f2f7e..1522962968d 100644
--- a/setup/view/magento/setup/web-configuration.phtml
+++ b/setup/view/magento/setup/web-configuration.phtml
@@ -20,7 +20,7 @@ $hints = [
     ),
     'admin' => sprintf(
         '<p>%s</p>',
-        'A unique URL helps keep store and customer info safer. Use letters, numbers or underscores.'
+        'A unique URL helps keep store and customer info safer. Use only letters, numbers, and underscore characters.'
     )
 ];
 ?>
@@ -113,7 +113,7 @@ $hints = [
                         >
                     <div class="error-container">
                         <span ng-show="webconfig.admin.$error">
-                            Please enter a valid admin URL path. Use letters, numbers or underscores.
+                            Please enter a valid admin URL path. Use only letters, numbers, and underscore characters.
                         </span>
                     </div>
                 </div>
-- 
GitLab


From 3b963bf809989253bc7b220f8063aab631e4644e Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Wed, 21 Oct 2015 18:58:56 +0300
Subject: [PATCH 156/370] MAGETWO-44199: "Choose Files" button is missing on
 the "Insert File..." popup

---
 .../backend/web/css/source/components/_file-insertion.less      | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less
index cdc66d47755..9dd4fec9c3c 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less
@@ -18,7 +18,7 @@
             display: none;
         }
         input {
-            -moz-transforms: none;
+            -moz-transform: none;
             border: none;
             opacity: 1;
             position: static;
-- 
GitLab


From 57391a4601642a159a233b93dba9450d78a81dbf Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Wed, 21 Oct 2015 19:05:38 +0300
Subject: [PATCH 157/370] MAGETWO-44306: Backend Page "Find Partners &
 Extensions" is untranslatable

---
 app/code/Magento/Marketplace/i18n/en_US.csv | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Marketplace/i18n/en_US.csv b/app/code/Magento/Marketplace/i18n/en_US.csv
index 3d18ce49acd..88f374fd13d 100644
--- a/app/code/Magento/Marketplace/i18n/en_US.csv
+++ b/app/code/Magento/Marketplace/i18n/en_US.csv
@@ -2,7 +2,8 @@
 "Representing Magento's highest level of partner engagement, Magento Platinum Partners have established themselves as leaders and innovators of key products and services designed to help merchants and brands grow their business. Magento reserves the Platinum level for select trusted partners that are committed to offering integrations of commerce features, functions, and tools, as well as back-end systems and operations, to extend and enhance the power of the Magento commerce platform.","Representing Magento's highest level of partner engagement, Magento Platinum Partners have established themselves as leaders and innovators of key products and services designed to help merchants and brands grow their business. Magento reserves the Platinum level for select trusted partners that are committed to offering integrations of commerce features, functions, and tools, as well as back-end systems and operations, to extend and enhance the power of the Magento commerce platform."
 "Featured Platinum Partners","Featured Platinum Partners"
 "Partner search","Partner search"
-"Magento has a thriving ecosystem of technology partners to help merchants and brands deliver the best possiblecustomer experiences. They are recognized as experts in eCommerce, search, email marketing, payments, tax, fraud, optimization and analytics, fulfillment, and more. Visit the Magento Partner Directory to see all of our trusted partners.","Magento has a thriving ecosystem of technology partners to help merchants and brands deliver the best possiblecustomer experiences. They are recognized as experts in eCommerce, search, email marketing, payments, tax, fraud, optimization and analytics, fulfillment, and more. Visit the Magento Partner Directory to see all of our trusted partners."
+"Magento has a thriving ecosystem of technology partners to help merchants and brands deliver the best possible customer experiences. They are recognized as experts in eCommerce, search, email marketing, payments, tax, fraud, optimization and analytics, fulfillment, and more. Visit the Magento Partner Directory to see all of our trusted partners.","Magento has a thriving ecosystem of technology partners to help merchants and brands deliver the best possible customer experiences. They are recognized as experts in eCommerce, search, email marketing, payments, tax, fraud, optimization and analytics, fulfillment, and more. Visit the Magento Partner Directory to see all of our trusted partners."
+"More Partners","More Partners"
 "Magento Marketplace","Magento Marketplace"
 "Extensions and Themes are an essential component of the Magento Ecosystem. Please visit the Magento Marketplace to see the latest innovations that developers have created to enhance your Magento Store.","Extensions and Themes are an essential component of the Magento Ecosystem. Please visit the Magento Marketplace to see the latest innovations that developers have created to enhance your Magento Store."
 "Visit Magento Marketplaces","Visit Magento Marketplaces"
-- 
GitLab


From 6ab3673e397d57e4fb9091c496f145c26e337a81 Mon Sep 17 00:00:00 2001
From: Maxim Medinskiy <mmedinskiy@ebay.com>
Date: Wed, 21 Oct 2015 19:13:00 +0300
Subject: [PATCH 158/370] MAGETWO-44315: Multiple select customer attribute is
 not saved in admin if more than one values selected

---
 .../Magento/Ui/view/base/web/js/form/element/multiselect.js | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/multiselect.js b/app/code/Magento/Ui/view/base/web/js/form/element/multiselect.js
index 6c5de791d1e..1260a366cc0 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/element/multiselect.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/element/multiselect.js
@@ -20,8 +20,10 @@ define([
          *
          * @returns {Array}
          */
-        normalizeData: function () {
-            var value = this._super();
+        normalizeData: function (value) {
+            if (utils.isEmpty(value)) {
+                value = [];
+            }
 
             return _.isString(value) ? value.split(',') : value;
         },
-- 
GitLab


From 17a5dbfa388ac24d4969f157e0026291f0d40f7e Mon Sep 17 00:00:00 2001
From: Sergey Semenov <ssemenov@ebay.com>
Date: Wed, 21 Oct 2015 19:18:43 +0300
Subject: [PATCH 159/370] MAGETWO-42285: Customer Information In Grid Shows
 Wrong Account "Created In" Field

---
 .../Customer/Model/AccountManagement.php      |  7 +++
 .../Test/Unit/Model/AccountManagementTest.php | 59 ++++++++++++++++++-
 2 files changed, 64 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Customer/Model/AccountManagement.php b/app/code/Magento/Customer/Model/AccountManagement.php
index 500a104861d..06be21a82e3 100644
--- a/app/code/Magento/Customer/Model/AccountManagement.php
+++ b/app/code/Magento/Customer/Model/AccountManagement.php
@@ -513,6 +513,13 @@ class AccountManagement implements AccountManagementInterface
             $customer->setStoreId($storeId);
         }
 
+        // Update 'created_in' value with actual store name
+        if ($customer->getId() === null) {
+            $storeName = $this->storeManager->getStore($customer->getStoreId())
+                ->getName();
+            $customer->setCreatedIn($storeName);
+        }
+
         $customerAddresses = $customer->getAddresses() ?: [];
         $customer->setAddresses(null);
         try {
diff --git a/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php b/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php
index d5fc01b3790..62d7232bda0 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php
@@ -265,7 +265,7 @@ class AccountManagementTest extends \PHPUnit_Framework_TestCase
             ->method('getDefaultStore')
             ->willReturn($store);
         $customer = $this->getMockBuilder('Magento\Customer\Api\Data\CustomerInterface')->getMock();
-        $customer->expects($this->once())
+        $customer->expects($this->atLeastOnce())
             ->method('getId')
             ->willReturn($customerId);
         $customer->expects($this->once())
@@ -341,7 +341,7 @@ class AccountManagementTest extends \PHPUnit_Framework_TestCase
             ->method('getDefaultStore')
             ->willReturn($store);
         $customer = $this->getMockBuilder('Magento\Customer\Api\Data\CustomerInterface')->getMock();
-        $customer->expects($this->once())
+        $customer->expects($this->atLeastOnce())
             ->method('getId')
             ->willReturn($customerId);
         $customer->expects($this->once())
@@ -478,6 +478,61 @@ class AccountManagementTest extends \PHPUnit_Framework_TestCase
         $this->accountManagement->createAccountWithPasswordHash($customer, $hash);
     }
 
+    /**
+     * @expectedException \Magento\Framework\Exception\LocalizedException
+     */
+    public function testCreateAccountWithPasswordHashWithNewCustomerAndLocalizedException()
+    {
+        $storeId = 1;
+        $storeName = 'store_name';
+        $hash = '4nj54lkj5jfi03j49f8bgujfgsd';
+
+        $customerMock = $this->getMockBuilder('Magento\Customer\Api\Data\CustomerInterface')
+            ->getMockForAbstractClass();
+
+        $customerMock->expects($this->atLeastOnce())
+            ->method('getId')
+            ->willReturn(null);
+        $customerMock->expects($this->atLeastOnce())
+            ->method('getStoreId')
+            ->willReturn($storeId);
+        $customerMock->expects($this->once())
+            ->method('setCreatedIn')
+            ->with($storeName)
+            ->willReturnSelf();
+        $customerMock->expects($this->once())
+            ->method('getAddresses')
+            ->willReturn([]);
+        $customerMock->expects($this->once())
+            ->method('setAddresses')
+            ->with(null)
+            ->willReturnSelf();
+
+        $storeMock = $this->getMockBuilder('Magento\Store\Model\Store')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $storeMock->expects($this->once())
+            ->method('getName')
+            ->willReturn($storeName);
+
+        $this->storeManager->expects($this->once())
+            ->method('getStore')
+            ->with($storeId)
+            ->willReturn($storeMock);
+
+        $exception = new \Magento\Framework\Exception\LocalizedException(
+            new \Magento\Framework\Phrase('Exception message')
+        );
+        $this->customerRepository
+            ->expects($this->once())
+            ->method('save')
+            ->with($customerMock, $hash)
+            ->willThrowException($exception);
+
+        $this->accountManagement->createAccountWithPasswordHash($customerMock, $hash);
+    }
+
     /**
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
-- 
GitLab


From 219d6ce082edbcf811fb30c030e6e7f5b5ccc643 Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Wed, 21 Oct 2015 19:20:07 +0300
Subject: [PATCH 160/370] MAGETWO-44306: Backend Page "Find Partners &
 Extensions" is untranslatable

---
 app/code/Magento/Marketplace/i18n/en_US.csv                 | 3 +++
 .../Marketplace/view/adminhtml/templates/partners.phtml     | 6 +++---
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/app/code/Magento/Marketplace/i18n/en_US.csv b/app/code/Magento/Marketplace/i18n/en_US.csv
index 88f374fd13d..7c0bc69e5c6 100644
--- a/app/code/Magento/Marketplace/i18n/en_US.csv
+++ b/app/code/Magento/Marketplace/i18n/en_US.csv
@@ -7,3 +7,6 @@
 "Magento Marketplace","Magento Marketplace"
 "Extensions and Themes are an essential component of the Magento Ecosystem. Please visit the Magento Marketplace to see the latest innovations that developers have created to enhance your Magento Store.","Extensions and Themes are an essential component of the Magento Ecosystem. Please visit the Magento Marketplace to see the latest innovations that developers have created to enhance your Magento Store."
 "Visit Magento Marketplaces","Visit Magento Marketplaces"
+"Read More","Read More"
+"Partner Page","Partner Page"
+"No partners were found","No partners were found"
diff --git a/app/code/Magento/Marketplace/view/adminhtml/templates/partners.phtml b/app/code/Magento/Marketplace/view/adminhtml/templates/partners.phtml
index ae31e300551..7787b9d33a4 100644
--- a/app/code/Magento/Marketplace/view/adminhtml/templates/partners.phtml
+++ b/app/code/Magento/Marketplace/view/adminhtml/templates/partners.phtml
@@ -23,11 +23,11 @@ $partners = $block->getPartners();
                     <?php echo $block->escapeHtml($partner['description']);?>
                     <br />
                     <a href="<?php echo $block->escapeHtml($partner['url_page']);?>" target="_blank">
-                        Read More
+                        <?php /* @escapeNotVerified */ echo __('Read More'); ?>
                     </a>
                     <br />
                     <a href="<?php echo $block->escapeHtml($partner['url_partner_page']);?>" target="_blank">
-                        Partner Page
+                        <?php /* @escapeNotVerified */ echo __('Partner Page'); ?>
                     </a>
                 </p>
             </div>
@@ -35,6 +35,6 @@ $partners = $block->getPartners();
     </div>
 <?php else : ?>
     <p>
-        No partners were found
+        <?php /* @escapeNotVerified */ echo __('No partners were found'); ?>
     </p>
 <?php endif; ?>
-- 
GitLab


From 7633d01c77f3a871cc8b6853c5d29639e6862b9d Mon Sep 17 00:00:00 2001
From: Andriy Nasinnyk <anasinnyk@ebay.com>
Date: Wed, 21 Oct 2015 19:25:50 +0300
Subject: [PATCH 161/370] MAGETWO-43587: Sorting by price does not work in
 backend grid

---
 .../Model/ResourceModel/Product/Collection.php   | 16 ----------------
 1 file changed, 16 deletions(-)

diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Collection.php
index 0393bf02276..15421607a69 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Collection.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Collection.php
@@ -133,22 +133,6 @@ class Collection extends \Magento\Catalog\Model\ResourceModel\Collection\Abstrac
      */
     protected $_priceDataFieldFilters = [];
 
-    /**
-     * Map of price fields
-     *
-     * @var array
-     */
-    protected $_map = [
-        'fields' => [
-            'price' => 'price_index.price',
-            'final_price' => 'price_index.final_price',
-            'min_price' => 'price_index.min_price',
-            'max_price' => 'price_index.max_price',
-            'tier_price' => 'price_index.tier_price',
-            'special_price' => 'price_index.special_price',
-        ],
-    ];
-
     /**
      * Price expression sql
      *
-- 
GitLab


From 9f6981867fa68d2b46a279a9eaf3fbb7a6d70d74 Mon Sep 17 00:00:00 2001
From: "Gurzhyi, Andrii" <agurzhyi@ebay.com>
Date: Wed, 21 Oct 2015 19:40:29 +0300
Subject: [PATCH 162/370] MAGETWO-44403: Styles are not loaded on storefront
 after install

- Fixed name of lock file
---
 .../Framework/View/Asset/PreProcessor/AlternativeSource.php     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/internal/Magento/Framework/View/Asset/PreProcessor/AlternativeSource.php b/lib/internal/Magento/Framework/View/Asset/PreProcessor/AlternativeSource.php
index d727bd9fa40..95fe5722789 100644
--- a/lib/internal/Magento/Framework/View/Asset/PreProcessor/AlternativeSource.php
+++ b/lib/internal/Magento/Framework/View/Asset/PreProcessor/AlternativeSource.php
@@ -96,7 +96,7 @@ class AlternativeSource implements AlternativeSourceInterface
         }
 
         try {
-            $this->lockerProcess->lockProcess($this->lockName . sprintf('%x', crc32($path . $content)));
+            $this->lockerProcess->lockProcess($this->lockName);
 
             $module = $chain->getAsset()->getModule();
 
-- 
GitLab


From 226bd125a227c99c0984deb39e616250e07c7055 Mon Sep 17 00:00:00 2001
From: Robert He <rohe@ebay.com>
Date: Wed, 21 Oct 2015 11:44:00 -0500
Subject: [PATCH 163/370] MAGETWO-43908: Rename misspelled functions in Weee
 helper

 -- rename some Weee functions
---
 app/code/Magento/Weee/Helper/Data.php                         | 2 +-
 .../Magento/Weee/Observer/GetPriceConfigurationObserver.php   | 2 +-
 .../Magento/Weee/Observer/UpdateProductOptionsObserver.php    | 4 ++--
 .../Test/Unit/Observer/UpdateProductOptionsObserverTest.php   | 2 +-
 4 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/app/code/Magento/Weee/Helper/Data.php b/app/code/Magento/Weee/Helper/Data.php
index c3d18ef8aa1..138ae26986b 100644
--- a/app/code/Magento/Weee/Helper/Data.php
+++ b/app/code/Magento/Weee/Helper/Data.php
@@ -774,7 +774,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
      * @param  int|null $storeId
      * @return bool
      */
-    public function isDisplayExlDescIncl($storeId = null)
+    public function isDisplayExclDescIncl($storeId = null)
     {
         return $this->typeOfDisplay(
             WeeeDisplayConfig::DISPLAY_EXCL_DESCR_INCL,
diff --git a/app/code/Magento/Weee/Observer/GetPriceConfigurationObserver.php b/app/code/Magento/Weee/Observer/GetPriceConfigurationObserver.php
index 6331faaa5c5..264bd13de61 100644
--- a/app/code/Magento/Weee/Observer/GetPriceConfigurationObserver.php
+++ b/app/code/Magento/Weee/Observer/GetPriceConfigurationObserver.php
@@ -143,7 +143,7 @@ class GetPriceConfigurationObserver implements ObserverInterface
     {
         $calcPrice = 'finalPrice';
         if ($this->weeeData->isDisplayExcl($storeId) ||
-            $this->weeeData->isDisplayExlDescIncl($storeId) ||
+            $this->weeeData->isDisplayExclDescIncl($storeId) ||
             ($this->taxData->priceIncludesTax() && $this->taxData->displayPriceExcludingTax())
         ) {
             $calcPrice = 'basePrice';
diff --git a/app/code/Magento/Weee/Observer/UpdateProductOptionsObserver.php b/app/code/Magento/Weee/Observer/UpdateProductOptionsObserver.php
index a572037b504..6ed1f305b70 100644
--- a/app/code/Magento/Weee/Observer/UpdateProductOptionsObserver.php
+++ b/app/code/Magento/Weee/Observer/UpdateProductOptionsObserver.php
@@ -87,7 +87,7 @@ class UpdateProductOptionsObserver implements ObserverInterface
                     }
                 }
 
-                if ($this->weeeData->isDisplayExlDescIncl($product->getStoreId())) {
+                if ($this->weeeData->isDisplayExclDescIncl($product->getStoreId())) {
                     $options['optionTemplate'] .= sprintf(
                         ' <%% if (data.weeePrice) { %%>'
                         . '<%%- data.weeePrice.formatted %%>'
@@ -111,7 +111,7 @@ class UpdateProductOptionsObserver implements ObserverInterface
     {
         $calcPrice = 'finalPrice';
         if ($this->weeeData->isDisplayExcl($storeId) ||
-            $this->weeeData->isDisplayExlDescIncl($storeId) ||
+            $this->weeeData->isDisplayExclDescIncl($storeId) ||
             ($this->taxData->priceIncludesTax() && $this->taxData->displayPriceExcludingTax())
         ) {
             $calcPrice = 'basePrice';
diff --git a/app/code/Magento/Weee/Test/Unit/Observer/UpdateProductOptionsObserverTest.php b/app/code/Magento/Weee/Test/Unit/Observer/UpdateProductOptionsObserverTest.php
index 4afd4ab454b..6bdab4000ce 100644
--- a/app/code/Magento/Weee/Test/Unit/Observer/UpdateProductOptionsObserverTest.php
+++ b/app/code/Magento/Weee/Test/Unit/Observer/UpdateProductOptionsObserverTest.php
@@ -47,7 +47,7 @@ class UpdateProductOptionsObserverTest extends \PHPUnit_Framework_TestCase
             ->method('isEnabled')
             ->will($this->returnValue($weeeEnabled));
         $weeeHelper->expects($this->any())
-            ->method('isDisplayExlDescIncl')
+            ->method('isDisplayExclDescIncl')
             ->will($this->returnValue($weeeDisplayExclDescIncl));
         $weeeHelper->expects($this->any())
             ->method('getWeeeAttributesForBundle')
-- 
GitLab


From fe5dc7f5ddcd2030843ba1f666d2185653ebef1c Mon Sep 17 00:00:00 2001
From: "Yushkin, Dmytro" <dyushkin@ebay.com>
Date: Wed, 21 Oct 2015 19:53:01 +0300
Subject: [PATCH 164/370] MAGETWO-44413: Unable to place order using
 transparent payment method if it is the only one enabled

---
 .../Payment/view/frontend/templates/transparent/iframe.phtml    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Payment/view/frontend/templates/transparent/iframe.phtml b/app/code/Magento/Payment/view/frontend/templates/transparent/iframe.phtml
index b191981585a..fc9624bde10 100644
--- a/app/code/Magento/Payment/view/frontend/templates/transparent/iframe.phtml
+++ b/app/code/Magento/Payment/view/frontend/templates/transparent/iframe.phtml
@@ -33,7 +33,7 @@ $params = $block->getParams();
                     'Magento_Checkout/js/action/place-order'
                 ],
                 function(quote, placeOrderAction) {
-                    placeOrderAction(quote.paymentMethod(), true);
+                    placeOrderAction({"method": quote.paymentMethod().method}, true);
                 }
             );
         <?php endif; ?>
-- 
GitLab


From 462d4defd34a229ec7399db7a9af40f276e3a8fd Mon Sep 17 00:00:00 2001
From: Ivan Gavryshko <igavryshko@ebay.com>
Date: Wed, 21 Oct 2015 11:57:36 -0500
Subject: [PATCH 165/370] MAGETWO-43907 Custom admin URL breaks admin log in
 after installation

- improved error message
---
 setup/view/magento/setup/web-configuration.phtml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/setup/view/magento/setup/web-configuration.phtml b/setup/view/magento/setup/web-configuration.phtml
index 1522962968d..5101643a6de 100644
--- a/setup/view/magento/setup/web-configuration.phtml
+++ b/setup/view/magento/setup/web-configuration.phtml
@@ -20,7 +20,7 @@ $hints = [
     ),
     'admin' => sprintf(
         '<p>%s</p>',
-        'A unique URL helps keep store and customer info safer. Use only letters, numbers, and underscore characters.'
+        'A unique URL helps keep your store and customers safer. Use only letters, numbers, and underscore characters.'
     )
 ];
 ?>
-- 
GitLab


From a54e469224ce1e9a4fe48e083abadc5104dbb65c Mon Sep 17 00:00:00 2001
From: manasa <mpotluri@ebay.com>
Date: Wed, 21 Oct 2015 12:02:09 -0500
Subject: [PATCH 166/370] MAGETWO-43944: Fix Weee and Tax functional tests

---
 .../tests/app/Magento/Weee/Test/Constraint/AssertFptApplied.php | 2 --
 1 file changed, 2 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/Weee/Test/Constraint/AssertFptApplied.php b/dev/tests/functional/tests/app/Magento/Weee/Test/Constraint/AssertFptApplied.php
index 8975388bed1..2814c8597df 100644
--- a/dev/tests/functional/tests/app/Magento/Weee/Test/Constraint/AssertFptApplied.php
+++ b/dev/tests/functional/tests/app/Magento/Weee/Test/Constraint/AssertFptApplied.php
@@ -172,8 +172,6 @@ class AssertFptApplied extends AbstractConstraint
     protected function getCartPrice(CatalogProductSimple $product, array $actualPrices)
     {
         $this->checkoutCart->open();
-        $this->checkoutCart->getShippingBlock()->openEstimateShippingAndTax();
-        $this->checkoutCart->getShippingBlock()->waitForUpdatedShippingMethods();
         $productItem = $this->checkoutCart->getCartBlock()->getCartItem($product);
         $productWeeeItem = $this->checkoutCart->getWeeeCartBlock()->getCartItem($product);
         $actualPrices['cart_item_price'] = $productItem->getPrice();
-- 
GitLab


From e79686db0e20e85e2e8d0d649c50d559ddd12e28 Mon Sep 17 00:00:00 2001
From: Yu Tang <ytang1@ebay.com>
Date: Wed, 21 Oct 2015 12:51:49 -0500
Subject: [PATCH 167/370] MAGETWO-44075: Incorrect prices on product page for
 products with custom option

    - Updated unit tests
---
 .../RowBaseAndTotalBaseCalculatorTestCase.php | 94 ++++++++++---------
 .../Calculation/RowBaseCalculatorTest.php     |  9 +-
 .../Calculation/TotalBaseCalculatorTest.php   | 15 +++
 .../Calculation/UnitBaseCalculatorTest.php    | 32 ++++---
 4 files changed, 95 insertions(+), 55 deletions(-)

diff --git a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseAndTotalBaseCalculatorTestCase.php b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseAndTotalBaseCalculatorTestCase.php
index c4c271aef03..38ffd655d90 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseAndTotalBaseCalculatorTestCase.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseAndTotalBaseCalculatorTestCase.php
@@ -20,6 +20,9 @@ class RowBaseAndTotalBaseCalculatorTestCase extends \PHPUnit_Framework_TestCase
     const RATE = 10;
     const STORE_RATE = 11;
 
+    const UNIT_PRICE_INCL_TAX = 495.49549549545;
+    const UNIT_PRICE_INCL_TAX_ROUNDED = 495.5;
+
     const CODE = 'CODE';
     const TYPE = 'TYPE';
 
@@ -71,7 +74,7 @@ class RowBaseAndTotalBaseCalculatorTestCase extends \PHPUnit_Framework_TestCase
     {
         $this->initMockItem($isTaxIncluded);
         $this->initMockConfig();
-        $this->initMockCalculationTool();
+        $this->initMockCalculationTool($isTaxIncluded);
         $this->initMockAppliedTaxDataObjectFactory();
     }
 
@@ -93,7 +96,7 @@ class RowBaseAndTotalBaseCalculatorTestCase extends \PHPUnit_Framework_TestCase
         $this->mockCalculationTool = $this->getMockBuilder('\Magento\Tax\Model\Calculation')
             ->disableOriginalConstructor()
             ->setMethods(
-                ['__wakeup', 'round', 'getRate', 'getStoreRate', 'getRateRequest', 'getAppliedRates', 'calcTaxAmount']
+                ['__wakeup', 'round', 'getRate', 'getStoreRate', 'getRateRequest', 'getAppliedRates']
             )
             ->getMock();
         $this->mockConfig = $this->getMockBuilder('\Magento\Tax\Model\Config')
@@ -129,11 +132,12 @@ class RowBaseAndTotalBaseCalculatorTestCase extends \PHPUnit_Framework_TestCase
 
     /**
      * @param $calculator RowBaseCalculator|TotalBaseCalculator
+     * @param boolean $round
      * @return \Magento\Tax\Api\Data\TaxDetailsItemInterface
      */
-    public function calculate($calculator)
+    public function calculate($calculator, $round = true)
     {
-        return $calculator->calculate($this->mockItem, 1);
+        return $calculator->calculate($this->mockItem, 1, $round);
     }
 
     /**
@@ -147,7 +151,7 @@ class RowBaseAndTotalBaseCalculatorTestCase extends \PHPUnit_Framework_TestCase
             $this->mockItem,
             [
                 [
-                    self::ONCE => true,
+                    self::ONCE => false,
                     self::MOCK_METHOD_NAME => 'getDiscountAmount',
                     self::MOCK_VALUE => 1,
                 ],
@@ -157,17 +161,17 @@ class RowBaseAndTotalBaseCalculatorTestCase extends \PHPUnit_Framework_TestCase
                     self::MOCK_VALUE => self::CODE
                 ],
                 [
-                    self::ONCE => true,
+                    self::ONCE => false,
                     self::MOCK_METHOD_NAME => 'getType',
                     self::MOCK_VALUE => self::TYPE
                 ],
                 [
-                    self::ONCE => true,
+                    self::ONCE => false,
                     self::MOCK_METHOD_NAME => 'getUnitPrice',
                     self::MOCK_VALUE => self::UNIT_PRICE
                 ],
                 [
-                    self::ONCE => true,
+                    self::ONCE => false,
                     self::MOCK_METHOD_NAME => 'getIsTaxIncluded',
                     self::MOCK_VALUE => $isTaxIncluded
                 ]
@@ -185,7 +189,7 @@ class RowBaseAndTotalBaseCalculatorTestCase extends \PHPUnit_Framework_TestCase
             $this->mockConfig,
             [
                 [
-                    self::ONCE => true,
+                    self::ONCE => false,
                     self::MOCK_METHOD_NAME => 'applyTaxAfterDiscount',
                     self::MOCK_VALUE => true,
                 ]
@@ -196,47 +200,51 @@ class RowBaseAndTotalBaseCalculatorTestCase extends \PHPUnit_Framework_TestCase
     /**
      * init mock calculation model
      *
+     * @param boolean $isTaxIncluded
      */
 
-    protected function initMockCalculationTool()
+    protected function initMockCalculationTool($isTaxIncluded)
     {
-        $this->mockReturnValues(
-            $this->mockCalculationTool,
+        $mockValues = [
             [
-                [
-                    self::ONCE => false,
-                    self::MOCK_METHOD_NAME => 'calcTaxAmount',
-                    self::MOCK_VALUE => 1.5,
-                ],
-                [
-                    self::ONCE => true,
-                    self::MOCK_METHOD_NAME => 'getRate',
-                    self::MOCK_VALUE => self::RATE
-                ],
-                [
-                    self::ONCE => true,
-                    self::MOCK_METHOD_NAME => 'getAppliedRates',
-                    self::MOCK_VALUE => [
-                        [
-                            'id' => 0,
-                            'percent' => 1.4,
-                            'rates' => [
-                                [
-                                    'code' => 'sku_1',
-                                    'title' => 'title1',
-                                    'percent' => 1.1,
-                                ],
+                self::ONCE => false,
+                self::MOCK_METHOD_NAME => 'getRate',
+                self::MOCK_VALUE => self::RATE
+            ],
+            [
+                self::ONCE => false,
+                self::MOCK_METHOD_NAME => 'getAppliedRates',
+                self::MOCK_VALUE => [
+                    [
+                        'id' => 0,
+                        'percent' => 1.4,
+                        'rates' => [
+                            [
+                                'code' => 'sku_1',
+                                'title' => 'title1',
+                                'percent' => 1.1,
                             ],
                         ],
-                    ]
-                ],
-                [
-                    self::ONCE => false,
-                    self::MOCK_METHOD_NAME => 'round',
-                    self::MOCK_VALUE => 1.3
+                    ],
                 ]
-            ]
+            ],
+        ];
+
+        if ($isTaxIncluded) {
+            $mockValues[] = [
+                self::ONCE => false,
+                self::MOCK_METHOD_NAME => 'getStoreRate',
+                self::MOCK_VALUE => self::STORE_RATE
+            ];
+        }
+
+        $this->mockReturnValues(
+            $this->mockCalculationTool,
+            $mockValues
         );
+        $this->mockCalculationTool->expects($this->atLeastOnce())
+            ->method('round')
+            ->willReturnCallback(function ($price) {return round($price, 2);});
     }
 
     /**
@@ -249,7 +257,7 @@ class RowBaseAndTotalBaseCalculatorTestCase extends \PHPUnit_Framework_TestCase
             $this->appliedTaxDataObjectFactory,
             [
                 [
-                    self::ONCE => true,
+                    self::ONCE => false,
                     self::MOCK_METHOD_NAME => 'create',
                     self::MOCK_VALUE => $this->mockAppliedTax,
                 ]
diff --git a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseCalculatorTest.php b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseCalculatorTest.php
index 3de3c4b10ea..ebf9239463a 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseCalculatorTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseCalculatorTest.php
@@ -26,8 +26,15 @@ class RowBaseCalculatorTest extends RowBaseAndTotalBaseCalculatorTestCase
 
         $this->assertSame(
             $this->taxDetailsItem,
-            $this->calculate($this->rowBaseCalculator)
+            $this->calculate($this->rowBaseCalculator, true)
+        );
+        $this->assertEquals(self::UNIT_PRICE_INCL_TAX_ROUNDED, $this->taxDetailsItem->getPriceInclTax());
+
+        $this->assertSame(
+            $this->taxDetailsItem,
+            $this->calculate($this->rowBaseCalculator, false)
         );
+        $this->assertEquals(self::UNIT_PRICE_INCL_TAX, $this->taxDetailsItem->getPriceInclTax());
     }
 
     public function testCalculateWithTaxNotInPrice()
diff --git a/app/code/Magento/Tax/Test/Unit/Model/Calculation/TotalBaseCalculatorTest.php b/app/code/Magento/Tax/Test/Unit/Model/Calculation/TotalBaseCalculatorTest.php
index 880b9d57c81..d5c0c0ef85c 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/Calculation/TotalBaseCalculatorTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/Calculation/TotalBaseCalculatorTest.php
@@ -22,6 +22,21 @@ class TotalBaseCalculatorTest extends RowBaseAndTotalBaseCalculatorTestCase
             $this->taxDetailsItem,
             $this->calculate($this->totalBaseCalculator)
         );
+        $this->assertEquals(self::UNIT_PRICE_INCL_TAX_ROUNDED, $this->taxDetailsItem->getPriceInclTax());
+    }
+
+    public function testCalculateWithTaxInPriceNoRounding()
+    {
+        $this->initTotalBaseCalculator();
+        $this->totalBaseCalculator->expects($this->exactly(3))
+            ->method('deltaRound')->will($this->returnValue(0));
+        $this->initMocks(true);
+
+        $this->assertSame(
+            $this->taxDetailsItem,
+            $this->calculate($this->totalBaseCalculator, false)
+        );
+        $this->assertEquals(self::UNIT_PRICE_INCL_TAX, $this->taxDetailsItem->getPriceInclTax());
     }
 
     public function testCalculateWithTaxNotInPrice()
diff --git a/app/code/Magento/Tax/Test/Unit/Model/Calculation/UnitBaseCalculatorTest.php b/app/code/Magento/Tax/Test/Unit/Model/Calculation/UnitBaseCalculatorTest.php
index 9f69f1a2035..f72a27b1664 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/Calculation/UnitBaseCalculatorTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/Calculation/UnitBaseCalculatorTest.php
@@ -18,7 +18,10 @@ class UnitBaseCalculatorTest extends \PHPUnit_Framework_TestCase
 
     const CODE = 'CODE';
     const TYPE = 'TYPE';
-    const ROW_TAX = 44.954136954136;
+    const ROW_TAX = 44.958682408681;
+    const ROW_TAX_ROUNDED = 44.95;
+    const PRICE_INCL_TAX = 495.4954954955;
+    const PRICE_INCL_TAX_ROUNDED = 495.50;
 
     /** @var \PHPUnit_Framework_MockObject_MockObject */
     protected $taxDetailsItemDataObjectFactoryMock;
@@ -68,7 +71,7 @@ class UnitBaseCalculatorTest extends \PHPUnit_Framework_TestCase
         $this->mockCalculationTool->expects($this->any())
             ->method('round')
             ->withAnyParameters()
-            ->will($this->returnArgument(0));
+            ->willReturnCallback(function ($price) {return round($price, 2);});
         $this->mockConfig = $this->getMockBuilder('\Magento\Tax\Model\Config')
             ->disableOriginalConstructor()
             ->getMock();
@@ -113,26 +116,26 @@ class UnitBaseCalculatorTest extends \PHPUnit_Framework_TestCase
     public function testCalculateWithTaxInPrice()
     {
         $mockItem = $this->getMockItem();
-        $mockItem->expects($this->once())
+        $mockItem->expects($this->atLeastOnce())
             ->method('getIsTaxIncluded')
             ->will($this->returnValue(true));
 
-        $this->mockConfig->expects($this->once())
+        $this->mockConfig->expects($this->atLeastOnce())
             ->method('crossBorderTradeEnabled')
             ->will($this->returnValue(false));
-        $this->mockConfig->expects($this->once())
+        $this->mockConfig->expects($this->atLeastOnce())
             ->method('applyTaxAfterDiscount')
             ->will($this->returnValue(true));
 
-        $this->mockCalculationTool->expects($this->once())
+        $this->mockCalculationTool->expects($this->atLeastOnce())
             ->method('getRate')
             ->with($this->addressRateRequest)
             ->will($this->returnValue(self::RATE));
-        $this->mockCalculationTool->expects($this->once())
+        $this->mockCalculationTool->expects($this->atLeastOnce())
             ->method('getStoreRate')
             ->with($this->addressRateRequest, self::STORE_ID)
             ->will($this->returnValue(self::STORE_RATE));
-        $this->mockCalculationTool->expects($this->once())
+        $this->mockCalculationTool->expects($this->atLeastOnce())
             ->method('getAppliedRates')
             ->withAnyParameters()
             ->will($this->returnValue([]));
@@ -140,7 +143,14 @@ class UnitBaseCalculatorTest extends \PHPUnit_Framework_TestCase
         $this->assertSame($this->taxDetailsItem, $this->model->calculate($mockItem, self::QUANTITY));
         $this->assertSame(self::CODE, $this->taxDetailsItem->getCode());
         $this->assertSame(self::TYPE, $this->taxDetailsItem->getType());
+        $this->assertSame(self::ROW_TAX_ROUNDED, $this->taxDetailsItem->getRowTax());
+        $this->assertEquals(self::PRICE_INCL_TAX_ROUNDED, $this->taxDetailsItem->getPriceInclTax());
+
+        $this->assertSame($this->taxDetailsItem, $this->model->calculate($mockItem, self::QUANTITY, false));
+        $this->assertSame(self::CODE, $this->taxDetailsItem->getCode());
+        $this->assertSame(self::TYPE, $this->taxDetailsItem->getType());
         $this->assertSame(self::ROW_TAX, $this->taxDetailsItem->getRowTax());
+        $this->assertEquals(self::PRICE_INCL_TAX, $this->taxDetailsItem->getPriceInclTax());
     }
 
     public function testCalculateWithTaxNotInPrice()
@@ -178,16 +188,16 @@ class UnitBaseCalculatorTest extends \PHPUnit_Framework_TestCase
         $mockItem = $this->getMockBuilder('Magento\Tax\Api\Data\QuoteDetailsItemInterface')
             ->disableOriginalConstructor()
             ->getMock();
-        $mockItem->expects($this->once())
+        $mockItem->expects($this->atLeastOnce())
             ->method('getDiscountAmount')
             ->will($this->returnValue(1));
         $mockItem->expects($this->atLeastOnce())
             ->method('getCode')
             ->will($this->returnValue(self::CODE));
-        $mockItem->expects($this->once())
+        $mockItem->expects($this->atLeastOnce())
             ->method('getType')
             ->will($this->returnValue(self::TYPE));
-        $mockItem->expects($this->once())
+        $mockItem->expects($this->atLeastOnce())
             ->method('getUnitPrice')
             ->will($this->returnValue(self::UNIT_PRICE));
 
-- 
GitLab


From 4d435bce49488898e312ff150cef7183a3d707a9 Mon Sep 17 00:00:00 2001
From: Yu Tang <ytang1@ebay.com>
Date: Wed, 21 Oct 2015 13:42:29 -0500
Subject: [PATCH 168/370] MAGETWO-44075: Incorrect prices on product page for
 products with custom option

    - Fix static test failures
---
 .../Calculation/RowBaseAndTotalBaseCalculatorTestCase.php   | 6 +++++-
 .../Test/Unit/Model/Calculation/UnitBaseCalculatorTest.php  | 5 ++++-
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseAndTotalBaseCalculatorTestCase.php b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseAndTotalBaseCalculatorTestCase.php
index 38ffd655d90..da0d9154d19 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseAndTotalBaseCalculatorTestCase.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RowBaseAndTotalBaseCalculatorTestCase.php
@@ -244,7 +244,11 @@ class RowBaseAndTotalBaseCalculatorTestCase extends \PHPUnit_Framework_TestCase
         );
         $this->mockCalculationTool->expects($this->atLeastOnce())
             ->method('round')
-            ->willReturnCallback(function ($price) {return round($price, 2);});
+            ->willReturnCallback(
+                function ($price) {
+                    return round($price, 2);
+                }
+            );
     }
 
     /**
diff --git a/app/code/Magento/Tax/Test/Unit/Model/Calculation/UnitBaseCalculatorTest.php b/app/code/Magento/Tax/Test/Unit/Model/Calculation/UnitBaseCalculatorTest.php
index f72a27b1664..2eaf866ca2c 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/Calculation/UnitBaseCalculatorTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/Calculation/UnitBaseCalculatorTest.php
@@ -71,7 +71,10 @@ class UnitBaseCalculatorTest extends \PHPUnit_Framework_TestCase
         $this->mockCalculationTool->expects($this->any())
             ->method('round')
             ->withAnyParameters()
-            ->willReturnCallback(function ($price) {return round($price, 2);});
+            ->willReturnCallback(function ($price) {
+                    return round($price, 2);
+                }
+            );
         $this->mockConfig = $this->getMockBuilder('\Magento\Tax\Model\Config')
             ->disableOriginalConstructor()
             ->getMock();
-- 
GitLab


From 98f2c4391071560d7f5cda250912722e3f04d7cf Mon Sep 17 00:00:00 2001
From: Yu Tang <ytang1@ebay.com>
Date: Wed, 21 Oct 2015 14:27:13 -0500
Subject: [PATCH 169/370] MAGETWO-44075: Incorrect prices on product page for
 products with custom option

    - Fixed static failures
---
 .../Tax/Test/Unit/Model/Calculation/UnitBaseCalculatorTest.php | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Tax/Test/Unit/Model/Calculation/UnitBaseCalculatorTest.php b/app/code/Magento/Tax/Test/Unit/Model/Calculation/UnitBaseCalculatorTest.php
index 2eaf866ca2c..bed813c1f18 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/Calculation/UnitBaseCalculatorTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/Calculation/UnitBaseCalculatorTest.php
@@ -71,7 +71,8 @@ class UnitBaseCalculatorTest extends \PHPUnit_Framework_TestCase
         $this->mockCalculationTool->expects($this->any())
             ->method('round')
             ->withAnyParameters()
-            ->willReturnCallback(function ($price) {
+            ->willReturnCallback(
+                function ($price) {
                     return round($price, 2);
                 }
             );
-- 
GitLab


From 47df11afdd7200cd4fdeffe391598c41b95296aa Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Wed, 21 Oct 2015 15:00:06 -0500
Subject: [PATCH 170/370] Revert "MAGETWO-44154: Random PAT build failures due
 to 400/503 HTTP response errors being thrown"

This reverts commit d6676d0b9fc06e7d9db0ae14226cde34a58d6318.
---
 setup/pub/magento/setup/readiness-check.js | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/setup/pub/magento/setup/readiness-check.js b/setup/pub/magento/setup/readiness-check.js
index 3afd8fdde73..d150e2f5cb1 100644
--- a/setup/pub/magento/setup/readiness-check.js
+++ b/setup/pub/magento/setup/readiness-check.js
@@ -322,8 +322,10 @@ angular.module('readiness-check', [])
             angular.forEach($scope.items, function(item) {
                 item.show();
             });
+            var $delay = 0;
             angular.forEach($scope.items, function(item) {
-                $scope.query(item);
+                $timeout(function() { $scope.query(item); }, $delay * 1000);
+                $delay++;
             });
         };
 
-- 
GitLab


From 8d908f0cb2cc54013e47417c6ab6334371a0d160 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Wed, 21 Oct 2015 15:08:41 -0500
Subject: [PATCH 171/370] MAGETWO-44154: Random PAT build failures due to
 400/503 HTTP response errors being thrown  - rename getResultFileName  -
 re-introduce delay in sending requests in Installation test

---
 .../testsuite/Magento/Framework/Code/GeneratorTest.php      | 6 +++---
 .../Test/Unit/Code/Generator/EntityChildTestAbstract.php    | 2 +-
 .../Api/Test/Unit/Code/Generator/GenerateMapperTest.php     | 2 +-
 .../Test/Unit/Code/Generator/GenerateSearchResultsTest.php  | 2 +-
 lib/internal/Magento/Framework/Code/Generator.php           | 2 +-
 .../Magento/Framework/Code/Generator/EntityAbstract.php     | 2 +-
 lib/internal/Magento/Framework/Code/Generator/Io.php        | 4 ++--
 .../Code/Test/Unit/Generator/EntityAbstractTest.php         | 2 +-
 .../Magento/Framework/Code/Test/Unit/Generator/IoTest.php   | 2 +-
 .../Magento/Framework/Code/Test/Unit/GeneratorTest.php      | 2 +-
 .../Test/Unit/Code/Generator/InterceptorTest.php            | 2 +-
 .../Test/Unit/Code/Generator/ConverterTest.php              | 2 +-
 .../ObjectManager/Test/Unit/Code/Generator/FactoryTest.php  | 2 +-
 .../Test/Unit/Code/Generator/GenerateRepositoryTest.php     | 2 +-
 .../ObjectManager/Test/Unit/Code/Generator/ProxyTest.php    | 2 +-
 .../Unit/Autoloader/ExtensionGeneratorAutoloader.php        | 2 +-
 16 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/dev/tests/integration/testsuite/Magento/Framework/Code/GeneratorTest.php b/dev/tests/integration/testsuite/Magento/Framework/Code/GeneratorTest.php
index e31201caf94..2b82c10311b 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Code/GeneratorTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Code/GeneratorTest.php
@@ -95,7 +95,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
         // This test is only valid if the factory created the object if Autoloader did not pick it up automatically
         if (\Magento\Framework\Code\Generator::GENERATION_SUCCESS == $generatorResult) {
             $content = $this->_clearDocBlock(
-                file_get_contents($this->_ioObject->getResultFileName(self::CLASS_NAME_WITH_NAMESPACE . 'Factory'))
+                file_get_contents($this->_ioObject->makeGeneratedClassFileName(self::CLASS_NAME_WITH_NAMESPACE . 'Factory'))
             );
             $expectedContent = $this->_clearDocBlock(
                 file_get_contents(__DIR__ . '/_expected/SourceClassWithNamespaceFactory.php.sample')
@@ -120,7 +120,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
         // This test is only valid if the factory created the object if Autoloader did not pick it up automatically
         if (\Magento\Framework\Code\Generator::GENERATION_SUCCESS == $generatorResult) {
             $content = $this->_clearDocBlock(
-                file_get_contents($this->_ioObject->getResultFileName(self::CLASS_NAME_WITH_NAMESPACE . '\Proxy'))
+                file_get_contents($this->_ioObject->makeGeneratedClassFileName(self::CLASS_NAME_WITH_NAMESPACE . '\Proxy'))
             );
             $expectedContent = $this->_clearDocBlock(
                 file_get_contents(__DIR__ . '/_expected/SourceClassWithNamespaceProxy.php.sample')
@@ -142,7 +142,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
         if (\Magento\Framework\Code\Generator::GENERATION_SUCCESS == $generatorResult) {
             $content = $this->_clearDocBlock(
                 file_get_contents(
-                    $this->_ioObject->getResultFileName(self::CLASS_NAME_WITH_NAMESPACE . '\Interceptor')
+                    $this->_ioObject->makeGeneratedClassFileName(self::CLASS_NAME_WITH_NAMESPACE . '\Interceptor')
                 )
             );
             $expectedContent = $this->_clearDocBlock(
diff --git a/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/EntityChildTestAbstract.php b/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/EntityChildTestAbstract.php
index acbc463380d..8f53d379a51 100644
--- a/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/EntityChildTestAbstract.php
+++ b/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/EntityChildTestAbstract.php
@@ -109,7 +109,7 @@ abstract class EntityChildTestAbstract extends \PHPUnit_Framework_TestCase
 
         //Mocking generation
         $this->ioObjectMock->expects($this->any())
-            ->method('getResultFileName')
+            ->method('makeGeneratedClassFileName')
             ->with($this->getResultClassName())
             ->willReturn($resultFileName);
         $this->ioObjectMock->expects($this->once())
diff --git a/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/GenerateMapperTest.php b/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/GenerateMapperTest.php
index a78b00f1cee..fec3d96f8b5 100644
--- a/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/GenerateMapperTest.php
+++ b/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/GenerateMapperTest.php
@@ -51,7 +51,7 @@ class GenerateMapperTest extends \PHPUnit_Framework_TestCase
         );
         $sampleMapperCode = file_get_contents(__DIR__ . '/_files/SampleMapper.txt');
         $this->ioObjectMock->expects($this->once())
-            ->method('getResultFileName')
+            ->method('makeGeneratedClassFileName')
             ->with('\Magento\Framework\Api\Code\Generator\SampleMapper')
             ->will($this->returnValue('SampleMapper.php'));
         $this->ioObjectMock->expects($this->once())
diff --git a/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/GenerateSearchResultsTest.php b/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/GenerateSearchResultsTest.php
index 7ee5ff3acff..5d54d23f55f 100644
--- a/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/GenerateSearchResultsTest.php
+++ b/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/GenerateSearchResultsTest.php
@@ -52,7 +52,7 @@ class GenerateSearchResultsTest extends \PHPUnit_Framework_TestCase
         );
         $sampleSearchResultBuilderCode = file_get_contents(__DIR__ . '/_files/SampleSearchResults.txt');
         $this->ioObjectMock->expects($this->once())
-            ->method('getResultFileName')
+            ->method('makeGeneratedClassFileName')
             ->with('\Magento\Framework\Api\Code\Generator\SampleSearchResults')
             ->will($this->returnValue('SampleSearchResults.php'));
         $this->ioObjectMock->expects($this->once())
diff --git a/lib/internal/Magento/Framework/Code/Generator.php b/lib/internal/Magento/Framework/Code/Generator.php
index 824f4f445ae..39c8ae07219 100644
--- a/lib/internal/Magento/Framework/Code/Generator.php
+++ b/lib/internal/Magento/Framework/Code/Generator.php
@@ -191,7 +191,7 @@ class Generator
         if (!$resultEntityType || !$sourceClassName) {
             return self::GENERATION_ERROR;
         } else if ($this->definedClasses->isClassLoadableFromDisc($resultClass)) {
-            $generatedFileName = $this->_ioObject->getResultFileName($resultClass);
+            $generatedFileName = $this->_ioObject->makeGeneratedClassFileName($resultClass);
             /**
              * Must handle two edge cases: a competing process has generated the class and written it to disc already,
              * or the class exists in committed code, despite matching pattern to be generated.
diff --git a/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php b/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php
index d99838bf4d0..d3ef4a0b54d 100644
--- a/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php
+++ b/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php
@@ -97,7 +97,7 @@ abstract class EntityAbstract
             if ($this->_validateData()) {
                 $sourceCode = $this->_generateCode();
                 if ($sourceCode) {
-                    $fileName = $this->_ioObject->getResultFileName($this->_getResultClassName());
+                    $fileName = $this->_ioObject->makeGeneratedClassFileName($this->_getResultClassName());
                     $this->_ioObject->writeResultFile($fileName, $sourceCode);
                     return $fileName;
                 } else {
diff --git a/lib/internal/Magento/Framework/Code/Generator/Io.php b/lib/internal/Magento/Framework/Code/Generator/Io.php
index 04457e916b6..d50b7fc8ae2 100644
--- a/lib/internal/Magento/Framework/Code/Generator/Io.php
+++ b/lib/internal/Magento/Framework/Code/Generator/Io.php
@@ -61,7 +61,7 @@ class Io
      */
     public function getResultFileDirectory($className)
     {
-        $fileName = $this->getResultFileName($className);
+        $fileName = $this->makeGeneratedClassFileName($className);
         $pathParts = explode('/', $fileName);
         unset($pathParts[count($pathParts) - 1]);
 
@@ -72,7 +72,7 @@ class Io
      * @param string $className
      * @return string
      */
-    public function getResultFileName($className)
+    public function makeGeneratedClassFileName($className)
     {
         return $this->_generationDirectory . ltrim(str_replace(['\\', '_'], '/', $className), '/') . '.php';
     }
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php
index 67b43a173a1..677685ce016 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php
@@ -286,7 +286,7 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase
         if ($willWriteCode) {
             $ioObject->expects($this->once())->method('writeResultFile')->with(self::RESULT_FILE, self::RESULT_CODE);
         }
-        $ioObject->expects($this->any())->method('getResultFileName')->willReturn(self::RESULT_FILE);
+        $ioObject->expects($this->any())->method('makeGeneratedClassFileName')->willReturn(self::RESULT_FILE);
 
         return [
             'source_class' => $mocks['source_class'],
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php
index bae88f1e729..e70255333e5 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php
@@ -72,7 +72,7 @@ class IoTest extends \PHPUnit_Framework_TestCase
     public function testGetResultFileName()
     {
         $expectedFileName = self::GENERATION_DIRECTORY . '/class/name.php';
-        $this->assertEquals($expectedFileName, $this->_object->getResultFileName(self::CLASS_NAME));
+        $this->assertEquals($expectedFileName, $this->_object->makeGeneratedClassFileName(self::CLASS_NAME));
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
index c53a0973b00..54d46d6aee5 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
@@ -120,7 +120,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
             ->willReturn(true);
 
         $resultClassFileName = '/Magento/Path/To/Class.php';
-        $this->ioObjectMock->expects($this->once())->method('getResultFileName')->willReturn($resultClassFileName);
+        $this->ioObjectMock->expects($this->once())->method('makeGeneratedClassFileName')->willReturn($resultClassFileName);
         $this->ioObjectMock->expects($this->once())->method('fileExists')->willReturn($fileExists);
         $includeFileInvokeCount = $fileExists ? 1 : 0;
         $this->ioObjectMock->expects($this->exactly($includeFileInvokeCount))->method('includeFile');
diff --git a/lib/internal/Magento/Framework/Interception/Test/Unit/Code/Generator/InterceptorTest.php b/lib/internal/Magento/Framework/Interception/Test/Unit/Code/Generator/InterceptorTest.php
index 78f5759d9fa..7902303e0dc 100644
--- a/lib/internal/Magento/Framework/Interception/Test/Unit/Code/Generator/InterceptorTest.php
+++ b/lib/internal/Magento/Framework/Interception/Test/Unit/Code/Generator/InterceptorTest.php
@@ -56,7 +56,7 @@ class InterceptorTest extends \PHPUnit_Framework_TestCase
         $this->classGeneratorMock->expects($this->once())->method('generate')
             ->will($this->returnValue('source code example'));
         $model->expects($this->once())->method('_validateData')->will($this->returnValue(true));
-        $this->ioObjectMock->expects($this->any())->method('getResultFileName')->with('Exception_Interceptor');
+        $this->ioObjectMock->expects($this->any())->method('makeGeneratedClassFileName')->with('Exception_Interceptor');
         $this->assertEquals('', $model->generate());
     }
 }
diff --git a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ConverterTest.php b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ConverterTest.php
index 10bafa24672..3a160365280 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ConverterTest.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ConverterTest.php
@@ -105,7 +105,7 @@ class ConverterTest extends \PHPUnit_Framework_TestCase
 
         //Mocking generation
         $this->ioObjectMock->expects($this->any())
-            ->method('getResultFileName')
+            ->method('makeGeneratedClassFileName')
             ->with(self::RESULT_CLASS_NAME)
             ->will($this->returnValue($resultFileName));
         $this->ioObjectMock->expects($this->once())
diff --git a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/FactoryTest.php b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/FactoryTest.php
index 80d63e0133d..bc3c490c985 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/FactoryTest.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/FactoryTest.php
@@ -34,7 +34,7 @@ class FactoryTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        $this->ioObjectMock->expects($this->once())->method('getResultFileName')
+        $this->ioObjectMock->expects($this->once())->method('makeGeneratedClassFileName')
             ->with('\Magento\Framework\ObjectManager\Code\Generator\SampleFactory')
             ->will($this->returnValue('sample_file.php'));
         $factoryCode = file_get_contents(__DIR__ . '/_files/SampleFactory.txt');
diff --git a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/GenerateRepositoryTest.php b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/GenerateRepositoryTest.php
index a2744ca17be..02dce376ffe 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/GenerateRepositoryTest.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/GenerateRepositoryTest.php
@@ -54,7 +54,7 @@ class GenerateRepositoryTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->ioObjectMock->expects($this->once())
-            ->method('getResultFileName')
+            ->method('makeGeneratedClassFileName')
             ->with('\Magento\Framework\ObjectManager\Code\Generator\SampleRepository')
             ->willReturn('SampleRepository.php');
 
diff --git a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ProxyTest.php b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ProxyTest.php
index 4fb66556991..3d4bf69304c 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ProxyTest.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ProxyTest.php
@@ -34,7 +34,7 @@ class ProxyTest extends \PHPUnit_Framework_TestCase
         );
         $sampleProxyCode = file_get_contents(__DIR__ . '/_files/SampleProxy.txt');
 
-        $this->ioObjectMock->expects($this->once())->method('getResultFileName')
+        $this->ioObjectMock->expects($this->once())->method('makeGeneratedClassFileName')
             ->with('\Magento\Framework\ObjectManager\Code\Generator\Sample_Proxy')
             ->will($this->returnValue('sample_file.php'));
         $this->ioObjectMock->expects($this->once())->method('writeResultFile')
diff --git a/lib/internal/Magento/Framework/TestFramework/Unit/Autoloader/ExtensionGeneratorAutoloader.php b/lib/internal/Magento/Framework/TestFramework/Unit/Autoloader/ExtensionGeneratorAutoloader.php
index 9f14464d01c..900d24897ae 100644
--- a/lib/internal/Magento/Framework/TestFramework/Unit/Autoloader/ExtensionGeneratorAutoloader.php
+++ b/lib/internal/Magento/Framework/TestFramework/Unit/Autoloader/ExtensionGeneratorAutoloader.php
@@ -41,7 +41,7 @@ class ExtensionGeneratorAutoloader
                 return false;
             }
 
-            $resultFileName = $this->generatorIo->getResultFileName($className);
+            $resultFileName = $this->generatorIo->makeGeneratedClassFileName($className);
 
             if (!$this->generatorIo->fileExists($resultFileName)) {
                 $this->generatorIo->makeResultFileDirectory($className);
-- 
GitLab


From 462893481c481f0138f23f0c250646ced07dd747 Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Wed, 21 Oct 2015 16:30:58 -0500
Subject: [PATCH 172/370] MAGETWO-43857: [github] cache types don't properly
 invalidate all the time #1844

---
 .../Theme/Model/Design/Backend/Theme.php      | 14 ++----
 .../Unit/Model/Design/Backend/ThemeTest.php   | 47 +++++++++----------
 app/code/Magento/Theme/etc/config.xml         |  5 --
 3 files changed, 25 insertions(+), 41 deletions(-)

diff --git a/app/code/Magento/Theme/Model/Design/Backend/Theme.php b/app/code/Magento/Theme/Model/Design/Backend/Theme.php
index d77f694b4b4..4b5f23bcf34 100644
--- a/app/code/Magento/Theme/Model/Design/Backend/Theme.php
+++ b/app/code/Magento/Theme/Model/Design/Backend/Theme.php
@@ -66,22 +66,16 @@ class Theme extends Value
     /**
      * {@inheritdoc}
      *
-     * {@inheritdoc}. In addition, it sets status 'invalidate' for blocks and other output caches
+     * {@inheritdoc}. In addition, it cleans all
      *
      * @return $this
      */
     public function afterSave()
     {
-        $types = array_keys(
-            $this->_config->getValue(
-                self::XML_PATH_INVALID_CACHES,
-                \Magento\Store\Model\ScopeInterface::SCOPE_STORE
-            )
-        );
+        parent::afterSave();
         if ($this->isValueChanged()) {
-            $this->cacheTypeList->invalidate($types);
+            $this->_cacheManager->clean();
         }
-
-        return parent::afterSave();
+        return $this;
     }
 }
diff --git a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php
index e83a4e4ca30..75530869fa5 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php
@@ -18,9 +18,9 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Framework\Model\Context|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\Context
      */
-    protected $contextMock;
+    protected $context;
 
     /**
      * @var \Magento\Framework\View\DesignInterface|\PHPUnit_Framework_MockObject_MockObject
@@ -32,6 +32,11 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
      */
     protected $cacheTypeListMock;
 
+    /**
+     * @var \Magento\Framework\App\CacheInterface | \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $cacheManagerMock;
+
     /**
      * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
      */
@@ -39,23 +44,27 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->contextMock = $this->getMockBuilder('Magento\Framework\Model\Context')
+        $objectManager = new ObjectManager($this);
+        $this->cacheManagerMock = $this->getMockBuilder('Magento\Framework\App\CacheInterface')
             ->disableOriginalConstructor()
             ->getMock();
+        $this->context = $objectManager->getObject(
+            'Magento\Framework\Model\Context',
+            ['cacheManager' => $this->cacheManagerMock,]
+        );
+
         $this->designMock = $this->getMockBuilder('Magento\Framework\View\DesignInterface')->getMock();
         $this->cacheTypeListMock = $this->getMockBuilder('Magento\Framework\App\Cache\TypeListInterface')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->contextMock->expects($this->once())
-            ->method('getEventDispatcher')
-            ->willReturn($this->getMockBuilder('Magento\Framework\Event\ManagerInterface')->getMock());
         $this->configMock = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface')->getMock();
 
-        $this->model = (new ObjectManager($this))->getObject(
+
+        $this->model = $objectManager->getObject(
             'Magento\Theme\Model\Design\Backend\Theme',
             [
                 'design' => $this->designMock,
-                'context' => $this->contextMock,
+                'context' => $this->context,
                 'cacheTypeList' => $this->cacheTypeListMock,
                 'config' => $this->configMock,
             ]
@@ -86,25 +95,11 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
     {
         $this->cacheTypeListMock->expects($this->exactly($callNumber))
             ->method('invalidate');
+        $this->cacheManagerMock->expects($this->exactly($callNumber))
+            ->method('clean');
         $this->configMock->expects($this->any())
             ->method('getValue')
-            ->willReturnMap(
-                [
-                    [
-                        Theme::XML_PATH_INVALID_CACHES,
-                        \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
-                        null,
-                        ['block_html' => 1, 'layout' => 1, 'translate' => 1]
-                    ],
-                    [
-                        null,
-                        \Magento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT,
-                        null,
-                        $oldValue
-                    ],
-
-                ]
-            );
+            ->willReturn($oldValue);
         $this->model->setValue('some_value');
         $this->assertInstanceOf(get_class($this->model), $this->model->afterSave());
     }
@@ -113,7 +108,7 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
     {
         return [
             [0, 'some_value'],
-            [2, 'other_value'],
+            [1, 'other_value'],
         ];
     }
 }
diff --git a/app/code/Magento/Theme/etc/config.xml b/app/code/Magento/Theme/etc/config.xml
index 4f25cd7e2ab..332043e56df 100644
--- a/app/code/Magento/Theme/etc/config.xml
+++ b/app/code/Magento/Theme/etc/config.xml
@@ -8,11 +8,6 @@
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
     <default>
         <design>
-            <invalid_caches>
-                <block_html />
-                <layout />
-                <translate />
-            </invalid_caches>
             <head translate="default_description">
                 <default_title>Magento Commerce</default_title>
                 <default_description>Default Description</default_description>
-- 
GitLab


From c8800d7d736f2faf375f198ad1d92e9c925519c2 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Wed, 21 Oct 2015 18:23:09 -0500
Subject: [PATCH 173/370] MAGETWO-44154: Random PAT build failures due to
 400/503 HTTP response errors being thrown  - rename
 makeGeneratedClassFileName

---
 .../testsuite/Magento/Framework/Code/GeneratorTest.php      | 6 +++---
 .../Test/Unit/Code/Generator/EntityChildTestAbstract.php    | 2 +-
 .../Api/Test/Unit/Code/Generator/GenerateMapperTest.php     | 2 +-
 .../Test/Unit/Code/Generator/GenerateSearchResultsTest.php  | 2 +-
 lib/internal/Magento/Framework/Code/Generator.php           | 2 +-
 .../Magento/Framework/Code/Generator/EntityAbstract.php     | 2 +-
 lib/internal/Magento/Framework/Code/Generator/Io.php        | 4 ++--
 .../Code/Test/Unit/Generator/EntityAbstractTest.php         | 2 +-
 .../Magento/Framework/Code/Test/Unit/Generator/IoTest.php   | 2 +-
 .../Magento/Framework/Code/Test/Unit/GeneratorTest.php      | 2 +-
 .../Test/Unit/Code/Generator/InterceptorTest.php            | 2 +-
 .../Test/Unit/Code/Generator/ConverterTest.php              | 2 +-
 .../ObjectManager/Test/Unit/Code/Generator/FactoryTest.php  | 2 +-
 .../Test/Unit/Code/Generator/GenerateRepositoryTest.php     | 2 +-
 .../ObjectManager/Test/Unit/Code/Generator/ProxyTest.php    | 2 +-
 .../Unit/Autoloader/ExtensionGeneratorAutoloader.php        | 2 +-
 16 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/dev/tests/integration/testsuite/Magento/Framework/Code/GeneratorTest.php b/dev/tests/integration/testsuite/Magento/Framework/Code/GeneratorTest.php
index 2b82c10311b..9bd4cb649bb 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Code/GeneratorTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Code/GeneratorTest.php
@@ -95,7 +95,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
         // This test is only valid if the factory created the object if Autoloader did not pick it up automatically
         if (\Magento\Framework\Code\Generator::GENERATION_SUCCESS == $generatorResult) {
             $content = $this->_clearDocBlock(
-                file_get_contents($this->_ioObject->makeGeneratedClassFileName(self::CLASS_NAME_WITH_NAMESPACE . 'Factory'))
+                file_get_contents($this->_ioObject->generateResultFileName(self::CLASS_NAME_WITH_NAMESPACE . 'Factory'))
             );
             $expectedContent = $this->_clearDocBlock(
                 file_get_contents(__DIR__ . '/_expected/SourceClassWithNamespaceFactory.php.sample')
@@ -120,7 +120,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
         // This test is only valid if the factory created the object if Autoloader did not pick it up automatically
         if (\Magento\Framework\Code\Generator::GENERATION_SUCCESS == $generatorResult) {
             $content = $this->_clearDocBlock(
-                file_get_contents($this->_ioObject->makeGeneratedClassFileName(self::CLASS_NAME_WITH_NAMESPACE . '\Proxy'))
+                file_get_contents($this->_ioObject->generateResultFileName(self::CLASS_NAME_WITH_NAMESPACE . '\Proxy'))
             );
             $expectedContent = $this->_clearDocBlock(
                 file_get_contents(__DIR__ . '/_expected/SourceClassWithNamespaceProxy.php.sample')
@@ -142,7 +142,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
         if (\Magento\Framework\Code\Generator::GENERATION_SUCCESS == $generatorResult) {
             $content = $this->_clearDocBlock(
                 file_get_contents(
-                    $this->_ioObject->makeGeneratedClassFileName(self::CLASS_NAME_WITH_NAMESPACE . '\Interceptor')
+                    $this->_ioObject->generateResultFileName(self::CLASS_NAME_WITH_NAMESPACE . '\Interceptor')
                 )
             );
             $expectedContent = $this->_clearDocBlock(
diff --git a/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/EntityChildTestAbstract.php b/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/EntityChildTestAbstract.php
index 8f53d379a51..5ea51a6d560 100644
--- a/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/EntityChildTestAbstract.php
+++ b/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/EntityChildTestAbstract.php
@@ -109,7 +109,7 @@ abstract class EntityChildTestAbstract extends \PHPUnit_Framework_TestCase
 
         //Mocking generation
         $this->ioObjectMock->expects($this->any())
-            ->method('makeGeneratedClassFileName')
+            ->method('generateResultFileName')
             ->with($this->getResultClassName())
             ->willReturn($resultFileName);
         $this->ioObjectMock->expects($this->once())
diff --git a/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/GenerateMapperTest.php b/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/GenerateMapperTest.php
index fec3d96f8b5..bdc11e49ddd 100644
--- a/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/GenerateMapperTest.php
+++ b/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/GenerateMapperTest.php
@@ -51,7 +51,7 @@ class GenerateMapperTest extends \PHPUnit_Framework_TestCase
         );
         $sampleMapperCode = file_get_contents(__DIR__ . '/_files/SampleMapper.txt');
         $this->ioObjectMock->expects($this->once())
-            ->method('makeGeneratedClassFileName')
+            ->method('generateResultFileName')
             ->with('\Magento\Framework\Api\Code\Generator\SampleMapper')
             ->will($this->returnValue('SampleMapper.php'));
         $this->ioObjectMock->expects($this->once())
diff --git a/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/GenerateSearchResultsTest.php b/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/GenerateSearchResultsTest.php
index 5d54d23f55f..1f7609b0e92 100644
--- a/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/GenerateSearchResultsTest.php
+++ b/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/GenerateSearchResultsTest.php
@@ -52,7 +52,7 @@ class GenerateSearchResultsTest extends \PHPUnit_Framework_TestCase
         );
         $sampleSearchResultBuilderCode = file_get_contents(__DIR__ . '/_files/SampleSearchResults.txt');
         $this->ioObjectMock->expects($this->once())
-            ->method('makeGeneratedClassFileName')
+            ->method('generateResultFileName')
             ->with('\Magento\Framework\Api\Code\Generator\SampleSearchResults')
             ->will($this->returnValue('SampleSearchResults.php'));
         $this->ioObjectMock->expects($this->once())
diff --git a/lib/internal/Magento/Framework/Code/Generator.php b/lib/internal/Magento/Framework/Code/Generator.php
index 39c8ae07219..2a572346e6a 100644
--- a/lib/internal/Magento/Framework/Code/Generator.php
+++ b/lib/internal/Magento/Framework/Code/Generator.php
@@ -191,7 +191,7 @@ class Generator
         if (!$resultEntityType || !$sourceClassName) {
             return self::GENERATION_ERROR;
         } else if ($this->definedClasses->isClassLoadableFromDisc($resultClass)) {
-            $generatedFileName = $this->_ioObject->makeGeneratedClassFileName($resultClass);
+            $generatedFileName = $this->_ioObject->generateResultFileName($resultClass);
             /**
              * Must handle two edge cases: a competing process has generated the class and written it to disc already,
              * or the class exists in committed code, despite matching pattern to be generated.
diff --git a/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php b/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php
index d3ef4a0b54d..aed8424282e 100644
--- a/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php
+++ b/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php
@@ -97,7 +97,7 @@ abstract class EntityAbstract
             if ($this->_validateData()) {
                 $sourceCode = $this->_generateCode();
                 if ($sourceCode) {
-                    $fileName = $this->_ioObject->makeGeneratedClassFileName($this->_getResultClassName());
+                    $fileName = $this->_ioObject->generateResultFileName($this->_getResultClassName());
                     $this->_ioObject->writeResultFile($fileName, $sourceCode);
                     return $fileName;
                 } else {
diff --git a/lib/internal/Magento/Framework/Code/Generator/Io.php b/lib/internal/Magento/Framework/Code/Generator/Io.php
index d50b7fc8ae2..365482c797c 100644
--- a/lib/internal/Magento/Framework/Code/Generator/Io.php
+++ b/lib/internal/Magento/Framework/Code/Generator/Io.php
@@ -61,7 +61,7 @@ class Io
      */
     public function getResultFileDirectory($className)
     {
-        $fileName = $this->makeGeneratedClassFileName($className);
+        $fileName = $this->generateResultFileName($className);
         $pathParts = explode('/', $fileName);
         unset($pathParts[count($pathParts) - 1]);
 
@@ -72,7 +72,7 @@ class Io
      * @param string $className
      * @return string
      */
-    public function makeGeneratedClassFileName($className)
+    public function generateResultFileName($className)
     {
         return $this->_generationDirectory . ltrim(str_replace(['\\', '_'], '/', $className), '/') . '.php';
     }
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php
index 677685ce016..c10467f7cdf 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php
@@ -286,7 +286,7 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase
         if ($willWriteCode) {
             $ioObject->expects($this->once())->method('writeResultFile')->with(self::RESULT_FILE, self::RESULT_CODE);
         }
-        $ioObject->expects($this->any())->method('makeGeneratedClassFileName')->willReturn(self::RESULT_FILE);
+        $ioObject->expects($this->any())->method('generateResultFileName')->willReturn(self::RESULT_FILE);
 
         return [
             'source_class' => $mocks['source_class'],
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php
index e70255333e5..33b12746656 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/IoTest.php
@@ -72,7 +72,7 @@ class IoTest extends \PHPUnit_Framework_TestCase
     public function testGetResultFileName()
     {
         $expectedFileName = self::GENERATION_DIRECTORY . '/class/name.php';
-        $this->assertEquals($expectedFileName, $this->_object->makeGeneratedClassFileName(self::CLASS_NAME));
+        $this->assertEquals($expectedFileName, $this->_object->generateResultFileName(self::CLASS_NAME));
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
index 54d46d6aee5..c289ba47967 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
@@ -120,7 +120,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
             ->willReturn(true);
 
         $resultClassFileName = '/Magento/Path/To/Class.php';
-        $this->ioObjectMock->expects($this->once())->method('makeGeneratedClassFileName')->willReturn($resultClassFileName);
+        $this->ioObjectMock->expects($this->once())->method('generateResultFileName')->willReturn($resultClassFileName);
         $this->ioObjectMock->expects($this->once())->method('fileExists')->willReturn($fileExists);
         $includeFileInvokeCount = $fileExists ? 1 : 0;
         $this->ioObjectMock->expects($this->exactly($includeFileInvokeCount))->method('includeFile');
diff --git a/lib/internal/Magento/Framework/Interception/Test/Unit/Code/Generator/InterceptorTest.php b/lib/internal/Magento/Framework/Interception/Test/Unit/Code/Generator/InterceptorTest.php
index 7902303e0dc..97f1ff1b368 100644
--- a/lib/internal/Magento/Framework/Interception/Test/Unit/Code/Generator/InterceptorTest.php
+++ b/lib/internal/Magento/Framework/Interception/Test/Unit/Code/Generator/InterceptorTest.php
@@ -56,7 +56,7 @@ class InterceptorTest extends \PHPUnit_Framework_TestCase
         $this->classGeneratorMock->expects($this->once())->method('generate')
             ->will($this->returnValue('source code example'));
         $model->expects($this->once())->method('_validateData')->will($this->returnValue(true));
-        $this->ioObjectMock->expects($this->any())->method('makeGeneratedClassFileName')->with('Exception_Interceptor');
+        $this->ioObjectMock->expects($this->any())->method('generateResultFileName')->with('Exception_Interceptor');
         $this->assertEquals('', $model->generate());
     }
 }
diff --git a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ConverterTest.php b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ConverterTest.php
index 3a160365280..8578107b4cf 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ConverterTest.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ConverterTest.php
@@ -105,7 +105,7 @@ class ConverterTest extends \PHPUnit_Framework_TestCase
 
         //Mocking generation
         $this->ioObjectMock->expects($this->any())
-            ->method('makeGeneratedClassFileName')
+            ->method('generateResultFileName')
             ->with(self::RESULT_CLASS_NAME)
             ->will($this->returnValue($resultFileName));
         $this->ioObjectMock->expects($this->once())
diff --git a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/FactoryTest.php b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/FactoryTest.php
index bc3c490c985..3a477ec43a5 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/FactoryTest.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/FactoryTest.php
@@ -34,7 +34,7 @@ class FactoryTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        $this->ioObjectMock->expects($this->once())->method('makeGeneratedClassFileName')
+        $this->ioObjectMock->expects($this->once())->method('generateResultFileName')
             ->with('\Magento\Framework\ObjectManager\Code\Generator\SampleFactory')
             ->will($this->returnValue('sample_file.php'));
         $factoryCode = file_get_contents(__DIR__ . '/_files/SampleFactory.txt');
diff --git a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/GenerateRepositoryTest.php b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/GenerateRepositoryTest.php
index 02dce376ffe..27cea41af83 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/GenerateRepositoryTest.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/GenerateRepositoryTest.php
@@ -54,7 +54,7 @@ class GenerateRepositoryTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->ioObjectMock->expects($this->once())
-            ->method('makeGeneratedClassFileName')
+            ->method('generateResultFileName')
             ->with('\Magento\Framework\ObjectManager\Code\Generator\SampleRepository')
             ->willReturn('SampleRepository.php');
 
diff --git a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ProxyTest.php b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ProxyTest.php
index 3d4bf69304c..7eb9795742d 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ProxyTest.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ProxyTest.php
@@ -34,7 +34,7 @@ class ProxyTest extends \PHPUnit_Framework_TestCase
         );
         $sampleProxyCode = file_get_contents(__DIR__ . '/_files/SampleProxy.txt');
 
-        $this->ioObjectMock->expects($this->once())->method('makeGeneratedClassFileName')
+        $this->ioObjectMock->expects($this->once())->method('generateResultFileName')
             ->with('\Magento\Framework\ObjectManager\Code\Generator\Sample_Proxy')
             ->will($this->returnValue('sample_file.php'));
         $this->ioObjectMock->expects($this->once())->method('writeResultFile')
diff --git a/lib/internal/Magento/Framework/TestFramework/Unit/Autoloader/ExtensionGeneratorAutoloader.php b/lib/internal/Magento/Framework/TestFramework/Unit/Autoloader/ExtensionGeneratorAutoloader.php
index 900d24897ae..4382d23df89 100644
--- a/lib/internal/Magento/Framework/TestFramework/Unit/Autoloader/ExtensionGeneratorAutoloader.php
+++ b/lib/internal/Magento/Framework/TestFramework/Unit/Autoloader/ExtensionGeneratorAutoloader.php
@@ -41,7 +41,7 @@ class ExtensionGeneratorAutoloader
                 return false;
             }
 
-            $resultFileName = $this->generatorIo->makeGeneratedClassFileName($className);
+            $resultFileName = $this->generatorIo->generateResultFileName($className);
 
             if (!$this->generatorIo->fileExists($resultFileName)) {
                 $this->generatorIo->makeResultFileDirectory($className);
-- 
GitLab


From 96878e4e3bf4f07d86be7587d8b28f04f683e0b6 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Wed, 21 Oct 2015 18:42:07 -0500
Subject: [PATCH 174/370] MAGETWO-44189: Does not work to switch the language
 in the admin area  - remove locale switcher from backend

---
 .../Magento/Backend/Block/Page/Locale.php     | 94 -------------------
 .../Backend/view/adminhtml/layout/default.xml |  3 +-
 .../adminhtml/templates/page/locale.phtml     | 31 ------
 3 files changed, 1 insertion(+), 127 deletions(-)
 delete mode 100644 app/code/Magento/Backend/Block/Page/Locale.php
 delete mode 100644 app/code/Magento/Backend/view/adminhtml/templates/page/locale.phtml

diff --git a/app/code/Magento/Backend/Block/Page/Locale.php b/app/code/Magento/Backend/Block/Page/Locale.php
deleted file mode 100644
index d6d279ac760..00000000000
--- a/app/code/Magento/Backend/Block/Page/Locale.php
+++ /dev/null
@@ -1,94 +0,0 @@
-<?php
-/**
- * Backend locale switcher block
- *
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Backend\Block\Page;
-
-use Magento\Framework\App\ActionInterface;
-
-class Locale extends \Magento\Backend\Block\Template
-{
-    /**
-     * Path to template file in theme
-     *
-     * @var string
-     */
-    protected $_template = 'page/locale.phtml';
-
-    /**
-     * @var \Magento\Framework\Locale\ListsInterface
-     */
-    protected $_localeLists;
-
-    /**
-     * @var \Magento\Framework\Locale\ResolverInterface
-     */
-    protected $_localeResolver;
-
-    /**
-     * @var \Magento\Framework\Url\Helper\Data
-     */
-    protected $_urlHelper;
-
-    /**
-     * @param \Magento\Backend\Block\Template\Context $context
-     * @param \Magento\Framework\Locale\ListsInterface $localeLists
-     * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
-     * @param \Magento\Framework\Url\Helper\Data $urlHelper
-     * @param array $data
-     */
-    public function __construct(
-        \Magento\Backend\Block\Template\Context $context,
-        \Magento\Framework\Locale\ListsInterface $localeLists,
-        \Magento\Framework\Locale\ResolverInterface $localeResolver,
-        \Magento\Framework\Url\Helper\Data $urlHelper,
-        array $data = []
-    ) {
-        $this->_localeLists = $localeLists;
-        $this->_localeResolver = $localeResolver;
-        $this->_urlHelper = $urlHelper;
-        parent::__construct($context, $data);
-    }
-
-    /**
-     * Prepare URL for change locale
-     *
-     * @return string
-     */
-    public function getChangeLocaleUrl()
-    {
-        return $this->getUrl('adminhtml/index/changeLocale');
-    }
-
-    /**
-     * Prepare current URL for referer
-     *
-     * @return string
-     */
-    public function getUrlForReferer()
-    {
-        return ActionInterface::PARAM_NAME_URL_ENCODED . '/' . $this->_urlHelper->getEncodedUrl();
-    }
-
-    /**
-     * Retrieve locale select element
-     *
-     * @return string
-     */
-    public function getLocaleSelect()
-    {
-        $html = $this->getLayout()->createBlock('Magento\Framework\View\Element\Html\Select')
-            ->setName('locale')
-            ->setId('footer_interface_locale')
-            ->setTitle(__('Interface Language'))
-            ->setClass('admin__control-select')
-            ->setValue($this->_localeResolver->getLocale())
-            ->setOptions($this->_localeLists->getTranslatedOptionLocales())
-            ->getHtml();
-
-        return $html;
-    }
-}
diff --git a/app/code/Magento/Backend/view/adminhtml/layout/default.xml b/app/code/Magento/Backend/view/adminhtml/layout/default.xml
index f960316fcc9..56c7c5d553a 100644
--- a/app/code/Magento/Backend/view/adminhtml/layout/default.xml
+++ b/app/code/Magento/Backend/view/adminhtml/layout/default.xml
@@ -53,8 +53,7 @@
             <block class="Magento\Framework\View\Element\Template" name="page.actions.toolbar" template="Magento_Backend::pageactions.phtml" after="-"/>
         </referenceContainer>
         <referenceContainer name="footer">
-            <block class="Magento\Backend\Block\Page\Locale" name="locale.switcher" template="Magento_Backend::page/locale.phtml"/>
-            <container name="legal" htmlTag="div" htmlClass="footer-legal col-m-6 col-m-offset-1">
+            <container name="legal" htmlTag="div" htmlClass="footer-legal col-m-12">
                 <block class="Magento\Backend\Block\Page\Footer" name="version" as="version" />
                 <block class="Magento\Backend\Block\Page\Copyright" name="copyright" as="copyright" />
                 <block class="Magento\Framework\View\Element\Template" name="report" as="report" template="Magento_Backend::page/report.phtml">
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/page/locale.phtml b/app/code/Magento/Backend/view/adminhtml/templates/page/locale.phtml
deleted file mode 100644
index 03347fbcbe6..00000000000
--- a/app/code/Magento/Backend/view/adminhtml/templates/page/locale.phtml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-// @codingStandardsIgnoreFile
-
-?>
-<div class="locale-switcher col-m-5">
-    <label class="label" for="footer_interface_locale"><span><?php /* @escapeNotVerified */ echo __('Interface Locale'); ?></span></label>
-    <?php /* @escapeNotVerified */ echo $block->getLocaleSelect(); ?>
-    <script>
-        require([
-                'mage/validation/url'
-            ],
-            function (urlValidator) {
-                'use strict';
-
-                var elem = document.getElementById('footer_interface_locale');
-
-                function onChange() {
-                    urlValidator.redirect('<?php /* @escapeNotVerified */ echo $block->getChangeLocaleUrl() ?>locale/' +
-                    elem.value +
-                    '/<?php /* @escapeNotVerified */ echo $block->getUrlForReferer() ?>');
-                }
-
-                elem.addEventListener('change', onChange);
-            });
-    </script>
-</div>
-- 
GitLab


From faf2eb506eb0d483979f3f7016359250c2abcaa2 Mon Sep 17 00:00:00 2001
From: Olga Matviienko <omatviienko@ebay.com>
Date: Thu, 22 Oct 2015 11:19:29 +0300
Subject: [PATCH 175/370] MAGETWO-43423: Fix mark up for credit card form

---
 .../module/main/_collapsible-blocks.less      |   3 +
 .../module/checkout/_payment-options.less     |  52 +++++
 .../css/source/module/checkout/_payments.less |  15 --
 .../blank/web/css/source/_navigation.less     |  21 +-
 .../module/checkout/_payment-options.less     | 203 ++++++++++++++++++
 .../css/source/module/checkout/_payments.less |  15 --
 6 files changed, 273 insertions(+), 36 deletions(-)
 create mode 100644 app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/checkout/_payment-options.less

diff --git a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/main/_collapsible-blocks.less b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/main/_collapsible-blocks.less
index 730f3d53ff5..78129d62a70 100644
--- a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/main/_collapsible-blocks.less
+++ b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/main/_collapsible-blocks.less
@@ -253,6 +253,9 @@
             .scope-label {
                 padding: 31px 1.5rem 0 0;
             }
+            .use-default {
+                padding: 29px 1.5rem 0 0;
+            }
             .value {
                 padding-right: 4rem;
             }
diff --git a/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_payment-options.less b/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_payment-options.less
index 0de27d21df3..4f8c9b77165 100644
--- a/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_payment-options.less
+++ b/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_payment-options.less
@@ -105,6 +105,58 @@
                 filter: gray; // For IE 6 - 9
             }
         }
+
+        .ccard {
+            .legend {
+                &:extend(.abs-visually-hidden all);
+            }
+            .fields {
+                > .year {
+                    padding-left: @indent__xs;
+                }
+                .select {
+                    padding-left: @indent__xs;
+                    padding-right: @indent__xs;
+                }
+            }
+            .month {
+                .select {
+                    width: 140px;
+                }
+            }
+            .year {
+                .select {
+                    width: 80px;
+                }
+            }
+            .number {
+                .input-text {
+                    width: 225px;
+                }
+            }
+
+            > .field.cvv {
+                > .control {
+                    padding-right: @indent__base;
+                    width: auto;
+                }
+            }
+            .cvv {
+                .input-text {
+                    width: 55px;
+                }
+            }
+
+            &.fieldset {
+                > .field {
+                    .fields.group.group-2 {
+                        .field {
+                            width: auto !important;
+                        }
+                    }
+                }
+            }
+        }
     }
 }
 
diff --git a/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_payments.less b/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_payments.less
index 741516ae64d..516d9e21e8b 100644
--- a/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_payments.less
+++ b/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_payments.less
@@ -76,13 +76,6 @@
                     margin: 0 0 @indent__base;
                 }
             }
-            .field {
-                &.cvv {
-                    .control {
-                        width: 40%;
-                    }
-                }
-            }
         }
 
         .field-select-billing,
@@ -136,14 +129,6 @@
         .no-payments-block {
             margin: @indent__base 0;
         }
-        .ccard {
-            .legend {
-                &:extend(.abs-visually-hidden all);
-            }
-            .year {
-                padding-left: @indent__l;
-            }
-        }
         .payments {
             .legend {
                 &:extend(.abs-visually-hidden all);
diff --git a/app/design/frontend/Magento/blank/web/css/source/_navigation.less b/app/design/frontend/Magento/blank/web/css/source/_navigation.less
index 4e4b410c5f6..f4fee4d5d7d 100644
--- a/app/design/frontend/Magento/blank/web/css/source/_navigation.less
+++ b/app/design/frontend/Magento/blank/web/css/source/_navigation.less
@@ -86,7 +86,7 @@
             font-size: 1.6rem;
             font-weight: 700;
             margin: 0;
-            padding: 8px 20px;
+            padding: .8rem 3.5rem .8rem 2rem;
             .label {
                 display: block;
                 margin-bottom: @indent__xs;
@@ -125,16 +125,17 @@
 
         .header.links {
             .lib-list-reset-styles();
+            border-bottom: 1px solid @color-gray82;
             li {
-                border-top: 1px solid @color-gray82;
                 font-size: 1.6rem;
                 margin: 0;
                 &.greet.welcome {
+                    border-top: 1px solid @color-gray82;
                     font-weight: 700;
-                    padding: 8px 20px;
+                    padding: .8rem @indent__base;
                 }
-                &:last-child {
-                    border-bottom: 1px solid @color-gray82;
+                > a {
+                    border-top: 1px solid @color-gray82;
                 }
             }
             a,
@@ -143,7 +144,10 @@
                 .lib-css(text-decoration, @navigation-level0-item__text-decoration);
                 display: block;
                 font-weight: 700;
-                padding: 8px 20px;
+                padding: .8rem @indent__base;
+            }
+            .header.links {
+                border: 0;
             }
         }
     }
@@ -217,6 +221,11 @@
                 background: transparent;
                 border-bottom: 0;
             }
+            .nav-sections-item-switch {
+                &:hover {
+                    text-decoration: none;
+                }
+            }
         }
 
         &-item-content {
diff --git a/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/checkout/_payment-options.less b/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/checkout/_payment-options.less
new file mode 100644
index 00000000000..555098fcefb
--- /dev/null
+++ b/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/checkout/_payment-options.less
@@ -0,0 +1,203 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  Variables
+//  _____________________________________________
+
+@checkout-payment-option-title__border: @checkout-payment-method-title__border;
+@checkout-payment-option-title__color: @link__color;
+@checkout-payment-option-title__padding: @checkout-payment-method-title__padding;
+@checkout-payment-option-title-mobile__padding: @checkout-payment-method-title-mobile__padding;
+
+@checkout-payment-option-title-icon__font-size: 32px;
+@checkout-payment-option-title-icon__line-height: 16px;
+@checkout-payment-option-title-icon__margin: 0;
+@checkout-payment-option-title-icon__color: @minicart-icons-color;
+@checkout-payment-option-title-icon__hover__color: @primary__color;
+
+@checkout-payment-option-content__padding__xl: @checkout-payment-method-content__padding__xl;
+
+//
+//  Common
+//  _____________________________________________
+
+& when (@media-common = true) {
+    .checkout-payment-method {
+        .payment-option {
+            &._active {
+                .payment-option-title {
+                    .action-toggle {
+                        &:after {
+                            content: @icon-up;
+                        }
+                    }
+                }
+            }
+            &._collapsible {
+                .payment-option-title {
+                    cursor: pointer;
+                }
+                .payment-option-content {
+                    display: none;
+                }
+            }
+        }
+
+        .payment-option-title {
+            .lib-css(border-top, @checkout-payment-option-title__border);
+            .lib-css(padding, @checkout-payment-option-title__padding 0);
+
+            .action-toggle {
+                .lib-css(color, @checkout-payment-option-title__color);
+                .lib-icon-font(
+                @icon-down,
+                @_icon-font-size: @checkout-payment-option-title-icon__font-size,
+                @_icon-font-line-height: @checkout-payment-option-title-icon__line-height,
+                @_icon-font-color: @checkout-payment-option-title-icon__color,
+                @_icon-font-color-hover: @checkout-payment-option-title-icon__hover__color,
+                @_icon-font-color-active: @checkout-payment-option-title-icon__color,
+                @_icon-font-margin: @checkout-payment-option-title-icon__margin,
+                @_icon-font-position: after
+                );
+            }
+        }
+
+        .payment-option-content {
+            .lib-css(padding, 0 0 @indent__base @checkout-payment-option-content__padding__xl);
+        }
+
+        .payment-option-inner {
+            margin: 0 0 @indent__base;
+        }
+
+        .credit-card-types {
+            padding: 0;
+            .item {
+                display: inline-block;
+                list-style: none;
+                margin: 0 @indent__xs 0 0;
+                vertical-align: top;
+                &._active {
+                    font-weight: @font-weight__bold;
+                    img {
+                        -webkit-filter: grayscale(0%);
+                        filter: grayscale(0%);
+                        filter: none;
+                    }
+                }
+                &._inactive {
+                    opacity: 0.4;
+                    filter: alpha(opacity=40);
+                }
+                span {
+                    display: inline-block;
+                    padding-top: 6px;
+                    vertical-align: top;
+                }
+            }
+            img {
+                -webkit-filter: grayscale(100%); // For Webkit browsers
+                -webkit-transition: all .6s ease; // Fade to color for Chrome and Safari
+                filter: grayscale(100%);
+                filter: gray; // For IE 6 - 9
+            }
+        }
+
+        .ccard {
+            .legend {
+                &:extend(.abs-visually-hidden all);
+            }
+            .fields {
+                > .year {
+                    padding-left: @indent__xs;
+                }
+                .select {
+                    padding-left: @indent__xs;
+                    padding-right: @indent__xs;
+                }
+            }
+            .month {
+                .select {
+                    width: 140px;
+                }
+            }
+            .year {
+                .select {
+                    width: 80px;
+                }
+            }
+            .number {
+                .input-text {
+                    width: 225px;
+                }
+            }
+
+            > .field.cvv {
+                > .control {
+                    display: inline-block;
+                    padding-right: @indent__base;
+                }
+            }
+            .cvv {
+                .label {
+                    display: block;
+                }
+                .input-text {
+                    width: 55px;
+                }
+            }
+
+            &.fieldset {
+                > .field {
+                    .fields.group.group-2 {
+                        .field {
+                            width: auto !important;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+//
+//  Mobile
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) {
+    .checkout-payment-method {
+        .payment-option {
+            .lib-css(margin, 0 -(@checkout-payment-option-title-mobile__padding));
+
+            .payment-option-title {
+                .lib-css(padding, @checkout-payment-option-title-mobile__padding)
+            }
+
+            .payment-option-content {
+                .lib-css(padding, 0 @checkout-payment-option-title-mobile__padding @indent__base);
+            }
+        }
+    }
+}
+
+//
+//  Desktop
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
+    .checkout-payment-method {
+        .payment-option-title {
+            .lib-css(padding-left, @checkout-payment-option-content__padding__xl);
+        }
+        .payment-option-content {
+            .payment-option-inner {
+                + .actions-toolbar {
+                    margin-left: 0;
+                }
+            }
+        }
+    }
+}
diff --git a/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/checkout/_payments.less b/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/checkout/_payments.less
index c0f1168e6ef..0940e6e4723 100644
--- a/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/checkout/_payments.less
+++ b/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/checkout/_payments.less
@@ -76,13 +76,6 @@
                     margin: 0 0 @indent__base;
                 }
             }
-            .field {
-                &.cvv {
-                    .control {
-                        width: 40%;
-                    }
-                }
-            }
         }
 
         .field-select-billing,
@@ -136,14 +129,6 @@
         .no-payments-block {
             margin: @indent__base 0;
         }
-        .ccard {
-            .legend {
-                &:extend(.abs-visually-hidden all);
-            }
-            .year {
-                padding-left: @indent__l;
-            }
-        }
         .payments {
             .legend {
                 &:extend(.abs-visually-hidden all);
-- 
GitLab


From 21ee93ce8e95ffd5d8b736d55a7ee1bb309954ba Mon Sep 17 00:00:00 2001
From: Mikalai_Eutsikhieu <Mikalai_Eutsikhieu@epam.com>
Date: Thu, 22 Oct 2015 12:24:07 +0300
Subject: [PATCH 176/370] MAGETWO-44261: added a little change of style

---
 .../blank/Magento_ProductVideo/web/css/source/_module.less      | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less
index 880d0f6fbda..b679e32e160 100644
--- a/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less
+++ b/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less
@@ -45,7 +45,7 @@
 }
 
 .product-video {
-    height: 90%;
+    height: 88%;
     margin-top: 5%;
     position: absolute;
     top: 0;
-- 
GitLab


From 69d1097534239fa5b9f78d5b6dd1bcdd602b1593 Mon Sep 17 00:00:00 2001
From: Ievgen Sentiabov <isentiabov@ebay.com>
Date: Thu, 22 Oct 2015 12:28:27 +0300
Subject: [PATCH 177/370] MAGETWO-44295: Refund transaction does not appear in
 Transactions tab for eWay

 - Refactored code related to review
---
 app/code/Magento/Sales/Model/Order/Payment.php | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/app/code/Magento/Sales/Model/Order/Payment.php b/app/code/Magento/Sales/Model/Order/Payment.php
index 885838781ee..3a3d373c11c 100644
--- a/app/code/Magento/Sales/Model/Order/Payment.php
+++ b/app/code/Magento/Sales/Model/Order/Payment.php
@@ -139,8 +139,7 @@ class Payment extends Info implements OrderPaymentInterface
         \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
-    )
-    {
+    ) {
         $this->priceCurrency = $priceCurrency;
         $this->creditmemoFactory = $creditmemoFactory;
         $this->transactionRepository = $transactionRepository;
-- 
GitLab


From 1314e8735445dd55a8cf04af6897d2c6736b5091 Mon Sep 17 00:00:00 2001
From: Maxim Medinskiy <mmedinskiy@ebay.com>
Date: Thu, 22 Oct 2015 12:31:23 +0300
Subject: [PATCH 178/370] MAGETWO-43869: The "Header contains invalid
 attribute(s)..." message appears wher user tries to import customers

---
 .../CustomerImportExport/Model/Import/CustomerComposite.php     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/CustomerImportExport/Model/Import/CustomerComposite.php b/app/code/Magento/CustomerImportExport/Model/Import/CustomerComposite.php
index 97d2407a780..a42167fb681 100644
--- a/app/code/Magento/CustomerImportExport/Model/Import/CustomerComposite.php
+++ b/app/code/Magento/CustomerImportExport/Model/Import/CustomerComposite.php
@@ -492,7 +492,7 @@ class CustomerComposite extends \Magento\ImportExport\Model\Import\AbstractEntit
             $this->validColumnNames,
             $this->_customerAttributes,
             $this->_addressAttributes,
-            $this->_customerEntity->customerFields
+            $this->_customerEntity->getValidColumnNames()
         );
 
         return $this->validColumnNames;
-- 
GitLab


From 275c3e93eba7c4532790bd6f753d5ad765348833 Mon Sep 17 00:00:00 2001
From: "Yushkin, Dmytro" <dyushkin@ebay.com>
Date: Thu, 22 Oct 2015 12:42:42 +0300
Subject: [PATCH 179/370] MAGETWO-44299: Verify @noEscape outputs for shipment
 and payments modules

- Fix by code review
---
 .../view/frontend/templates/express/review.phtml       | 10 ++++------
 .../templates/express/review/shipping/method.phtml     |  4 ++--
 2 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/app/code/Magento/Paypal/view/frontend/templates/express/review.phtml b/app/code/Magento/Paypal/view/frontend/templates/express/review.phtml
index 5d3c0b5c720..9146130881c 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/express/review.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/express/review.phtml
@@ -42,8 +42,8 @@
                                                             <?php echo($currentRate === $rate) ?
                                                                 ' selected="selected"' : '';
                                                             ?>>
-                                                            <?php echo
-                                                                $block->escapeHtml($block->renderShippingRateOption($rate));
+                                                            <?php /* @noEscape */ echo
+                                                                $block->renderShippingRateOption($rate);
                                                             ?>
                                                         </option>
                                                     <?php endforeach; ?>
@@ -70,10 +70,8 @@
                                 <?php endif; ?>
                             <?php else: ?>
                                 <p>
-                                    <?php echo $block->escapeHtml(
-                                        $block->renderShippingRateOption(
-                                            $block->getCurrentShippingRate()
-                                        )
+                                    <?php /* @noEscape */ echo $block->renderShippingRateOption(
+                                        $block->getCurrentShippingRate()
                                     ); ?>
                                 </p>
                             <?php endif; ?>
diff --git a/app/code/Magento/Paypal/view/frontend/templates/express/review/shipping/method.phtml b/app/code/Magento/Paypal/view/frontend/templates/express/review/shipping/method.phtml
index ce8952a08d3..909d0e1c762 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/express/review/shipping/method.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/express/review/shipping/method.phtml
@@ -24,7 +24,7 @@
                             <option
                                 value="<?php echo $block->escapeHtml($block->renderShippingRateValue($rate)); ?>"
                                     <?php echo($currentRate === $rate) ? ' selected="selected"' : ''; ?>>
-                                <?php echo $block->escapeHtml($block->renderShippingRateOption($rate)); ?>
+                                <?php /* @noEscape */ echo $block->renderShippingRateOption($rate); ?>
                             </option>
                         <?php endforeach; ?>
                     </optgroup>
@@ -40,7 +40,7 @@
     <?php else: ?>
         <p>
             <strong>
-                <?php echo $block->escapeHtml($block->renderShippingRateOption($block->getCurrentShippingRate())); ?>
+                <?php /* @noEscape */ echo $block->renderShippingRateOption($block->getCurrentShippingRate()); ?>
             </strong>
         </p>
     <?php endif; ?>
-- 
GitLab


From 18f942f6ab4efc1c5740450ddd57e77d8bd68ad5 Mon Sep 17 00:00:00 2001
From: Mikalai_Eutsikhieu <Mikalai_Eutsikhieu@epam.com>
Date: Thu, 22 Oct 2015 12:43:41 +0300
Subject: [PATCH 180/370] MAGETWO-44261: fixed styles for mobile too

---
 .../blank/Magento_ProductVideo/web/css/source/_module.less | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less
index b679e32e160..454920e2199 100644
--- a/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less
+++ b/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less
@@ -45,11 +45,14 @@
 }
 
 .product-video {
-    height: 88%;
-    margin-top: 5%;
+    height: 75%;
+    left: 0;
     position: absolute;
     top: 0;
     width: 100%;
+    right: 0;
+    bottom: 0;
+    margin: auto;
     iframe {
         height: 100%;
         left: 0;
-- 
GitLab


From 3f9889c62c1db55f10c8990585b18b998ba318e9 Mon Sep 17 00:00:00 2001
From: Dmytro Poperechnyy <dpoperechnyy@ebay.com>
Date: Thu, 22 Oct 2015 13:29:19 +0300
Subject: [PATCH 181/370] MAGETWO-44327: Fatal error trying to create catalog
 price rule when there is website with no store

---
 app/code/Magento/CatalogRule/Model/Rule.php | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/app/code/Magento/CatalogRule/Model/Rule.php b/app/code/Magento/CatalogRule/Model/Rule.php
index 66f3affdcea..dcd36cfaf30 100644
--- a/app/code/Magento/CatalogRule/Model/Rule.php
+++ b/app/code/Magento/CatalogRule/Model/Rule.php
@@ -342,6 +342,10 @@ class Rule extends \Magento\Rule\Model\AbstractModel
         $map = [];
         $websites = $this->_storeManager->getWebsites(true);
         foreach ($websites as $website) {
+            // Continue if website has no store to be able to create catalog rule for website without store
+            if ($website->getDefaultStore() === null) {
+                continue;
+            }
             $map[$website->getId()] = $website->getDefaultStore()->getId();
         }
         return $map;
-- 
GitLab


From baa7682fc1b4da365ae74f6972b8084c828e5527 Mon Sep 17 00:00:00 2001
From: Sergey Semenov <ssemenov@ebay.com>
Date: Thu, 22 Oct 2015 13:51:31 +0300
Subject: [PATCH 182/370] MAGETWO-42285: Customer Information In Grid Shows
 Wrong Account "Created In" Field

---
 .../Magento/Customer/Model/AccountManagementTest.php          | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/dev/tests/integration/testsuite/Magento/Customer/Model/AccountManagementTest.php b/dev/tests/integration/testsuite/Magento/Customer/Model/AccountManagementTest.php
index 65c3aae162b..077f18fbe2c 100644
--- a/dev/tests/integration/testsuite/Magento/Customer/Model/AccountManagementTest.php
+++ b/dev/tests/integration/testsuite/Magento/Customer/Model/AccountManagementTest.php
@@ -587,7 +587,6 @@ class AccountManagementTest extends \PHPUnit_Framework_TestCase
                 'email' => $email,
                 'firstname' => $firstName,
                 'lastname' => $lastName,
-                'created_in' => 'Admin',
                 'id' => null
             ]
         );
@@ -603,7 +602,6 @@ class AccountManagementTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals($email, $customerAfter->getEmail());
         $this->assertEquals($firstName, $customerAfter->getFirstname());
         $this->assertEquals($lastName, $customerAfter->getLastname());
-        $this->assertEquals('Admin', $customerAfter->getCreatedIn());
         $this->accountManagement->authenticate(
             $customerAfter->getEmail(),
             'aPassword'
@@ -807,7 +805,6 @@ class AccountManagementTest extends \PHPUnit_Framework_TestCase
         $customerEntity->setEmail($email)
             ->setFirstname($firstName)
             ->setLastname($lastname)
-            ->setCreatedIn('Admin')
             ->setId(null);
 
         $customer = $this->accountManagement->createAccount($customerEntity, 'aPassword');
@@ -815,7 +812,6 @@ class AccountManagementTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals($email, $customer->getEmail());
         $this->assertEquals($firstName, $customer->getFirstname());
         $this->assertEquals($lastname, $customer->getLastname());
-        $this->assertEquals('Admin', $customer->getCreatedIn());
         $this->accountManagement->authenticate(
             $customer->getEmail(),
             'aPassword',
-- 
GitLab


From cf70c6dbcdf65f504a3742508e8206fe7f3de6b0 Mon Sep 17 00:00:00 2001
From: Michail Slabko <mslabko@ebay.com>
Date: Thu, 22 Oct 2015 13:57:50 +0300
Subject: [PATCH 183/370] MAGETWO-42486: [GITHUB] Adding product configurations
 shows wrong currency #1737

---
 .../Catalog/Ui/Component/Listing/Columns/Price.php     |  6 ++----
 .../Adminhtml/Product/Edit/Tab/Super/Config/Matrix.php | 10 +++++++++-
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/app/code/Magento/Catalog/Ui/Component/Listing/Columns/Price.php b/app/code/Magento/Catalog/Ui/Component/Listing/Columns/Price.php
index 2c4af877568..bcfef825f53 100644
--- a/app/code/Magento/Catalog/Ui/Component/Listing/Columns/Price.php
+++ b/app/code/Magento/Catalog/Ui/Component/Listing/Columns/Price.php
@@ -53,14 +53,12 @@ class Price extends \Magento\Ui\Component\Listing\Columns\Column
             $store = $this->storeManager->getStore(
                 $this->context->getFilterParam('store_id', \Magento\Store\Model\Store::DEFAULT_STORE_ID)
             );
-            $currencyCode = $store->getCurrentCurrencyCode();
-            $currencyRate = $store->getCurrentCurrencyRate();
-            $currency = $this->localeCurrency->getCurrency($currencyCode);
+            $currency = $this->localeCurrency->getCurrency($store->getBaseCurrencyCode());
 
             $fieldName = $this->getData('name');
             foreach ($dataSource['data']['items'] as & $item) {
                 if (isset($item[$fieldName])) {
-                    $item[$fieldName] = $currency->toCurrency(sprintf("%f", $item[$fieldName] * $currencyRate));
+                    $item[$fieldName] = $currency->toCurrency(sprintf("%f", $item[$fieldName]));
                 }
             }
         }
diff --git a/app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/Tab/Super/Config/Matrix.php b/app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/Tab/Super/Config/Matrix.php
index e48634a2c7d..9c7c67395a1 100644
--- a/app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/Tab/Super/Config/Matrix.php
+++ b/app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/Tab/Super/Config/Matrix.php
@@ -54,6 +54,12 @@ class Matrix extends \Magento\Backend\Block\Template
     /** @var null|array */
     private $productAttributes;
 
+
+    /**
+     * @var \Magento\Framework\Locale\CurrencyInterface
+     */
+    protected $localeCurrency;
+
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\ConfigurableProduct\Model\Product\Type\Configurable $configurableType
@@ -72,6 +78,7 @@ class Matrix extends \Magento\Backend\Block\Template
         \Magento\ConfigurableProduct\Model\Product\Type\VariationMatrix $variationMatrix,
         ProductRepositoryInterface $productRepository,
         \Magento\Catalog\Helper\Image $image,
+        \Magento\Framework\Locale\CurrencyInterface $localeCurrency,
         array $data = []
     ) {
         parent::__construct($context, $data);
@@ -80,6 +87,7 @@ class Matrix extends \Magento\Backend\Block\Template
         $this->stockRegistry = $stockRegistry;
         $this->variationMatrix = $variationMatrix;
         $this->productRepository = $productRepository;
+        $this->localeCurrency = $localeCurrency;
         $this->image = $image;
     }
 
@@ -88,7 +96,7 @@ class Matrix extends \Magento\Backend\Block\Template
      */
     public function getCurrencySymbol()
     {
-        return $this->_storeManager->getStore()->getCurrentCurrency()->getCurrencySymbol();
+        return $this->localeCurrency->getCurrency($this->_storeManager->getStore()->getBaseCurrencyCode())->getSymbol();
     }
 
     /**
-- 
GitLab


From 42828af1d8ceec9b65a4cde7a4a4e4816e418f8d Mon Sep 17 00:00:00 2001
From: Maksym Aposov <maposov@ebay.com>
Date: Thu, 22 Oct 2015 13:58:21 +0300
Subject: [PATCH 184/370] MAGETWO-40789: Incorrectly calculated Regular price
 for simple product with Custom option of Percent type

---
 app/code/Magento/Catalog/Model/Product.php    |  6 +-
 .../Magento/Catalog/Model/Product/Option.php  | 75 ++++++++++---------
 .../_files/product_with_dropdown_option.php   |  2 +-
 3 files changed, 42 insertions(+), 41 deletions(-)

diff --git a/app/code/Magento/Catalog/Model/Product.php b/app/code/Magento/Catalog/Model/Product.php
index 99709b513ca..58bdfe24915 100644
--- a/app/code/Magento/Catalog/Model/Product.php
+++ b/app/code/Magento/Catalog/Model/Product.php
@@ -337,7 +337,7 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements
      * @param Product\Link $productLink
      * @param Product\Configuration\Item\OptionFactory $itemOptionFactory
      * @param \Magento\CatalogInventory\Api\Data\StockItemInterfaceFactory $stockItemFactory
-     * @param Product\Option $catalogProductOption
+     * @param Product\OptionFactory $catalogProductOption
      * @param Product\Visibility $catalogProductVisibility
      * @param Product\Attribute\Source\Status $catalogProductStatus
      * @param Product\Media\Config $catalogProductMediaConfig
@@ -376,7 +376,7 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements
         Product\Link $productLink,
         \Magento\Catalog\Model\Product\Configuration\Item\OptionFactory $itemOptionFactory,
         \Magento\CatalogInventory\Api\Data\StockItemInterfaceFactory $stockItemFactory,
-        \Magento\Catalog\Model\Product\Option $catalogProductOption,
+        \Magento\Catalog\Model\Product\OptionFactory $catalogProductOption,
         \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility,
         \Magento\Catalog\Model\Product\Attribute\Source\Status $catalogProductStatus,
         \Magento\Catalog\Model\Product\Media\Config $catalogProductMediaConfig,
@@ -405,7 +405,7 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements
         $this->metadataService = $metadataService;
         $this->_itemOptionFactory = $itemOptionFactory;
         $this->_stockItemFactory = $stockItemFactory;
-        $this->_optionInstance = $catalogProductOption;
+        $this->_optionInstance = $catalogProductOption->create()->setProduct($this);
         $this->_catalogProductVisibility = $catalogProductVisibility;
         $this->_catalogProductStatus = $catalogProductStatus;
         $this->_catalogProductMediaConfig = $catalogProductMediaConfig;
diff --git a/app/code/Magento/Catalog/Model/Product/Option.php b/app/code/Magento/Catalog/Model/Product/Option.php
index 8b981d6f0b8..cf672e0f29f 100644
--- a/app/code/Magento/Catalog/Model/Product/Option.php
+++ b/app/code/Magento/Catalog/Model/Product/Option.php
@@ -4,15 +4,16 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
 
 namespace Magento\Catalog\Model\Product;
 
+use Magento\Catalog\Api\Data\ProductCustomOptionInterface;
 use Magento\Catalog\Api\Data\ProductCustomOptionValuesInterface;
 use Magento\Catalog\Model\Product;
 use Magento\Catalog\Model\ResourceModel\Product\Option\Value\Collection;
 use Magento\Catalog\Pricing\Price\BasePrice;
 use Magento\Framework\Exception\LocalizedException;
+use Magento\Framework\Model\AbstractExtensibleModel;
 
 /**
  * Catalog product option model
@@ -25,8 +26,7 @@ use Magento\Framework\Exception\LocalizedException;
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  * @SuppressWarnings(PHPMD.ExcessivePublicCount)
  */
-class Option extends \Magento\Framework\Model\AbstractExtensibleModel
-    implements \Magento\Catalog\Api\Data\ProductCustomOptionInterface
+class Option extends AbstractExtensibleModel implements ProductCustomOptionInterface
 {
     const OPTION_GROUP_TEXT = 'text';
 
@@ -77,31 +77,31 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
     /**
      * @var Product
      */
-    protected $_product;
+    protected $product;
 
     /**
      * @var array
      */
-    protected $_options = [];
+    protected $options = [];
 
     /**
      * @var array
      */
-    protected $_values = null;
+    protected $values = null;
 
     /**
      * Catalog product option value
      *
      * @var Option\Value
      */
-    protected $_productOptionValue;
+    protected $productOptionValue;
 
     /**
      * Product option factory
      *
      * @var \Magento\Catalog\Model\Product\Option\Type\Factory
      */
-    protected $_optionFactory;
+    protected $optionTypeFactory;
 
     /**
      * @var \Magento\Framework\Stdlib\StringUtils
@@ -140,8 +140,8 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
-        $this->_productOptionValue = $productOptionValue;
-        $this->_optionFactory = $optionFactory;
+        $this->productOptionValue = $productOptionValue;
+        $this->optionTypeFactory = $optionFactory;
         $this->validatorPool = $validatorPool;
         $this->string = $string;
         parent::__construct(
@@ -182,7 +182,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
      */
     public function addValue(Option\Value $value)
     {
-        $this->_values[$value->getId()] = $value;
+        $this->values[$value->getId()] = $value;
         return $this;
     }
 
@@ -194,8 +194,8 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
      */
     public function getValueById($valueId)
     {
-        if (isset($this->_values[$valueId])) {
-            return $this->_values[$valueId];
+        if (isset($this->values[$valueId])) {
+            return $this->values[$valueId];
         }
 
         return null;
@@ -206,7 +206,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
      */
     public function getValues()
     {
-        return $this->_values;
+        return $this->values;
     }
 
     /**
@@ -216,7 +216,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
      */
     public function getValueInstance()
     {
-        return $this->_productOptionValue;
+        return $this->productOptionValue;
     }
 
     /**
@@ -227,7 +227,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
      */
     public function addOption($option)
     {
-        $this->_options[] = $option;
+        $this->options[] = $option;
         return $this;
     }
 
@@ -238,7 +238,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
      */
     public function getOptions()
     {
-        return $this->_options;
+        return $this->options;
     }
 
     /**
@@ -249,7 +249,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
      */
     public function setOptions($options)
     {
-        $this->_options = $options;
+        $this->options = $options;
         return $this;
     }
 
@@ -260,7 +260,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
      */
     public function unsetOptions()
     {
-        $this->_options = [];
+        $this->options = [];
         return $this;
     }
 
@@ -271,7 +271,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
      */
     public function getProduct()
     {
-        return $this->_product;
+        return $this->product;
     }
 
     /**
@@ -282,7 +282,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
      */
     public function setProduct(Product $product = null)
     {
-        $this->_product = $product;
+        $this->product = $product;
         return $this;
     }
 
@@ -294,7 +294,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
      */
     public function getGroupByType($type = null)
     {
-        if (is_null($type)) {
+        if ($type === null) {
             $type = $this->getType();
         }
         $optionGroupsToTypes = [
@@ -324,7 +324,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
     {
         $group = $this->getGroupByType($type);
         if (!empty($group)) {
-            return $this->_optionFactory->create(
+            return $this->optionTypeFactory->create(
                 'Magento\Catalog\Model\Product\Option\Type\\' . $this->string->upperCaseWords($group)
             );
         }
@@ -451,24 +451,24 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
     /**
      * Delete prices of option
      *
-     * @param int $option_id
+     * @param int $optionId
      * @return $this
      */
-    public function deletePrices($option_id)
+    public function deletePrices($optionId)
     {
-        $this->getResource()->deletePrices($option_id);
+        $this->getResource()->deletePrices($optionId);
         return $this;
     }
 
     /**
      * Delete titles of option
      *
-     * @param int $option_id
+     * @param int $optionId
      * @return $this
      */
-    public function deleteTitles($option_id)
+    public function deleteTitles($optionId)
     {
-        $this->getResource()->deleteTitles($option_id);
+        $this->getResource()->deleteTitles($optionId);
         return $this;
     }
 
@@ -480,7 +480,8 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
      */
     public function getProductOptionCollection(Product $product)
     {
-        $collection = $this->getCollection()->addFieldToFilter(
+        $collection = clone $this->getCollection();
+        $collection->addFieldToFilter(
             'product_id',
             $product->getId()
         )->addTitleToResult(
@@ -519,12 +520,12 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
      * Get collection of values by given option ids
      *
      * @param array $optionIds
-     * @param int $store_id
+     * @param int $storeId
      * @return Collection
      */
-    public function getOptionValuesByOptionId($optionIds, $store_id)
+    public function getOptionValuesByOptionId($optionIds, $storeId)
     {
-        $collection = $this->_productOptionValue->getValuesByOption($optionIds, $this->getId(), $store_id);
+        $collection = $this->productOptionValue->getValuesByOption($optionIds, $this->getId(), $storeId);
 
         return $collection;
     }
@@ -563,7 +564,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
     protected function _clearData()
     {
         $this->_data = [];
-        $this->_values = null;
+        $this->values = null;
         return $this;
     }
 
@@ -574,8 +575,8 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
      */
     protected function _clearReferences()
     {
-        if (!empty($this->_values)) {
-            foreach ($this->_values as $value) {
+        if (!empty($this->values)) {
+            foreach ($this->values as $value) {
                 $value->unsetOption();
             }
         }
@@ -848,7 +849,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
      */
     public function setValues(array $values = null)
     {
-        $this->_values = $values;
+        $this->values = $values;
         return $this;
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_with_dropdown_option.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_with_dropdown_option.php
index 9fe6ead6d9c..36ef0b4931f 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_with_dropdown_option.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_with_dropdown_option.php
@@ -17,7 +17,7 @@ $product->setTypeId(
 )->setName(
     'Simple Product With Custom Options'
 )->setSku(
-    'simple'
+    'simple_dropdown_option'
 )->setPrice(
     200
 )->setMetaTitle(
-- 
GitLab


From 804a840d037b7d69c58a086bbbac6787489a547c Mon Sep 17 00:00:00 2001
From: Natalia Momotenko <nmomotenko@ebay.com>
Date: Thu, 22 Oct 2015 14:46:55 +0300
Subject: [PATCH 185/370] MAGETWO-44362: Can't filter the products if
 responsive

---
 .../view/frontend/layout/1column.xml          |  12 -
 .../view/frontend/layout/2columns-left.xml    |  12 -
 .../view/frontend/layout/2columns-right.xml   |  12 -
 .../view/frontend/layout/3columns.xml         |  12 -
 .../view/frontend/layout/page_empty.xml       |  12 -
 .../view/frontend/page_layout/1column.xml     |  10 +
 .../frontend/page_layout/2columns-left.xml    |  10 +
 .../frontend/page_layout/2columns-right.xml   |  10 +
 .../view/frontend/page_layout/3columns.xml    |  10 +
 .../view/frontend/page_layout/empty.xml       |  10 +
 .../web/css/source/_module.less               | 119 ++---
 .../web/css/source/_module.less               | 446 +++++++++---------
 12 files changed, 346 insertions(+), 329 deletions(-)
 delete mode 100644 app/code/Magento/LayeredNavigation/view/frontend/layout/1column.xml
 delete mode 100644 app/code/Magento/LayeredNavigation/view/frontend/layout/2columns-left.xml
 delete mode 100644 app/code/Magento/LayeredNavigation/view/frontend/layout/2columns-right.xml
 delete mode 100644 app/code/Magento/LayeredNavigation/view/frontend/layout/3columns.xml
 delete mode 100644 app/code/Magento/LayeredNavigation/view/frontend/layout/page_empty.xml
 create mode 100644 app/code/Magento/LayeredNavigation/view/frontend/page_layout/1column.xml
 create mode 100644 app/code/Magento/LayeredNavigation/view/frontend/page_layout/2columns-left.xml
 create mode 100644 app/code/Magento/LayeredNavigation/view/frontend/page_layout/2columns-right.xml
 create mode 100644 app/code/Magento/LayeredNavigation/view/frontend/page_layout/3columns.xml
 create mode 100644 app/code/Magento/LayeredNavigation/view/frontend/page_layout/empty.xml

diff --git a/app/code/Magento/LayeredNavigation/view/frontend/layout/1column.xml b/app/code/Magento/LayeredNavigation/view/frontend/layout/1column.xml
deleted file mode 100644
index 4d031851650..00000000000
--- a/app/code/Magento/LayeredNavigation/view/frontend/layout/1column.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd" label="All One-Column Layout Pages" design_abstraction="page_layout">
-    <body>
-        <move element="catalog.leftnav" destination="content.top" after="-"/>
-    </body>
-</page>
diff --git a/app/code/Magento/LayeredNavigation/view/frontend/layout/2columns-left.xml b/app/code/Magento/LayeredNavigation/view/frontend/layout/2columns-left.xml
deleted file mode 100644
index 7b679489fe9..00000000000
--- a/app/code/Magento/LayeredNavigation/view/frontend/layout/2columns-left.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd" label="All Two-Column Layout Pages (Left Column)" design_abstraction="page_layout">
-    <body>
-        <move element="catalog.leftnav" destination="sidebar.main" before="-"/>
-    </body>
-</page>
diff --git a/app/code/Magento/LayeredNavigation/view/frontend/layout/2columns-right.xml b/app/code/Magento/LayeredNavigation/view/frontend/layout/2columns-right.xml
deleted file mode 100644
index 5e8b8e33871..00000000000
--- a/app/code/Magento/LayeredNavigation/view/frontend/layout/2columns-right.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd" label="All Two-Column Layout Pages (Right Column)" design_abstraction="page_layout">
-    <body>
-        <move element="catalog.leftnav" destination="sidebar.main" before="-"/>
-    </body>
-</page>
diff --git a/app/code/Magento/LayeredNavigation/view/frontend/layout/3columns.xml b/app/code/Magento/LayeredNavigation/view/frontend/layout/3columns.xml
deleted file mode 100644
index 5b97b56d83d..00000000000
--- a/app/code/Magento/LayeredNavigation/view/frontend/layout/3columns.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd" label="All Three-Column Layout Pages" design_abstraction="page_layout">
-    <body>
-        <move element="catalog.leftnav" destination="sidebar.main" before="-"/>
-    </body>
-</page>
diff --git a/app/code/Magento/LayeredNavigation/view/frontend/layout/page_empty.xml b/app/code/Magento/LayeredNavigation/view/frontend/layout/page_empty.xml
deleted file mode 100644
index aaf387bdfde..00000000000
--- a/app/code/Magento/LayeredNavigation/view/frontend/layout/page_empty.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0"?>
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd" label="All Empty Layout Pages" design_abstraction="page_layout">
-    <body>
-        <move element="catalog.leftnav" destination="category.product.list.additional" before="-"/>
-    </body>
-</page>
diff --git a/app/code/Magento/LayeredNavigation/view/frontend/page_layout/1column.xml b/app/code/Magento/LayeredNavigation/view/frontend/page_layout/1column.xml
new file mode 100644
index 00000000000..55f4d32eb78
--- /dev/null
+++ b/app/code/Magento/LayeredNavigation/view/frontend/page_layout/1column.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_layout.xsd">
+    <move element="catalog.leftnav" destination="content.top" after="-"/>
+</layout>
diff --git a/app/code/Magento/LayeredNavigation/view/frontend/page_layout/2columns-left.xml b/app/code/Magento/LayeredNavigation/view/frontend/page_layout/2columns-left.xml
new file mode 100644
index 00000000000..1d5ce83f96d
--- /dev/null
+++ b/app/code/Magento/LayeredNavigation/view/frontend/page_layout/2columns-left.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_layout.xsd">
+    <move element="catalog.leftnav" destination="sidebar.main" before="-"/>
+</layout>
diff --git a/app/code/Magento/LayeredNavigation/view/frontend/page_layout/2columns-right.xml b/app/code/Magento/LayeredNavigation/view/frontend/page_layout/2columns-right.xml
new file mode 100644
index 00000000000..1d5ce83f96d
--- /dev/null
+++ b/app/code/Magento/LayeredNavigation/view/frontend/page_layout/2columns-right.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_layout.xsd">
+    <move element="catalog.leftnav" destination="sidebar.main" before="-"/>
+</layout>
diff --git a/app/code/Magento/LayeredNavigation/view/frontend/page_layout/3columns.xml b/app/code/Magento/LayeredNavigation/view/frontend/page_layout/3columns.xml
new file mode 100644
index 00000000000..1d5ce83f96d
--- /dev/null
+++ b/app/code/Magento/LayeredNavigation/view/frontend/page_layout/3columns.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_layout.xsd">
+    <move element="catalog.leftnav" destination="sidebar.main" before="-"/>
+</layout>
diff --git a/app/code/Magento/LayeredNavigation/view/frontend/page_layout/empty.xml b/app/code/Magento/LayeredNavigation/view/frontend/page_layout/empty.xml
new file mode 100644
index 00000000000..33758e63f03
--- /dev/null
+++ b/app/code/Magento/LayeredNavigation/view/frontend/page_layout/empty.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_layout.xsd">
+    <move element="catalog.leftnav" destination="category.product.list.additional" before="-"/>
+</layout>
diff --git a/app/design/frontend/Magento/blank/Magento_LayeredNavigation/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_LayeredNavigation/web/css/source/_module.less
index 8b3d0a38fe5..131329b5343 100644
--- a/app/design/frontend/Magento/blank/Magento_LayeredNavigation/web/css/source/_module.less
+++ b/app/design/frontend/Magento/blank/Magento_LayeredNavigation/web/css/source/_module.less
@@ -4,75 +4,88 @@
 //  */
 
 //
-//    Common
-//--------------------------------------
+//  Common
+//  _____________________________________________
 
 & when (@media-common = true) {
 
-.block.filter {
-    margin-bottom: 40px;
-    .title {
-        margin-bottom: 20px;
-        strong {
-            font-size: 18px;
-        }
-    }
-    .subtitle {
-        display: none;
-    }
-    .filter-options-content {
-        .filter-count-label {
-            &:extend(.abs-visually-hidden all);
+    .block.filter {
+        margin-bottom: @indent__xl ;
+        .title {
+            margin-bottom: @indent__base;
+            strong {
+                font-size: 18px;
+            }
         }
-    }
-    .options {
-        margin: 0;
-        > dt {
-            .lib-heading(h4);
-            margin: 0 0 10px;
+        .subtitle {
+            display: none;
         }
-        > dd {
-            margin: 0 0 25px;
-
-            .item {
-                margin-bottom: 3px;
+        .filter-options-content {
+            .filter-count-label {
+                &:extend(.abs-visually-hidden all);
             }
         }
-        .count {
-            .lib-css(color, @text__color__muted);
-            &:before {
-                content: '(';
+        .options {
+            margin: 0;
+            > dt {
+                .lib-heading(h4);
+                margin: 0 0 @indent__s;
             }
-            &:after {
-                content: ')';
+            > dd {
+                margin: 0 0 @indent__m;
+
+                .item {
+                    margin-bottom: 3px;
+                }
+            }
+            .count {
+                .lib-css(color, @text__color__muted);
+                &:before {
+                    content: '(';
+                }
+                &:after {
+                    content: ')';
+                }
             }
         }
-    }
-    .items {
-        &:extend(.abs-reset-list all);
-    }
-    .filtered {
         .items {
-            margin: 15px 0;
+            &:extend(.abs-reset-list all);
         }
-        .item {
-            position: relative;
-            padding-left: 22px;
-            margin-bottom: 6px;
-            .label {
-                font-weight: @font-weight__bold;
+        .filtered {
+            .items {
+                margin: 15px 0;
             }
-            .action.remove {
-                &:extend(.abs-remove-button-for-blocks all);
-                position: absolute;
-                left: -6px;
-                top: 0;
+            .item {
+                margin-bottom: 6px;
+                padding-left: 22px;
+                position: relative;
+                .label {
+                    font-weight: @font-weight__bold;
+                }
+                .action.remove {
+                    &:extend(.abs-remove-button-for-blocks all);
+                    left: -6px;
+                    position: absolute;
+                    top: 0;
+                }
+            }
+            & + .actions {
+                margin-bottom: 35px;
             }
-        }
-        & + .actions {
-            margin-bottom: 35px;
         }
     }
 }
 
+//
+//  Mobile
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) {
+    .page-with-filter {
+        .columns {
+            .sidebar-main {
+                .vendor-prefix-order(0);
+            }
+        }
+    }
 }
diff --git a/app/design/frontend/Magento/luma/Magento_LayeredNavigation/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_LayeredNavigation/web/css/source/_module.less
index 898ddc99afd..ebb6144972d 100644
--- a/app/design/frontend/Magento/luma/Magento_LayeredNavigation/web/css/source/_module.less
+++ b/app/design/frontend/Magento/luma/Magento_LayeredNavigation/web/css/source/_module.less
@@ -4,238 +4,239 @@
 //  */
 
 //
-//    Common
-//--------------------------------------
+//  Common
+//  _____________________________________________
 
 & when (@media-common = true) {
+    .filter {
+        &.block {
+            margin-bottom: 0;
+        }
+        &-title {
+            strong {
+                @_shadow: inset 0 1px 0 0 @color-white, inset 0 -1px 0 0 fade(@border-color__base, 30);
 
-.filter {
-    &.block {
-        margin-bottom: 0;
-    }
-    &-title {
-        strong {
-            position: absolute;
-            z-index: 2;
-            line-height: 16px;
-            border: 1px solid @border-color__base;
-            text-align: center;
-            padding: 7px 10px;
-            @_shadow: inset 0 1px 0 0 @color-white, inset 0 -1px 0 0 fade(@border-color__base, 30);
-            .lib-css(background-color, @toolbar-element-background);
-            .lib-css(box-shadow, @_shadow);
-            border-radius: 3px;
-            font-weight: 400;
-            top: 0;
-            left: 0;
-            &[data-count]:after {
-                content: attr(data-count);
-                display: inline-block;
-                border-radius: 2px;
-                padding: 2px;
-                font-size: .8em;
-                margin: 0 5px;
-                .lib-css(color, @color-white);
-                min-width: 1em;
-                line-height: 1;
-                background: @color-orange-red4;
-            }
-            &.disabled {
-                opacity: .5;
+                .lib-css(background-color, @toolbar-element-background);
+                .lib-css(box-shadow, @_shadow);
+                border-radius: 3px;
+                border: 1px solid @border-color__base;
+                font-weight: 400;
+                left: 0;
+                line-height: 16px;
+                padding: 7px @indent__s;
+                position: absolute;
+                text-align: center;
+                top: 0;
+                z-index: 2;
+                &[data-count]:after {
+                    .lib-css(color, @color-white);
+                    background: @color-orange-red4;
+                    border-radius: 2px;
+                    content: attr(data-count);
+                    display: inline-block;
+                    font-size: .8em;
+                    line-height: 1;
+                    margin: 0 @indent__xs;
+                    min-width: 1em;
+                    padding: 2px;
+                }
+                &.disabled {
+                    opacity: .5;
+                }
             }
         }
-    }
-    .block-subtitle {
-        font-weight: @font-weight__semibold;
-        padding: @indent__s @indent__s @indent__base;
-        font-size: @font-size__base;
-        line-height: 1em;
-        border-bottom: @border-width__base solid @border-color__base;
-    }
-    &-subtitle {
-            display: none;
-    }
-    &-current {
-        margin: 0;
-        .items {
-            padding: @indent__xs @indent__s;
+        .block-subtitle {
+            border-bottom: @border-width__base solid @border-color__base;
+            font-size: @font-size__base;
+            font-weight: @font-weight__semibold;
+            line-height: 1em;
+            padding: @indent__s @indent__s @indent__base;
         }
-        .item {
-            position: relative;
-            z-index: 1;
-            padding-left: 17px;
+        &-subtitle {
+            display: none;
         }
-        .filter &-subtitle {
-            display: block;
-            border: none;
-            padding-bottom: @indent__s;
+        &-current {
+            margin: 0;
+            .items {
+                padding: @indent__xs @indent__s;
+            }
+            .item {
+                padding-left: 17px;
+                position: relative;
+                z-index: 1;
+            }
+            .filter &-subtitle {
+                border: none;
+                display: block;
+                padding-bottom: @indent__s;
+            }
+            .action.remove {
+                &:extend(.abs-remove-button-for-blocks all);
+                left: -2px;
+                position: absolute;
+                top: -1px;
+            }
         }
-        .action.remove {
-            &:extend(.abs-remove-button-for-blocks all);
-            position: absolute;
-            left: -2px;
-            top: -1px;
+        &-actions {
+            margin-bottom: @indent__m;
+            padding: 0 @indent__s;
         }
-    }
-    &-actions {
-        padding: 0 @indent__s;
-        margin-bottom: @indent__m;
-    }
-    &-label {
-        font-weight: @font-weight__bold;
-        &:after {
-            content: ": ";
+        &-label {
+            font-weight: @font-weight__bold;
+            &:after {
+                content: ': ';
+            }
         }
-    }
-    &-value {
-        .lib-css(color, @filter-quantity);
-    }
-    &-options {
-        display: none;
-        margin: 0;
-        &-item {
-            border-bottom: @border-width__base solid @border-color__base;
-            padding-bottom: @indent__s;
+        &-value {
+            .lib-css(color, @filter-quantity);
         }
-        &-title {
-            cursor: pointer;
-            font-weight: @font-weight__semibold;
+        &-options {
+            display: none;
             margin: 0;
-            overflow: hidden;
-            padding: @indent__s 20px+@indent__s 0 @indent__s;
-            position: relative;
-            z-index: 1;
-            text-transform: uppercase;
-
-            .lib-icon-font(
+            &-item {
+                border-bottom: @border-width__base solid @border-color__base;
+                padding-bottom: @indent__s;
+            }
+            &-title {
+                cursor: pointer;
+                font-weight: @font-weight__semibold;
+                margin: 0;
+                overflow: hidden;
+                padding: @indent__s 20px+@indent__s 0 @indent__s;
+                position: relative;
+                text-transform: uppercase;
+                z-index: 1;
+                .lib-icon-font(
                 @_icon-font-content: @icon-down,
                 @_icon-font-size: 13px,
                 @_icon-font-position: after,
                 @_icon-font-display: block
-            );
-            &:after {
-                position: absolute;
-                right: 13px;
-                top: 9px;
-            }
-            &:hover {
-                .lib-css(color, @filter-link-hover);
-            }
-            .active > & {
-                .lib-icon-font-symbol(
-                    @_icon-font-content: @icon-up,
-                    @_icon-font-position: after
                 );
-            }
-        }
-        &-content {
-            margin: 0;
-            padding: @indent__s;
-            .item {
-                margin: @indent__s 0;
-                line-height: 1.5em;
-            }
-            a {
-                .lib-css(color, @filter-link);
-                margin-right: -5px;
-                padding-left: 5px;
-                margin-left: -5px;
-                padding-right: 7px;
+
+                &:after {
+                    position: absolute;
+                    right: 13px;
+                    top: 9px;
+                }
                 &:hover {
-                    background-color: @color-gray91;
-                    text-decoration: none;
-                    & + .count {
+                    .lib-css(color, @filter-link-hover);
+                }
+                .active > & {
+                    .lib-icon-font-symbol(
+                        @_icon-font-content: @icon-up,
+                        @_icon-font-position: after
+                    );
+                }
+            }
+            &-content {
+                margin: 0;
+                padding: @indent__s;
+                .item {
+                    margin: @indent__s 0;
+                    line-height: 1.5em;
+                }
+                a {
+                    .lib-css(color, @filter-link);
+                    margin-left: -5px;
+                    margin-right: -5px;
+                    padding-left: 5px;
+                    padding-right: 7px;
+                    &:hover {
                         background-color: @color-gray91;
+                        text-decoration: none;
+                        & + .count {
+                            background-color: @color-gray91;
+                        }
                     }
                 }
-            }
-            .count {
-                .lib-css(color, @filter-quantity);
-                padding-right: 5px;
-                &:before {
-                    content: "(";
+                .count {
+                    .lib-css(color, @filter-quantity);
+                    padding-right: 5px;
+                    &:before {
+                        content: '(';
+                    }
+                    &:after {
+                        content: ')';
+                    }
                 }
-                &:after {
-                    content: ")";
+                .filter-count-label {
+                    &:extend(.abs-visually-hidden all);
                 }
             }
-            .filter-count-label {
-                &:extend(.abs-visually-hidden all);
-            }
         }
     }
 }
 
-}
-
 //
-//    Mobile
-//--------------------------------------
+//  Mobile
+//  _____________________________________________
 
 .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) {
-    body.filter-active {
-        .page-wrapper {
-            visibility: hidden;
-            height: 0;
-            margin-top: -999999em;
-        }
-        .columns {
-            z-index: 999;
+    body {
+        &.filter-active {
+            .page-wrapper {
+                height: 0;
+                margin-top: -999999em;
+                visibility: hidden;
+            }
+            .columns {
+                z-index: 999;
+            }
         }
     }
 
     .filter {
         &.active {
             position: relative;
-            z-index: 99;
             visibility: visible;
+            z-index: 99;
             .filter-options-item:last-child {
                 margin-bottom: @indent__xl;
             }
             .filter-title {
+                border-bottom: 1px solid @border-color__base;
+                height: 48px;
+                left: 0;
                 position: fixed;
-                top: 0;
                 right: 0;
-                left: 0;
-                height: 48px;
+                top: 0;
                 z-index: 2;
-                border-bottom: 1px solid @border-color__base;
                 strong {
-                        right: 3px;
-                        left: auto;
-                        top: 10px;
-                        border: 0;
-                        background: none;
-                        .lib-css(box-shadow, none);
-                        color: transparent;
-                        .lib-icon-font(
-                            @icon-remove,
-                            @_icon-font-color: @text__color__muted,
-                            @_icon-font-size: 16px,
-                            @_icon-font-position: after
-                            );
+                    .lib-css(box-shadow, none);
+                    background: none;
+                    border: 0;
+                    color: transparent;
+                    left: auto;
+                    right: 3px;
+                    top: 10px;
+                    .lib-icon-font(
+                    @icon-remove,
+                    @_icon-font-color: @text__color__muted,
+                    @_icon-font-size: 16px,
+                    @_icon-font-position: after
+                    );
                 }
             }
             .filter-subtitle {
+                .lib-css(background, @toolbar-background);
                 display: block;
+                height: 50px;
+                left: 0;
+                line-height: 32px;
                 position: fixed;
-                top: 0;
                 right: 0;
-                left: 0;
-                height: 50px;
-                .lib-css(background, @toolbar-background);
+                top: 0;
                 z-index: 1;
-                line-height: 32px;
             }
             .filter-options {
+                .lib-css(background, @color-white);
+                bottom: 0;
                 display: block;
-                position: fixed;
-                top: 50px;
                 left: 0;
-                right: 0;
-                bottom: 0;
                 overflow: scroll;
-                .lib-css(background, @color-white);
+                position: fixed;
+                right: 0;
+                top: 50px;
                 z-index: 10;
             }
         }
@@ -253,36 +254,23 @@
             padding: @indent__xs @indent__s;
         }
     }
-    .filter-no-options {
-        .filter-title:before {
-            content: "";
-            width: 100px;
-            height: 40px;
-            background: rgba(255,255,255,.5);
-            display: block;
-            position: relative;
-            z-index: 99;
-            margin-top: -40px;
-            left: -15px;
-        }
-    }
     .filter .filter-current {
-        margin: @indent__xs -@indent__s 0;
         border: solid @border-color__base;
         border-width: 1px 0;
+        margin: @indent__xs -@indent__s 0;
 
         .items {
             display: none;
         }
         &-subtitle {
-            text-transform: uppercase;
             position: relative;
+            text-transform: uppercase;
             z-index: 1;
             .lib-icon-font(
-                @_icon-font-content: @icon-down,
-                @_icon-font-size: 13px,
-                @_icon-font-position: before,
-                @_icon-font-display: block
+            @_icon-font-content: @icon-down,
+            @_icon-font-size: 13px,
+            @_icon-font-position: before,
+            @_icon-font-display: block
             );
             &:before {
                 position: absolute;
@@ -291,17 +279,17 @@
             }
 
             &:after {
+                .lib-css(color, @text__color__muted);
                 content:' (' attr(data-count) ')';
                 font-size:.9em;
-                .lib-css(color, @text__color__muted);
             }
         }
         &.active {
             padding-bottom: 30px;
             .block-subtitle {
                 .lib-icon-font-symbol(
-                    @_icon-font-content: @icon-up,
-                    @_icon-font-position: before
+                @_icon-font-content: @icon-up,
+                @_icon-font-position: before
                 );
             }
             .items {
@@ -315,6 +303,31 @@
             display: none;
         }
     }
+    .filter-no-options {
+        .filter-title {
+            &:before {
+                background: rgba(255,255,255,.5);
+                content: '';
+                display: block;
+                height: 40px;
+                left: -15px;
+                margin-top: -60px;
+                position: relative;
+                width: 100px;
+                z-index: 99;
+            }
+        }
+        .filter-content {
+            margin-bottom: @indent__base;
+        }
+    }
+    .page-with-filter {
+        .columns {
+            .sidebar-main {
+                .vendor-prefix-order(0);
+            }
+        }
+    }
 }
 
 .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__s) {
@@ -336,11 +349,11 @@
         }
         &.active &-options,
         &-options {
+            background: transparent;
             clear: both;
-            position: static;
-            overflow: initial;
             display: block;
-            background: transparent;
+            overflow: initial;
+            position: static;
         }
         &-subtitle {
             position: static;
@@ -357,9 +370,9 @@
             position: static;
         }
         &.page-with-filter .column.main {
+            padding-top: 45px;
             position: relative;
             z-index: 1;
-            padding-top: 45px;
         }
         .filter {
             &.block {
@@ -373,8 +386,8 @@
             }
             &-options {
                 &-item {
-                    display: inline-block;
                     border: 0;
+                    display: inline-block;
                     margin-right: @indent__m;
                     &.active {
                         position: relative;
@@ -384,14 +397,14 @@
                         }
                         &:after,
                         &:before {
-                            content: "";
-                            display: block;
                             .lib-arrow(up, 8px, @color-black);
-                            position: absolute;
-                            left: 50%;
                             bottom: -1px;
+                            content: '';
+                            display: block;
+                            left: 50%;
+                            margin-left: -@indent__base;
+                            position: absolute;
                             z-index: 3;
-                            margin-left: -20px;
                         }
                         &:after {
                             .lib-css(border-bottom-color, @color-white);
@@ -401,7 +414,7 @@
                     }
                 }
                 &-title {
-                    padding: 0 20px 0 0;
+                    padding: 0 @indent__base 0 0;
                     &:after {
                         right: 2px;
                         top: 3px;
@@ -409,15 +422,16 @@
                     }
                 }
                 &-content {
-                    position: absolute;
-                    z-index: 2;
+                    @_shadow: 0 3px 5px 0 rgba(50, 50, 50, .75);
+
                     .lib-css(background, @color-white);
-                    width: 180px;
-                    top: 100%;
+                    .lib-css(box-shadow, @_shadow, 1);
                     border: 1px solid @border-color__base;
                     padding: @indent__xs 0;
-                    @_shadow:  0 3px 5px 0 rgba(50, 50, 50, .75);
-                    .lib-css(box-shadow, @_shadow, 1);
+                    position: absolute;
+                    top: 100%;
+                    width: 180px;
+                    z-index: 2;
                     .item {
                         padding: @indent__xs;
                         margin:0;
@@ -434,13 +448,13 @@
                 display: inline;
                 line-height: 35px;
                 &-subtitle {
-                    display: inline;
-                    padding: 0;
                     .lib-css(color, @text__color__muted);
+                    display: inline;
                     font-size: @font-size__base;
                     font-weight: normal;
+                    padding: 0;
                     &:after {
-                        content: ":";
+                        content: ':';
                     }
                 }
                 .item,
-- 
GitLab


From 323f697dc3d9d88ca52b875fe2e9f59fbddbc41f Mon Sep 17 00:00:00 2001
From: Anton Ohorodnyk <aohorodnyk@ebay.com>
Date: Thu, 22 Oct 2015 15:15:03 +0300
Subject: [PATCH 186/370] MAGETWO-44106: New created category should be anchor
 by default

---
 app/code/Magento/Catalog/Setup/UpgradeData.php | 6 ++++++
 app/code/Magento/Catalog/etc/module.xml        | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Catalog/Setup/UpgradeData.php b/app/code/Magento/Catalog/Setup/UpgradeData.php
index c5963538371..05ad5ca625b 100644
--- a/app/code/Magento/Catalog/Setup/UpgradeData.php
+++ b/app/code/Magento/Catalog/Setup/UpgradeData.php
@@ -139,6 +139,12 @@ class UpgradeData implements UpgradeDataInterface
                 'Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection'
             );
         }
+
+        if (version_compare($context->getVersion(), '2.0.3') < 0) {
+            /** @var \Magento\Catalog\Setup\CategorySetup $categorySetup */
+            $categorySetup = $this->categorySetupFactory->create(['setup' => $setup]);
+            $categorySetup->updateAttribute(3, 51, 'default_value', 1);
+        }
         $setup->endSetup();
     }
 }
diff --git a/app/code/Magento/Catalog/etc/module.xml b/app/code/Magento/Catalog/etc/module.xml
index ee04bbc7431..e5bc1089fc9 100644
--- a/app/code/Magento/Catalog/etc/module.xml
+++ b/app/code/Magento/Catalog/etc/module.xml
@@ -6,7 +6,7 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
-    <module name="Magento_Catalog" setup_version="2.0.2">
+    <module name="Magento_Catalog" setup_version="2.0.3">
         <sequence>
             <module name="Magento_Eav"/>
             <module name="Magento_Cms"/>
-- 
GitLab


From a1d18834b8698a41f399018505b59dec789524d1 Mon Sep 17 00:00:00 2001
From: Olga Matviienko <omatviienko@ebay.com>
Date: Thu, 22 Oct 2015 15:49:56 +0300
Subject: [PATCH 187/370] MAGETWO-44362: Can't filter the products if
 responsive

---
 .../LayeredNavigation/view/frontend/page_layout/1column.xml     | 2 +-
 .../view/frontend/page_layout/2columns-left.xml                 | 2 +-
 .../view/frontend/page_layout/2columns-right.xml                | 2 +-
 .../LayeredNavigation/view/frontend/page_layout/3columns.xml    | 2 +-
 .../LayeredNavigation/view/frontend/page_layout/empty.xml       | 2 +-
 5 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/app/code/Magento/LayeredNavigation/view/frontend/page_layout/1column.xml b/app/code/Magento/LayeredNavigation/view/frontend/page_layout/1column.xml
index 55f4d32eb78..d35beff77e8 100644
--- a/app/code/Magento/LayeredNavigation/view/frontend/page_layout/1column.xml
+++ b/app/code/Magento/LayeredNavigation/view/frontend/page_layout/1column.xml
@@ -5,6 +5,6 @@
  * See COPYING.txt for license details.
  */
 -->
-<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_layout.xsd">
+<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_layout.xsd">
     <move element="catalog.leftnav" destination="content.top" after="-"/>
 </layout>
diff --git a/app/code/Magento/LayeredNavigation/view/frontend/page_layout/2columns-left.xml b/app/code/Magento/LayeredNavigation/view/frontend/page_layout/2columns-left.xml
index 1d5ce83f96d..94286e3cd4d 100644
--- a/app/code/Magento/LayeredNavigation/view/frontend/page_layout/2columns-left.xml
+++ b/app/code/Magento/LayeredNavigation/view/frontend/page_layout/2columns-left.xml
@@ -5,6 +5,6 @@
  * See COPYING.txt for license details.
  */
 -->
-<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_layout.xsd">
+<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_layout.xsd">
     <move element="catalog.leftnav" destination="sidebar.main" before="-"/>
 </layout>
diff --git a/app/code/Magento/LayeredNavigation/view/frontend/page_layout/2columns-right.xml b/app/code/Magento/LayeredNavigation/view/frontend/page_layout/2columns-right.xml
index 1d5ce83f96d..94286e3cd4d 100644
--- a/app/code/Magento/LayeredNavigation/view/frontend/page_layout/2columns-right.xml
+++ b/app/code/Magento/LayeredNavigation/view/frontend/page_layout/2columns-right.xml
@@ -5,6 +5,6 @@
  * See COPYING.txt for license details.
  */
 -->
-<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_layout.xsd">
+<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_layout.xsd">
     <move element="catalog.leftnav" destination="sidebar.main" before="-"/>
 </layout>
diff --git a/app/code/Magento/LayeredNavigation/view/frontend/page_layout/3columns.xml b/app/code/Magento/LayeredNavigation/view/frontend/page_layout/3columns.xml
index 1d5ce83f96d..94286e3cd4d 100644
--- a/app/code/Magento/LayeredNavigation/view/frontend/page_layout/3columns.xml
+++ b/app/code/Magento/LayeredNavigation/view/frontend/page_layout/3columns.xml
@@ -5,6 +5,6 @@
  * See COPYING.txt for license details.
  */
 -->
-<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_layout.xsd">
+<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_layout.xsd">
     <move element="catalog.leftnav" destination="sidebar.main" before="-"/>
 </layout>
diff --git a/app/code/Magento/LayeredNavigation/view/frontend/page_layout/empty.xml b/app/code/Magento/LayeredNavigation/view/frontend/page_layout/empty.xml
index 33758e63f03..6a45bb38314 100644
--- a/app/code/Magento/LayeredNavigation/view/frontend/page_layout/empty.xml
+++ b/app/code/Magento/LayeredNavigation/view/frontend/page_layout/empty.xml
@@ -5,6 +5,6 @@
  * See COPYING.txt for license details.
  */
 -->
-<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_layout.xsd">
+<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_layout.xsd">
     <move element="catalog.leftnav" destination="category.product.list.additional" before="-"/>
 </layout>
-- 
GitLab


From 4f70e617c81b33cf13312d04fee87034b34ce303 Mon Sep 17 00:00:00 2001
From: Dmitry Kologrivov <dmitry_kologrivov@epam.com>
Date: Thu, 22 Oct 2015 15:54:48 +0300
Subject: [PATCH 188/370] MAGETWO-44227: revert changes for xsd schema

---
 .../ProductVideo/Model/VideoExtractor.php     |   2 +-
 app/code/Magento/ProductVideo/etc/view.xml    |   2 +-
 app/code/Magento/Swatches/etc/view.xml        |   2 +-
 .../adminhtml/Magento/backend/etc/view.xml    |   2 +-
 .../adminhtml/Magento/backend/etc/view.xsd    |  57 ----
 .../frontend/Magento/blank/etc/view.xml       |   2 +-
 .../frontend/Magento/blank/etc/view.xsd       |  57 ----
 app/design/frontend/Magento/luma/etc/view.xml |   2 +-
 app/design/frontend/Magento/luma/etc/view.xsd |  57 ----
 .../Magento/Framework/Catalog/README.md       |   1 -
 .../Magento/Framework/Catalog/etc/view.xsd    |  57 ----
 .../Magento/Framework/Config/View.php         |  13 +-
 .../Magento/Framework/Config/etc/view.xsd     |  68 ++++-
 .../Magento/Framework/ProductVideo/README.md  |   1 -
 .../Framework/ProductVideo/etc/view.xsd       |  45 ----
 .../Magento/Framework/View/Xsd/Reader.php     | 248 ------------------
 16 files changed, 77 insertions(+), 539 deletions(-)
 delete mode 100644 app/design/adminhtml/Magento/backend/etc/view.xsd
 delete mode 100644 app/design/frontend/Magento/blank/etc/view.xsd
 delete mode 100644 app/design/frontend/Magento/luma/etc/view.xsd
 delete mode 100644 lib/internal/Magento/Framework/Catalog/README.md
 delete mode 100644 lib/internal/Magento/Framework/Catalog/etc/view.xsd
 delete mode 100644 lib/internal/Magento/Framework/ProductVideo/README.md
 delete mode 100644 lib/internal/Magento/Framework/ProductVideo/etc/view.xsd
 delete mode 100644 lib/internal/Magento/Framework/View/Xsd/Reader.php

diff --git a/app/code/Magento/ProductVideo/Model/VideoExtractor.php b/app/code/Magento/ProductVideo/Model/VideoExtractor.php
index be97959b6df..aa9267e5a32 100644
--- a/app/code/Magento/ProductVideo/Model/VideoExtractor.php
+++ b/app/code/Magento/ProductVideo/Model/VideoExtractor.php
@@ -12,7 +12,7 @@ class VideoExtractor implements \Magento\Framework\View\Xsd\Media\TypeDataExtrac
     /**
      * Media Entry type code
      */
-    const MEDIA_TYPE_CODE = 'image';
+    const MEDIA_TYPE_CODE = 'video';
 
     /**
      * Extract configuration data of videos from the DOM structure
diff --git a/app/code/Magento/ProductVideo/etc/view.xml b/app/code/Magento/ProductVideo/etc/view.xml
index 3a09480fc4c..f5ce5d81d6f 100644
--- a/app/code/Magento/ProductVideo/etc/view.xml
+++ b/app/code/Magento/ProductVideo/etc/view.xml
@@ -5,7 +5,7 @@
 * See COPYING.txt for license details.
 */
 -->
-<view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ProductVideo/etc/view.xsd">
+<view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Config/etc/view.xsd">
     <media>
         <videos module="Magento_ProductVideo">
             <video id="play_if_base" type="play_if_base">
diff --git a/app/code/Magento/Swatches/etc/view.xml b/app/code/Magento/Swatches/etc/view.xml
index b880f30786d..dd20b5cec83 100644
--- a/app/code/Magento/Swatches/etc/view.xml
+++ b/app/code/Magento/Swatches/etc/view.xml
@@ -5,7 +5,7 @@
 * See COPYING.txt for license details.
 */
 -->
-<view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Catalog/etc/view.xsd">
+<view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Config/etc/view.xsd">
     <media>
         <images module="Magento_Catalog">
             <image id="swatch_image" type="swatch_image">
diff --git a/app/design/adminhtml/Magento/backend/etc/view.xml b/app/design/adminhtml/Magento/backend/etc/view.xml
index a846813648e..eae913a23c2 100644
--- a/app/design/adminhtml/Magento/backend/etc/view.xml
+++ b/app/design/adminhtml/Magento/backend/etc/view.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
 -->
-<view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Catalog/etc/view.xsd">
+<view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Config/etc/view.xsd">
     <vars module="Js_Bundle">
         <var name="bundle_size">1MB</var>
     </vars>
diff --git a/app/design/adminhtml/Magento/backend/etc/view.xsd b/app/design/adminhtml/Magento/backend/etc/view.xsd
deleted file mode 100644
index a695016f035..00000000000
--- a/app/design/adminhtml/Magento/backend/etc/view.xsd
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-    <xs:redefine schemaLocation="urn:magento:framework:Config/etc/view.xsd">
-        <xs:complexType name="mediaType" mixed="true">
-            <xs:complexContent>
-                <xs:extension base="mediaType">
-                    <xs:sequence>
-                        <xs:element name="images" type="imageType" minOccurs="0"/>
-                    </xs:sequence>
-                </xs:extension>
-            </xs:complexContent>
-        </xs:complexType>
-    </xs:redefine>
-
-    <xs:complexType name="imageType">
-        <xs:sequence>
-            <xs:element name="image" maxOccurs="unbounded">
-                <xs:complexType>
-                    <xs:sequence>
-                        <xs:element name="width" type="xs:positiveInteger" minOccurs="0"/>
-                        <xs:element name="height" type="xs:positiveInteger" minOccurs="0"/>
-                        <xs:element name="constrain" type="xs:boolean" minOccurs="0"/>
-                        <xs:element name="aspect_ratio" type="xs:boolean" minOccurs="0"/>
-                        <xs:element name="frame" type="xs:boolean" minOccurs="0"/>
-                        <xs:element name="transparency" type="xs:boolean" minOccurs="0"/>
-                        <xs:element name="background" minOccurs="0">
-                            <xs:simpleType>
-                                <xs:restriction base="xs:string">
-                                    <xs:pattern value="\[(\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\]"/>
-                                </xs:restriction>
-                            </xs:simpleType>
-                        </xs:element>
-                    </xs:sequence>
-                    <xs:attribute name="id" type="xs:string" use="required"/>
-                    <xs:attribute name="type">
-                        <xs:simpleType>
-                            <xs:restriction base="xs:string">
-                                <xs:enumeration value="thumbnail"/>
-                                <xs:enumeration value="small_image"/>
-                                <xs:enumeration value="image"/>
-                                <xs:enumeration value="swatch_image"/>
-                                <xs:enumeration value="swatch_thumb"/>
-                            </xs:restriction>
-                        </xs:simpleType>
-                    </xs:attribute>
-                </xs:complexType>
-            </xs:element>
-        </xs:sequence>
-        <xs:attribute name="module" type="xs:string" use="required"/>
-    </xs:complexType>
-</xs:schema>
diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index bdb30144699..2e036c02197 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
 -->
-<view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Catalog/etc/view.xsd">
+<view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Config/etc/view.xsd">
     <media>
         <images module="Magento_Catalog">
             <image id="bundled_product_customization_page" type="thumbnail">
diff --git a/app/design/frontend/Magento/blank/etc/view.xsd b/app/design/frontend/Magento/blank/etc/view.xsd
deleted file mode 100644
index a695016f035..00000000000
--- a/app/design/frontend/Magento/blank/etc/view.xsd
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-    <xs:redefine schemaLocation="urn:magento:framework:Config/etc/view.xsd">
-        <xs:complexType name="mediaType" mixed="true">
-            <xs:complexContent>
-                <xs:extension base="mediaType">
-                    <xs:sequence>
-                        <xs:element name="images" type="imageType" minOccurs="0"/>
-                    </xs:sequence>
-                </xs:extension>
-            </xs:complexContent>
-        </xs:complexType>
-    </xs:redefine>
-
-    <xs:complexType name="imageType">
-        <xs:sequence>
-            <xs:element name="image" maxOccurs="unbounded">
-                <xs:complexType>
-                    <xs:sequence>
-                        <xs:element name="width" type="xs:positiveInteger" minOccurs="0"/>
-                        <xs:element name="height" type="xs:positiveInteger" minOccurs="0"/>
-                        <xs:element name="constrain" type="xs:boolean" minOccurs="0"/>
-                        <xs:element name="aspect_ratio" type="xs:boolean" minOccurs="0"/>
-                        <xs:element name="frame" type="xs:boolean" minOccurs="0"/>
-                        <xs:element name="transparency" type="xs:boolean" minOccurs="0"/>
-                        <xs:element name="background" minOccurs="0">
-                            <xs:simpleType>
-                                <xs:restriction base="xs:string">
-                                    <xs:pattern value="\[(\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\]"/>
-                                </xs:restriction>
-                            </xs:simpleType>
-                        </xs:element>
-                    </xs:sequence>
-                    <xs:attribute name="id" type="xs:string" use="required"/>
-                    <xs:attribute name="type">
-                        <xs:simpleType>
-                            <xs:restriction base="xs:string">
-                                <xs:enumeration value="thumbnail"/>
-                                <xs:enumeration value="small_image"/>
-                                <xs:enumeration value="image"/>
-                                <xs:enumeration value="swatch_image"/>
-                                <xs:enumeration value="swatch_thumb"/>
-                            </xs:restriction>
-                        </xs:simpleType>
-                    </xs:attribute>
-                </xs:complexType>
-            </xs:element>
-        </xs:sequence>
-        <xs:attribute name="module" type="xs:string" use="required"/>
-    </xs:complexType>
-</xs:schema>
diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index 974c4c9fe5a..e4f42fabb5c 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -5,7 +5,7 @@
  * See COPYING.txt for license details.
  */
 -->
-<view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Catalog/etc/view.xsd">
+<view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Config/etc/view.xsd">
     <media>
         <images module="Magento_Catalog">
             <image id="bundled_product_customization_page" type="thumbnail">
diff --git a/app/design/frontend/Magento/luma/etc/view.xsd b/app/design/frontend/Magento/luma/etc/view.xsd
deleted file mode 100644
index a695016f035..00000000000
--- a/app/design/frontend/Magento/luma/etc/view.xsd
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-    <xs:redefine schemaLocation="urn:magento:framework:Config/etc/view.xsd">
-        <xs:complexType name="mediaType" mixed="true">
-            <xs:complexContent>
-                <xs:extension base="mediaType">
-                    <xs:sequence>
-                        <xs:element name="images" type="imageType" minOccurs="0"/>
-                    </xs:sequence>
-                </xs:extension>
-            </xs:complexContent>
-        </xs:complexType>
-    </xs:redefine>
-
-    <xs:complexType name="imageType">
-        <xs:sequence>
-            <xs:element name="image" maxOccurs="unbounded">
-                <xs:complexType>
-                    <xs:sequence>
-                        <xs:element name="width" type="xs:positiveInteger" minOccurs="0"/>
-                        <xs:element name="height" type="xs:positiveInteger" minOccurs="0"/>
-                        <xs:element name="constrain" type="xs:boolean" minOccurs="0"/>
-                        <xs:element name="aspect_ratio" type="xs:boolean" minOccurs="0"/>
-                        <xs:element name="frame" type="xs:boolean" minOccurs="0"/>
-                        <xs:element name="transparency" type="xs:boolean" minOccurs="0"/>
-                        <xs:element name="background" minOccurs="0">
-                            <xs:simpleType>
-                                <xs:restriction base="xs:string">
-                                    <xs:pattern value="\[(\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\]"/>
-                                </xs:restriction>
-                            </xs:simpleType>
-                        </xs:element>
-                    </xs:sequence>
-                    <xs:attribute name="id" type="xs:string" use="required"/>
-                    <xs:attribute name="type">
-                        <xs:simpleType>
-                            <xs:restriction base="xs:string">
-                                <xs:enumeration value="thumbnail"/>
-                                <xs:enumeration value="small_image"/>
-                                <xs:enumeration value="image"/>
-                                <xs:enumeration value="swatch_image"/>
-                                <xs:enumeration value="swatch_thumb"/>
-                            </xs:restriction>
-                        </xs:simpleType>
-                    </xs:attribute>
-                </xs:complexType>
-            </xs:element>
-        </xs:sequence>
-        <xs:attribute name="module" type="xs:string" use="required"/>
-    </xs:complexType>
-</xs:schema>
diff --git a/lib/internal/Magento/Framework/Catalog/README.md b/lib/internal/Magento/Framework/Catalog/README.md
deleted file mode 100644
index 6cb1e7b6ec3..00000000000
--- a/lib/internal/Magento/Framework/Catalog/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Library contains schema files used to validate XML files in Magento\Catalog module
diff --git a/lib/internal/Magento/Framework/Catalog/etc/view.xsd b/lib/internal/Magento/Framework/Catalog/etc/view.xsd
deleted file mode 100644
index cc9c4fec4a7..00000000000
--- a/lib/internal/Magento/Framework/Catalog/etc/view.xsd
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-    <xs:redefine schemaLocation="../../Config/etc/view.xsd">
-        <xs:complexType name="mediaType" mixed="true">
-            <xs:complexContent>
-                <xs:extension base="mediaType">
-                    <xs:sequence>
-                        <xs:element name="images" type="imageType" minOccurs="0"/>
-                    </xs:sequence>
-                </xs:extension>
-            </xs:complexContent>
-        </xs:complexType>
-    </xs:redefine>
-
-    <xs:complexType name="imageType">
-        <xs:sequence>
-            <xs:element name="image" minOccurs="1" maxOccurs="unbounded">
-                <xs:complexType>
-                    <xs:sequence>
-                        <xs:element name="width" type="xs:positiveInteger" minOccurs="0"/>
-                        <xs:element name="height" type="xs:positiveInteger" minOccurs="0"/>
-                        <xs:element name="constrain" type="xs:boolean" minOccurs="0"/>
-                        <xs:element name="aspect_ratio" type="xs:boolean" minOccurs="0"/>
-                        <xs:element name="frame" type="xs:boolean" minOccurs="0"/>
-                        <xs:element name="transparency" type="xs:boolean" minOccurs="0"/>
-                        <xs:element name="background" minOccurs="0">
-                            <xs:simpleType>
-                                <xs:restriction base="xs:string">
-                                    <xs:pattern value="\[(\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\]"/>
-                                </xs:restriction>
-                            </xs:simpleType>
-                        </xs:element>
-                    </xs:sequence>
-                    <xs:attribute name="id" type="xs:string" use="required"/>
-                    <xs:attribute name="type">
-                        <xs:simpleType>
-                            <xs:restriction base="xs:string">
-                                <xs:enumeration value="thumbnail"/>
-                                <xs:enumeration value="small_image"/>
-                                <xs:enumeration value="image"/>
-                                <xs:enumeration value="swatch_image"/>
-                                <xs:enumeration value="swatch_thumb"/>
-                            </xs:restriction>
-                        </xs:simpleType>
-                    </xs:attribute>
-                </xs:complexType>
-            </xs:element>
-        </xs:sequence>
-        <xs:attribute name="module" type="xs:string" use="required"/>
-    </xs:complexType>
-</xs:schema>
diff --git a/lib/internal/Magento/Framework/Config/View.php b/lib/internal/Magento/Framework/Config/View.php
index 98a96140188..d4fdf5f10f8 100644
--- a/lib/internal/Magento/Framework/Config/View.php
+++ b/lib/internal/Magento/Framework/Config/View.php
@@ -10,7 +10,6 @@
 namespace Magento\Framework\Config;
 
 use Magento\Framework\Config\Dom\UrnResolver;
-use Magento\Framework\View\Xsd\Reader;
 use Magento\Framework\View\Xsd\Media\TypeDataExtractorPool;
 
 class View extends \Magento\Framework\Config\AbstractXml
@@ -35,14 +34,12 @@ class View extends \Magento\Framework\Config\AbstractXml
 
     /**
      * @param array $configFiles
-     * @param Reader $xsdReader
      * @param UrnResolver $urnResolver
      * @param TypeDataExtractorPool $extractorPool
      * @param array $xpath
      */
     public function __construct(
         $configFiles,
-        Reader $xsdReader,
         UrnResolver $urnResolver,
         TypeDataExtractorPool $extractorPool,
         $xpath = []
@@ -50,19 +47,17 @@ class View extends \Magento\Framework\Config\AbstractXml
         $this->xpath = $xpath;
         $this->extractorPool = $extractorPool;
         $this->urnResolver = $urnResolver;
-        $this->xsdReader = $xsdReader;
         parent::__construct($configFiles);
     }
-    
+
     /**
-     * Merged file view.xsd
+     * Path to view.xsd
      *
      * @return string
      */
     public function getSchemaFile()
     {
-        $configXsd = $this->xsdReader->read();
-        return $configXsd;
+        return $this->urnResolver->getRealPath('urn:magento:framework:Config/etc/view.xsd');
     }
 
     /**
@@ -97,7 +92,7 @@ class View extends \Magento\Framework\Config\AbstractXml
                                     $mediaNode,
                                     $childNode->tagName
                                 );
-                            $result = array_merge($result, $mediaNodesArray);
+                            $result = array_merge_recursive($result, $mediaNodesArray);
                         }
                     }
                     break;
diff --git a/lib/internal/Magento/Framework/Config/etc/view.xsd b/lib/internal/Magento/Framework/Config/etc/view.xsd
index 1ded09402a6..060ec8b9fe6 100644
--- a/lib/internal/Magento/Framework/Config/etc/view.xsd
+++ b/lib/internal/Magento/Framework/Config/etc/view.xsd
@@ -38,8 +38,74 @@
         <xs:attribute name="value" type="xs:string"/>
     </xs:complexType>
     <xs:complexType name="mediaType" mixed="true">
-        <xs:all />
+        <xs:all>
+            <xs:element name="images" type="imageType" minOccurs="0"/>
+            <xs:element name="videos" type="videoType" minOccurs="0"/>
+        </xs:all>
     </xs:complexType>
+
+    <xs:complexType name="imageType">
+        <xs:sequence>
+            <xs:element name="image" minOccurs="1" maxOccurs="unbounded">
+                <xs:complexType>
+                    <xs:sequence>
+                        <xs:element name="width" type="xs:positiveInteger" minOccurs="0"/>
+                        <xs:element name="height" type="xs:positiveInteger" minOccurs="0"/>
+                        <xs:element name="constrain" type="xs:boolean" minOccurs="0"/>
+                        <xs:element name="aspect_ratio" type="xs:boolean" minOccurs="0"/>
+                        <xs:element name="frame" type="xs:boolean" minOccurs="0"/>
+                        <xs:element name="transparency" type="xs:boolean" minOccurs="0"/>
+                        <xs:element name="background" minOccurs="0">
+                            <xs:simpleType>
+                                <xs:restriction base="xs:string">
+                                    <xs:pattern value="\[(\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\]"/>
+                                </xs:restriction>
+                            </xs:simpleType>
+                        </xs:element>
+                    </xs:sequence>
+                    <xs:attribute name="id" type="xs:string" use="required"/>
+                    <xs:attribute name="type">
+                        <xs:simpleType>
+                            <xs:restriction base="xs:string">
+                                <xs:enumeration value="thumbnail"/>
+                                <xs:enumeration value="small_image"/>
+                                <xs:enumeration value="image"/>
+                                <xs:enumeration value="swatch_image"/>
+                                <xs:enumeration value="swatch_thumb"/>
+                            </xs:restriction>
+                        </xs:simpleType>
+                    </xs:attribute>
+                </xs:complexType>
+            </xs:element>
+        </xs:sequence>
+        <xs:attribute name="module" type="xs:string" use="required"/>
+    </xs:complexType>
+
+    <xs:complexType name="videoType">
+        <xs:sequence>
+            <xs:element name="video" minOccurs="1" maxOccurs="unbounded">
+                <xs:complexType>
+                    <xs:sequence>
+                        <xs:element name="play_if_base" type="xs:boolean" minOccurs="0"/>
+                        <xs:element name="show_related" type="xs:boolean" minOccurs="0"/>
+                        <xs:element name="video_auto_restart" type="xs:boolean" minOccurs="0"/>
+                    </xs:sequence>
+                    <xs:attribute name="id" type="xs:string" use="required"/>
+                    <xs:attribute name="type" use="required">
+                        <xs:simpleType>
+                            <xs:restriction base="xs:string">
+                                <xs:enumeration value="play_if_base"/>
+                                <xs:enumeration value="show_related"/>
+                                <xs:enumeration value="video_auto_restart"/>
+                            </xs:restriction>
+                        </xs:simpleType>
+                    </xs:attribute>
+                </xs:complexType>
+            </xs:element>
+        </xs:sequence>
+        <xs:attribute name="module" type="xs:string" use="required"/>
+    </xs:complexType>
+
     <xs:complexType name="excludeType">
         <xs:sequence>
             <xs:element name="item" type="itemType" maxOccurs="unbounded"/>
diff --git a/lib/internal/Magento/Framework/ProductVideo/README.md b/lib/internal/Magento/Framework/ProductVideo/README.md
deleted file mode 100644
index 88bf074ef92..00000000000
--- a/lib/internal/Magento/Framework/ProductVideo/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Library contains schema files used to validate XML files in Magento\ProductVideo module
diff --git a/lib/internal/Magento/Framework/ProductVideo/etc/view.xsd b/lib/internal/Magento/Framework/ProductVideo/etc/view.xsd
deleted file mode 100644
index e5af826629a..00000000000
--- a/lib/internal/Magento/Framework/ProductVideo/etc/view.xsd
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-    <xs:redefine schemaLocation="../../Config/etc/view.xsd">
-        <xs:complexType name="mediaType" mixed="true">
-            <xs:complexContent>
-                <xs:extension base="mediaType">
-                    <xs:sequence>
-                        <xs:element name="videos" type="videoType" minOccurs="0"/>
-                    </xs:sequence>
-                </xs:extension>
-            </xs:complexContent>
-        </xs:complexType>
-    </xs:redefine>
-
-    <xs:complexType name="videoType">
-        <xs:sequence>
-            <xs:element name="video" minOccurs="1" maxOccurs="unbounded">
-                <xs:complexType>
-                    <xs:sequence>
-                        <xs:element name="play_if_base" type="xs:boolean" minOccurs="0"/>
-                        <xs:element name="show_related" type="xs:boolean" minOccurs="0"/>
-                        <xs:element name="video_auto_restart" type="xs:boolean" minOccurs="0"/>
-                    </xs:sequence>
-                    <xs:attribute name="id" type="xs:string" use="required"/>
-                    <xs:attribute name="type" use="required">
-                        <xs:simpleType>
-                            <xs:restriction base="xs:string">
-                                <xs:enumeration value="play_if_base"/>
-                                <xs:enumeration value="show_related"/>
-                                <xs:enumeration value="video_auto_restart"/>
-                            </xs:restriction>
-                        </xs:simpleType>
-                    </xs:attribute>
-                </xs:complexType>
-            </xs:element>
-        </xs:sequence>
-        <xs:attribute name="module" type="xs:string" use="required"/>
-    </xs:complexType>
-</xs:schema>
\ No newline at end of file
diff --git a/lib/internal/Magento/Framework/View/Xsd/Reader.php b/lib/internal/Magento/Framework/View/Xsd/Reader.php
deleted file mode 100644
index 7891ba7e014..00000000000
--- a/lib/internal/Magento/Framework/View/Xsd/Reader.php
+++ /dev/null
@@ -1,248 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Framework\View\Xsd;
-
-use Magento\Framework\Component\ComponentRegistrar;
-use Magento\Framework\Component\DirSearch;
-use Magento\Framework\Config\Dom\UrnResolver;
-use Magento\Framework\Config\FileIteratorFactory;
-use Magento\Framework\Filesystem;
-
-class Reader implements \Magento\Framework\Config\ReaderInterface
-{
-    /**
-     * @var string
-     */
-    protected $defaultScope;
-
-    /**
-     * @var string
-     */
-    protected $fileName;
-
-    /**
-     * @var DirSearch
-     */
-    protected $componentDirSearch;
-
-    /**
-     * @var string
-     */
-    protected $searchFilesPattern;
-
-    /** @var \Magento\Framework\Config\Dom\UrnResolver */
-    protected $urnResolver;
-
-    /**
-     * @var FileIteratorFactory
-     */
-    private $iteratorFactory;
-
-    /**
-     * @param DirSearch $dirSearch
-     * @param UrnResolver $urnResolver
-     * @param FileIteratorFactory $iteratorFactory
-     * @param string $fileName
-     * @param string $defaultScope
-     * @param string $searchFilesPattern
-     */
-    public function __construct(
-        DirSearch $dirSearch,
-        UrnResolver $urnResolver,
-        FileIteratorFactory $iteratorFactory,
-        $fileName,
-        $defaultScope,
-        $searchFilesPattern
-    ) {
-        $this->componentDirSearch = $dirSearch;
-        $this->urnResolver = $urnResolver;
-        $this->fileName = $fileName;
-        $this->defaultScope = $defaultScope;
-        $this->searchFilesPattern = $searchFilesPattern;
-        $this->iteratorFactory = $iteratorFactory;
-    }
-
-    /**
-     * Get list of xsd files
-     *
-     * @param string $filename
-     * @return array
-     */
-    public function getListXsdFiles($filename)
-    {
-        return $this->iteratorFactory->create(
-            array_merge(
-                $this->componentDirSearch->collectFiles(ComponentRegistrar::MODULE, 'etc/' . $filename),
-                $this->componentDirSearch->collectFiles(ComponentRegistrar::LIBRARY, '*/etc/' . $filename)
-            )
-        );
-    }
-
-    /**
-     * Read xsd files from list
-     *
-     * @param null $scope
-     * @return array
-     * @throws \Magento\Framework\Exception\LocalizedException
-     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
-     */
-    public function read($scope = null)
-    {
-        $fileList = $this->getListXsdFiles($this->fileName);
-        if (!count($fileList)) {
-            return [];
-        }
-        $mergeXsd = $this->readXsdFiles($fileList);
-
-        return $mergeXsd;
-    }
-
-    /**
-     * Get merged xsd file
-     *
-     * @param array $fileList
-     * @param string $baseXsd
-     * @return null|string
-     * @throws \Magento\Framework\Exception\LocalizedException
-     */
-    public function readXsdFiles($fileList, $baseXsd = null)
-    {
-        $baseXsd = new \DOMDocument();
-        $baseXsdPath = $this->urnResolver->getRealPath($this->searchFilesPattern . $this->fileName);
-        $baseXsd->load($baseXsdPath);
-        $configMerge = null;
-        foreach ($fileList as $key => $content) {
-            if ($key == $baseXsdPath) {
-                continue;
-            }
-            try {
-                if (!empty($content)) {
-                    if ($configMerge) {
-                        $configMerge = $this->mergeXsd($configMerge, $content);
-                    } else {
-                        $configMerge = $this->mergeXsd($baseXsd->saveXML(), $content);
-                    }
-                }
-            } catch (\Magento\Framework\Config\Dom\ValidationException $e) {
-                throw new \Magento\Framework\Exception\LocalizedException(
-                    new \Magento\Framework\Phrase("Invalid XSD in file %1:\n%2", [$key, $e->getMessage()])
-                );
-            }
-        }
-
-        return $configMerge;
-    }
-
-    /**
-     * Merge xsd files
-     *
-     * @param string $parent
-     * @param string $child
-     * @return string
-     */
-    protected function mergeXsd($parent, $child)
-    {
-        $domParent = $this->createDomInstance($parent);
-        $domChild = $this->createDomInstance($child);
-        $domChild = $domChild->documentElement;
-
-        $domParentElement = $domParent->getElementsByTagName('complexType');
-        $parentDomElements = $this->findDomElement($domParentElement, 'name');
-        foreach ($parentDomElements->childNodes as $findElement) {
-            if ($findElement instanceof \DOMElement) {
-                $domParentNode = $findElement;
-                break;
-            }
-        }
-        $domChildElement = $domChild->getElementsByTagName('extension');
-        $childDomElements = $this->findDomElement($domChildElement, 'base');
-        $domParent = $this->addHeadChildIntoParent($childDomElements, $domParent, $domParentNode);
-        $delete = $domChild->getElementsByTagName('redefine')->item(0);
-        $domChild->removeChild($delete);
-        $domParent = $this->addBodyChildIntoParent($domChild, $domParent);
-
-        return $domParent->saveXML();
-    }
-
-    /**
-     * Create DOM instance
-     *
-     * @param string $source
-     * @return \DOMDocument
-     */
-    protected function createDomInstance($source)
-    {
-        $domInstance = new \DOMDocument('1.0', 'UTF-8');
-        $domInstance->formatOutput = true;
-        $domInstance->loadXML($source);
-        $domInstance->preserveWhiteSpace = true;
-
-        return $domInstance;
-    }
-
-    /**
-     * Find searched element in DOM
-     *
-     * @param \DOMNodeList $domParentElement
-     * @param string $attribute
-     * @return mixed
-     */
-    protected function findDomElement(\DOMNodeList $domParentElement, $attribute)
-    {
-        foreach ($domParentElement as $child) {
-            if ($child->getAttribute($attribute) === 'mediaType'
-                && $child instanceof \DOMElement
-                && $child->hasChildNodes()
-            ) {
-                return $child;
-            }
-        }
-    }
-
-    /**
-     * Add into parent head elements from child
-     *
-     * @param \DOMElement $childDomElements
-     * @param \DOMDocument $domParent
-     * @param \DOMElement $domParentNode
-     * @return \DOMDocument
-     */
-    protected function addHeadChildIntoParent(
-        \DOMElement $childDomElements,
-        \DOMDocument $domParent,
-        \DOMElement $domParentNode
-    ) {
-        foreach ($childDomElements->childNodes as $sequence) {
-            if ($sequence instanceof \DOMElement && $sequence->hasChildNodes()) {
-                foreach ($sequence->childNodes as $findElement) {
-                    if ($findElement instanceof \DOMElement) {
-                        $importedNodes = $domParent->importNode($findElement, true);
-                        $domParentNode->appendChild($importedNodes);
-                    }
-                }
-            }
-        }
-
-        return $domParent;
-    }
-
-    /**
-     * Add into parent body elements from child
-     *
-     * @param \DOMElement $domChild
-     * @param \DOMDocument $domParent
-     * @return \DOMDocument
-     */
-    protected function addBodyChildIntoParent(\DOMElement $domChild, \DOMDocument $domParent)
-    {
-        foreach ($domChild->childNodes as $node) {
-            $importNode = $domParent->importNode($node, true);
-            $domParent->documentElement->appendChild($importNode);
-        }
-
-        return $domParent;
-    }
-}
-- 
GitLab


From 4617d920dbef66bb13328dd7747fa4cc206b51a1 Mon Sep 17 00:00:00 2001
From: "Yushkin, Dmytro" <dyushkin@ebay.com>
Date: Thu, 22 Oct 2015 16:10:18 +0300
Subject: [PATCH 189/370] MAGETWO-44452: Unable to select country while adding
 new credit card for Braintree

---
 .../Braintree/view/frontend/templates/creditcard/edit.phtml     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml b/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml
index 6fcac2eae9c..05e55e01a50 100644
--- a/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml
+++ b/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml
@@ -328,7 +328,7 @@ $serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonE
             </label>
 
             <div class="control">
-                <?php echo $block->escapeHtml($block->countrySelect('credit_card[billing_address][country_code_alpha2]', 'billing_address_country', $default)); ?>
+                <?php /* @noEscape */ echo $block->countrySelect('credit_card[billing_address][country_code_alpha2]', 'billing_address_country', $default); ?>
             </div>
         </div>
     </fieldset>
-- 
GitLab


From 9d3c87a69571ddee4d52e5c8503b47310228d245 Mon Sep 17 00:00:00 2001
From: Arkadii Chyzhov <achyzhov@ebay.com>
Date: Thu, 22 Oct 2015 16:11:16 +0300
Subject: [PATCH 190/370] MAGETWO-44049: [GITHUB] data-bind i18n expressions
 with JavaScript function calls are used in the core but untranslatable due to
 regular expression and architectural limitations #1905

- decomposed expressions in data-bind "i18n"
- replaced data-bind "i18n" with "text" for variables, method invokes, expressions
- removed $t()  for variables and expressions
---
 .../web/template/cart/totals/grand-total.html |  2 +-
 .../web/template/cart/totals/shipping.html    |  2 +-
 .../web/template/cart/totals/subtotal.html    |  2 +-
 .../frontend/web/template/estimation.html     |  2 +-
 .../view/frontend/web/template/payment.html   |  2 +-
 .../frontend/web/template/progress-bar.html   |  2 +-
 .../web/template/shipping-information.html    |  2 +-
 .../view/frontend/web/template/shipping.html  |  6 ++--
 .../web/template/summary/grand-total.html     |  4 +--
 .../web/template/summary/item/details.html    |  4 +--
 .../web/template/summary/shipping.html        |  8 ++---
 .../web/template/summary/subtotal.html        |  4 +--
 .../frontend/templates/default/home.phtml     |  1 +
 .../catalog/product/edit/super/matrix.phtml   |  2 +-
 .../web/template/payment/checkmo.html         |  4 +--
 .../web/template/cart/totals/discount.html    |  2 +-
 .../web/template/summary/discount.html        |  2 +-
 .../checkout/cart/totals/grand-total.html     | 12 +++----
 .../checkout/cart/totals/shipping.html        | 24 +++++++-------
 .../template/checkout/cart/totals/tax.html    | 12 +++----
 .../checkout/summary/grand-total.html         | 16 +++++-----
 .../template/checkout/summary/shipping.html   | 32 +++++++++----------
 .../template/checkout/summary/subtotal.html   | 20 ++++++------
 .../web/template/checkout/summary/tax.html    | 16 +++++-----
 .../web/template/checkout/summary/weee.html   |  2 +-
 25 files changed, 93 insertions(+), 92 deletions(-)

diff --git a/app/code/Magento/Checkout/view/frontend/web/template/cart/totals/grand-total.html b/app/code/Magento/Checkout/view/frontend/web/template/cart/totals/grand-total.html
index e4ac4affabb..751e4eaaa51 100644
--- a/app/code/Magento/Checkout/view/frontend/web/template/cart/totals/grand-total.html
+++ b/app/code/Magento/Checkout/view/frontend/web/template/cart/totals/grand-total.html
@@ -6,7 +6,7 @@
 -->
 <tr class="grand totals">
     <th class="mark" colspan="1" scope="row">
-        <strong data-bind="text: $t(title)"></strong>
+        <strong data-bind="text: title"></strong>
     </th>
     <td class="amount" data-th="Order Total">
         <strong><span class="price" data-bind="text: getValue()"></span></strong>
diff --git a/app/code/Magento/Checkout/view/frontend/web/template/cart/totals/shipping.html b/app/code/Magento/Checkout/view/frontend/web/template/cart/totals/shipping.html
index 17c41206ab4..7cf6d85f668 100644
--- a/app/code/Magento/Checkout/view/frontend/web/template/cart/totals/shipping.html
+++ b/app/code/Magento/Checkout/view/frontend/web/template/cart/totals/shipping.html
@@ -6,7 +6,7 @@
 -->
 <!-- ko if: isCalculated() -->
 <tr class="totals shipping excl">
-    <th class="mark" colspan="1" scope="row" data-bind="text: $t(title) + ' (' + $t(getShippingMethodTitle()) + ')'"></th>
+    <th class="mark" colspan="1" scope="row" data-bind="text: title + ' (' + getShippingMethodTitle() + ')'"></th>
     <td class="amount">
         <span class="price" data-bind="text: getValue()"></span>
     </td>
diff --git a/app/code/Magento/Checkout/view/frontend/web/template/cart/totals/subtotal.html b/app/code/Magento/Checkout/view/frontend/web/template/cart/totals/subtotal.html
index b5b7e2ecf68..be761940327 100644
--- a/app/code/Magento/Checkout/view/frontend/web/template/cart/totals/subtotal.html
+++ b/app/code/Magento/Checkout/view/frontend/web/template/cart/totals/subtotal.html
@@ -5,7 +5,7 @@
  */
 -->
 <tr class="totals sub">
-    <th class="mark" colspan="1" scope="row" data-bind="text: $t(title)"></th>
+    <th class="mark" colspan="1" scope="row" data-bind="text: title"></th>
     <td class="amount" data-th="Subtotal">
         <span class="price" data-bind="text: getValue()"></span>
     </td>
diff --git a/app/code/Magento/Checkout/view/frontend/web/template/estimation.html b/app/code/Magento/Checkout/view/frontend/web/template/estimation.html
index 36009ab7b46..f8b396939ce 100644
--- a/app/code/Magento/Checkout/view/frontend/web/template/estimation.html
+++ b/app/code/Magento/Checkout/view/frontend/web/template/estimation.html
@@ -7,7 +7,7 @@
 <div class="opc-estimated-wrapper" data-bind="blockLoader: isLoading">
     <div class="estimated-block">
         <span class="estimated-label" data-bind="i18n: 'Estimated Total'"></span>
-        <span class="estimated-price" data-bind="i18n: getValue()"></span>
+        <span class="estimated-price" data-bind="text: getValue()"></span>
     </div>
     <div class="minicart-wrapper">
         <button type="button" class="action showcart" data-bind="click: showSidebar" data-toggle="opc-summary">
diff --git a/app/code/Magento/Checkout/view/frontend/web/template/payment.html b/app/code/Magento/Checkout/view/frontend/web/template/payment.html
index d73f8ff5cb3..964be62c167 100644
--- a/app/code/Magento/Checkout/view/frontend/web/template/payment.html
+++ b/app/code/Magento/Checkout/view/frontend/web/template/payment.html
@@ -5,7 +5,7 @@
  */
 -->
 <li id="payment" role="presentation" class="checkout-payment-method" data-bind="fadeVisible: isVisible">
-    <div class="step-title" data-bind="i18n: title" data-role="title"></div>
+    <div class="step-title" data-bind="text: title" data-role="title"></div>
     <div id="checkout-step-payment"
          class="step-content"
          data-role="content"
diff --git a/app/code/Magento/Checkout/view/frontend/web/template/progress-bar.html b/app/code/Magento/Checkout/view/frontend/web/template/progress-bar.html
index 6276cae4363..7e51c678147 100644
--- a/app/code/Magento/Checkout/view/frontend/web/template/progress-bar.html
+++ b/app/code/Magento/Checkout/view/frontend/web/template/progress-bar.html
@@ -7,7 +7,7 @@
 <ul class="opc-progress-bar">
     <!-- ko foreach: { data: steps().sort(sortItems), as: 'item' } -->
         <li class="opc-progress-bar-item" data-bind="css: item.isVisible() ? '_active' : ($parent.isProcessed(item) ? '_complete' : '')">
-            <span data-bind="i18n: item.title, click: $parent.navigateTo"></span>
+            <span data-bind="text: item.title, click: $parent.navigateTo"></span>
         </li>
     <!-- /ko -->
 </ul>
diff --git a/app/code/Magento/Checkout/view/frontend/web/template/shipping-information.html b/app/code/Magento/Checkout/view/frontend/web/template/shipping-information.html
index 0e6ad40d317..a7c4edce8a6 100644
--- a/app/code/Magento/Checkout/view/frontend/web/template/shipping-information.html
+++ b/app/code/Magento/Checkout/view/frontend/web/template/shipping-information.html
@@ -28,7 +28,7 @@
             </button>
         </div>
         <div class="shipping-information-content">
-            <span class="value" data-bind="i18n: getShippingMethodTitle()"></span>
+            <span class="value" data-bind="text: getShippingMethodTitle()"></span>
         </div>
     </div>
 </div>
diff --git a/app/code/Magento/Checkout/view/frontend/web/template/shipping.html b/app/code/Magento/Checkout/view/frontend/web/template/shipping.html
index 7c981e83bc9..926c269ef07 100644
--- a/app/code/Magento/Checkout/view/frontend/web/template/shipping.html
+++ b/app/code/Magento/Checkout/view/frontend/web/template/shipping.html
@@ -112,10 +112,10 @@
                             </td>
 
                             <td class="col col-method"
-                                    data-bind="i18n: method.method_title, attr: {'id': 'label_method_' + method.method_code + '_' + method.carrier_code}"></td>
+                                    data-bind="text: method.method_title, attr: {'id': 'label_method_' + method.method_code + '_' + method.carrier_code}"></td>
 
                             <td class="col col-carrier"
-                                    data-bind="i18n: method.carrier_title, attr: {'id': 'label_carrier_' + method.method_code + '_' + method.carrier_code}"></td>
+                                    data-bind="text: method.carrier_title, attr: {'id': 'label_carrier_' + method.method_code + '_' + method.carrier_code}"></td>
                         </tr>
 
                         <!-- ko if:  method.error_message -->
@@ -143,7 +143,7 @@
                 </div>
                 <!-- ko if: errorValidationMessage().length > 0 -->
                 <div class="message notice">
-                    <span><!-- ko i18n: errorValidationMessage()--><!-- /ko --></span>
+                    <span><!-- ko text: errorValidationMessage()--><!-- /ko --></span>
                 </div>
                 <!-- /ko -->
                 <div class="actions-toolbar" id="shipping-method-buttons-container">
diff --git a/app/code/Magento/Checkout/view/frontend/web/template/summary/grand-total.html b/app/code/Magento/Checkout/view/frontend/web/template/summary/grand-total.html
index 107907b157a..009c7e01435 100644
--- a/app/code/Magento/Checkout/view/frontend/web/template/summary/grand-total.html
+++ b/app/code/Magento/Checkout/view/frontend/web/template/summary/grand-total.html
@@ -6,9 +6,9 @@
 -->
 <!-- ko if: isDisplayed() -->
 <tr>
-    <td colspan="2" data-bind="i18n: title"></td>
+    <td colspan="2" data-bind="text: title"></td>
     <td class="col grandtotal">
-        <span data-bind ="text: getValue(), attr:{'data-label': $t(title)}"></span>
+        <span data-bind ="text: getValue(), attr:{'data-label': title}"></span>
         <!-- ko foreach: elems() -->
             <!-- ko template: getTemplate() --><!-- /ko -->
         <!-- /ko -->
diff --git a/app/code/Magento/Checkout/view/frontend/web/template/summary/item/details.html b/app/code/Magento/Checkout/view/frontend/web/template/summary/item/details.html
index 05b39a8f11e..69f698a7a5a 100644
--- a/app/code/Magento/Checkout/view/frontend/web/template/summary/item/details.html
+++ b/app/code/Magento/Checkout/view/frontend/web/template/summary/item/details.html
@@ -12,7 +12,7 @@
 
     <div class="product-item-inner">
         <div class="product-item-name-block">
-            <strong class="product-item-name" data-bind="i18n: $parent.name"></strong>
+            <strong class="product-item-name" data-bind="text: $parent.name"></strong>
             <div class="details-qty">
                 <span class="label"><!-- ko i18n: 'Qty' --><!-- /ko --></span>
                 <span class="value" data-bind="text: $parent.qty"></span>
@@ -30,7 +30,7 @@
             <strong class="subtitle"><!-- ko i18n: 'Options Details' --><!-- /ko --></strong>
             <dl class="item-options">
                 <!--ko foreach: JSON.parse($parent.options)-->
-                <dt class="label" data-bind="i18n: label"></dt>
+                <dt class="label" data-bind="text: label"></dt>
                     <!-- ko if: ($data.full_view)-->
                     <dd class="values" data-bind="html: full_view"></dd>
                     <!-- /ko -->
diff --git a/app/code/Magento/Checkout/view/frontend/web/template/summary/shipping.html b/app/code/Magento/Checkout/view/frontend/web/template/summary/shipping.html
index f3a22cef746..a6dc09dc746 100644
--- a/app/code/Magento/Checkout/view/frontend/web/template/summary/shipping.html
+++ b/app/code/Magento/Checkout/view/frontend/web/template/summary/shipping.html
@@ -7,17 +7,17 @@
 <!-- ko if: quoteIsVirtual == 0 -->
     <tr class="totals shipping excl">
         <th class="mark" scope="row">
-            <span class="label" data-bind="i18n: title"></span>
-            <span class="value" data-bind="i18n: getShippingMethodTitle()"></span>
+            <span class="label" data-bind="text: title"></span>
+            <span class="value" data-bind="text: getShippingMethodTitle()"></span>
         </th>
         <td class="amount">
             <!-- ko if: isCalculated() -->
             <span class="price"
-                  data-bind="i18n: getValue(), attr: {'data-th': $t(title)}"></span>
+                  data-bind="text: getValue(), attr: {'data-th': title}"></span>
             <!-- /ko -->
             <!-- ko ifnot: isCalculated() -->
             <span class="not-calculated"
-                  data-bind="i18n: getValue(), attr: {'data-th': $t(title)}"></span>
+                  data-bind="text: getValue(), attr: {'data-th': title}"></span>
             <!-- /ko -->
         </td>
     </tr>
diff --git a/app/code/Magento/Checkout/view/frontend/web/template/summary/subtotal.html b/app/code/Magento/Checkout/view/frontend/web/template/summary/subtotal.html
index e217668f605..47b1bbc221f 100644
--- a/app/code/Magento/Checkout/view/frontend/web/template/summary/subtotal.html
+++ b/app/code/Magento/Checkout/view/frontend/web/template/summary/subtotal.html
@@ -6,9 +6,9 @@
 -->
 
 <tr class="totals">
-    <th class="mark" scope="row" data-bind="i18n: title"></th>
+    <th class="mark" scope="row" data-bind="text: title"></th>
     <td class="amount">
-        <span class="price" data-bind ="text: getValue(), attr:{'data-label': $t(title)}"></span>
+        <span class="price" data-bind ="text: getValue(), attr:{'data-label': title}"></span>
         <!-- ko foreach: elems() -->
             <!-- ko template: getTemplate() --><!-- /ko -->
         <!-- /ko -->
diff --git a/app/code/Magento/Cms/view/frontend/templates/default/home.phtml b/app/code/Magento/Cms/view/frontend/templates/default/home.phtml
index 9c51cd0004f..3ef8d5a1077 100644
--- a/app/code/Magento/Cms/view/frontend/templates/default/home.phtml
+++ b/app/code/Magento/Cms/view/frontend/templates/default/home.phtml
@@ -5,3 +5,4 @@
  */
 ?>
 There was no Home CMS page configured or found.
+git
\ No newline at end of file
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/super/matrix.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/super/matrix.phtml
index e962963ccac..321b8de4647 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/super/matrix.phtml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/super/matrix.phtml
@@ -213,7 +213,7 @@ $currencySymbol = $block->getCurrencySymbol();
                                             </li>
                                             <li>
                                                 <a class="action-menu-item" data-bind="
-                                                    i18n: variation.status == 1 ? 'Disable Product' : 'Enable Product',
+                                                    text: variation.status == 1 ? $t('Disable Product') : $t('Enable Product'),
                                                     click: $parent.toggleProduct.bind($parent, $index())">
                                                 </a>
                                             </li>
diff --git a/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/checkmo.html b/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/checkmo.html
index e20e15111e5..64385884483 100644
--- a/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/checkmo.html
+++ b/app/code/Magento/OfflinePayments/view/frontend/web/template/payment/checkmo.html
@@ -25,12 +25,12 @@
         <dl class="items check payable">
             <!-- ko if: getPayableTo() -->
             <dt class="title"><!-- ko i18n: 'Make Check payable to:' --><!-- /ko --></dt>
-            <dd class="content"><!-- ko i18n: getPayableTo() --><!-- /ko --></dd>
+            <dd class="content"><!-- ko text: getPayableTo() --><!-- /ko --></dd>
             <!-- /ko -->
             <!-- ko if: getMailingAddress() -->
             <dt class="title"><!-- ko i18n: 'Send Check to:' --><!-- /ko --></dt>
             <dd class="content">
-                <address class="checkmo mailing address" data-bind="html: $t(getMailingAddress())"></address>
+                <address class="checkmo mailing address" data-bind="html: getMailingAddress()"></address>
             </dd>
             <!-- /ko -->
         </dl>
diff --git a/app/code/Magento/SalesRule/view/frontend/web/template/cart/totals/discount.html b/app/code/Magento/SalesRule/view/frontend/web/template/cart/totals/discount.html
index 1797b8ff9c2..b8a057ff065 100644
--- a/app/code/Magento/SalesRule/view/frontend/web/template/cart/totals/discount.html
+++ b/app/code/Magento/SalesRule/view/frontend/web/template/cart/totals/discount.html
@@ -7,7 +7,7 @@
 <!-- ko if: isDisplayed() -->
 <tr class="totals">
     <th colspan="1" style="" class="mark" scope="row" data-bind="text: title"></th>
-    <td class="amount" data-bind="attr: {'data-th': $t(title) }">
+    <td class="amount" data-bind="attr: {'data-th': title}">
         <span><span class="price" data-bind="text: getValue()"></span></span>
     </td>
 </tr>
diff --git a/app/code/Magento/SalesRule/view/frontend/web/template/summary/discount.html b/app/code/Magento/SalesRule/view/frontend/web/template/summary/discount.html
index 60ac9c7982a..705541de3b4 100644
--- a/app/code/Magento/SalesRule/view/frontend/web/template/summary/discount.html
+++ b/app/code/Magento/SalesRule/view/frontend/web/template/summary/discount.html
@@ -11,7 +11,7 @@
         <span class="discount coupon" data-bind="text: getCouponCode()"></span>
     </th>
     <td class="amount">
-        <span class="price" data-bind="text: getValue(), attr: {'data-th': $t(name) }"></span>
+        <span class="price" data-bind="text: getValue(), attr: {'data-th': name}"></span>
     </td>
 </tr>
 <!-- /ko -->
diff --git a/app/code/Magento/Tax/view/frontend/web/template/checkout/cart/totals/grand-total.html b/app/code/Magento/Tax/view/frontend/web/template/checkout/cart/totals/grand-total.html
index f756837bb1e..31bf3448f20 100644
--- a/app/code/Magento/Tax/view/frontend/web/template/checkout/cart/totals/grand-total.html
+++ b/app/code/Magento/Tax/view/frontend/web/template/checkout/cart/totals/grand-total.html
@@ -7,17 +7,17 @@
 <!-- ko if: isTaxDisplayedInGrandTotal && isDisplayed() -->
 <tr class="grand totals incl">
     <th class="mark" scope="row">
-        <strong data-bind="text: $t(inclTaxLabel)"></strong>
+        <strong data-bind="text: inclTaxLabel"></strong>
     </th>
-    <td data-bind="attr: {'data-th': $t(inclTaxLabel) }" class="amount">
+    <td data-bind="attr: {'data-th': inclTaxLabel}" class="amount">
         <strong><span class="price" data-bind="text: getValue()"></span></strong>
     </td>
 </tr>
 <tr class="grand totals excl">
     <th class="mark" scope="row">
-        <strong data-bind="text: $t(exclTaxLabel)"></strong>
+        <strong data-bind="text: exclTaxLabel"></strong>
     </th>
-    <td data-bind="attr: {'data-th': exclTaxLabel }" class="amount">
+    <td data-bind="attr: {'data-th': exclTaxLabel}" class="amount">
         <strong><span class="price" data-bind="text: getGrandTotalExclTax()"></span></strong>
     </td>
 </tr>
@@ -25,9 +25,9 @@
 <!-- ko if: !isTaxDisplayedInGrandTotal && isDisplayed() -->
 <tr class="grand totals">
     <th class="mark" scope="row">
-        <strong data-bind="text: $t(title)"></strong>
+        <strong data-bind="text: title"></strong>
     </th>
-    <td data-bind="attr: {'data-th': $t(title)}" class="amount">
+    <td data-bind="attr: {'data-th': title}" class="amount">
         <strong><span class="price" data-bind="text: getValue()"></span></strong>
     </td>
 </tr>
diff --git a/app/code/Magento/Tax/view/frontend/web/template/checkout/cart/totals/shipping.html b/app/code/Magento/Tax/view/frontend/web/template/checkout/cart/totals/shipping.html
index 13fe7f3e716..37a8e82688a 100644
--- a/app/code/Magento/Tax/view/frontend/web/template/checkout/cart/totals/shipping.html
+++ b/app/code/Magento/Tax/view/frontend/web/template/checkout/cart/totals/shipping.html
@@ -8,46 +8,46 @@
     <!-- ko if: isBothPricesDisplayed() -->
     <tr class="totals shipping excl">
         <th class="mark" scope="row">
-            <span class="label" data-bind="text: $t(title) + ' ' + $t(excludingTaxMessage)"></span>
-            <span class="value" data-bind="text: $t(getShippingMethodTitle())"></span>
+            <span class="label" data-bind="text: title + ' ' + excludingTaxMessage"></span>
+            <span class="value" data-bind="text: getShippingMethodTitle()"></span>
         </th>
         <td class="amount">
             <span class="price"
-                  data-bind="text: $t(getExcludingValue()), attr: {'data-th': $t(excludingTaxMessage)}"></span>
+                  data-bind="text: getExcludingValue(), attr: {'data-th': excludingTaxMessage}"></span>
         </td>
     </tr>
     <tr class="totals shipping incl">
         <th class="mark" scope="row">
-            <span class="label" data-bind="text: $t(title) + ' ' + $t(includingTaxMessage)"></span>
-            <span class="value" data-bind="text: $t(getShippingMethodTitle())"></span>
+            <span class="label" data-bind="text: title + ' ' + includingTaxMessage"></span>
+            <span class="value" data-bind="text: getShippingMethodTitle()"></span>
         </th>
         <td class="amount">
             <span class="price"
-                  data-bind="text: $t(getIncludingValue()), attr: {'data-th': $t(title) + ' ' + $t(excludingTaxMessage)}"></span>
+                  data-bind="text: getIncludingValue(), attr: {'data-th': title + ' ' + excludingTaxMessage}"></span>
         </td>
     </tr>
     <!-- /ko -->
     <!-- ko if: isIncludingDisplayed() -->
     <tr class="totals shipping incl">
         <th class="mark" scope="row">
-            <span class="label" data-bind="text: $t(title)"></span>
-            <span class="value" data-bind="text: $t(getShippingMethodTitle())"></span>
+            <span class="label" data-bind="text: title"></span>
+            <span class="value" data-bind="text: getShippingMethodTitle()"></span>
         </th>
         <td class="amount">
             <span class="price"
-                  data-bind="text: $t(getIncludingValue()), attr: {'data-th': $t(title)}"></span>
+                  data-bind="text: getIncludingValue(), attr: {'data-th': title}"></span>
         </td>
     </tr>
     <!-- /ko -->
     <!-- ko if: isExcludingDisplayed() -->
     <tr class="totals shipping excl">
         <th class="mark" scope="row">
-            <span class="label" data-bind="text: $t(title)"></span>
-            <span class="value" data-bind="text: $t(getShippingMethodTitle())"></span>
+            <span class="label" data-bind="text: title"></span>
+            <span class="value" data-bind="text: getShippingMethodTitle()"></span>
         </th>
         <td class="amount">
             <span class="price"
-                  data-bind="text: $t(getValue()), attr: {'data-th': $t(title)}"></span>
+                  data-bind="text: getValue(), attr: {'data-th': title}"></span>
         </td>
     </tr>
     <!-- /ko -->
diff --git a/app/code/Magento/Tax/view/frontend/web/template/checkout/cart/totals/tax.html b/app/code/Magento/Tax/view/frontend/web/template/checkout/cart/totals/tax.html
index c6f4c7833e0..8d70052ddc2 100644
--- a/app/code/Magento/Tax/view/frontend/web/template/checkout/cart/totals/tax.html
+++ b/app/code/Magento/Tax/view/frontend/web/template/checkout/cart/totals/tax.html
@@ -7,9 +7,9 @@
 
 <!-- ko if: ifShowValue() && !ifShowDetails() -->
 <tr class="totals-tax">
-    <th data-bind="text: $t(title)" class="mark" colspan="1" scope="row"></th>
-    <td data-bind="attr: {'data-th': $t(title) }" class="amount">
-        <span class="price" data-bind="text: $t(getValue())"></span>
+    <th data-bind="text: title" class="mark" colspan="1" scope="row"></th>
+    <td data-bind="attr: {'data-th': title}" class="amount">
+        <span class="price" data-bind="text: getValue()"></span>
     </td>
 </tr>
 <!-- /ko -->
@@ -17,10 +17,10 @@
     <tr class="totals-tax-summary"
         data-bind="mageInit: {'toggleAdvanced':{'selectorsToggleClass': 'shown', 'baseToggleClass': 'expanded', 'toggleContainers': '.totals-tax-details'}}">
         <th class="mark" scope="row" colspan="1">
-            <span class="detailed" data-bind="text: $t(title)"></span>
+            <span class="detailed" data-bind="text: title"></span>
         </th>
-        <td data-bind="attr: {'data-th': $t(title) }" class="amount">
-            <span class="price" data-bind="text: $t(getValue())"></span>
+        <td data-bind="attr: {'data-th': title}" class="amount">
+            <span class="price" data-bind="text: getValue()"></span>
         </td>
     </tr>
     <!-- ko foreach: getDetails() -->
diff --git a/app/code/Magento/Tax/view/frontend/web/template/checkout/summary/grand-total.html b/app/code/Magento/Tax/view/frontend/web/template/checkout/summary/grand-total.html
index 4451adbf528..9d2072b1bf9 100644
--- a/app/code/Magento/Tax/view/frontend/web/template/checkout/summary/grand-total.html
+++ b/app/code/Magento/Tax/view/frontend/web/template/checkout/summary/grand-total.html
@@ -7,17 +7,17 @@
 <!-- ko if: isTaxDisplayedInGrandTotal && isDisplayed() -->
 <tr class="grand totals incl">
     <th class="mark" scope="row">
-        <strong data-bind="i18n: inclTaxLabel"></strong>
+        <strong data-bind="text: inclTaxLabel"></strong>
     </th>
-    <td data-bind="attr: {'data-th': $t(inclTaxLabel) }" class="amount">
+    <td data-bind="attr: {'data-th': inclTaxLabel}" class="amount">
         <strong><span class="price" data-bind="text: getValue()"></span></strong>
     </td>
 </tr>
 <tr class="grand totals excl">
     <th class="mark" scope="row">
-        <strong data-bind="i18n: exclTaxLabel"></strong>
+        <strong data-bind="text: exclTaxLabel"></strong>
     </th>
-    <td data-bind="attr: {'data-th': exclTaxLabel }" class="amount">
+    <td data-bind="attr: {'data-th': exclTaxLabel}" class="amount">
         <strong><span class="price" data-bind="text: getGrandTotalExclTax()"></span></strong>
     </td>
 </tr>
@@ -25,18 +25,18 @@
 <!-- ko if: !isTaxDisplayedInGrandTotal && isDisplayed() -->
 <tr class="grand totals">
     <th class="mark" scope="row">
-        <strong data-bind="i18n: title"></strong>
+        <strong data-bind="text: title"></strong>
     </th>
-    <td data-bind="attr: {'data-th': $t(title)}" class="amount">
+    <td data-bind="attr: {'data-th': title}" class="amount">
         <strong><span class="price" data-bind="text: getValue()"></span></strong>
     </td>
 </tr>
 <!-- /ko -->
 <!-- ko if: isBaseGrandTotalDisplayNeeded() && isDisplayed() -->
 <tr class="totals charge">
-    <th class="mark" data-bind="i18n: basicCurrencyMessage" scope="row"></th>
+    <th class="mark" data-bind="text: basicCurrencyMessage" scope="row"></th>
     <td class="amount">
-        <span class="price" data-bind="text: getBaseValue(), attr: {'data-th': $t(basicCurrencyMessage)}"></span>
+        <span class="price" data-bind="text: getBaseValue(), attr: {'data-th': basicCurrencyMessage}"></span>
     </td>
 </tr>
 <!-- /ko -->
diff --git a/app/code/Magento/Tax/view/frontend/web/template/checkout/summary/shipping.html b/app/code/Magento/Tax/view/frontend/web/template/checkout/summary/shipping.html
index 1608f78ad1c..3bcd9bccd15 100644
--- a/app/code/Magento/Tax/view/frontend/web/template/checkout/summary/shipping.html
+++ b/app/code/Magento/Tax/view/frontend/web/template/checkout/summary/shipping.html
@@ -8,33 +8,33 @@
     <!-- ko if: isBothPricesDisplayed() -->
     <tr class="totals shipping excl">
         <th class="mark" scope="row">
-            <span class="label" data-bind="text: $t(title)+ ' ' + $t(excludingTaxMessage)"></span>
-            <span class="value" data-bind="i18n: getShippingMethodTitle()"></span>
+            <span class="label" data-bind="text: title+ ' ' + excludingTaxMessage"></span>
+            <span class="value" data-bind="text: getShippingMethodTitle()"></span>
         </th>
         <td class="amount">
             <!-- ko if: isCalculated() -->
             <span class="price"
-                  data-bind="i18n: getExcludingValue(), attr: {'data-th': $t(excludingTaxMessage)}"></span>
+                  data-bind="text: getExcludingValue(), attr: {'data-th': excludingTaxMessage}"></span>
             <!-- /ko -->
             <!-- ko ifnot: isCalculated() -->
             <span class="not-calculated"
-                  data-bind="i18n: getExcludingValue(), attr: {'data-th': $t(excludingTaxMessage)}"></span>
+                  data-bind="text: getExcludingValue(), attr: {'data-th': excludingTaxMessage}"></span>
             <!-- /ko -->
         </td>
     </tr>
     <tr class="totals shipping incl">
         <th class="mark" scope="row">
-            <span class="label" data-bind="text: $t(title) + ' ' + $t(includingTaxMessage)"></span>
-            <span class="value" data-bind="i18n: getShippingMethodTitle()"></span>
+            <span class="label" data-bind="text: title + ' ' + includingTaxMessage"></span>
+            <span class="value" data-bind="text: getShippingMethodTitle()"></span>
         </th>
         <td class="amount">
             <!-- ko if: isCalculated() -->
             <span class="price"
-                  data-bind="i18n: getIncludingValue(), attr: {'data-th': $t(title) + ' ' + $t(excludingTaxMessage)}"></span>
+                  data-bind="text: getIncludingValue(), attr: {'data-th': title + ' ' + excludingTaxMessage}"></span>
             <!-- /ko -->
             <!-- ko ifnot: isCalculated() -->
             <span class="not-calculated"
-                  data-bind="i18n: getIncludingValue(), attr: {'data-th': $t(title) + ' ' + $t(excludingTaxMessage)}"></span>
+                  data-bind="text: getIncludingValue(), attr: {'data-th': title + ' ' + excludingTaxMessage}"></span>
             <!-- /ko -->
         </td>
     </tr>
@@ -42,17 +42,17 @@
     <!-- ko if: isIncludingDisplayed() -->
     <tr class="totals shipping incl">
         <th class="mark" scope="row">
-            <span class="label" data-bind="i18n: title"></span>
-            <span class="value" data-bind="i18n: getShippingMethodTitle()"></span>
+            <span class="label" data-bind="text: title"></span>
+            <span class="value" data-bind="text: getShippingMethodTitle()"></span>
         </th>
         <td class="amount">
             <!-- ko if: isCalculated() -->
             <span class="price"
-                  data-bind="i18n: getIncludingValue(), attr: {'data-th': $t(title)}"></span>
+                  data-bind="text: getIncludingValue(), attr: {'data-th': title}"></span>
             <!-- /ko -->
             <!-- ko ifnot: isCalculated() -->
             <span class="not-calculated"
-                  data-bind="i18n: getIncludingValue(), attr: {'data-th': $t(title)}"></span>
+                  data-bind="text: getIncludingValue(), attr: {'data-th': title}"></span>
             <!-- /ko -->
         </td>
     </tr>
@@ -60,17 +60,17 @@
     <!-- ko if: isExcludingDisplayed() -->
     <tr class="totals shipping excl">
         <th class="mark" scope="row">
-            <span class="label" data-bind="i18n: title"></span>
-            <span class="value" data-bind="i18n: getShippingMethodTitle()"></span>
+            <span class="label" data-bind="text: title"></span>
+            <span class="value" data-bind="text: getShippingMethodTitle()"></span>
         </th>
         <td class="amount">
             <!-- ko if: isCalculated() -->
             <span class="price"
-                  data-bind="i18n: getValue(), attr: {'data-th': $t(title)}"></span>
+                  data-bind="text: getValue(), attr: {'data-th': title}"></span>
             <!-- /ko -->
             <!-- ko ifnot: isCalculated() -->
             <span class="not-calculated"
-                  data-bind="i18n: getValue(), attr: {'data-th': $t(title)}"></span>
+                  data-bind="text: getValue(), attr: {'data-th': title}"></span>
             <!-- /ko -->
         </td>
     </tr>
diff --git a/app/code/Magento/Tax/view/frontend/web/template/checkout/summary/subtotal.html b/app/code/Magento/Tax/view/frontend/web/template/checkout/summary/subtotal.html
index a51407475cb..618bb6fd328 100644
--- a/app/code/Magento/Tax/view/frontend/web/template/checkout/summary/subtotal.html
+++ b/app/code/Magento/Tax/view/frontend/web/template/checkout/summary/subtotal.html
@@ -7,36 +7,36 @@
 <!-- ko if: isBothPricesDisplayed() -->
 <tr class="totals sub excl">
     <th class="mark" scope="row">
-        <span data-bind="i18n: title"></span>
-        <span data-bind="i18n: excludingTaxMessage"></span>
+        <span data-bind="text: title"></span>
+        <span data-bind="text: excludingTaxMessage"></span>
     </th>
     <td class="amount">
-        <span class="price" data-bind="text: getValue(), attr: {'data-th': $t(excludingTaxMessage) }"></span>
+        <span class="price" data-bind="text: getValue(), attr: {'data-th': excludingTaxMessage}"></span>
     </td>
 </tr>
 <tr class="totals sub incl">
     <th class="mark" scope="row">
-        <span data-bind="i18n: title"></span>
-        <span data-bind="i18n: includingTaxMessage"></span>
+        <span data-bind="text: title"></span>
+        <span data-bind="text: includingTaxMessage"></span>
     </th>
     <td class="amount">
-        <span class="price" data-bind="text: getValueInclTax(), attr: {'data-th': $t(includingTaxMessage) }"></span>
+        <span class="price" data-bind="text: getValueInclTax(), attr: {'data-th': includingTaxMessage}"></span>
     </td>
 </tr>
 <!-- /ko -->
 <!-- ko if: !isBothPricesDisplayed() && isIncludingTaxDisplayed() -->
 <tr class="totals sub">
-    <th data-bind="i18n: title" class="mark" scope="row"></th>
+    <th data-bind="text: title" class="mark" scope="row"></th>
     <td class="amount">
-        <span class="price" data-bind="text: getValueInclTax(), attr: {'data-th': $t(title)}"></span>
+        <span class="price" data-bind="text: getValueInclTax(), attr: {'data-th': title}"></span>
     </td>
 </tr>
 <!-- /ko -->
 <!-- ko if: !isBothPricesDisplayed() && !isIncludingTaxDisplayed() -->
 <tr class="totals sub">
-    <th data-bind="i18n: title" class="mark" scope="row"></th>
+    <th data-bind="text: title" class="mark" scope="row"></th>
     <td class="amount">
-        <span class="price" data-bind="text: getValue(), attr: {'data-th': $t(title)}"></span>
+        <span class="price" data-bind="text: getValue(), attr: {'data-th': title}"></span>
     </td>
 </tr>
 <!-- /ko -->
diff --git a/app/code/Magento/Tax/view/frontend/web/template/checkout/summary/tax.html b/app/code/Magento/Tax/view/frontend/web/template/checkout/summary/tax.html
index 5aa8b53e7fd..3305b6956b8 100644
--- a/app/code/Magento/Tax/view/frontend/web/template/checkout/summary/tax.html
+++ b/app/code/Magento/Tax/view/frontend/web/template/checkout/summary/tax.html
@@ -6,15 +6,15 @@
 -->
 <!-- ko if: ifShowValue() && !ifShowDetails() -->
 <tr class="totals-tax">
-    <th data-bind="i18n: title" class="mark" scope="row"></th>
-    <td data-bind="attr: {'data-th': $t(title) }" class="amount">
+    <th data-bind="text: title" class="mark" scope="row"></th>
+    <td data-bind="attr: {'data-th': title}" class="amount">
         <!-- ko if: isCalculated() -->
             <span class="price"
-                  data-bind="i18n: getValue()"></span>
+                  data-bind="text: getValue()"></span>
         <!-- /ko -->
         <!-- ko ifnot: isCalculated() -->
             <span class="not-calculated"
-                  data-bind="i18n: getValue()"></span>
+                  data-bind="text: getValue()"></span>
         <!-- /ko -->
     </td>
 </tr>
@@ -22,15 +22,15 @@
 <!-- ko if: ifShowValue() && ifShowDetails() -->
     <tr class="totals-tax-summary"
         data-bind="mageInit: {'toggleAdvanced':{'selectorsToggleClass': 'shown', 'baseToggleClass': 'expanded', 'toggleContainers': '.totals-tax-details'}}">
-        <th data-bind="i18n: title" class="mark" scope="row"></th>
-        <td data-bind="attr: {'data-th': $t(title) }" class="amount">
+        <th data-bind="text: title" class="mark" scope="row"></th>
+        <td data-bind="attr: {'data-th': title }" class="amount">
             <!-- ko if: isCalculated() -->
             <span class="price"
-                  data-bind="i18n: getValue()"></span>
+                  data-bind="text: getValue()"></span>
             <!-- /ko -->
             <!-- ko ifnot: isCalculated() -->
             <span class="not-calculated"
-                  data-bind="i18n: getValue()"></span>
+                  data-bind="text: getValue()"></span>
             <!-- /ko -->
         </td>
     </tr>
diff --git a/app/code/Magento/Weee/view/frontend/web/template/checkout/summary/weee.html b/app/code/Magento/Weee/view/frontend/web/template/checkout/summary/weee.html
index 886e2443918..c8d5d922f95 100644
--- a/app/code/Magento/Weee/view/frontend/web/template/checkout/summary/weee.html
+++ b/app/code/Magento/Weee/view/frontend/web/template/checkout/summary/weee.html
@@ -7,7 +7,7 @@
 <!-- ko if: isDisplayed() -->
 <tr class="totals">
     <th data-bind="text: title" class="mark" scope="row"></th>
-    <td class="amount" data-bind="attr: {'data-th': $t(title) }">
+    <td class="amount" data-bind="attr: {'data-th': title}">
         <span class="price" data-bind="text: getValue()"></span>
     </td>
 </tr>
-- 
GitLab


From 8d281be9e2e79d1203794c43f5c2016737c74988 Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Thu, 22 Oct 2015 11:16:44 +0300
Subject: [PATCH 191/370] MAGETWO-44434: Some untranslatable fields in Magento
 backend

---
 .../Magento/Backend/Block/Widget/Form.php     |  2 +-
 .../Adminhtml/System/Account/SaveTest.php     |  2 +-
 app/code/Magento/Backend/i18n/en_US.csv       |  6 ++++
 app/code/Magento/Catalog/i18n/en_US.csv       | 20 +++++++++++
 app/code/Magento/Developer/i18n/en_US.csv     | 36 +++++++++++++++++++
 .../Attribute/Frontend/AbstractFrontend.php   | 12 ++++++-
 .../Attribute/Frontend/DatetimeTest.php       | 33 +++++++++++++++--
 7 files changed, 106 insertions(+), 5 deletions(-)

diff --git a/app/code/Magento/Backend/Block/Widget/Form.php b/app/code/Magento/Backend/Block/Widget/Form.php
index 02ef3b11350..3f258a48ca3 100644
--- a/app/code/Magento/Backend/Block/Widget/Form.php
+++ b/app/code/Magento/Backend/Block/Widget/Form.php
@@ -187,7 +187,7 @@ class Form extends \Magento\Backend\Block\Widget
                     $fieldType,
                     [
                         'name' => $attribute->getAttributeCode(),
-                        'label' => $attribute->getFrontend()->getLabel(),
+                        'label' => $attribute->getFrontend()->getLocalizedLabel(),
                         'class' => $attribute->getFrontend()->getClass(),
                         'required' => $attribute->getIsRequired(),
                         'note' => $attribute->getNote()
diff --git a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/System/Account/SaveTest.php b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/System/Account/SaveTest.php
index b63c4f1e1a5..0262c212175 100644
--- a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/System/Account/SaveTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/System/Account/SaveTest.php
@@ -136,7 +136,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             \Magento\Backend\Block\System\Account\Edit\Form::IDENTITY_VERIFICATION_PASSWORD_FIELD => 'current_password',
         ];
 
-        $testedMessage = 'You saved the account.';
+        $testedMessage = __('You saved the account.');
 
         $this->_authSessionMock->expects($this->any())->method('getUser')->will($this->returnValue($this->_userMock));
 
diff --git a/app/code/Magento/Backend/i18n/en_US.csv b/app/code/Magento/Backend/i18n/en_US.csv
index 8bd82b41c20..98b2dd19f78 100644
--- a/app/code/Magento/Backend/i18n/en_US.csv
+++ b/app/code/Magento/Backend/i18n/en_US.csv
@@ -606,3 +606,9 @@ Tags,Tags
 Options,Options
 "Magento Admin","Magento Admin"
 "Community Edition","Community Edition"
+"Last Orders","Last Orders"
+"Last Search Terms","Last Search Terms"
+"Top Search Terms","Top Search Terms"
+"Your Password","Your Password"
+"You saved the account.","You saved the account."
+
diff --git a/app/code/Magento/Catalog/i18n/en_US.csv b/app/code/Magento/Catalog/i18n/en_US.csv
index 2cfe7083932..402e5915ce1 100644
--- a/app/code/Magento/Catalog/i18n/en_US.csv
+++ b/app/code/Magento/Catalog/i18n/en_US.csv
@@ -630,3 +630,23 @@ Set,Set
 none,none
 Overview,Overview
 "Field ""%1"" was not found in DO ""%2"".","Field ""%1"" was not found in DO ""%2""."
+"Is Active","Is Active"
+"URL Key","URL Key"
+"Description","Description"
+"Image","Image"
+"Page Title","Page Title"
+"Meta Keywords","Meta Keywords"
+"Meta Description","Meta Description"
+"Include in Navigation Menu","Include in Navigation Menu"
+"Display Mode","Display Mode"
+"CMS Block","CMS Block"
+"Is Anchor","Is Anchor"
+"Available Product Listing Sort By","Available Product Listing Sort By"
+"Default Product Listing Sort By","Default Product Listing Sort By"
+"Layered Navigation Price Step","Layered Navigation Price Step"
+"Use Parent Category Settings","Use Parent Category Settings"
+"Apply To Products","Apply To Products"
+"Active From","Active From"
+"Active To","Active To"
+"Page Layout","Page Layout"
+"Custom Layout Update","Custom Layout Update"
diff --git a/app/code/Magento/Developer/i18n/en_US.csv b/app/code/Magento/Developer/i18n/en_US.csv
index e69de29bb2d..3a1804555a6 100644
--- a/app/code/Magento/Developer/i18n/en_US.csv
+++ b/app/code/Magento/Developer/i18n/en_US.csv
@@ -0,0 +1,36 @@
+"Front-end development workflow","Front-end development workflow"
+"Workflow type","Workflow type"
+"Not available in production mode","Not available in production mode"
+"Developer Client Restrictions","Developer Client Restrictions"
+"Allowed IPs (comma separated)","Allowed IPs (comma separated)"
+"Leave empty for access from any location.","Leave empty for access from any location."
+"Debug","Debug"
+"Enabled Template Path Hints for Storefront","Enabled Template Path Hints for Storefront"
+"Enabled Template Path Hints for Admin","Enabled Template Path Hints for Admin"
+"Add Block Names to Hints","Add Block Names to Hints"
+"Template Settings","Template Settings"
+"Allow Symlinks","Allow Symlinks"
+"Warning! Enabling this feature is not recommended on production environments because it represents a potential security risk.","Warning! Enabling this feature is not recommended on production environments because it represents a potential security risk."
+"Minify Html","Minify Html"
+"Translate Inline","Translate Inline"
+"Enabled for Storefront","Enabled for Storefront"
+"Enabled for Admin","Enabled for Admin"
+"Translate, blocks and other output caches should be disabled for both Storefront and Admin inline translations.","Translate, blocks and other output caches should be disabled for both Storefront and Admin inline translations."
+"JavaScript Settings","JavaScript Settings"
+"Enable Javascript Bundling","Enable Javascript Bundling"
+"Merge JavaScript Files","Merge JavaScript Files"
+"Minify JavaScript Files","Minify JavaScript Files"
+"Translation Strategy","Translation Strategy"
+"Dictionary (Translation on Storefront side)","Dictionary (Translation on Storefront side)"
+"Embedded (Translation on Admin side)","Embedded (Translation on Admin side)"
+"Log JS Errors to Session Storage","Log JS Errors to Session Storage"
+"Log JS Errors to Session Storage Key","Log JS Errors to Session Storage Key"
+"CSS Settings","CSS Settings"
+"Merge CSS Files","Merge CSS Files"
+"Minify CSS Files","Minify CSS Files"
+"Image Processing Settings","Image Processing Settings"
+"Image Adapter","Image Adapter"
+"Static Files Settings","Static Files Settings"
+"Sign Static Files","Sign Static Files"
+"Grid Settings","Grid Settings"
+"Asynchronous indexing","Asynchronous indexing"
diff --git a/app/code/Magento/Eav/Model/Entity/Attribute/Frontend/AbstractFrontend.php b/app/code/Magento/Eav/Model/Entity/Attribute/Frontend/AbstractFrontend.php
index 65644c94f26..943cf2d3530 100644
--- a/app/code/Magento/Eav/Model/Entity/Attribute/Frontend/AbstractFrontend.php
+++ b/app/code/Magento/Eav/Model/Entity/Attribute/Frontend/AbstractFrontend.php
@@ -70,7 +70,7 @@ abstract class AbstractFrontend implements \Magento\Eav\Model\Entity\Attribute\F
     }
 
     /**
-     * Retrieve lable
+     * Retrieve label
      *
      * @return string
      */
@@ -84,6 +84,16 @@ abstract class AbstractFrontend implements \Magento\Eav\Model\Entity\Attribute\F
         return $label;
     }
 
+    /**
+     * Retrieve localized label
+     *
+     * @return \Magento\Framework\Phrase
+     */
+    public function getLocalizedLabel()
+    {
+        return __($this->getLabel());
+    }
+
     /**
      * Retrieve attribute value
      *
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Frontend/DatetimeTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Frontend/DatetimeTest.php
index f28fe8386ee..03858a596f4 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Frontend/DatetimeTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Frontend/DatetimeTest.php
@@ -43,12 +43,11 @@ class DatetimeTest extends \PHPUnit_Framework_TestCase
 
         $this->attributeMock = $this->getMock(
             '\Magento\Eav\Model\Entity\Attribute\AbstractAttribute',
-            [],
+            ['getAttributeCode', 'getFrontendLabel'],
             [],
             '',
             false
         );
-        $this->attributeMock->expects($this->any())->method('getAttributeCode')->will($this->returnValue('datetime'));
 
         $this->model = new Datetime($this->booleanFactoryMock, $this->localeDateMock);
         $this->model->setAttribute($this->attributeMock);
@@ -59,6 +58,7 @@ class DatetimeTest extends \PHPUnit_Framework_TestCase
         $attributeValue = '11-11-2011';
         $date = new \DateTime($attributeValue);
         $object = new \Magento\Framework\DataObject(['datetime' => $attributeValue]);
+        $this->attributeMock->expects($this->any())->method('getAttributeCode')->will($this->returnValue('datetime'));
         $this->attributeMock->expects($this->any())->method('getData')->with('frontend_input')
             ->will($this->returnValue('text'));
 
@@ -68,4 +68,33 @@ class DatetimeTest extends \PHPUnit_Framework_TestCase
 
         $this->assertEquals($attributeValue, $this->model->getValue($object));
     }
+
+    /**
+     * @param mixed $labelText
+     * @param mixed $attributeCode
+     * @param string $expectedResult
+     * @dataProvider getLabelDataProvider
+     */
+    public function testGetLocalizedLabel($labelText, $attributeCode, $expectedResult) {
+        $this->attributeMock->expects($this->exactly(2))
+            ->method('getFrontendLabel')
+            ->willReturn($labelText);
+        $this->attributeMock->expects($this->any())
+            ->method('getAttributeCode')
+            ->willReturn($attributeCode);
+
+        $this->assertInstanceOf('\Magento\Framework\Phrase', $this->model->getLocalizedLabel());
+        $this->assertSame($expectedResult, (string)$this->model->getLocalizedLabel());
+    }
+
+    /**
+     * @return array
+     */
+    public function getLabelDataProvider() {
+        return [
+            [null, 'test code', 'test code'],
+            ['', 'test code', 'test code'],
+            ['test label', 'test code', 'test label'],
+        ];
+    }
 }
-- 
GitLab


From c56ddf41c4e1c58ba005998886dd18f8a14c78d4 Mon Sep 17 00:00:00 2001
From: Bohdan Korablov <bkorablov@ebay.com>
Date: Thu, 22 Oct 2015 16:33:15 +0300
Subject: [PATCH 192/370] MAGETWO-44146: ERR_TOO_MANY_REDIRECTS after setting
 "Add Store Code to Urls" and trying to login

---
 app/etc/di.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/etc/di.xml b/app/etc/di.xml
index 598bc2c341e..3932bcf1336 100755
--- a/app/etc/di.xml
+++ b/app/etc/di.xml
@@ -176,7 +176,7 @@
     <type name="Magento\Framework\View\BlockPool" shared="false" />
     <type name="Magento\Framework\App\Request\Http">
         <arguments>
-            <argument name="pathInfoProcessor" xsi:type="object">Magento\Store\App\Request\PathInfoProcessor\Proxy</argument>
+            <argument name="pathInfoProcessor" xsi:type="object">Magento\Backend\App\Request\PathInfoProcessor\Proxy</argument>
         </arguments>
     </type>
     <preference for="Magento\Framework\Session\SaveHandlerInterface" type="Magento\Framework\Session\SaveHandler" />
-- 
GitLab


From 3596452ca30b01bb66ace106dac061a5c40b23a1 Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Thu, 22 Oct 2015 16:40:43 +0300
Subject: [PATCH 193/370] MAGETWO-44422: Inconsistent confirm modal window
 behavior

---
 dev/tools/grunt/assets/legacy-build/shim.js |  2 +-
 lib/web/legacy-build.min.js                 |  2 +-
 lib/web/mage/adminhtml/tools.js             | 11 -----------
 3 files changed, 2 insertions(+), 13 deletions(-)

diff --git a/dev/tools/grunt/assets/legacy-build/shim.js b/dev/tools/grunt/assets/legacy-build/shim.js
index 74513409896..e9226398fd1 100644
--- a/dev/tools/grunt/assets/legacy-build/shim.js
+++ b/dev/tools/grunt/assets/legacy-build/shim.js
@@ -5,7 +5,7 @@
 (function () {
     'use strict';
 
-    var globals = ['Prototype', 'Abstract', 'Try', 'Class', 'PeriodicalExecuter', 'Template', '$break', 'Enumerable', '$A', '$w', '$H', 'Hash', '$R', 'ObjectRange', 'Ajax', '$', 'Form', 'Field', '$F', 'Toggle', 'Insertion', '$continue', 'Position', 'Windows', 'Dialog', 'array', 'WindowUtilities', 'Builder', 'Effect', 'validateCreditCard', 'Validator', 'Validation', 'removeDelimiters', 'parseNumber', 'popWin', 'setLocation', 'setPLocation', 'setLanguageCode', 'decorateGeneric', 'decorateTable', 'decorateList', 'decorateDataList', 'parseSidUrl', 'formatCurrency', 'expandDetails', 'isIE', 'Varien', 'fireEvent', 'modulo', 'byteConvert', 'SessionError', 'varienLoader', 'varienLoaderHandler', 'setLoaderPosition', 'toggleSelectsUnderBlock', 'varienUpdater', 'confirmSetLocation', 'deleteConfirm', 'setElementDisable', 'toggleParentVis', 'toggleFieldsetVis', 'toggleVis', 'imagePreview', 'checkByProductPriceType', 'toggleSeveralValueElements', 'toggleValueElements', 'submitAndReloadArea', 'syncOnchangeValue', 'updateElementAtCursor', 'firebugEnabled', 'disableElement', 'enableElement', 'disableElements', 'enableElements', 'Cookie', 'Fieldset', 'Base64', 'sortNumeric', 'Element', '$$', 'Sizzle', 'Selector', 'Window'];
+    var globals = ['Prototype', 'Abstract', 'Try', 'Class', 'PeriodicalExecuter', 'Template', '$break', 'Enumerable', '$A', '$w', '$H', 'Hash', '$R', 'ObjectRange', 'Ajax', '$', 'Form', 'Field', '$F', 'Toggle', 'Insertion', '$continue', 'Position', 'Windows', 'Dialog', 'array', 'WindowUtilities', 'Builder', 'Effect', 'validateCreditCard', 'Validator', 'Validation', 'removeDelimiters', 'parseNumber', 'popWin', 'setLocation', 'setPLocation', 'setLanguageCode', 'decorateGeneric', 'decorateTable', 'decorateList', 'decorateDataList', 'parseSidUrl', 'formatCurrency', 'expandDetails', 'isIE', 'Varien', 'fireEvent', 'modulo', 'byteConvert', 'SessionError', 'varienLoader', 'varienLoaderHandler', 'setLoaderPosition', 'toggleSelectsUnderBlock', 'varienUpdater', 'setElementDisable', 'toggleParentVis', 'toggleFieldsetVis', 'toggleVis', 'imagePreview', 'checkByProductPriceType', 'toggleSeveralValueElements', 'toggleValueElements', 'submitAndReloadArea', 'syncOnchangeValue', 'updateElementAtCursor', 'firebugEnabled', 'disableElement', 'enableElement', 'disableElements', 'enableElements', 'Cookie', 'Fieldset', 'Base64', 'sortNumeric', 'Element', '$$', 'Sizzle', 'Selector', 'Window'];
 
     globals.forEach(function (prop) {
         /* jshint evil:true */
diff --git a/lib/web/legacy-build.min.js b/lib/web/legacy-build.min.js
index e6c72315629..289cf49e76a 100644
--- a/lib/web/legacy-build.min.js
+++ b/lib/web/legacy-build.min.js
@@ -5,4 +5,4 @@ var Prototype={Version:"1.7",Browser:(function(){var d=navigator.userAgent;var b
  *  Released under the MIT, BSD, and GPL Licenses.
  *  More information: http://sizzlejs.com/
  */
-(function(){var w=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,p=0,g=Object.prototype.toString,u=false,o=true;[0,0].sort(function(){o=false;return 0});var d=function(L,B,I,D){I=I||[];var e=B=B||document;if(B.nodeType!==1&&B.nodeType!==9){return[]}if(!L||typeof L!=="string"){return I}var J=[],K,G,P,O,H,A,z=true,E=v(B),N=L;while((w.exec(""),K=w.exec(N))!==null){N=K[3];J.push(K[1]);if(K[2]){A=K[3];break}}if(J.length>1&&q.exec(L)){if(J.length===2&&h.relative[J[0]]){G=l(J[0]+J[1],B)}else{G=h.relative[J[0]]?[B]:d(J.shift(),B);while(J.length){L=J.shift();if(h.relative[L]){L+=J.shift()}G=l(L,G)}}}else{if(!D&&J.length>1&&B.nodeType===9&&!E&&h.match.ID.test(J[0])&&!h.match.ID.test(J[J.length-1])){var Q=d.find(J.shift(),B,E);B=Q.expr?d.filter(Q.expr,Q.set)[0]:Q.set[0]}if(B){var Q=D?{expr:J.pop(),set:b(D)}:d.find(J.pop(),J.length===1&&(J[0]==="~"||J[0]==="+")&&B.parentNode?B.parentNode:B,E);G=Q.expr?d.filter(Q.expr,Q.set):Q.set;if(J.length>0){P=b(G)}else{z=false}while(J.length){var C=J.pop(),F=C;if(!h.relative[C]){C=""}else{F=J.pop()}if(F==null){F=B}h.relative[C](P,F,E)}}else{P=J=[]}}if(!P){P=G}if(!P){throw"Syntax error, unrecognized expression: "+(C||L)}if(g.call(P)==="[object Array]"){if(!z){I.push.apply(I,P)}else{if(B&&B.nodeType===1){for(var M=0;P[M]!=null;M++){if(P[M]&&(P[M]===true||P[M].nodeType===1&&n(B,P[M]))){I.push(G[M])}}}else{for(var M=0;P[M]!=null;M++){if(P[M]&&P[M].nodeType===1){I.push(G[M])}}}}}else{b(P,I)}if(A){d(A,e,I,D);d.uniqueSort(I)}return I};d.uniqueSort=function(z){if(f){u=o;z.sort(f);if(u){for(var e=1;e<z.length;e++){if(z[e]===z[e-1]){z.splice(e--,1)}}}}return z};d.matches=function(e,z){return d(e,null,null,z)};d.find=function(F,e,G){var E,C;if(!F){return[]}for(var B=0,A=h.order.length;B<A;B++){var D=h.order[B],C;if((C=h.leftMatch[D].exec(F))){var z=C[1];C.splice(1,1);if(z.substr(z.length-1)!=="\\"){C[1]=(C[1]||"").replace(/\\/g,"");E=h.find[D](C,e,G);if(E!=null){F=F.replace(h.match[D],"");break}}}}if(!E){E=e.getElementsByTagName("*")}return{set:E,expr:F}};d.filter=function(I,H,L,B){var A=I,N=[],F=H,D,e,E=H&&H[0]&&v(H[0]);while(I&&H.length){for(var G in h.filter){if((D=h.match[G].exec(I))!=null){var z=h.filter[G],M,K;e=false;if(F==N){N=[]}if(h.preFilter[G]){D=h.preFilter[G](D,F,L,N,B,E);if(!D){e=M=true}else{if(D===true){continue}}}if(D){for(var C=0;(K=F[C])!=null;C++){if(K){M=z(K,D,C,F);var J=B^!!M;if(L&&M!=null){if(J){e=true}else{F[C]=false}}else{if(J){N.push(K);e=true}}}}}if(M!==undefined){if(!L){F=N}I=I.replace(h.match[G],"");if(!e){return[]}break}}}if(I==A){if(e==null){throw"Syntax error, unrecognized expression: "+I}else{break}}A=I}return F};var h=d.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")}},relative:{"+":function(F,e,E){var C=typeof e==="string",G=C&&!/\W/.test(e),D=C&&!G;if(G&&!E){e=e.toUpperCase()}for(var B=0,A=F.length,z;B<A;B++){if((z=F[B])){while((z=z.previousSibling)&&z.nodeType!==1){}F[B]=D||z&&z.nodeName===e?z||false:z===e}}if(D){d.filter(e,F,true)}},">":function(E,z,F){var C=typeof z==="string";if(C&&!/\W/.test(z)){z=F?z:z.toUpperCase();for(var A=0,e=E.length;A<e;A++){var D=E[A];if(D){var B=D.parentNode;E[A]=B.nodeName===z?B:false}}}else{for(var A=0,e=E.length;A<e;A++){var D=E[A];if(D){E[A]=C?D.parentNode:D.parentNode===z}}if(C){d.filter(z,E,true)}}},"":function(B,z,D){var A=p++,e=y;if(!/\W/.test(z)){var C=z=D?z:z.toUpperCase();e=t}e("parentNode",z,A,B,C,D)},"~":function(B,z,D){var A=p++,e=y;if(typeof z==="string"&&!/\W/.test(z)){var C=z=D?z:z.toUpperCase();e=t}e("previousSibling",z,A,B,C,D)}},find:{ID:function(z,A,B){if(typeof A.getElementById!=="undefined"&&!B){var e=A.getElementById(z[1]);return e?[e]:[]}},NAME:function(A,D,E){if(typeof D.getElementsByName!=="undefined"){var z=[],C=D.getElementsByName(A[1]);for(var B=0,e=C.length;B<e;B++){if(C[B].getAttribute("name")===A[1]){z.push(C[B])}}return z.length===0?null:z}},TAG:function(e,z){return z.getElementsByTagName(e[1])}},preFilter:{CLASS:function(B,z,A,e,E,F){B=" "+B[1].replace(/\\/g,"")+" ";if(F){return B}for(var C=0,D;(D=z[C])!=null;C++){if(D){if(E^(D.className&&(" "+D.className+" ").indexOf(B)>=0)){if(!A){e.push(D)}}else{if(A){z[C]=false}}}}return false},ID:function(e){return e[1].replace(/\\/g,"")},TAG:function(z,e){for(var A=0;e[A]===false;A++){}return e[A]&&v(e[A])?z[1]:z[1].toUpperCase()},CHILD:function(e){if(e[1]=="nth"){var z=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(e[2]=="even"&&"2n"||e[2]=="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(z[1]+(z[2]||1))-0;e[3]=z[3]-0}e[0]=p++;return e},ATTR:function(C,z,A,e,D,E){var B=C[1].replace(/\\/g,"");if(!E&&h.attrMap[B]){C[1]=h.attrMap[B]}if(C[2]==="~="){C[4]=" "+C[4]+" "}return C},PSEUDO:function(C,z,A,e,D){if(C[1]==="not"){if((w.exec(C[3])||"").length>1||/^\w/.test(C[3])){C[3]=d(C[3],null,null,z)}else{var B=d.filter(C[3],z,A,true^D);if(!A){e.push.apply(e,B)}return false}}else{if(h.match.POS.test(C[0])||h.match.CHILD.test(C[0])){return true}}return C},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){e.parentNode.selectedIndex;return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(A,z,e){return !!d(e[3],A).length},header:function(e){return/h\d/i.test(e.nodeName)},text:function(e){return"text"===e.type},radio:function(e){return"radio"===e.type},checkbox:function(e){return"checkbox"===e.type},file:function(e){return"file"===e.type},password:function(e){return"password"===e.type},submit:function(e){return"submit"===e.type},image:function(e){return"image"===e.type},reset:function(e){return"reset"===e.type},button:function(e){return"button"===e.type||e.nodeName.toUpperCase()==="BUTTON"},input:function(e){return/input|select|textarea|button/i.test(e.nodeName)}},setFilters:{first:function(z,e){return e===0},last:function(A,z,e,B){return z===B.length-1},even:function(z,e){return e%2===0},odd:function(z,e){return e%2===1},lt:function(A,z,e){return z<e[3]-0},gt:function(A,z,e){return z>e[3]-0},nth:function(A,z,e){return e[3]-0==z},eq:function(A,z,e){return e[3]-0==z}},filter:{PSEUDO:function(E,A,B,F){var z=A[1],C=h.filters[z];if(C){return C(E,B,A,F)}else{if(z==="contains"){return(E.textContent||E.innerText||"").indexOf(A[3])>=0}else{if(z==="not"){var D=A[3];for(var B=0,e=D.length;B<e;B++){if(D[B]===E){return false}}return true}}}},CHILD:function(e,B){var E=B[1],z=e;switch(E){case"only":case"first":while((z=z.previousSibling)){if(z.nodeType===1){return false}}if(E=="first"){return true}z=e;case"last":while((z=z.nextSibling)){if(z.nodeType===1){return false}}return true;case"nth":var A=B[2],H=B[3];if(A==1&&H==0){return true}var D=B[0],G=e.parentNode;if(G&&(G.sizcache!==D||!e.nodeIndex)){var C=0;for(z=G.firstChild;z;z=z.nextSibling){if(z.nodeType===1){z.nodeIndex=++C}}G.sizcache=D}var F=e.nodeIndex-H;if(A==0){return F==0}else{return(F%A==0&&F/A>=0)}}},ID:function(z,e){return z.nodeType===1&&z.getAttribute("id")===e},TAG:function(z,e){return(e==="*"&&z.nodeType===1)||z.nodeName===e},CLASS:function(z,e){return(" "+(z.className||z.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(D,B){var A=B[1],e=h.attrHandle[A]?h.attrHandle[A](D):D[A]!=null?D[A]:D.getAttribute(A),E=e+"",C=B[2],z=B[4];return e==null?C==="!=":C==="="?E===z:C==="*="?E.indexOf(z)>=0:C==="~="?(" "+E+" ").indexOf(z)>=0:!z?E&&e!==false:C==="!="?E!=z:C==="^="?E.indexOf(z)===0:C==="$="?E.substr(E.length-z.length)===z:C==="|="?E===z||E.substr(0,z.length+1)===z+"-":false},POS:function(C,z,A,D){var e=z[2],B=h.setFilters[e];if(B){return B(C,A,z,D)}}}};var q=h.match.POS;for(var s in h.match){h.match[s]=new RegExp(h.match[s].source+/(?![^\[]*\])(?![^\(]*\))/.source);h.leftMatch[s]=new RegExp(/(^(?:.|\r|\n)*?)/.source+h.match[s].source)}var b=function(z,e){z=Array.prototype.slice.call(z,0);if(e){e.push.apply(e,z);return e}return z};try{Array.prototype.slice.call(document.documentElement.childNodes,0)}catch(r){b=function(C,B){var z=B||[];if(g.call(C)==="[object Array]"){Array.prototype.push.apply(z,C)}else{if(typeof C.length==="number"){for(var A=0,e=C.length;A<e;A++){z.push(C[A])}}else{for(var A=0;C[A];A++){z.push(C[A])}}}return z}}var f;if(document.documentElement.compareDocumentPosition){f=function(z,e){if(!z.compareDocumentPosition||!e.compareDocumentPosition){if(z==e){u=true}return 0}var A=z.compareDocumentPosition(e)&4?-1:z===e?0:1;if(A===0){u=true}return A}}else{if("sourceIndex" in document.documentElement){f=function(z,e){if(!z.sourceIndex||!e.sourceIndex){if(z==e){u=true}return 0}var A=z.sourceIndex-e.sourceIndex;if(A===0){u=true}return A}}else{if(document.createRange){f=function(B,z){if(!B.ownerDocument||!z.ownerDocument){if(B==z){u=true}return 0}var A=B.ownerDocument.createRange(),e=z.ownerDocument.createRange();A.setStart(B,0);A.setEnd(B,0);e.setStart(z,0);e.setEnd(z,0);var C=A.compareBoundaryPoints(Range.START_TO_END,e);if(C===0){u=true}return C}}}}(function(){var z=document.createElement("div"),A="script"+(new Date).getTime();z.innerHTML="<a name='"+A+"'/>";var e=document.documentElement;e.insertBefore(z,e.firstChild);if(!!document.getElementById(A)){h.find.ID=function(C,D,E){if(typeof D.getElementById!=="undefined"&&!E){var B=D.getElementById(C[1]);return B?B.id===C[1]||typeof B.getAttributeNode!=="undefined"&&B.getAttributeNode("id").nodeValue===C[1]?[B]:undefined:[]}};h.filter.ID=function(D,B){var C=typeof D.getAttributeNode!=="undefined"&&D.getAttributeNode("id");return D.nodeType===1&&C&&C.nodeValue===B}}e.removeChild(z);e=z=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){h.find.TAG=function(z,D){var C=D.getElementsByTagName(z[1]);if(z[1]==="*"){var B=[];for(var A=0;C[A];A++){if(C[A].nodeType===1){B.push(C[A])}}C=B}return C}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){h.attrHandle.href=function(z){return z.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=d,A=document.createElement("div");A.innerHTML="<p class='TEST'></p>";if(A.querySelectorAll&&A.querySelectorAll(".TEST").length===0){return}d=function(E,D,B,C){D=D||document;if(!C&&D.nodeType===9&&!v(D)){try{return b(D.querySelectorAll(E),B)}catch(F){}}return e(E,D,B,C)};for(var z in e){d[z]=e[z]}A=null})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var e=document.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}h.order.splice(1,0,"CLASS");h.find.CLASS=function(z,A,B){if(typeof A.getElementsByClassName!=="undefined"&&!B){return A.getElementsByClassName(z[1])}};e=null})()}function t(z,E,D,I,F,H){var G=z=="previousSibling"&&!H;for(var B=0,A=I.length;B<A;B++){var e=I[B];if(e){if(G&&e.nodeType===1){e.sizcache=D;e.sizset=B}e=e[z];var C=false;while(e){if(e.sizcache===D){C=I[e.sizset];break}if(e.nodeType===1&&!H){e.sizcache=D;e.sizset=B}if(e.nodeName===E){C=e;break}e=e[z]}I[B]=C}}}function y(z,E,D,I,F,H){var G=z=="previousSibling"&&!H;for(var B=0,A=I.length;B<A;B++){var e=I[B];if(e){if(G&&e.nodeType===1){e.sizcache=D;e.sizset=B}e=e[z];var C=false;while(e){if(e.sizcache===D){C=I[e.sizset];break}if(e.nodeType===1){if(!H){e.sizcache=D;e.sizset=B}if(typeof E!=="string"){if(e===E){C=true;break}}else{if(d.filter(E,[e]).length>0){C=e;break}}}e=e[z]}I[B]=C}}}var n=document.compareDocumentPosition?function(z,e){return z.compareDocumentPosition(e)&16}:function(z,e){return z!==e&&(z.contains?z.contains(e):true)};var v=function(e){return e.nodeType===9&&e.documentElement.nodeName!=="HTML"||!!e.ownerDocument&&e.ownerDocument.documentElement.nodeName!=="HTML"};var l=function(e,F){var B=[],C="",D,A=F.nodeType?[F]:F;while((D=h.match.PSEUDO.exec(e))){C+=D[0];e=e.replace(h.match.PSEUDO,"")}e=h.relative[e]?e+"*":e;for(var E=0,z=A.length;E<z;E++){d(e,A[E],B)}return d.filter(C,B)};window.Sizzle=d})();(function(e){var f=Prototype.Selector.extendElements;function b(g,h){return f(e(g,h||document))}function d(h,g){return e.matches(g,[h]).length==1}Prototype.Selector.engine=e;Prototype.Selector.select=b;Prototype.Selector.match=d})(Sizzle);window.Sizzle=Prototype._original_property;delete Prototype._original_property;var Form={reset:function(b){b=$(b);b.reset();return b},serializeElements:function(n,f){if(typeof f!="object"){f={hash:!!f}}else{if(Object.isUndefined(f.hash)){f.hash=true}}var g,l,b=false,h=f.submit,d,e;if(f.hash){e={};d=function(o,p,q){if(p in o){if(!Object.isArray(o[p])){o[p]=[o[p]]}o[p].push(q)}else{o[p]=q}return o}}else{e="";d=function(o,p,q){return o+(o?"&":"")+encodeURIComponent(p)+"="+encodeURIComponent(q)}}return n.inject(e,function(o,p){if(!p.disabled&&p.name){g=p.name;l=$(p).getValue();if(l!=null&&p.type!="file"&&(p.type!="submit"||(!b&&h!==false&&(!h||g==h)&&(b=true)))){o=d(o,g,l)}}return o})}};Form.Methods={serialize:function(d,b){return Form.serializeElements(Form.getElements(d),b)},getElements:function(g){var h=$(g).getElementsByTagName("*"),f,b=[],e=Form.Element.Serializers;for(var d=0;f=h[d];d++){b.push(f)}return b.inject([],function(l,n){if(e[n.tagName.toLowerCase()]){l.push(Element.extend(n))}return l})},getInputs:function(l,e,f){l=$(l);var b=l.getElementsByTagName("input");if(!e&&!f){return $A(b).map(Element.extend)}for(var g=0,n=[],h=b.length;g<h;g++){var d=b[g];if((e&&d.type!=e)||(f&&d.name!=f)){continue}n.push(Element.extend(d))}return n},disable:function(b){b=$(b);Form.getElements(b).invoke("disable");return b},enable:function(b){b=$(b);Form.getElements(b).invoke("enable");return b},findFirstElement:function(d){var e=$(d).getElements().findAll(function(f){return"hidden"!=f.type&&!f.disabled});var b=e.findAll(function(f){return f.hasAttribute("tabIndex")&&f.tabIndex>=0}).sortBy(function(f){return f.tabIndex}).first();return b?b:e.find(function(f){return/^(?:input|select|textarea)$/i.test(f.tagName)})},focusFirstElement:function(d){d=$(d);var b=d.findFirstElement();if(b){b.activate()}return d},request:function(d,b){d=$(d),b=Object.clone(b||{});var f=b.parameters,e=d.readAttribute("action")||"";if(e.blank()){e=window.location.href}b.parameters=d.serialize(true);if(f){if(Object.isString(f)){f=f.toQueryParams()}Object.extend(b.parameters,f)}if(d.hasAttribute("method")&&!b.method){b.method=d.method}return new Ajax.Request(e,b)}};Form.Element={focus:function(b){$(b).focus();return b},select:function(b){$(b).select();return b}};Form.Element.Methods={serialize:function(b){b=$(b);if(!b.disabled&&b.name){var d=b.getValue();if(d!=undefined){var e={};e[b.name]=d;return Object.toQueryString(e)}}return""},getValue:function(b){b=$(b);var d=b.tagName.toLowerCase();return Form.Element.Serializers[d](b)},setValue:function(b,d){b=$(b);var e=b.tagName.toLowerCase();Form.Element.Serializers[e](b,d);return b},clear:function(b){$(b).value="";return b},present:function(b){return $(b).value!=""},activate:function(b){b=$(b);try{b.focus();if(b.select&&(b.tagName.toLowerCase()!="input"||!(/^(?:button|reset|submit)$/i.test(b.type)))){b.select()}}catch(d){}return b},disable:function(b){b=$(b);b.disabled=true;return b},enable:function(b){b=$(b);b.disabled=false;return b}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers=(function(){function d(n,o){switch(n.type.toLowerCase()){case"checkbox":case"radio":return h(n,o);default:return g(n,o)}}function h(n,o){if(Object.isUndefined(o)){return n.checked?n.value:null}else{n.checked=!!o}}function g(n,o){if(Object.isUndefined(o)){return n.value}else{n.value=o}}function b(p,s){if(Object.isUndefined(s)){return(p.type==="select-one"?e:f)(p)}var o,q,t=!Object.isArray(s);for(var n=0,r=p.length;n<r;n++){o=p.options[n];q=this.optionValue(o);if(t){if(q==s){o.selected=true;return}}else{o.selected=s.include(q)}}}function e(o){var n=o.selectedIndex;return n>=0?l(o.options[n]):null}function f(q){var n,r=q.length;if(!r){return null}for(var p=0,n=[];p<r;p++){var o=q.options[p];if(o.selected){n.push(l(o))}}return n}function l(n){return Element.hasAttribute(n,"value")?n.value:n.text}return{input:d,inputSelector:h,textarea:g,select:b,selectOne:e,selectMany:f,optionValue:l,button:g}})();Abstract.TimedObserver=Class.create(PeriodicalExecuter,{initialize:function($super,b,d,e){$super(e,d);this.element=$(b);this.lastValue=this.getValue()},execute:function(){var b=this.getValue();if(Object.isString(this.lastValue)&&Object.isString(b)?this.lastValue!=b:String(this.lastValue)!=String(b)){this.callback(this.element,b);this.lastValue=b}}});Form.Element.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.Element.getValue(this.element)}});Form.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.serialize(this.element)}});Abstract.EventObserver=Class.create({initialize:function(b,d){this.element=$(b);this.callback=d;this.lastValue=this.getValue();if(this.element.tagName.toLowerCase()=="form"){this.registerFormCallbacks()}else{this.registerCallback(this.element)}},onElementEvent:function(){var b=this.getValue();if(this.lastValue!=b){this.callback(this.element,b);this.lastValue=b}},registerFormCallbacks:function(){Form.getElements(this.element).each(this.registerCallback,this)},registerCallback:function(b){if(b.type){switch(b.type.toLowerCase()){case"checkbox":case"radio":Event.observe(b,"click",this.onElementEvent.bind(this));break;default:Event.observe(b,"change",this.onElementEvent.bind(this));break}}}});Form.Element.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.Element.getValue(this.element)}});Form.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.serialize(this.element)}});(function(){var J={KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,KEY_ESC:27,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_DELETE:46,KEY_HOME:36,KEY_END:35,KEY_PAGEUP:33,KEY_PAGEDOWN:34,KEY_INSERT:45,cache:{}};var h=document.documentElement;var K="onmouseenter" in h&&"onmouseleave" in h;var b=function(L){return false};if(window.attachEvent){if(window.addEventListener){b=function(L){return !(L instanceof window.Event)}}else{b=function(L){return true}}}var y;function H(M,L){return M.which?(M.which===L+1):(M.button===L)}var u={0:1,1:4,2:2};function F(M,L){return M.button===u[L]}function I(M,L){switch(L){case 0:return M.which==1&&!M.metaKey;case 1:return M.which==2||(M.which==1&&M.metaKey);case 2:return M.which==3;default:return false}}if(window.attachEvent){if(!window.addEventListener){y=F}else{y=function(M,L){return b(M)?F(M,L):H(M,L)}}}else{if(Prototype.Browser.WebKit){y=I}else{y=H}}function C(L){return y(L,0)}function A(L){return y(L,1)}function t(L){return y(L,2)}function f(N){N=J.extend(N);var M=N.target,L=N.type,O=N.currentTarget;if(O&&O.tagName){if(L==="load"||L==="error"||(L==="click"&&O.tagName.toLowerCase()==="input"&&O.type==="radio")){M=O}}if(M.nodeType==Node.TEXT_NODE){M=M.parentNode}return Element.extend(M)}function v(M,N){var L=J.element(M);if(!N){return L}while(L){if(Object.isElement(L)&&Prototype.Selector.match(L,N)){return Element.extend(L)}L=L.parentNode}}function z(L){return{x:e(L),y:d(L)}}function e(N){var M=document.documentElement,L=document.body||{scrollLeft:0};return N.pageX||(N.clientX+(M.scrollLeft||L.scrollLeft)-(M.clientLeft||0))}function d(N){var M=document.documentElement,L=document.body||{scrollTop:0};return N.pageY||(N.clientY+(M.scrollTop||L.scrollTop)-(M.clientTop||0))}function w(L){J.extend(L);L.preventDefault();L.stopPropagation();L.stopped=true}J.Methods={isLeftClick:C,isMiddleClick:A,isRightClick:t,element:f,findElement:v,pointer:z,pointerX:e,pointerY:d,stop:w};var E=Object.keys(J.Methods).inject({},function(L,M){L[M]=J.Methods[M].methodize();return L});if(window.attachEvent){function o(M){var L;switch(M.type){case"mouseover":case"mouseenter":L=M.fromElement;break;case"mouseout":case"mouseleave":L=M.toElement;break;default:return null}return Element.extend(L)}var B={stopPropagation:function(){this.cancelBubble=true},preventDefault:function(){this.returnValue=false},inspect:function(){return"[object Event]"}};J.extend=function(M,L){if(!M){return false}if(!b(M)){return M}if(M._extendedByPrototype){return M}M._extendedByPrototype=Prototype.emptyFunction;var N=J.pointer(M);Object.extend(M,{target:M.srcElement||L,relatedTarget:o(M),pageX:N.x,pageY:N.y});Object.extend(M,E);Object.extend(M,B);return M}}else{J.extend=Prototype.K}if(window.addEventListener){J.prototype=window.Event.prototype||document.createEvent("HTMLEvents").__proto__;Object.extend(J.prototype,E)}function s(P,O,Q){var N=Element.retrieve(P,"prototype_event_registry");if(Object.isUndefined(N)){g.push(P);N=Element.retrieve(P,"prototype_event_registry",$H())}var L=N.get(O);if(Object.isUndefined(L)){L=[];N.set(O,L)}if(L.pluck("handler").include(Q)){return false}var M;if(O.include(":")){M=function(R){if(Object.isUndefined(R.eventName)){return false}if(R.eventName!==O){return false}J.extend(R,P);Q.call(P,R)}}else{if(!K&&(O==="mouseenter"||O==="mouseleave")){if(O==="mouseenter"||O==="mouseleave"){M=function(S){J.extend(S,P);var R=S.relatedTarget;while(R&&R!==P){try{R=R.parentNode}catch(T){R=P}}if(R===P){return}Q.call(P,S)}}}else{M=function(R){J.extend(R,P);Q.call(P,R)}}}M.handler=Q;L.push(M);return M}function n(){for(var L=0,M=g.length;L<M;L++){J.stopObserving(g[L]);g[L]=null}}var g=[];if(Prototype.Browser.IE){window.attachEvent("onunload",n)}if(Prototype.Browser.WebKit){window.addEventListener("unload",Prototype.emptyFunction,false)}var r=Prototype.K,l={mouseenter:"mouseover",mouseleave:"mouseout"};if(!K){r=function(L){return(l[L]||L)}}function D(O,N,P){O=$(O);var M=s(O,N,P);if(!M){return O}if(N.include(":")){if(O.addEventListener){O.addEventListener("dataavailable",M,false)}else{O.attachEvent("ondataavailable",M);O.attachEvent("onlosecapture",M)}}else{var L=r(N);if(O.addEventListener){O.addEventListener(L,M,false)}else{O.attachEvent("on"+L,M)}}return O}function q(R,O,S){R=$(R);var N=Element.retrieve(R,"prototype_event_registry");if(!N){return R}if(!O){N.each(function(U){var T=U.key;q(R,T)});return R}var P=N.get(O);if(!P){return R}if(!S){P.each(function(T){q(R,O,T.handler)});return R}var Q=P.length,M;while(Q--){if(P[Q].handler===S){M=P[Q];break}}if(!M){return R}if(O.include(":")){if(R.removeEventListener){R.removeEventListener("dataavailable",M,false)}else{R.detachEvent("ondataavailable",M);R.detachEvent("onlosecapture",M)}}else{var L=r(O);if(R.removeEventListener){R.removeEventListener(L,M,false)}else{R.detachEvent("on"+L,M)}}N.set(O,P.without(M));return R}function G(O,N,M,L){O=$(O);if(Object.isUndefined(L)){L=true}if(O==document&&document.createEvent&&!O.dispatchEvent){O=document.documentElement}var P;if(document.createEvent){P=document.createEvent("HTMLEvents");P.initEvent("dataavailable",L,true)}else{P=document.createEventObject();P.eventType=L?"ondataavailable":"onlosecapture"}P.eventName=N;P.memo=M||{};if(document.createEvent){O.dispatchEvent(P)}else{O.fireEvent(P.eventType,P)}return J.extend(P)}J.Handler=Class.create({initialize:function(N,M,L,O){this.element=$(N);this.eventName=M;this.selector=L;this.callback=O;this.handler=this.handleEvent.bind(this)},start:function(){J.observe(this.element,this.eventName,this.handler);return this},stop:function(){J.stopObserving(this.element,this.eventName,this.handler);return this},handleEvent:function(M){var L=J.findElement(M,this.selector);if(L){this.callback.call(this.element,M,L)}}});function p(N,M,L,O){N=$(N);if(Object.isFunction(L)&&Object.isUndefined(O)){O=L,L=null}return new J.Handler(N,M,L,O).start()}Object.extend(J,J.Methods);Object.extend(J,{fire:G,observe:D,stopObserving:q,on:p});Element.addMethods({fire:G,observe:D,stopObserving:q,on:p});Object.extend(document,{fire:G.methodize(),observe:D.methodize(),stopObserving:q.methodize(),on:p.methodize(),loaded:false});if(window.Event){Object.extend(window.Event,J)}else{window.Event=J}})();(function(){var e;function b(){if(document.loaded){return}if(e){window.clearTimeout(e)}document.loaded=true;document.fire("dom:loaded")}function d(){if(document.readyState==="complete"){document.stopObserving("readystatechange",d);b()}}if(document.addEventListener){document.addEventListener("DOMContentLoaded",b,false)}else{document.observe("readystatechange",d);if(window==top){var e=window.setInterval(function(){try{document.documentElement.doScroll("left")}catch(f){return}window.clearInterval(e);b()},5)}}Event.observe(window,"load",b)})();Element.addMethods();Hash.toQueryString=Object.toQueryString;var Toggle={display:Element.toggle};Element.Methods.childOf=Element.Methods.descendantOf;var Insertion={Before:function(b,d){return Element.insert(b,{before:d})},Top:function(b,d){return Element.insert(b,{top:d})},Bottom:function(b,d){return Element.insert(b,{bottom:d})},After:function(b,d){return Element.insert(b,{after:d})}};var $continue=new Error('"throw $continue" is deprecated, use "return" instead');var Position={includeScrollOffsets:false,prepare:function(){this.deltaX=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;this.deltaY=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0},within:function(d,b,e){if(this.includeScrollOffsets){return this.withinIncludingScrolloffsets(d,b,e)}this.xcomp=b;this.ycomp=e;this.offset=Element.cumulativeOffset(d);return(e>=this.offset[1]&&e<this.offset[1]+d.offsetHeight&&b>=this.offset[0]&&b<this.offset[0]+d.offsetWidth)},withinIncludingScrolloffsets:function(d,b,f){var e=Element.cumulativeScrollOffset(d);this.xcomp=b+e[0]-this.deltaX;this.ycomp=f+e[1]-this.deltaY;this.offset=Element.cumulativeOffset(d);return(this.ycomp>=this.offset[1]&&this.ycomp<this.offset[1]+d.offsetHeight&&this.xcomp>=this.offset[0]&&this.xcomp<this.offset[0]+d.offsetWidth)},overlap:function(d,b){if(!d){return 0}if(d=="vertical"){return((this.offset[1]+b.offsetHeight)-this.ycomp)/b.offsetHeight}if(d=="horizontal"){return((this.offset[0]+b.offsetWidth)-this.xcomp)/b.offsetWidth}},cumulativeOffset:Element.Methods.cumulativeOffset,positionedOffset:Element.Methods.positionedOffset,absolutize:function(b){Position.prepare();return Element.absolutize(b)},relativize:function(b){Position.prepare();return Element.relativize(b)},realOffset:Element.Methods.cumulativeScrollOffset,offsetParent:Element.Methods.getOffsetParent,page:Element.Methods.viewportOffset,clone:function(d,e,b){b=b||{};return Element.clonePosition(e,d,b)}};if(!document.getElementsByClassName){document.getElementsByClassName=function(d){function b(e){return e.blank()?null:"[contains(concat(' ', @class, ' '), ' "+e+" ')]"}d.getElementsByClassName=Prototype.BrowserFeatures.XPath?function(e,g){g=g.toString().strip();var f=/\s/.test(g)?$w(g).map(b).join(""):b(g);return f?document._getElementsByXPath(".//*"+f,e):[]}:function(g,h){h=h.toString().strip();var l=[],n=(/\s/.test(h)?$w(h):null);if(!n&&!h){return l}var e=$(g).getElementsByTagName("*");h=" "+h+" ";for(var f=0,p,o;p=e[f];f++){if(p.className&&(o=" "+p.className+" ")&&(o.include(h)||(n&&n.all(function(q){return !q.toString().blank()&&o.include(" "+q+" ")})))){l.push(Element.extend(p))}}return l};return function(f,e){return $(e||document.body).getElementsByClassName(f)}}(Element.Methods)}Element.ClassNames=Class.create();Element.ClassNames.prototype={initialize:function(b){this.element=$(b)},_each:function(b){this.element.className.split(/\s+/).select(function(d){return d.length>0})._each(b)},set:function(b){this.element.className=b},add:function(b){if(this.include(b)){return}this.set($A(this).concat(b).join(" "))},remove:function(b){if(!this.include(b)){return}this.set($A(this).without(b).join(" "))},toString:function(){return $A(this).join(" ")}};Object.extend(Element.ClassNames.prototype,Enumerable);(function(){window.Selector=Class.create({initialize:function(b){this.expression=b.strip()},findElements:function(b){return Prototype.Selector.select(this.expression,b)},match:function(b){return Prototype.Selector.match(b,this.expression)},toString:function(){return this.expression},inspect:function(){return"#<Selector: "+this.expression+">"}});Object.extend(Selector,{matchElements:function(h,l){var b=Prototype.Selector.match,f=[];for(var e=0,g=h.length;e<g;e++){var d=h[e];if(b(d,l)){f.push(Element.extend(d))}}return f},findElement:function(h,l,d){d=d||0;var b=0,f;for(var e=0,g=h.length;e<g;e++){f=h[e];if(Prototype.Selector.match(f,l)&&d===b++){return Element.extend(f)}}},findChildElements:function(d,e){var b=e.toArray().join(", ");return Prototype.Selector.select(b,d||document)}})})();var Window=Class.create();Window.keepMultiModalWindow=false;Window.hasEffectLib=(typeof Effect!="undefined");Window.resizeEffectDuration=0.4;Window.prototype={initialize:function(){var e;var d=0;if(arguments.length>0){if(typeof arguments[0]=="string"){e=arguments[0];d=1}else{e=arguments[0]?arguments[0].id:null}}if(!e){e="window_"+new Date().getTime()}if($(e)){alert("Window "+e+" is already registered in the DOM! Make sure you use setDestroyOnClose() or destroyOnClose: true in the constructor")}this.options=Object.extend({className:"dialog",windowClassName:null,blurClassName:null,minWidth:100,minHeight:20,resizable:true,closable:true,minimizable:true,maximizable:true,draggable:true,userData:null,showEffect:(Window.hasEffectLib?Effect.Appear:Element.show),hideEffect:(Window.hasEffectLib?Effect.Fade:Element.hide),showEffectOptions:{},hideEffectOptions:{},effectOptions:null,parent:document.body,title:"&nbsp;",url:null,onload:Prototype.emptyFunction,width:200,height:300,opacity:1,recenterAuto:true,wiredDrag:false,closeOnEsc:true,closeCallback:null,destroyOnClose:false,gridX:1,gridY:1},arguments[d]||{});if(this.options.blurClassName){this.options.focusClassName=this.options.className}if(typeof this.options.top=="undefined"&&typeof this.options.bottom=="undefined"){this.options.top=this._round(Math.random()*500,this.options.gridY)}if(typeof this.options.left=="undefined"&&typeof this.options.right=="undefined"){this.options.left=this._round(Math.random()*500,this.options.gridX)}if(this.options.effectOptions){Object.extend(this.options.hideEffectOptions,this.options.effectOptions);Object.extend(this.options.showEffectOptions,this.options.effectOptions);if(this.options.showEffect==Element.Appear){this.options.showEffectOptions.to=this.options.opacity}}if(Window.hasEffectLib){if(this.options.showEffect==Effect.Appear){this.options.showEffectOptions.to=this.options.opacity}if(this.options.hideEffect==Effect.Fade){this.options.hideEffectOptions.from=this.options.opacity}}if(this.options.hideEffect==Element.hide){this.options.hideEffect=function(){Element.hide(this.element);if(this.options.destroyOnClose){this.destroy()}}.bind(this)}if(this.options.parent!=document.body){this.options.parent=$(this.options.parent)}this.element=this._createWindow(e);this.element.win=this;this.eventMouseDown=this._initDrag.bindAsEventListener(this);this.eventMouseUp=this._endDrag.bindAsEventListener(this);this.eventMouseMove=this._updateDrag.bindAsEventListener(this);this.eventOnLoad=this._getWindowBorderSize.bindAsEventListener(this);this.eventMouseDownContent=this.toFront.bindAsEventListener(this);this.eventResize=this._recenter.bindAsEventListener(this);this.eventKeyUp=this._keyUp.bindAsEventListener(this);this.topbar=$(this.element.id+"_top");this.bottombar=$(this.element.id+"_bottom");this.content=$(this.element.id+"_content");Event.observe(this.topbar,"mousedown",this.eventMouseDown);Event.observe(this.bottombar,"mousedown",this.eventMouseDown);Event.observe(this.content,"mousedown",this.eventMouseDownContent);Event.observe(window,"load",this.eventOnLoad);Event.observe(window,"resize",this.eventResize);Event.observe(window,"scroll",this.eventResize);Event.observe(document,"keyup",this.eventKeyUp);Event.observe(this.options.parent,"scroll",this.eventResize);if(this.options.draggable){var b=this;[this.topbar,this.topbar.up().previous(),this.topbar.up().next()].each(function(f){f.observe("mousedown",b.eventMouseDown);f.addClassName("top_draggable")});[this.bottombar.up(),this.bottombar.up().previous(),this.bottombar.up().next()].each(function(f){f.observe("mousedown",b.eventMouseDown);f.addClassName("bottom_draggable")})}if(this.options.resizable){this.sizer=$(this.element.id+"_sizer");Event.observe(this.sizer,"mousedown",this.eventMouseDown)}this.useLeft=null;this.useTop=null;if(typeof this.options.left!="undefined"){this.element.setStyle({left:parseFloat(this.options.left)+"px"});this.useLeft=true}else{this.element.setStyle({right:parseFloat(this.options.right)+"px"});this.useLeft=false}if(typeof this.options.top!="undefined"){this.element.setStyle({top:parseFloat(this.options.top)+"px"});this.useTop=true}else{this.element.setStyle({bottom:parseFloat(this.options.bottom)+"px"});this.useTop=false}this.storedLocation=null;this.setOpacity(this.options.opacity);if(this.options.zIndex){this.setZIndex(this.options.zIndex)}else{this.setZIndex(this.getMaxZIndex())}if(this.options.destroyOnClose){this.setDestroyOnClose(true)}this._getWindowBorderSize();this.width=this.options.width;this.height=this.options.height;this.visible=false;this.constraint=false;this.constraintPad={top:0,left:0,bottom:0,right:0};if(this.width&&this.height){this.setSize(this.options.width,this.options.height)}this.setTitle(this.options.title);Windows.register(this)},getMaxZIndex:function(){var b=0,d;var g=document.body.childNodes;for(d=0;d<g.length;d++){var e=g[d];var f=e.nodeType==1?parseInt(e.style.zIndex,10)||0:0;if(f<10000){b=Math.max(b,f)}}return b+10},destroy:function(){this._notify("onDestroy");Event.stopObserving(this.topbar,"mousedown",this.eventMouseDown);Event.stopObserving(this.bottombar,"mousedown",this.eventMouseDown);Event.stopObserving(this.content,"mousedown",this.eventMouseDownContent);Event.stopObserving(window,"load",this.eventOnLoad);Event.stopObserving(window,"resize",this.eventResize);Event.stopObserving(window,"scroll",this.eventResize);Event.stopObserving(this.content,"load",this.options.onload);Event.stopObserving(document,"keyup",this.eventKeyUp);if(this._oldParent){var e=this.getContent();var b=null;for(var d=0;d<e.childNodes.length;d++){b=e.childNodes[d];if(b.nodeType==1){break}b=null}if(b){this._oldParent.appendChild(b)}this._oldParent=null}if(this.sizer){Event.stopObserving(this.sizer,"mousedown",this.eventMouseDown)}if(this.options.url){this.content.src=null}if(this.iefix){Element.remove(this.iefix)}Element.remove(this.element);Windows.unregister(this)},setCloseCallback:function(b){this.options.closeCallback=b},getContent:function(){return this.content},setContent:function(n,l,e){var b=$(n);if(null==b){throw"Unable to find element '"+n+"' in DOM"}this._oldParent=b.parentNode;var h=null;var g=null;if(l){h=Element.getDimensions(b)}if(e){g=Position.cumulativeOffset(b)}var f=this.getContent();this.setHTMLContent("");f=this.getContent();f.appendChild(b);b.show();if(l){this.setSize(h.width,h.height)}if(e){this.setLocation(g[1]-this.heightN,g[0]-this.widthW)}},setHTMLContent:function(b){if(this.options.url){this.content.src=null;this.options.url=null;var d='<div id="'+this.getId()+'_content" class="'+this.options.className+'_content"> </div>';$(this.getId()+"_table_content").innerHTML=d;this.content=$(this.element.id+"_content")}this.getContent().innerHTML=b},setAjaxContent:function(d,b,f,e){this.showFunction=f?"showCenter":"show";this.showModal=e||false;b=b||{};this.setHTMLContent("");this.onComplete=b.onComplete;if(!this._onCompleteHandler){this._onCompleteHandler=this._setAjaxContent.bind(this)}b.onComplete=this._onCompleteHandler;new Ajax.Request(d,b);b.onComplete=this.onComplete},_setAjaxContent:function(b){Element.update(this.getContent(),b.responseText);if(this.onComplete){this.onComplete(b)}this.onComplete=null;this[this.showFunction](this.showModal)},setURL:function(b){if(this.options.url){this.content.src=null}this.options.url=b;var d="<iframe frameborder='0' name='"+this.getId()+"_content'  id='"+this.getId()+"_content' src='"+b+"' width='"+this.width+"' height='"+this.height+"'> </iframe>";$(this.getId()+"_table_content").innerHTML=d;this.content=$(this.element.id+"_content")},getURL:function(){return this.options.url?this.options.url:null},refresh:function(){if(this.options.url){$(this.element.getAttribute("id")+"_content").src=this.options.url}},setCookie:function(d,e,t,g,b){d=d||this.element.id;this.cookie=[d,e,t,g,b];var r=WindowUtilities.getCookie(d);if(r){var s=r.split(",");var p=s[0].split(":");var o=s[1].split(":");var q=parseFloat(s[2]),l=parseFloat(s[3]);var n=s[4];var f=s[5];this.setSize(q,l);if(n=="true"){this.doMinimize=true}else{if(f=="true"){this.doMaximize=true}}this.useLeft=p[0]=="l";this.useTop=o[0]=="t";this.element.setStyle(this.useLeft?{left:p[1]}:{right:p[1]});this.element.setStyle(this.useTop?{top:o[1]}:{bottom:o[1]})}},getId:function(){return this.element.id},setDestroyOnClose:function(){this.options.destroyOnClose=true},setConstraint:function(b,d){this.constraint=b;this.constraintPad=Object.extend(this.constraintPad,d||{});if(this.useTop&&this.useLeft){this.setLocation(parseFloat(this.element.style.top),parseFloat(this.element.style.left))}},_initDrag:function(d){if(Event.element(d)==this.sizer&&this.isMinimized()){return}if(Event.element(d)!=this.sizer&&this.isMaximized()){return}if(Prototype.Browser.IE&&this.heightN==0){this._getWindowBorderSize()}this.pointer=[this._round(Event.pointerX(d),this.options.gridX),this._round(Event.pointerY(d),this.options.gridY)];if(this.options.wiredDrag){this.currentDrag=this._createWiredElement()}else{this.currentDrag=this.element}if(Event.element(d)==this.sizer){this.doResize=true;this.widthOrg=this.width;this.heightOrg=this.height;this.bottomOrg=parseFloat(this.element.getStyle("bottom"));this.rightOrg=parseFloat(this.element.getStyle("right"));this._notify("onStartResize")}else{this.doResize=false;var b=$(this.getId()+"_close");if(b&&Position.within(b,this.pointer[0],this.pointer[1])){this.currentDrag=null;return}this.toFront();if(!this.options.draggable){return}this._notify("onStartMove")}Event.observe(document,"mouseup",this.eventMouseUp,false);Event.observe(document,"mousemove",this.eventMouseMove,false);WindowUtilities.disableScreen("__invisible__","__invisible__",this.overlayOpacity);document.body.ondrag=function(){return false};document.body.onselectstart=function(){return false};this.currentDrag.show();Event.stop(d)},_round:function(d,b){return b==1?d:d=Math.floor(d/b)*b},_updateDrag:function(d){var b=[this._round(Event.pointerX(d),this.options.gridX),this._round(Event.pointerY(d),this.options.gridY)];var q=b[0]-this.pointer[0];var p=b[1]-this.pointer[1];if(this.doResize){var o=this.widthOrg+q;var f=this.heightOrg+p;q=this.width-this.widthOrg;p=this.height-this.heightOrg;if(this.useLeft){o=this._updateWidthConstraint(o)}else{this.currentDrag.setStyle({right:(this.rightOrg-q)+"px"})}if(this.useTop){f=this._updateHeightConstraint(f)}else{this.currentDrag.setStyle({bottom:(this.bottomOrg-p)+"px"})}this.setSize(o,f);this._notify("onResize")}else{this.pointer=b;if(this.useLeft){var e=parseFloat(this.currentDrag.getStyle("left"))+q;var n=this._updateLeftConstraint(e);this.pointer[0]+=n-e;this.currentDrag.setStyle({left:n+"px"})}else{this.currentDrag.setStyle({right:parseFloat(this.currentDrag.getStyle("right"))-q+"px"})}if(this.useTop){var l=parseFloat(this.currentDrag.getStyle("top"))+p;var g=this._updateTopConstraint(l);this.pointer[1]+=g-l;this.currentDrag.setStyle({top:g+"px"})}else{this.currentDrag.setStyle({bottom:parseFloat(this.currentDrag.getStyle("bottom"))-p+"px"})}this._notify("onMove")}if(this.iefix){this._fixIEOverlapping()}this._removeStoreLocation();Event.stop(d)},_endDrag:function(b){WindowUtilities.enableScreen("__invisible__");if(this.doResize){this._notify("onEndResize")}else{this._notify("onEndMove")}Event.stopObserving(document,"mouseup",this.eventMouseUp,false);Event.stopObserving(document,"mousemove",this.eventMouseMove,false);Event.stop(b);this._hideWiredElement();this._saveCookie();document.body.ondrag=null;document.body.onselectstart=null},_updateLeftConstraint:function(d){if(this.constraint&&this.useLeft&&this.useTop){var b=this.options.parent==document.body?WindowUtilities.getPageSize().windowWidth:this.options.parent.getDimensions().width;if(d<this.constraintPad.left){d=this.constraintPad.left}if(d+this.width+this.widthE+this.widthW>b-this.constraintPad.right){d=b-this.constraintPad.right-this.width-this.widthE-this.widthW}}return d},_updateTopConstraint:function(e){if(this.constraint&&this.useLeft&&this.useTop){var b=this.options.parent==document.body?WindowUtilities.getPageSize().windowHeight:this.options.parent.getDimensions().height;var d=this.height+this.heightN+this.heightS;if(e<this.constraintPad.top){e=this.constraintPad.top}if(e+d>b-this.constraintPad.bottom){e=b-this.constraintPad.bottom-d}}return e},_updateWidthConstraint:function(b){if(this.constraint&&this.useLeft&&this.useTop){var d=this.options.parent==document.body?WindowUtilities.getPageSize().windowWidth:this.options.parent.getDimensions().width;var e=parseFloat(this.element.getStyle("left"));if(e+b+this.widthE+this.widthW>d-this.constraintPad.right){b=d-this.constraintPad.right-e-this.widthE-this.widthW}}return b},_updateHeightConstraint:function(d){if(this.constraint&&this.useLeft&&this.useTop){var b=this.options.parent==document.body?WindowUtilities.getPageSize().windowHeight:this.options.parent.getDimensions().height;var e=parseFloat(this.element.getStyle("top"));if(e+d+this.heightN+this.heightS>b-this.constraintPad.bottom){d=b-this.constraintPad.bottom-e-this.heightN-this.heightS}}return d},_createWindow:function(b){var h=this.options.className;var f=document.createElement("div");f.setAttribute("id",b);f.className="dialog";if(this.options.windowClassName){f.className+=" "+this.options.windowClassName}var g;if(this.options.url){g='<iframe frameborder="0" name="'+b+'_content"  id="'+b+'_content" src="'+this.options.url+'"> </iframe>'}else{g='<div id="'+b+'_content" class="'+h+'_content"> </div>'}var l=this.options.closable?"<div class='"+h+"_close' id='"+b+"_close' onclick='Windows.close(\""+b+"\", event)'> </div>":"";var n=this.options.minimizable?"<div class='"+h+"_minimize' id='"+b+"_minimize' onclick='Windows.minimize(\""+b+"\", event)'> </div>":"";var o=this.options.maximizable?"<div class='"+h+"_maximize' id='"+b+"_maximize' onclick='Windows.maximize(\""+b+"\", event)'> </div>":"";var e=this.options.resizable?"class='"+h+"_sizer' id='"+b+"_sizer'":"class='"+h+"_se'";var d="../themes/default/blank.gif";f.innerHTML=l+n+o+"      <a href='#' id='"+b+"_focus_anchor'><!-- --></a>      <table id='"+b+"_row1' class=\"top table_window\">        <tr>          <td class='"+h+"_nw'></td>          <td class='"+h+"_n'><div id='"+b+"_top' class='"+h+"_title title_window'>"+this.options.title+"</div></td>          <td class='"+h+"_ne'></td>        </tr>      </table>      <table id='"+b+"_row2' class=\"mid table_window\">        <tr>          <td class='"+h+"_w'></td>            <td id='"+b+"_table_content' class='"+h+"_content' valign='top'>"+g+"</td>          <td class='"+h+"_e'></td>        </tr>      </table>        <table id='"+b+"_row3' class=\"bot table_window\">        <tr>          <td class='"+h+"_sw'></td>            <td class='"+h+"_s'><div id='"+b+"_bottom' class='status_bar'><span style='float:left; width:1px; height:1px'></span></div></td>            <td "+e+"></td>        </tr>      </table>    ";Element.hide(f);this.options.parent.insertBefore(f,this.options.parent.firstChild);Event.observe($(b+"_content"),"load",this.options.onload);return f},changeClassName:function(b){var d=this.options.className;var e=this.getId();$A(["_close","_minimize","_maximize","_sizer","_content"]).each(function(f){this._toggleClassName($(e+f),d+f,b+f)}.bind(this));this._toggleClassName($(e+"_top"),d+"_title",b+"_title");$$("#"+e+" td").each(function(f){f.className=f.className.sub(d,b)});this.options.className=b},_toggleClassName:function(e,d,b){if(e){e.removeClassName(d);e.addClassName(b)}},setLocation:function(f,d){f=this._updateTopConstraint(f);d=this._updateLeftConstraint(d);var b=this.currentDrag||this.element;b.setStyle({top:f+"px"});b.setStyle({left:d+"px"});this.useLeft=true;this.useTop=true},getLocation:function(){var b={};if(this.useTop){b=Object.extend(b,{top:this.element.getStyle("top")})}else{b=Object.extend(b,{bottom:this.element.getStyle("bottom")})}if(this.useLeft){b=Object.extend(b,{left:this.element.getStyle("left")})}else{b=Object.extend(b,{right:this.element.getStyle("right")})}return b},getSize:function(){return{width:this.width,height:this.height}},setSize:function(f,d,b){f=parseFloat(f);d=parseFloat(d);if(!this.minimized&&f<this.options.minWidth){f=this.options.minWidth}if(!this.minimized&&d<this.options.minHeight){d=this.options.minHeight}if(this.options.maxHeight&&d>this.options.maxHeight){d=this.options.maxHeight}if(this.options.maxWidth&&f>this.options.maxWidth){f=this.options.maxWidth}if(this.useTop&&this.useLeft&&Window.hasEffectLib&&Effect.ResizeWindow&&b){new Effect.ResizeWindow(this,null,null,f,d,{duration:Window.resizeEffectDuration})}else{this.width=f;this.height=d;var h=this.currentDrag?this.currentDrag:this.element;h.setStyle({width:f+this.widthW+this.widthE+"px"});h.setStyle({height:d+this.heightN+this.heightS+"px"});if(!this.currentDrag||this.currentDrag==this.element){var g=$(this.element.id+"_content");g.setStyle({height:d+"px"});g.setStyle({width:f+"px"})}}},updateHeight:function(){this.setSize(this.width,this.content.scrollHeight,true)},updateWidth:function(){this.setSize(this.content.scrollWidth,this.height,true)},toFront:function(){if(this.element.style.zIndex<Windows.maxZIndex){this.setZIndex(Windows.maxZIndex+1)}if(this.iefix){this._fixIEOverlapping()}},getBounds:function(d){if(!this.width||!this.height||!this.visible){this.computeBounds()}var b=this.width;var e=this.height;if(!d){b+=this.widthW+this.widthE;e+=this.heightN+this.heightS}var f=Object.extend(this.getLocation(),{width:b+"px",height:e+"px"});return f},computeBounds:function(){if(!this.width||!this.height){var b=WindowUtilities._computeSize(this.content.innerHTML,this.content.id,this.width,this.height,0,this.options.className);if(this.height){this.width=b+5}else{this.height=b+5}}this.setSize(this.width,this.height);if(this.centered){this._center(this.centerTop,this.centerLeft)}},show:function(d){this.visible=true;if(d){if(typeof this.overlayOpacity=="undefined"){var b=this;setTimeout(function(){b.show(d)},10);return}Windows.addModalWindow(this);this.modal=true;this.setZIndex(Windows.maxZIndex+1);Windows.unsetOverflow(this)}else{if(!this.element.style.zIndex){this.setZIndex(Windows.maxZIndex+1)}}if(this.oldStyle){this.getContent().setStyle({overflow:this.oldStyle})}this.computeBounds();this._notify("onBeforeShow");if(this.options.showEffect!=Element.show&&this.options.showEffectOptions){this.options.showEffect(this.element,this.options.showEffectOptions)}else{this.options.showEffect(this.element)}this._checkIEOverlapping();WindowUtilities.focusedWindow=this;this._notify("onShow");$(this.element.id+"_focus_anchor").focus()},showCenter:function(b,e,d){this.centered=true;this.centerTop=e;this.centerLeft=d;this.show(b)},isVisible:function(){return this.visible},_center:function(e,d){var f=WindowUtilities.getWindowScroll(this.options.parent);var b=WindowUtilities.getPageSize(this.options.parent);if(typeof e=="undefined"){e=(b.windowHeight-(this.height+this.heightN+this.heightS))/2}e+=f.top;if(typeof d=="undefined"){d=(b.windowWidth-(this.width+this.widthW+this.widthE))/2}d+=f.left;this.setLocation(e,d);this.toFront()},_recenter:function(d){if(this.centered){var b=WindowUtilities.getPageSize(this.options.parent);var e=WindowUtilities.getWindowScroll(this.options.parent);if(this.pageSize&&this.pageSize.windowWidth==b.windowWidth&&this.pageSize.windowHeight==b.windowHeight&&this.windowScroll.left==e.left&&this.windowScroll.top==e.top){return}this.pageSize=b;this.windowScroll=e;if($("overlay_modal")){$("overlay_modal").setStyle({height:(b.pageHeight+"px")})}if(this.options.recenterAuto){this._center(this.centerTop,this.centerLeft)}}},hide:function(){this.visible=false;if(this.modal){Windows.removeModalWindow(this);Windows.resetOverflow()}this.oldStyle=this.getContent().getStyle("overflow")||"auto";this.getContent().setStyle({overflow:"hidden"});this.options.hideEffect(this.element,this.options.hideEffectOptions);if(this.iefix){this.iefix.hide()}if(!this.doNotNotifyHide){this._notify("onHide")}},close:function(){if(this.visible){if(this.options.closeCallback&&!this.options.closeCallback(this)){return}if(this.options.destroyOnClose){var b=this.destroy.bind(this);if(this.options.hideEffectOptions.afterFinish){var d=this.options.hideEffectOptions.afterFinish;this.options.hideEffectOptions.afterFinish=function(){d();b()}}else{this.options.hideEffectOptions.afterFinish=function(){b()}}}Windows.updateFocusedWindow();this.doNotNotifyHide=true;this.hide();this.doNotNotifyHide=false;this._notify("onClose")}},minimize:function(){if(this.resizing){return}var b=$(this.getId()+"_row2");if(!this.minimized){this.minimized=true;var f=b.getDimensions().height;this.r2Height=f;var e=this.element.getHeight()-f;if(this.useLeft&&this.useTop&&Window.hasEffectLib&&Effect.ResizeWindow){new Effect.ResizeWindow(this,null,null,null,this.height-f,{duration:Window.resizeEffectDuration})}else{this.height-=f;this.element.setStyle({height:e+"px"});b.hide()}if(!this.useTop){var d=parseFloat(this.element.getStyle("bottom"));this.element.setStyle({bottom:(d+f)+"px"})}}else{this.minimized=false;var f=this.r2Height;this.r2Height=null;if(this.useLeft&&this.useTop&&Window.hasEffectLib&&Effect.ResizeWindow){new Effect.ResizeWindow(this,null,null,null,this.height+f,{duration:Window.resizeEffectDuration})}else{var e=this.element.getHeight()+f;this.height+=f;this.element.setStyle({height:e+"px"});b.show()}if(!this.useTop){var d=parseFloat(this.element.getStyle("bottom"));this.element.setStyle({bottom:(d-f)+"px"})}this.toFront()}this._notify("onMinimize");this._saveCookie()},maximize:function(){if(this.isMinimized()||this.resizing){return}if(Prototype.Browser.IE&&this.heightN==0){this._getWindowBorderSize()}if(this.storedLocation!=null){this._restoreLocation();if(this.iefix){this.iefix.hide()}}else{this._storeLocation();Windows.unsetOverflow(this);var l=WindowUtilities.getWindowScroll(this.options.parent);var d=WindowUtilities.getPageSize(this.options.parent);var h=l.left;var g=l.top;if(this.options.parent!=document.body){l={top:0,left:0,bottom:0,right:0};var f=this.options.parent.getDimensions();d.windowWidth=f.width;d.windowHeight=f.height;g=0;h=0}if(this.constraint){d.windowWidth-=Math.max(0,this.constraintPad.left)+Math.max(0,this.constraintPad.right);d.windowHeight-=Math.max(0,this.constraintPad.top)+Math.max(0,this.constraintPad.bottom);h+=Math.max(0,this.constraintPad.left);g+=Math.max(0,this.constraintPad.top)}var e=d.windowWidth-this.widthW-this.widthE;var b=d.windowHeight-this.heightN-this.heightS;if(this.useLeft&&this.useTop&&Window.hasEffectLib&&Effect.ResizeWindow){new Effect.ResizeWindow(this,g,h,e,b,{duration:Window.resizeEffectDuration})}else{this.setSize(e,b);this.element.setStyle(this.useLeft?{left:h}:{right:h});this.element.setStyle(this.useTop?{top:g}:{bottom:g})}this.toFront();if(this.iefix){this._fixIEOverlapping()}}this._notify("onMaximize");this._saveCookie()},isMinimized:function(){return this.minimized},isMaximized:function(){return(this.storedLocation!=null)},setOpacity:function(b){if(Element.setOpacity){Element.setOpacity(this.element,b)}},setZIndex:function(b){this.element.setStyle({zIndex:b});Windows.updateZindex(b,this)},setTitle:function(b){if(!b||b==""){b="&nbsp;"}Element.update(this.element.id+"_top",b)},getTitle:function(){return $(this.element.id+"_top").innerHTML},setStatusBar:function(d){var b=$(this.getId()+"_bottom");if(typeof(d)=="object"){if(this.bottombar.firstChild){this.bottombar.replaceChild(d,this.bottombar.firstChild)}else{this.bottombar.appendChild(d)}}else{this.bottombar.innerHTML=d}},_checkIEOverlapping:function(){if(!this.iefix&&(navigator.appVersion.indexOf("MSIE")>0)&&(navigator.userAgent.indexOf("Opera")<0)&&(this.element.getStyle("position")=="absolute")){new Insertion.After(this.element.id,'<iframe id="'+this.element.id+'_iefix" style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" src="javascript:false;" frameborder="0" scrolling="no"></iframe>');this.iefix=$(this.element.id+"_iefix")}if(this.iefix){setTimeout(this._fixIEOverlapping.bind(this),50)}},_fixIEOverlapping:function(){Position.clone(this.element,this.iefix);this.iefix.style.zIndex=this.element.style.zIndex-1;this.iefix.show()},_keyUp:function(b){if(27==b.keyCode&&this.options.closeOnEsc){this.close()}},_getWindowBorderSize:function(d){var e=this._createHiddenDiv(this.options.className+"_n");this.heightN=Element.getDimensions(e).height;e.parentNode.removeChild(e);var e=this._createHiddenDiv(this.options.className+"_s");this.heightS=Element.getDimensions(e).height;e.parentNode.removeChild(e);var e=this._createHiddenDiv(this.options.className+"_e");this.widthE=Element.getDimensions(e).width;e.parentNode.removeChild(e);var e=this._createHiddenDiv(this.options.className+"_w");this.widthW=Element.getDimensions(e).width;e.parentNode.removeChild(e);var e=document.createElement("div");e.className="overlay_"+this.options.className;document.body.appendChild(e);var b=this;setTimeout(function(){b.overlayOpacity=($(e).getStyle("opacity"));e.parentNode.removeChild(e)},10);if(Prototype.Browser.IE){this.heightS=$(this.getId()+"_row3").getDimensions().height;this.heightN=$(this.getId()+"_row1").getDimensions().height}if(Prototype.Browser.WebKit&&Prototype.Browser.WebKitVersion<420){this.setSize(this.width,this.height)}if(this.doMaximize){this.maximize()}if(this.doMinimize){this.minimize()}},_createHiddenDiv:function(d){var b=document.body;var e=document.createElement("div");e.setAttribute("id",this.element.id+"_tmp");e.className=d;e.style.display="none";e.innerHTML="";b.insertBefore(e,b.firstChild);return e},_storeLocation:function(){if(this.storedLocation==null){this.storedLocation={useTop:this.useTop,useLeft:this.useLeft,top:this.element.getStyle("top"),bottom:this.element.getStyle("bottom"),left:this.element.getStyle("left"),right:this.element.getStyle("right"),width:this.width,height:this.height}}},_restoreLocation:function(){if(this.storedLocation!=null){this.useLeft=this.storedLocation.useLeft;this.useTop=this.storedLocation.useTop;if(this.useLeft&&this.useTop&&Window.hasEffectLib&&Effect.ResizeWindow){new Effect.ResizeWindow(this,this.storedLocation.top,this.storedLocation.left,this.storedLocation.width,this.storedLocation.height,{duration:Window.resizeEffectDuration})}else{this.element.setStyle(this.useLeft?{left:this.storedLocation.left}:{right:this.storedLocation.right});this.element.setStyle(this.useTop?{top:this.storedLocation.top}:{bottom:this.storedLocation.bottom});this.setSize(this.storedLocation.width,this.storedLocation.height)}Windows.resetOverflow();this._removeStoreLocation()}},_removeStoreLocation:function(){this.storedLocation=null},_saveCookie:function(){if(this.cookie){var b="";if(this.useLeft){b+="l:"+(this.storedLocation?this.storedLocation.left:this.element.getStyle("left"))}else{b+="r:"+(this.storedLocation?this.storedLocation.right:this.element.getStyle("right"))}if(this.useTop){b+=",t:"+(this.storedLocation?this.storedLocation.top:this.element.getStyle("top"))}else{b+=",b:"+(this.storedLocation?this.storedLocation.bottom:this.element.getStyle("bottom"))}b+=","+(this.storedLocation?this.storedLocation.width:this.width);b+=","+(this.storedLocation?this.storedLocation.height:this.height);b+=","+this.isMinimized();b+=","+this.isMaximized();WindowUtilities.setCookie(b,this.cookie)}},_createWiredElement:function(){if(!this.wiredElement){if(Prototype.Browser.IE){this._getWindowBorderSize()}var d=document.createElement("div");d.className="wired_frame "+this.options.className+"_wired_frame";d.style.position="absolute";this.options.parent.insertBefore(d,this.options.parent.firstChild);this.wiredElement=$(d)}if(this.useLeft){this.wiredElement.setStyle({left:this.element.getStyle("left")})}else{this.wiredElement.setStyle({right:this.element.getStyle("right")})}if(this.useTop){this.wiredElement.setStyle({top:this.element.getStyle("top")})}else{this.wiredElement.setStyle({bottom:this.element.getStyle("bottom")})}var b=this.element.getDimensions();this.wiredElement.setStyle({width:b.width+"px",height:b.height+"px"});this.wiredElement.setStyle({zIndex:Windows.maxZIndex+30});return this.wiredElement},_hideWiredElement:function(){if(!this.wiredElement||!this.currentDrag){return}if(this.currentDrag==this.element){this.currentDrag=null}else{if(this.useLeft){this.element.setStyle({left:this.currentDrag.getStyle("left")})}else{this.element.setStyle({right:this.currentDrag.getStyle("right")})}if(this.useTop){this.element.setStyle({top:this.currentDrag.getStyle("top")})}else{this.element.setStyle({bottom:this.currentDrag.getStyle("bottom")})}this.currentDrag.hide();this.currentDrag=null;if(this.doResize){this.setSize(this.width,this.height)}}},_notify:function(b){if(this.options[b]){this.options[b](this)}else{Windows.notify(b,this)}}};var Windows={windows:[],modalWindows:[],observers:[],focusedWindow:null,maxZIndex:0,overlayShowEffectOptions:{duration:0.5},overlayHideEffectOptions:{duration:0.5},addObserver:function(b){this.removeObserver(b);this.observers.push(b)},removeObserver:function(b){this.observers=this.observers.reject(function(d){return d==b})},notify:function(b,d){this.observers.each(function(e){if(e[b]){e[b](b,d)}})},getWindow:function(b){return this.windows.detect(function(e){return e.getId()==b})},getFocusedWindow:function(){return this.focusedWindow},updateFocusedWindow:function(){this.focusedWindow=this.windows.length>=2?this.windows[this.windows.length-2]:null},register:function(b){this.windows.push(b)},addModalWindow:function(b){if(this.modalWindows.length==0){WindowUtilities.disableScreen(b.options.className,"overlay_modal",b.overlayOpacity,b.getId(),b.options.parent)}else{if(Window.keepMultiModalWindow){$("overlay_modal").style.zIndex=Windows.maxZIndex+1;Windows.maxZIndex+=1;WindowUtilities._hideSelect(this.modalWindows.last().getId())}else{this.modalWindows.last().element.hide()}WindowUtilities._showSelect(b.getId())}this.modalWindows.push(b)},removeModalWindow:function(b){this.modalWindows.pop();if(this.modalWindows.length==0){WindowUtilities.enableScreen()}else{if(Window.keepMultiModalWindow){this.modalWindows.last().toFront();WindowUtilities._showSelect(this.modalWindows.last().getId())}else{this.modalWindows.last().element.show()}}},register:function(b){this.windows.push(b)},unregister:function(b){this.windows=this.windows.reject(function(e){return e==b})},closeAll:function(){this.windows.each(function(b){Windows.close(b.getId())})},closeAllModalWindows:function(){WindowUtilities.enableScreen();this.modalWindows.each(function(b){if(b){b.close()}})},minimize:function(e,b){var d=this.getWindow(e);if(d&&d.visible){d.minimize()}Event.stop(b)},maximize:function(e,b){var d=this.getWindow(e);if(d&&d.visible){d.maximize()}Event.stop(b)},close:function(e,b){var d=this.getWindow(e);if(d){d.close()}if(b){Event.stop(b)}},blur:function(d){var b=this.getWindow(d);if(!b){return}if(b.options.blurClassName){b.changeClassName(b.options.blurClassName)}if(this.focusedWindow==b){this.focusedWindow=null}b._notify("onBlur")},focus:function(d){var b=this.getWindow(d);if(!b){return}if(this.focusedWindow){this.blur(this.focusedWindow.getId())}if(b.options.focusClassName){b.changeClassName(b.options.focusClassName)}this.focusedWindow=b;b._notify("onFocus")},unsetOverflow:function(b){this.windows.each(function(e){e.oldOverflow=e.getContent().getStyle("overflow")||"auto";e.getContent().setStyle({overflow:"hidden"})});if(b&&b.oldOverflow){b.getContent().setStyle({overflow:b.oldOverflow})}},resetOverflow:function(){this.windows.each(function(b){if(b.oldOverflow){b.getContent().setStyle({overflow:b.oldOverflow})}})},updateZindex:function(b,d){if(b>this.maxZIndex){this.maxZIndex=b;if(this.focusedWindow){this.blur(this.focusedWindow.getId())}}this.focusedWindow=d;if(this.focusedWindow){this.focus(this.focusedWindow.getId())}}};var Dialog={dialogId:null,onCompleteFunc:null,callFunc:null,parameters:null,confirm:function(f,e){if(f&&typeof f!="string"){Dialog._runAjaxRequest(f,e,Dialog.confirm);return}f=f||"";e=e||{};var h=e.okLabel?e.okLabel:"Ok";var b=e.cancelLabel?e.cancelLabel:"Cancel";e=Object.extend(e,e.windowParameters||{});e.windowParameters=e.windowParameters||{};e.className=e.className||"alert";var d="class ='"+(e.buttonClass?e.buttonClass+" ":"")+" ok_button'";var g="class ='"+(e.buttonClass?e.buttonClass+" ":"")+" cancel_button'";var f="      <div class='"+e.className+"_message'>"+f+"</div>        <div class='"+e.className+"_buttons'>          <button type='button' title='"+h+"' onclick='Dialog.okCallback()' "+d+"><span><span><span>"+h+"</span></span></span></button>          <button type='button' title='"+b+"' onclick='Dialog.cancelCallback()' "+g+"><span><span><span>"+b+"</span></span></span></button>        </div>    ";return this._openDialog(f,e)},alert:function(e,d){if(e&&typeof e!="string"){Dialog._runAjaxRequest(e,d,Dialog.alert);return}e=e||"";d=d||{};var f=d.okLabel?d.okLabel:"Ok";d=Object.extend(d,d.windowParameters||{});d.windowParameters=d.windowParameters||{};d.className=d.className||"alert";var b="class ='"+(d.buttonClass?d.buttonClass+" ":"")+" ok_button'";var e="      <div class='"+d.className+"_message'>"+e+"</div>        <div class='"+d.className+"_buttons'>          <button type='button' title='"+f+"' onclick='Dialog.okCallback()' "+b+"><span><span><span>"+f+"</span></span></span></button>        </div>";return this._openDialog(e,d)},info:function(d,b){if(d&&typeof d!="string"){Dialog._runAjaxRequest(d,b,Dialog.info);return}d=d||"";b=b||{};b=Object.extend(b,b.windowParameters||{});b.windowParameters=b.windowParameters||{};b.className=b.className||"alert";var d="<div id='modal_dialog_message' class='"+b.className+"_message'>"+d+"</div>";if(b.showProgress){d+="<div id='modal_dialog_progress' class='"+b.className+"_progress'>  </div>"}b.ok=null;b.cancel=null;return this._openDialog(d,b)},setInfoMessage:function(b){$("modal_dialog_message").update(b)},closeInfo:function(){Windows.close(this.dialogId)},_openDialog:function(g,f){var e=f.className;if(!f.height&&!f.width){f.width=WindowUtilities.getPageSize(f.options.parent||document.body).pageWidth/2}if(f.id){this.dialogId=f.id}else{var d=new Date();this.dialogId="modal_dialog_"+d.getTime();f.id=this.dialogId}if(!f.height||!f.width){var b=WindowUtilities._computeSize(g,this.dialogId,f.width,f.height,5,e);if(f.height){f.width=b+5}else{f.height=b+5}}f.effectOptions=f.effectOptions;f.resizable=f.resizable||false;f.minimizable=f.minimizable||false;f.maximizable=f.maximizable||false;f.draggable=f.draggable||false;f.closable=f.closable||false;var h=new Window(f);h.getContent().innerHTML=g;h.showCenter(true,f.top,f.left);h.setDestroyOnClose();h.cancelCallback=f.onCancel||f.cancel;h.okCallback=f.onOk||f.ok;return h},_getAjaxContent:function(b){Dialog.callFunc(b.responseText,Dialog.parameters)},_runAjaxRequest:function(e,d,b){if(e.options==null){e.options={}}Dialog.onCompleteFunc=e.options.onComplete;Dialog.parameters=d;Dialog.callFunc=b;e.options.onComplete=Dialog._getAjaxContent;new Ajax.Request(e.url,e.options)},okCallback:function(){var b=Windows.focusedWindow;if(!b.okCallback||b.okCallback(b)){$$("#"+b.getId()+" input").each(function(d){d.onclick=null});b.close()}},cancelCallback:function(){var b=Windows.focusedWindow;$$("#"+b.getId()+" input").each(function(d){d.onclick=null});b.close();if(b.cancelCallback){b.cancelCallback(b)}}};if(Prototype.Browser.WebKit){var array=navigator.userAgent.match(new RegExp(/AppleWebKit\/([\d\.\+]*)/));Prototype.Browser.WebKitVersion=parseFloat(array[1])}var WindowUtilities={getWindowScroll:function(parent){var T,L,W,H;parent=parent||document.body;if(parent!=document.body){T=parent.scrollTop;L=parent.scrollLeft;W=parent.scrollWidth;H=parent.scrollHeight}else{var w=window;with(w.document){if(w.document.documentElement&&documentElement.scrollTop){T=documentElement.scrollTop;L=documentElement.scrollLeft}else{if(w.document.body){T=body.scrollTop;L=body.scrollLeft}}if(w.innerWidth){W=w.innerWidth;H=w.innerHeight}else{if(w.document.documentElement&&documentElement.clientWidth){W=documentElement.clientWidth;H=documentElement.clientHeight}else{W=body.offsetWidth;H=body.offsetHeight}}}}return{top:T,left:L,width:W,height:H}},getPageSize:function(f){f=f||document.body;var e,l;var g,d;if(f!=document.body){e=f.getWidth();l=f.getHeight();d=f.scrollWidth;g=f.scrollHeight}else{var h,b;if(window.innerHeight&&window.scrollMaxY){h=document.body.scrollWidth;b=window.innerHeight+window.scrollMaxY}else{if(document.body.scrollHeight>document.body.offsetHeight){h=document.body.scrollWidth;b=document.body.scrollHeight}else{h=document.body.offsetWidth;b=document.body.offsetHeight}}if(self.innerHeight){e=document.documentElement.clientWidth;l=self.innerHeight}else{if(document.documentElement&&document.documentElement.clientHeight){e=document.documentElement.clientWidth;l=document.documentElement.clientHeight}else{if(document.body){e=document.body.clientWidth;l=document.body.clientHeight}}}if(b<l){g=l}else{g=b}if(h<e){d=e}else{d=h}}return{pageWidth:d,pageHeight:g,windowWidth:e,windowHeight:l}},disableScreen:function(e,b,f,g,d){WindowUtilities.initLightbox(b,e,function(){this._disableScreen(e,b,f,g)}.bind(this),d||document.body)},_disableScreen:function(e,d,g,h){var f=$(d);var b=WindowUtilities.getPageSize(f.parentNode);if(h&&Prototype.Browser.IE){WindowUtilities._hideSelect();WindowUtilities._showSelect(h)}f.style.height=(b.pageHeight+"px");f.style.display="none";if(d=="overlay_modal"&&Window.hasEffectLib&&Windows.overlayShowEffectOptions){f.overlayOpacity=g;new Effect.Appear(f,Object.extend({from:0,to:g},Windows.overlayShowEffectOptions))}else{f.style.display="block"}},enableScreen:function(d){d=d||"overlay_modal";var b=$(d);if(b){if(d=="overlay_modal"&&Window.hasEffectLib&&Windows.overlayHideEffectOptions){new Effect.Fade(b,Object.extend({from:b.overlayOpacity,to:0},Windows.overlayHideEffectOptions))}else{b.style.display="none";b.parentNode.removeChild(b)}if(d!="__invisible__"){WindowUtilities._showSelect()}}},_hideSelect:function(b){if(Prototype.Browser.IE){b=b==null?"":"#"+b+" ";$$(b+"select").each(function(d){if(!WindowUtilities.isDefined(d.oldVisibility)){d.oldVisibility=d.style.visibility?d.style.visibility:"visible";d.style.visibility="hidden"}})}},_showSelect:function(b){if(Prototype.Browser.IE){b=b==null?"":"#"+b+" ";$$(b+"select").each(function(d){if(WindowUtilities.isDefined(d.oldVisibility)){try{d.style.visibility=d.oldVisibility}catch(f){d.style.visibility="visible"}d.oldVisibility=null}else{if(d.style.visibility){d.style.visibility="visible"}}})}},isDefined:function(b){return typeof(b)!="undefined"&&b!=null},initLightbox:function(g,e,b,d){if($(g)){Element.setStyle(g,{zIndex:Windows.maxZIndex+1});Windows.maxZIndex++;b()}else{var f=document.createElement("div");f.setAttribute("id",g);f.className="overlay_"+e;f.style.display="none";f.style.position="absolute";f.style.top="0";f.style.left="0";f.style.zIndex=Windows.maxZIndex+1;Windows.maxZIndex++;f.style.width="100%";d.insertBefore(f,d.firstChild);if(Prototype.Browser.WebKit&&g=="overlay_modal"){setTimeout(function(){b()},10)}else{b()}}},setCookie:function(d,b){document.cookie=b[0]+"="+escape(d)+((b[1])?"; expires="+b[1].toGMTString():"")+((b[2])?"; path="+b[2]:"")+((b[3])?"; domain="+b[3]:"")+((b[4])?"; secure":"")},getCookie:function(e){var d=document.cookie;var g=e+"=";var f=d.indexOf("; "+g);if(f==-1){f=d.indexOf(g);if(f!=0){return null}}else{f+=2}var b=document.cookie.indexOf(";",f);if(b==-1){b=d.length}return unescape(d.substring(f+g.length,b))},_computeSize:function(g,b,d,l,f,h){var o=document.body;var e=document.createElement("div");e.setAttribute("id",b);e.className=h+"_content";if(l){e.style.height=l+"px"}else{e.style.width=d+"px"}e.style.position="absolute";e.style.top="0";e.style.left="0";e.style.display="none";e.innerHTML=g;o.insertBefore(e,o.firstChild);var n;if(l){n=$(e).getDimensions().width+f}else{n=$(e).getDimensions().height+f}o.removeChild(e);return n}};var Builder={NODEMAP:{AREA:"map",CAPTION:"table",COL:"table",COLGROUP:"table",LEGEND:"fieldset",OPTGROUP:"select",OPTION:"select",PARAM:"object",TBODY:"table",TD:"table",TFOOT:"table",TH:"table",THEAD:"table",TR:"table"},node:function(b){b=b.toUpperCase();var l=this.NODEMAP[b]||"div";var d=document.createElement(l);try{d.innerHTML="<"+b+"></"+b+">"}catch(h){}var g=d.firstChild||null;if(g&&(g.tagName.toUpperCase()!=b)){g=g.getElementsByTagName(b)[0]}if(!g){g=document.createElement(b)}if(!g){return}if(arguments[1]){if(this._isStringOrNumber(arguments[1])||(arguments[1] instanceof Array)||arguments[1].tagName){this._children(g,arguments[1])}else{var f=this._attributes(arguments[1]);if(f.length){try{d.innerHTML="<"+b+" "+f+"></"+b+">"}catch(h){}g=d.firstChild||null;if(!g){g=document.createElement(b);for(attr in arguments[1]){g[attr=="class"?"className":attr]=arguments[1][attr]}}if(g.tagName.toUpperCase()!=b){g=d.getElementsByTagName(b)[0]}}}}if(arguments[2]){this._children(g,arguments[2])}return $(g)},_text:function(b){return document.createTextNode(b)},ATTR_MAP:{className:"class",htmlFor:"for"},_attributes:function(b){var d=[];for(attribute in b){d.push((attribute in this.ATTR_MAP?this.ATTR_MAP[attribute]:attribute)+'="'+b[attribute].toString().escapeHTML().gsub(/"/,"&quot;")+'"')}return d.join(" ")},_children:function(d,b){if(b.tagName){d.appendChild(b);return}if(typeof b=="object"){b.flatten().each(function(f){if(typeof f=="object"){d.appendChild(f)}else{if(Builder._isStringOrNumber(f)){d.appendChild(Builder._text(f))}}})}else{if(Builder._isStringOrNumber(b)){d.appendChild(Builder._text(b))}}},_isStringOrNumber:function(b){return(typeof b=="string"||typeof b=="number")},build:function(d){var b=this.node("div");$(b).update(d.strip());return b.down()},dump:function(d){if(typeof d!="object"&&typeof d!="function"){d=window}var b=("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);b.each(function(e){d[e]=function(){return Builder.node.apply(Builder,[e].concat($A(arguments)))}})}};String.prototype.parseColor=function(){var b="#";if(this.slice(0,4)=="rgb("){var e=this.slice(4,this.length-1).split(",");var d=0;do{b+=parseInt(e[d]).toColorPart()}while(++d<3)}else{if(this.slice(0,1)=="#"){if(this.length==4){for(var d=1;d<4;d++){b+=(this.charAt(d)+this.charAt(d)).toLowerCase()}}if(this.length==7){b=this.toLowerCase()}}}return(b.length==7?b:(arguments[0]||this))};Element.collectTextNodes=function(b){return $A($(b).childNodes).collect(function(d){return(d.nodeType==3?d.nodeValue:(d.hasChildNodes()?Element.collectTextNodes(d):""))}).flatten().join("")};Element.collectTextNodesIgnoreClass=function(b,d){return $A($(b).childNodes).collect(function(e){return(e.nodeType==3?e.nodeValue:((e.hasChildNodes()&&!Element.hasClassName(e,d))?Element.collectTextNodesIgnoreClass(e,d):""))}).flatten().join("")};Element.setContentZoom=function(b,d){b=$(b);b.setStyle({fontSize:(d/100)+"em"});if(Prototype.Browser.WebKit){window.scrollBy(0,0)}return b};Element.getInlineOpacity=function(b){return $(b).style.opacity||""};Element.forceRerendering=function(b){try{b=$(b);var f=document.createTextNode(" ");b.appendChild(f);b.removeChild(f)}catch(d){}};var Effect={_elementDoesNotExistError:{name:"ElementDoesNotExistError",message:"The specified DOM element does not exist, but is required for this effect to operate"},Transitions:{linear:Prototype.K,sinoidal:function(b){return(-Math.cos(b*Math.PI)/2)+0.5},reverse:function(b){return 1-b},flicker:function(b){var b=((-Math.cos(b*Math.PI)/4)+0.75)+Math.random()/4;return b>1?1:b},wobble:function(b){return(-Math.cos(b*Math.PI*(9*b))/2)+0.5},pulse:function(d,b){return(-Math.cos((d*((b||5)-0.5)*2)*Math.PI)/2)+0.5},spring:function(b){return 1-(Math.cos(b*4.5*Math.PI)*Math.exp(-b*6))},none:function(b){return 0},full:function(b){return 1}},DefaultOptions:{duration:1,fps:100,sync:false,from:0,to:1,delay:0,queue:"parallel"},tagifyText:function(b){var d="position:relative";if(Prototype.Browser.IE){d+=";zoom:1"}b=$(b);$A(b.childNodes).each(function(e){if(e.nodeType==3){e.nodeValue.toArray().each(function(f){b.insertBefore(new Element("span",{style:d}).update(f==" "?String.fromCharCode(160):f),e)});Element.remove(e)}})},multiple:function(d,e){var g;if(((typeof d=="object")||Object.isFunction(d))&&(d.length)){g=d}else{g=$(d).childNodes}var b=Object.extend({speed:0.1,delay:0},arguments[2]||{});var f=b.delay;$A(g).each(function(l,h){new e(l,Object.extend(b,{delay:h*b.speed+f}))})},PAIRS:{slide:["SlideDown","SlideUp"],blind:["BlindDown","BlindUp"],appear:["Appear","Fade"]},toggle:function(d,e){d=$(d);e=(e||"appear").toLowerCase();var b=Object.extend({queue:{position:"end",scope:(d.id||"global"),limit:1}},arguments[2]||{});Effect[d.visible()?Effect.PAIRS[e][1]:Effect.PAIRS[e][0]](d,b)}};Effect.DefaultOptions.transition=Effect.Transitions.sinoidal;Effect.ScopedQueue=Class.create(Enumerable,{initialize:function(){this.effects=[];this.interval=null},_each:function(b){this.effects._each(b)},add:function(d){var e=new Date().getTime();var b=Object.isString(d.options.queue)?d.options.queue:d.options.queue.position;switch(b){case"front":this.effects.findAll(function(f){return f.state=="idle"}).each(function(f){f.startOn+=d.finishOn;f.finishOn+=d.finishOn});break;case"with-last":e=this.effects.pluck("startOn").max()||e;break;case"end":e=this.effects.pluck("finishOn").max()||e;break}d.startOn+=e;d.finishOn+=e;if(!d.options.queue.limit||(this.effects.length<d.options.queue.limit)){this.effects.push(d)}if(!this.interval){this.interval=setInterval(this.loop.bind(this),15)}},remove:function(b){this.effects=this.effects.reject(function(d){return d==b});if(this.effects.length==0){clearInterval(this.interval);this.interval=null}},loop:function(){var e=new Date().getTime();for(var d=0,b=this.effects.length;d<b;d++){this.effects[d]&&this.effects[d].loop(e)}}});Effect.Queues={instances:$H(),get:function(b){if(!Object.isString(b)){return b}return this.instances.get(b)||this.instances.set(b,new Effect.ScopedQueue())}};Effect.Queue=Effect.Queues.get("global");Effect.Base=Class.create({position:null,start:function(b){function d(f,e){return((f[e+"Internal"]?"this.options."+e+"Internal(this);":"")+(f[e]?"this.options."+e+"(this);":""))}if(b&&b.transition===false){b.transition=Effect.Transitions.linear}this.options=Object.extend(Object.extend({},Effect.DefaultOptions),b||{});this.currentFrame=0;this.state="idle";this.startOn=this.options.delay*1000;this.finishOn=this.startOn+(this.options.duration*1000);this.fromToDelta=this.options.to-this.options.from;this.totalTime=this.finishOn-this.startOn;this.totalFrames=this.options.fps*this.options.duration;this.render=(function(){function e(g,f){if(g.options[f+"Internal"]){g.options[f+"Internal"](g)}if(g.options[f]){g.options[f](g)}}return function(f){if(this.state==="idle"){this.state="running";e(this,"beforeSetup");if(this.setup){this.setup()}e(this,"afterSetup")}if(this.state==="running"){f=(this.options.transition(f)*this.fromToDelta)+this.options.from;this.position=f;e(this,"beforeUpdate");if(this.update){this.update(f)}e(this,"afterUpdate")}}})();this.event("beforeStart");if(!this.options.sync){Effect.Queues.get(Object.isString(this.options.queue)?"global":this.options.queue.scope).add(this)}},loop:function(e){if(e>=this.startOn){if(e>=this.finishOn){this.render(1);this.cancel();this.event("beforeFinish");if(this.finish){this.finish()}this.event("afterFinish");return}var d=(e-this.startOn)/this.totalTime,b=(d*this.totalFrames).round();if(b>this.currentFrame){this.render(d);this.currentFrame=b}}},cancel:function(){if(!this.options.sync){Effect.Queues.get(Object.isString(this.options.queue)?"global":this.options.queue.scope).remove(this)}this.state="finished"},event:function(b){if(this.options[b+"Internal"]){this.options[b+"Internal"](this)}if(this.options[b]){this.options[b](this)}},inspect:function(){var b=$H();for(property in this){if(!Object.isFunction(this[property])){b.set(property,this[property])}}return"#<Effect:"+b.inspect()+",options:"+$H(this.options).inspect()+">"}});Effect.Parallel=Class.create(Effect.Base,{initialize:function(b){this.effects=b||[];this.start(arguments[1])},update:function(b){this.effects.invoke("render",b)},finish:function(b){this.effects.each(function(d){d.render(1);d.cancel();d.event("beforeFinish");if(d.finish){d.finish(b)}d.event("afterFinish")})}});Effect.Tween=Class.create(Effect.Base,{initialize:function(e,h,g){e=Object.isString(e)?$(e):e;var d=$A(arguments),f=d.last(),b=d.length==5?d[3]:null;this.method=Object.isFunction(f)?f.bind(e):Object.isFunction(e[f])?e[f].bind(e):function(l){e[f]=l};this.start(Object.extend({from:h,to:g},b||{}))},update:function(b){this.method(b)}});Effect.Event=Class.create(Effect.Base,{initialize:function(){this.start(Object.extend({duration:0},arguments[0]||{}))},update:Prototype.emptyFunction});Effect.Opacity=Class.create(Effect.Base,{initialize:function(d){this.element=$(d);if(!this.element){throw (Effect._elementDoesNotExistError)}if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout)){this.element.setStyle({zoom:1})}var b=Object.extend({from:this.element.getOpacity()||0,to:1},arguments[1]||{});this.start(b)},update:function(b){this.element.setOpacity(b)}});Effect.Move=Class.create(Effect.Base,{initialize:function(d){this.element=$(d);if(!this.element){throw (Effect._elementDoesNotExistError)}var b=Object.extend({x:0,y:0,mode:"relative"},arguments[1]||{});this.start(b)},setup:function(){this.element.makePositioned();this.originalLeft=parseFloat(this.element.getStyle("left")||"0");this.originalTop=parseFloat(this.element.getStyle("top")||"0");if(this.options.mode=="absolute"){this.options.x=this.options.x-this.originalLeft;this.options.y=this.options.y-this.originalTop}},update:function(b){this.element.setStyle({left:(this.options.x*b+this.originalLeft).round()+"px",top:(this.options.y*b+this.originalTop).round()+"px"})}});Effect.MoveBy=function(d,b,e){return new Effect.Move(d,Object.extend({x:e,y:b},arguments[3]||{}))};Effect.Scale=Class.create(Effect.Base,{initialize:function(d,e){this.element=$(d);if(!this.element){throw (Effect._elementDoesNotExistError)}var b=Object.extend({scaleX:true,scaleY:true,scaleContent:true,scaleFromCenter:false,scaleMode:"box",scaleFrom:100,scaleTo:e},arguments[2]||{});this.start(b)},setup:function(){this.restoreAfterFinish=this.options.restoreAfterFinish||false;this.elementPositioning=this.element.getStyle("position");this.originalStyle={};["top","left","width","height","fontSize"].each(function(d){this.originalStyle[d]=this.element.style[d]}.bind(this));this.originalTop=this.element.offsetTop;this.originalLeft=this.element.offsetLeft;var b=this.element.getStyle("font-size")||"100%";["em","px","%","pt"].each(function(d){if(b.indexOf(d)>0){this.fontSize=parseFloat(b);this.fontSizeType=d}}.bind(this));this.factor=(this.options.scaleTo-this.options.scaleFrom)/100;this.dims=null;if(this.options.scaleMode=="box"){this.dims=[this.element.offsetHeight,this.element.offsetWidth]}if(/^content/.test(this.options.scaleMode)){this.dims=[this.element.scrollHeight,this.element.scrollWidth]}if(!this.dims){this.dims=[this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth]}},update:function(b){var d=(this.options.scaleFrom/100)+(this.factor*b);if(this.options.scaleContent&&this.fontSize){this.element.setStyle({fontSize:this.fontSize*d+this.fontSizeType})}this.setDimensions(this.dims[0]*d,this.dims[1]*d)},finish:function(b){if(this.restoreAfterFinish){this.element.setStyle(this.originalStyle)}},setDimensions:function(b,g){var h={};if(this.options.scaleX){h.width=g.round()+"px"}if(this.options.scaleY){h.height=b.round()+"px"}if(this.options.scaleFromCenter){var f=(b-this.dims[0])/2;var e=(g-this.dims[1])/2;if(this.elementPositioning=="absolute"){if(this.options.scaleY){h.top=this.originalTop-f+"px"}if(this.options.scaleX){h.left=this.originalLeft-e+"px"}}else{if(this.options.scaleY){h.top=-f+"px"}if(this.options.scaleX){h.left=-e+"px"}}}this.element.setStyle(h)}});Effect.Highlight=Class.create(Effect.Base,{initialize:function(d){this.element=$(d);if(!this.element){throw (Effect._elementDoesNotExistError)}var b=Object.extend({startcolor:"#ffff99"},arguments[1]||{});this.start(b)},setup:function(){if(this.element.getStyle("display")=="none"){this.cancel();return}this.oldStyle={};if(!this.options.keepBackgroundImage){this.oldStyle.backgroundImage=this.element.getStyle("background-image");this.element.setStyle({backgroundImage:"none"})}if(!this.options.endcolor){this.options.endcolor=this.element.getStyle("background-color").parseColor("#ffffff")}if(!this.options.restorecolor){this.options.restorecolor=this.element.getStyle("background-color")}this._base=$R(0,2).map(function(b){return parseInt(this.options.startcolor.slice(b*2+1,b*2+3),16)}.bind(this));this._delta=$R(0,2).map(function(b){return parseInt(this.options.endcolor.slice(b*2+1,b*2+3),16)-this._base[b]}.bind(this))},update:function(b){this.element.setStyle({backgroundColor:$R(0,2).inject("#",function(d,e,f){return d+((this._base[f]+(this._delta[f]*b)).round().toColorPart())}.bind(this))})},finish:function(){this.element.setStyle(Object.extend(this.oldStyle,{backgroundColor:this.options.restorecolor}))}});Effect.ScrollTo=function(e){var d=arguments[1]||{},b=document.viewport.getScrollOffsets(),f=$(e).cumulativeOffset();if(d.offset){f[1]+=d.offset}return new Effect.Tween(null,b.top,f[1],d,function(g){scrollTo(b.left,g.round())})};Effect.Fade=function(e){e=$(e);var b=e.getInlineOpacity();var d=Object.extend({from:e.getOpacity()||1,to:0,afterFinishInternal:function(f){if(f.options.to!=0){return}f.element.hide().setStyle({opacity:b})}},arguments[1]||{});return new Effect.Opacity(e,d)};Effect.Appear=function(d){d=$(d);var b=Object.extend({from:(d.getStyle("display")=="none"?0:d.getOpacity()||0),to:1,afterFinishInternal:function(e){e.element.forceRerendering()},beforeSetup:function(e){e.element.setOpacity(e.options.from).show()}},arguments[1]||{});return new Effect.Opacity(d,b)};Effect.Puff=function(d){d=$(d);var b={opacity:d.getInlineOpacity(),position:d.getStyle("position"),top:d.style.top,left:d.style.left,width:d.style.width,height:d.style.height};return new Effect.Parallel([new Effect.Scale(d,200,{sync:true,scaleFromCenter:true,scaleContent:true,restoreAfterFinish:true}),new Effect.Opacity(d,{sync:true,to:0})],Object.extend({duration:1,beforeSetupInternal:function(e){Position.absolutize(e.effects[0].element)},afterFinishInternal:function(e){e.effects[0].element.hide().setStyle(b)}},arguments[1]||{}))};Effect.BlindUp=function(b){b=$(b);b.makeClipping();return new Effect.Scale(b,0,Object.extend({scaleContent:false,scaleX:false,restoreAfterFinish:true,afterFinishInternal:function(d){d.element.hide().undoClipping()}},arguments[1]||{}))};Effect.BlindDown=function(d){d=$(d);var b=d.getDimensions();return new Effect.Scale(d,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:b.height,originalWidth:b.width},restoreAfterFinish:true,afterSetup:function(e){e.element.makeClipping().setStyle({height:"0px"}).show()},afterFinishInternal:function(e){e.element.undoClipping()}},arguments[1]||{}))};Effect.SwitchOff=function(d){d=$(d);var b=d.getInlineOpacity();return new Effect.Appear(d,Object.extend({duration:0.4,from:0,transition:Effect.Transitions.flicker,afterFinishInternal:function(e){new Effect.Scale(e.element,1,{duration:0.3,scaleFromCenter:true,scaleX:false,scaleContent:false,restoreAfterFinish:true,beforeSetup:function(f){f.element.makePositioned().makeClipping()},afterFinishInternal:function(f){f.element.hide().undoClipping().undoPositioned().setStyle({opacity:b})}})}},arguments[1]||{}))};Effect.DropOut=function(d){d=$(d);var b={top:d.getStyle("top"),left:d.getStyle("left"),opacity:d.getInlineOpacity()};return new Effect.Parallel([new Effect.Move(d,{x:0,y:100,sync:true}),new Effect.Opacity(d,{sync:true,to:0})],Object.extend({duration:0.5,beforeSetup:function(e){e.effects[0].element.makePositioned()},afterFinishInternal:function(e){e.effects[0].element.hide().undoPositioned().setStyle(b)}},arguments[1]||{}))};Effect.Shake=function(f){f=$(f);var d=Object.extend({distance:20,duration:0.5},arguments[1]||{});var g=parseFloat(d.distance);var e=parseFloat(d.duration)/10;var b={top:f.getStyle("top"),left:f.getStyle("left")};return new Effect.Move(f,{x:g,y:0,duration:e,afterFinishInternal:function(h){new Effect.Move(h.element,{x:-g*2,y:0,duration:e*2,afterFinishInternal:function(l){new Effect.Move(l.element,{x:g*2,y:0,duration:e*2,afterFinishInternal:function(n){new Effect.Move(n.element,{x:-g*2,y:0,duration:e*2,afterFinishInternal:function(o){new Effect.Move(o.element,{x:g*2,y:0,duration:e*2,afterFinishInternal:function(p){new Effect.Move(p.element,{x:-g,y:0,duration:e,afterFinishInternal:function(q){q.element.undoPositioned().setStyle(b)}})}})}})}})}})}})};Effect.SlideDown=function(e){e=$(e).cleanWhitespace();var b=e.down().getStyle("bottom");var d=e.getDimensions();return new Effect.Scale(e,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:window.opera?0:1,scaleMode:{originalHeight:d.height,originalWidth:d.width},restoreAfterFinish:true,afterSetup:function(f){f.element.makePositioned();f.element.down().makePositioned();if(window.opera){f.element.setStyle({top:""})}f.element.makeClipping().setStyle({height:"0px"}).show()},afterUpdateInternal:function(f){f.element.down().setStyle({bottom:(f.dims[0]-f.element.clientHeight)+"px"})},afterFinishInternal:function(f){f.element.undoClipping().undoPositioned();f.element.down().undoPositioned().setStyle({bottom:b})}},arguments[1]||{}))};Effect.SlideUp=function(e){e=$(e).cleanWhitespace();var b=e.down().getStyle("bottom");var d=e.getDimensions();return new Effect.Scale(e,window.opera?0:1,Object.extend({scaleContent:false,scaleX:false,scaleMode:"box",scaleFrom:100,scaleMode:{originalHeight:d.height,originalWidth:d.width},restoreAfterFinish:true,afterSetup:function(f){f.element.makePositioned();f.element.down().makePositioned();if(window.opera){f.element.setStyle({top:""})}f.element.makeClipping().show()},afterUpdateInternal:function(f){f.element.down().setStyle({bottom:(f.dims[0]-f.element.clientHeight)+"px"})},afterFinishInternal:function(f){f.element.hide().undoClipping().undoPositioned();f.element.down().undoPositioned().setStyle({bottom:b})}},arguments[1]||{}))};Effect.Squish=function(b){return new Effect.Scale(b,window.opera?1:0,{restoreAfterFinish:true,beforeSetup:function(d){d.element.makeClipping()},afterFinishInternal:function(d){d.element.hide().undoClipping()}})};Effect.Grow=function(e){e=$(e);var d=Object.extend({direction:"center",moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.full},arguments[1]||{});var b={top:e.style.top,left:e.style.left,height:e.style.height,width:e.style.width,opacity:e.getInlineOpacity()};var l=e.getDimensions();var n,h;var g,f;switch(d.direction){case"top-left":n=h=g=f=0;break;case"top-right":n=l.width;h=f=0;g=-l.width;break;case"bottom-left":n=g=0;h=l.height;f=-l.height;break;case"bottom-right":n=l.width;h=l.height;g=-l.width;f=-l.height;break;case"center":n=l.width/2;h=l.height/2;g=-l.width/2;f=-l.height/2;break}return new Effect.Move(e,{x:n,y:h,duration:0.01,beforeSetup:function(o){o.element.hide().makeClipping().makePositioned()},afterFinishInternal:function(o){new Effect.Parallel([new Effect.Opacity(o.element,{sync:true,to:1,from:0,transition:d.opacityTransition}),new Effect.Move(o.element,{x:g,y:f,sync:true,transition:d.moveTransition}),new Effect.Scale(o.element,100,{scaleMode:{originalHeight:l.height,originalWidth:l.width},sync:true,scaleFrom:window.opera?1:0,transition:d.scaleTransition,restoreAfterFinish:true})],Object.extend({beforeSetup:function(p){p.effects[0].element.setStyle({height:"0px"}).show()},afterFinishInternal:function(p){p.effects[0].element.undoClipping().undoPositioned().setStyle(b)}},d))}})};Effect.Shrink=function(e){e=$(e);var d=Object.extend({direction:"center",moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.none},arguments[1]||{});var b={top:e.style.top,left:e.style.left,height:e.style.height,width:e.style.width,opacity:e.getInlineOpacity()};var h=e.getDimensions();var g,f;switch(d.direction){case"top-left":g=f=0;break;case"top-right":g=h.width;f=0;break;case"bottom-left":g=0;f=h.height;break;case"bottom-right":g=h.width;f=h.height;break;case"center":g=h.width/2;f=h.height/2;break}return new Effect.Parallel([new Effect.Opacity(e,{sync:true,to:0,from:1,transition:d.opacityTransition}),new Effect.Scale(e,window.opera?1:0,{sync:true,transition:d.scaleTransition,restoreAfterFinish:true}),new Effect.Move(e,{x:g,y:f,sync:true,transition:d.moveTransition})],Object.extend({beforeStartInternal:function(l){l.effects[0].element.makePositioned().makeClipping()},afterFinishInternal:function(l){l.effects[0].element.hide().undoClipping().undoPositioned().setStyle(b)}},d))};Effect.Pulsate=function(e){e=$(e);var d=arguments[1]||{},b=e.getInlineOpacity(),g=d.transition||Effect.Transitions.linear,f=function(h){return 1-g((-Math.cos((h*(d.pulses||5)*2)*Math.PI)/2)+0.5)};return new Effect.Opacity(e,Object.extend(Object.extend({duration:2,from:0,afterFinishInternal:function(h){h.element.setStyle({opacity:b})}},d),{transition:f}))};Effect.Fold=function(d){d=$(d);var b={top:d.style.top,left:d.style.left,width:d.style.width,height:d.style.height};d.makeClipping();return new Effect.Scale(d,5,Object.extend({scaleContent:false,scaleX:false,afterFinishInternal:function(e){new Effect.Scale(d,1,{scaleContent:false,scaleY:false,afterFinishInternal:function(f){f.element.hide().undoClipping().setStyle(b)}})}},arguments[1]||{}))};Effect.Morph=Class.create(Effect.Base,{initialize:function(e){this.element=$(e);if(!this.element){throw (Effect._elementDoesNotExistError)}var b=Object.extend({style:{}},arguments[1]||{});if(!Object.isString(b.style)){this.style=$H(b.style)}else{if(b.style.include(":")){this.style=b.style.parseStyle()}else{this.element.addClassName(b.style);this.style=$H(this.element.getStyles());this.element.removeClassName(b.style);var d=this.element.getStyles();this.style=this.style.reject(function(f){return f.value==d[f.key]});b.afterFinishInternal=function(f){f.element.addClassName(f.options.style);f.transforms.each(function(g){f.element.style[g.style]=""})}}}this.start(b)},setup:function(){function b(d){if(!d||["rgba(0, 0, 0, 0)","transparent"].include(d)){d="#ffffff"}d=d.parseColor();return $R(0,2).map(function(e){return parseInt(d.slice(e*2+1,e*2+3),16)})}this.transforms=this.style.map(function(l){var h=l[0],g=l[1],f=null;if(g.parseColor("#zzzzzz")!="#zzzzzz"){g=g.parseColor();f="color"}else{if(h=="opacity"){g=parseFloat(g);if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout)){this.element.setStyle({zoom:1})}}else{if(Element.CSS_LENGTH.test(g)){var e=g.match(/^([\+\-]?[0-9\.]+)(.*)$/);g=parseFloat(e[1]);f=(e.length==3)?e[2]:null}}}var d=this.element.getStyle(h);return{style:h.camelize(),originalValue:f=="color"?b(d):parseFloat(d||0),targetValue:f=="color"?b(g):g,unit:f}}.bind(this)).reject(function(d){return((d.originalValue==d.targetValue)||(d.unit!="color"&&(isNaN(d.originalValue)||isNaN(d.targetValue))))})},update:function(b){var f={},d,e=this.transforms.length;while(e--){f[(d=this.transforms[e]).style]=d.unit=="color"?"#"+(Math.round(d.originalValue[0]+(d.targetValue[0]-d.originalValue[0])*b)).toColorPart()+(Math.round(d.originalValue[1]+(d.targetValue[1]-d.originalValue[1])*b)).toColorPart()+(Math.round(d.originalValue[2]+(d.targetValue[2]-d.originalValue[2])*b)).toColorPart():(d.originalValue+(d.targetValue-d.originalValue)*b).toFixed(3)+(d.unit===null?"":d.unit)}this.element.setStyle(f,true)}});Effect.Transform=Class.create({initialize:function(b){this.tracks=[];this.options=arguments[1]||{};this.addTracks(b)},addTracks:function(b){b.each(function(d){d=$H(d);var e=d.values().first();this.tracks.push($H({ids:d.keys().first(),effect:Effect.Morph,options:{style:e}}))}.bind(this));return this},play:function(){return new Effect.Parallel(this.tracks.map(function(b){var f=b.get("ids"),e=b.get("effect"),d=b.get("options");var g=[$(f)||$$(f)].flatten();return g.map(function(h){return new e(h,Object.extend({sync:true},d))})}).flatten(),this.options)}});Element.CSS_PROPERTIES=$w("backgroundColor backgroundPosition borderBottomColor borderBottomStyle borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth borderRightColor borderRightStyle borderRightWidth borderSpacing borderTopColor borderTopStyle borderTopWidth bottom clip color fontSize fontWeight height left letterSpacing lineHeight marginBottom marginLeft marginRight marginTop markerOffset maxHeight maxWidth minHeight minWidth opacity outlineColor outlineOffset outlineWidth paddingBottom paddingLeft paddingRight paddingTop right textIndent top width wordSpacing zIndex");Element.CSS_LENGTH=/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;String.__parseStyleElement=document.createElement("div");String.prototype.parseStyle=function(){var d,b=$H();if(Prototype.Browser.WebKit){d=new Element("div",{style:this}).style}else{String.__parseStyleElement.innerHTML='<div style="'+this+'"></div>';d=String.__parseStyleElement.childNodes[0].style}Element.CSS_PROPERTIES.each(function(e){if(d[e]){b.set(e,d[e])}});if(Prototype.Browser.IE&&this.include("opacity")){b.set("opacity",this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1])}return b};if(document.defaultView&&document.defaultView.getComputedStyle){Element.getStyles=function(d){var b=document.defaultView.getComputedStyle($(d),null);return Element.CSS_PROPERTIES.inject({},function(e,f){e[f]=b[f];return e})}}else{Element.getStyles=function(d){d=$(d);var b=d.currentStyle,e;e=Element.CSS_PROPERTIES.inject({},function(f,g){f[g]=b[g];return f});if(!e.opacity){e.opacity=d.getOpacity()}return e}}Effect.Methods={morph:function(b,d){b=$(b);new Effect.Morph(b,Object.extend({style:d},arguments[2]||{}));return b},visualEffect:function(e,g,d){e=$(e);var f=g.dasherize().camelize(),b=f.charAt(0).toUpperCase()+f.substring(1);new Effect[b](e,d);return e},highlight:function(d,b){d=$(d);new Effect.Highlight(d,b);return d}};$w("fade appear grow shrink fold blindUp blindDown slideUp slideDown pulsate shake puff squish switchOff dropOut").each(function(b){Effect.Methods[b]=function(e,d){e=$(e);Effect[b.charAt(0).toUpperCase()+b.substring(1)](e,d);return e}});$w("getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles").each(function(b){Effect.Methods[b]=Element[b]});Element.addMethods(Effect.Methods);function validateCreditCard(e){var d="0123456789";var b="";for(i=0;i<e.length;i++){x=e.charAt(i);if(d.indexOf(x,0)!=-1){b+=x}}j=b.length/2;k=Math.floor(j);m=Math.ceil(j)-k;c=0;for(i=0;i<k;i++){a=b.charAt(i*2+m)*2;c+=a>9?Math.floor(a/10+a%10):a}for(i=0;i<k+m;i++){c+=b.charAt(i*2+1-m)*1}return(c%10==0)}var Validator=Class.create();Validator.prototype={initialize:function(e,d,f,b){if(typeof f=="function"){this.options=$H(b);this._test=f}else{this.options=$H(f);this._test=function(){return true}}this.error=d||"Validation failed.";this.className=e},test:function(b,d){return(this._test(b,d)&&this.options.all(function(e){return Validator.methods[e.key]?Validator.methods[e.key](b,d,e.value):true}))}};Validator.methods={pattern:function(b,e,d){return Validation.get("IsEmpty").test(b)||d.test(b)},minLength:function(b,e,d){return b.length>=d},maxLength:function(b,e,d){return b.length<=d},min:function(b,e,d){return b>=parseFloat(d)},max:function(b,e,d){return b<=parseFloat(d)},notOneOf:function(b,e,d){return $A(d).all(function(f){return b!=f})},oneOf:function(b,e,d){return $A(d).any(function(f){return b==f})},is:function(b,e,d){return b==d},isNot:function(b,e,d){return b!=d},equalToField:function(b,e,d){return b==$F(d)},notEqualToField:function(b,e,d){return b!=$F(d)},include:function(b,e,d){return $A(d).all(function(f){return Validation.get(f).test(b,e)})}};var Validation=Class.create();Validation.defaultOptions={onSubmit:true,stopOnFirst:false,immediate:false,focusOnError:true,useTitles:false,addClassNameToContainer:false,containerClassName:".input-box",onFormValidate:function(b,d){},onElementValidate:function(b,d){}};Validation.prototype={initialize:function(d,b){this.form=$(d);if(!this.form){return}this.options=Object.extend({onSubmit:Validation.defaultOptions.onSubmit,stopOnFirst:Validation.defaultOptions.stopOnFirst,immediate:Validation.defaultOptions.immediate,focusOnError:Validation.defaultOptions.focusOnError,useTitles:Validation.defaultOptions.useTitles,onFormValidate:Validation.defaultOptions.onFormValidate,onElementValidate:Validation.defaultOptions.onElementValidate},b||{});if(this.options.onSubmit){Event.observe(this.form,"submit",this.onSubmit.bind(this),false)}if(this.options.immediate){Form.getElements(this.form).each(function(e){if(e.tagName.toLowerCase()=="select"){Event.observe(e,"blur",this.onChange.bindAsEventListener(this))}if(e.type.toLowerCase()=="radio"||e.type.toLowerCase()=="checkbox"){Event.observe(e,"click",this.onChange.bindAsEventListener(this))}else{Event.observe(e,"change",this.onChange.bindAsEventListener(this))}},this)}},onChange:function(b){Validation.isOnChange=true;Validation.validate(Event.element(b),{useTitle:this.options.useTitles,onElementValidate:this.options.onElementValidate});Validation.isOnChange=false},onSubmit:function(b){if(!this.validate()){Event.stop(b)}},validate:function(){var b=false;var d=this.options.useTitles;var g=this.options.onElementValidate;try{if(this.options.stopOnFirst){b=Form.getElements(this.form).all(function(e){if(e.hasClassName("local-validation")&&!this.isElementInForm(e,this.form)){return true}return Validation.validate(e,{useTitle:d,onElementValidate:g})},this)}else{b=Form.getElements(this.form).collect(function(e){if(e.hasClassName("local-validation")&&!this.isElementInForm(e,this.form)){return true}if(e.hasClassName("validation-disabled")){return true}return Validation.validate(e,{useTitle:d,onElementValidate:g})},this).all()}}catch(f){}if(!b&&this.options.focusOnError){try{Form.getElements(this.form).findAll(function(e){return $(e).hasClassName("validation-failed")}).first().focus()}catch(f){}}this.options.onFormValidate(b,this.form);return b},reset:function(){Form.getElements(this.form).each(Validation.reset)},isElementInForm:function(e,d){var b=e.up("form");if(b==d){return true}return false}};Object.extend(Validation,{validate:function(e,b){b=Object.extend({useTitle:false,onElementValidate:function(f,g){}},b||{});e=$(e);var d=$w(e.className);return result=d.all(function(f){var g=Validation.test(f,e,b.useTitle);b.onElementValidate(g,e);return g})},insertAdvice:function(f,d){var b=$(f).up(".field-row");if(b){Element.insert(b,{after:d})}else{if(f.up("td.value")){f.up("td.value").insert({bottom:d})}else{if(f.advaiceContainer&&$(f.advaiceContainer)){$(f.advaiceContainer).update(d)}else{switch(f.type.toLowerCase()){case"checkbox":case"radio":var e=f.parentNode;if(e){Element.insert(e,{bottom:d})}else{Element.insert(f,{after:d})}break;default:Element.insert(f,{after:d})}}}}},showAdvice:function(e,d,b){if(!e.advices){e.advices=new Hash()}else{e.advices.each(function(f){if(!d||f.value.id!=d.id){this.hideAdvice(e,f.value)}}.bind(this))}e.advices.set(b,d);if(typeof Effect=="undefined"){d.style.display="block"}else{if(!d._adviceAbsolutize){new Effect.Appear(d,{duration:1})}else{Position.absolutize(d);d.show();d.setStyle({top:d._adviceTop,left:d._adviceLeft,width:d._adviceWidth,"z-index":1000});d.addClassName("advice-absolute")}}},hideAdvice:function(d,b){if(b!=null){new Effect.Fade(b,{duration:1,afterFinishInternal:function(){b.hide()}})}},updateCallback:function(elm,status){if(typeof elm.callbackFunction!="undefined"){eval(elm.callbackFunction+"('"+elm.id+"','"+status+"')")}},ajaxError:function(g,f){var e="validate-ajax";var d=Validation.getAdvice(e,g);if(d==null){d=this.createAdvice(e,g,false,f)}this.showAdvice(g,d,"validate-ajax");this.updateCallback(g,"failed");g.addClassName("validation-failed");g.addClassName("validate-ajax");if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=""){var b=g.up(Validation.defaultOptions.containerClassName);if(b&&this.allowContainerClassName(g)){b.removeClassName("validation-passed");b.addClassName("validation-error")}}},allowContainerClassName:function(b){if(b.type=="radio"||b.type=="checkbox"){return b.hasClassName("change-container-classname")}return true},test:function(g,o,l){var d=Validation.get(g);var n="__advice"+g.camelize();try{if(Validation.isVisible(o)&&!d.test($F(o),o)){var f=Validation.getAdvice(g,o);if(f==null){f=this.createAdvice(g,o,l)}this.showAdvice(o,f,g);this.updateCallback(o,"failed");o[n]=1;if(!o.advaiceContainer){o.removeClassName("validation-passed");o.addClassName("validation-failed")}if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=""){var b=o.up(Validation.defaultOptions.containerClassName);if(b&&this.allowContainerClassName(o)){b.removeClassName("validation-passed");b.addClassName("validation-error")}}return false}else{var f=Validation.getAdvice(g,o);this.hideAdvice(o,f);this.updateCallback(o,"passed");o[n]="";o.removeClassName("validation-failed");o.addClassName("validation-passed");if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=""){var b=o.up(Validation.defaultOptions.containerClassName);if(b&&!b.down(".validation-failed")&&this.allowContainerClassName(o)){if(!Validation.get("IsEmpty").test(o.value)||!this.isVisible(o)){b.addClassName("validation-passed")}else{b.removeClassName("validation-passed")}b.removeClassName("validation-error")}}return true}}catch(h){throw (h)}},isVisible:function(b){while(b.tagName!="BODY"){if(!$(b).visible()){return false}b=b.parentNode}return true},getAdvice:function(b,d){return $("advice-"+b+"-"+Validation.getElmID(d))||$("advice-"+Validation.getElmID(d))},createAdvice:function(e,n,l,d){var b=Validation.get(e);var h=l?((n&&n.title)?n.title:b.error):b.error;if(d){h=d}if(jQuery.mage.__){h=jQuery.mage.__(h)}advice='<div class="validation-advice" id="advice-'+e+"-"+Validation.getElmID(n)+'" style="display:none">'+h+"</div>";Validation.insertAdvice(n,advice);advice=Validation.getAdvice(e,n);if($(n).hasClassName("absolute-advice")){var g=$(n).getDimensions();var f=Position.cumulativeOffset(n);advice._adviceTop=(f[1]+g.height)+"px";advice._adviceLeft=(f[0])+"px";advice._adviceWidth=(g.width)+"px";advice._adviceAbsolutize=true}return advice},getElmID:function(b){return b.id?b.id:b.name},reset:function(d){d=$(d);var b=$w(d.className);b.each(function(g){var h="__advice"+g.camelize();if(d[h]){var f=Validation.getAdvice(g,d);if(f){f.hide()}d[h]=""}d.removeClassName("validation-failed");d.removeClassName("validation-passed");if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=""){var e=d.up(Validation.defaultOptions.containerClassName);if(e){e.removeClassName("validation-passed");e.removeClassName("validation-error")}}})},add:function(f,e,g,d){var b={};b[f]=new Validator(f,e,g,d);Object.extend(Validation.methods,b)},addAllThese:function(b){var d={};$A(b).each(function(e){d[e[0]]=new Validator(e[0],e[1],e[2],(e.length>3?e[3]:{}))});Object.extend(Validation.methods,d)},get:function(b){return Validation.methods[b]?Validation.methods[b]:Validation.methods._LikeNoIDIEverSaw_},methods:{_LikeNoIDIEverSaw_:new Validator("_LikeNoIDIEverSaw_","",{})}});Validation.add("IsEmpty","",function(b){return(b==""||(b==null)||(b.length==0)||/^\s+$/.test(b))});Validation.addAllThese([["validate-no-html-tags","HTML tags are not allowed",function(b){return !/<(\/)?\w+/.test(b)}],["validate-select","Please select an option.",function(b){return((b!="none")&&(b!=null)&&(b.length!=0))}],["required-entry","This is a required field.",function(b){return !Validation.get("IsEmpty").test(b)}],["validate-number","Please enter a valid number in this field.",function(b){return Validation.get("IsEmpty").test(b)||(!isNaN(parseNumber(b))&&/^\s*-?\d*(\.\d*)?\s*$/.test(b))}],["validate-number-range","The value is not within the specified range.",function(e,g){if(Validation.get("IsEmpty").test(e)){return true}var f=parseNumber(e);if(isNaN(f)){return false}var d=/^number-range-(-?[\d.,]+)?-(-?[\d.,]+)?$/,b=true;$w(g.className).each(function(l){var h=d.exec(l);if(h){b=b&&(h[1]==null||h[1]==""||f>=parseNumber(h[1]))&&(h[2]==null||h[2]==""||f<=parseNumber(h[2]))}});return b}],["validate-digits","Please use numbers only in this field. Please avoid spaces or other characters such as dots or commas.",function(b){return Validation.get("IsEmpty").test(b)||!/[^\d]/.test(b)}],["validate-digits-range","The value is not within the specified range.",function(e,g){if(Validation.get("IsEmpty").test(e)){return true}var f=parseNumber(e);if(isNaN(f)){return false}var d=/^digits-range-(-?\d+)?-(-?\d+)?$/,b=true;$w(g.className).each(function(l){var h=d.exec(l);if(h){b=b&&(h[1]==null||h[1]==""||f>=parseNumber(h[1]))&&(h[2]==null||h[2]==""||f<=parseNumber(h[2]))}});return b}],["validate-range","The value is not within the specified range.",function(f,l){var g,h;if(Validation.get("IsEmpty").test(f)){return true}else{if(Validation.get("validate-digits").test(f)){g=h=parseNumber(f)}else{var e=/^(-?\d+)?-(-?\d+)?$/.exec(f);if(e){g=parseNumber(e[1]);h=parseNumber(e[2]);if(g>h){return false}}else{return false}}}var d=/^range-(-?\d+)?-(-?\d+)?$/,b=true;$w(l.className).each(function(n){var q=d.exec(n);if(q){var p=parseNumber(q[1]);var o=parseNumber(q[2]);b=b&&(isNaN(p)||g>=p)&&(isNaN(o)||h<=o)}});return b}],["validate-alpha","Please use letters only (a-z or A-Z) in this field.",function(b){return Validation.get("IsEmpty").test(b)||/^[a-zA-Z]+$/.test(b)}],["validate-code","Please use only letters (a-z), numbers (0-9) or underscore (_) in this field, and the first character should be a letter.",function(b){return Validation.get("IsEmpty").test(b)||/^[a-z]+[a-z0-9_]+$/.test(b)}],["validate-alphanum","Please use only letters (a-z or A-Z) or numbers (0-9) in this field. No spaces or other characters are allowed.",function(b){return Validation.get("IsEmpty").test(b)||/^[a-zA-Z0-9]+$/.test(b)}],["validate-alphanum-with-spaces","Please use only letters (a-z or A-Z), numbers (0-9) or spaces only in this field.",function(b){return Validation.get("IsEmpty").test(b)||/^[a-zA-Z0-9 ]+$/.test(b)}],["validate-street",'Please use only letters (a-z or A-Z), numbers (0-9), spaces and "#" in this field.',function(b){return Validation.get("IsEmpty").test(b)||/^[ \w]{3,}([A-Za-z]\.)?([ \w]*\#\d+)?(\r\n| )[ \w]{3,}/.test(b)}],["validate-phoneStrict","Please enter a valid phone number (Ex: 123-456-7890).",function(b){return Validation.get("IsEmpty").test(b)||/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(b)}],["validate-phoneLax","Please enter a valid phone number (Ex: 123-456-7890).",function(b){return Validation.get("IsEmpty").test(b)||/^((\d[-. ]?)?((\(\d{3}\))|\d{3}))?[-. ]?\d{3}[-. ]?\d{4}$/.test(b)}],["validate-fax","Please enter a valid fax number (Ex: 123-456-7890).",function(b){return Validation.get("IsEmpty").test(b)||/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(b)}],["validate-date","Please enter a valid date.",function(b){var d=new Date(b);return Validation.get("IsEmpty").test(b)||!isNaN(d)}],["validate-date-range","Make sure the To Date is later than or the same as the From Date.",function(e,h){var d=/\bdate-range-(\w+)-(\w+)\b/.exec(h.className);if(!d||d[2]=="to"||Validation.get("IsEmpty").test(e)){return true}var f=new Date().getFullYear()+"";var b=function(l){l=l.split(/[.\/]/);if(l[2]&&l[2].length<4){l[2]=f.substr(0,l[2].length)+l[2]}return new Date(l.join("/")).getTime()};var g=Element.select(h.form,".validate-date-range.date-range-"+d[1]+"-to");return !g.length||Validation.get("IsEmpty").test(g[0].value)||b(e)<=b(g[0].value)}],["validate-email","Please enter a valid email address (Ex: johndoe@domain.com).",function(b){return Validation.get("IsEmpty").test(b)||/^([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i.test(b)}],["validate-emailSender","Please use only visible characters and spaces.",function(b){return Validation.get("IsEmpty").test(b)||/^[\S ]+$/.test(b)}],["validate-password","Please enter 6 or more characters. Leading or trailing spaces will be ignored.",function(b){var d=b.strip();return !(d.length>0&&d.length<6)}],["validate-admin-password","Please enter 7 or more characters, using both numeric and alphabetic.",function(b){var d=b.strip();if(0==d.length){return true}if(!(/[a-z]/i.test(b))||!(/[0-9]/.test(b))){return false}return !(d.length<7)}],["validate-cpassword","Please make sure your passwords match.",function(b){var d=$("confirmation")?$("confirmation"):$$(".validate-cpassword")[0];var g=false;if($("password")){g=$("password")}var h=$$(".validate-password");for(var e=0;e<h.size();e++){var f=h[e];if(f.up("form").id==d.up("form").id){g=f}}if($$(".validate-admin-password").size()){g=$$(".validate-admin-password")[0]}return(g.value==d.value)}],["validate-both-passwords","Please make sure your passwords match.",function(e,d){var b=$(d.form[d.name=="password"?"confirmation":"password"]),f=d.value==b.value;if(f&&b.hasClassName("validation-failed")){Validation.test(this.className,b)}return b.value==""||f}],["validate-url","Please enter a valid URL. Protocol is required (http://, https:// or ftp://)",function(b){b=(b||"").replace(/^\s+/,"").replace(/\s+$/,"");return Validation.get("IsEmpty").test(b)||/^(http|https|ftp):\/\/(([A-Z0-9]([A-Z0-9_-]*[A-Z0-9]|))(\.[A-Z0-9]([A-Z0-9_-]*[A-Z0-9]|))*)(:(\d+))?(\/[A-Z0-9~](([A-Z0-9_~-]|\.)*[A-Z0-9~]|))*\/?(.*)?$/i.test(b)}],["validate-clean-url",'Please enter a valid URL (Ex: "http://www.example.com" or "www.example.com").',function(b){return Validation.get("IsEmpty").test(b)||/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(b)||/^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(b)}],["validate-identifier",'Please enter a valid URL Key (Ex: "example-page", "example-page.html" or "anotherlevel/example-page").',function(b){return Validation.get("IsEmpty").test(b)||/^[a-z0-9][a-z0-9_\/-]+(\.[a-z0-9_-]+)?$/.test(b)}],["validate-xml-identifier","Please enter a valid XML-identifier (Ex: something_1, block5, id-4).",function(b){return Validation.get("IsEmpty").test(b)||/^[A-Z][A-Z0-9_\/-]*$/i.test(b)}],["validate-ssn","Please enter a valid social security number (Ex: 123-45-6789).",function(b){return Validation.get("IsEmpty").test(b)||/^\d{3}-?\d{2}-?\d{4}$/.test(b)}],["validate-zip-us","Please enter a valid zip code (Ex: 90602 or 90602-1234).",function(b){return Validation.get("IsEmpty").test(b)||/(^\d{5}$)|(^\d{5}-\d{4}$)/.test(b)}],["validate-zip-international","Please enter a valid zip code.",function(b){return true}],["validate-date-au",'Please use this date format: dd/mm/yyyy (Ex: "17/03/2006" for the 17th of March, 2006).',function(b){if(Validation.get("IsEmpty").test(b)){return true}var e=/^(\d{2})\/(\d{2})\/(\d{4})$/;if(!e.test(b)){return false}var f=new Date(b.replace(e,"$2/$1/$3"));return(parseInt(RegExp.$2,10)==(1+f.getMonth()))&&(parseInt(RegExp.$1,10)==f.getDate())&&(parseInt(RegExp.$3,10)==f.getFullYear())}],["validate-currency-dollar","Please enter a valid $ amount (Ex: $100.00).",function(b){return Validation.get("IsEmpty").test(b)||/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(b)}],["validate-one-required","Please select one of the options above.",function(b,f){var e=f.parentNode;var d=e.getElementsByTagName("INPUT");return $A(d).any(function(g){return $F(g)})}],["validate-one-required-by-name","Please select one of the options.",function(d,g){var b=$$('input[name="'+g.name.replace(/([\\"])/g,"\\$1")+'"]');var e=1;for(var f=0;f<b.length;f++){if((b[f].type=="checkbox"||b[f].type=="radio")&&b[f].checked==true){e=0}if(Validation.isOnChange&&(b[f].type=="checkbox"||b[f].type=="radio")){Validation.reset(b[f])}}if(e==0){return true}else{return false}}],["validate-not-negative-number","Please enter a number 0 or greater in this field.",function(b){if(Validation.get("IsEmpty").test(b)){return true}b=parseNumber(b);return !isNaN(b)&&b>=0}],["validate-zero-or-greater","Please enter a number 0 or greater in this field.",function(b){return Validation.get("validate-not-negative-number").test(b)}],["validate-greater-than-zero","Please enter a number greater than 0 in this field.",function(b){if(Validation.get("IsEmpty").test(b)){return true}b=parseNumber(b);return !isNaN(b)&&b>0}],["validate-state","Please select State/Province.",function(b){return(b!=0||b=="")}],["validate-new-password","Please enter 6 or more characters. Leading or trailing spaces will be ignored.",function(b){if(!Validation.get("validate-password").test(b)){return false}if(Validation.get("IsEmpty").test(b)&&b!=""){return false}return true}],["validate-cc-number","Please enter a valid credit card number.",function(b,e){var d=$(e.id.substr(0,e.id.indexOf("_cc_number"))+"_cc_type");if(d&&typeof Validation.creditCartTypes.get(d.value)!="undefined"&&Validation.creditCartTypes.get(d.value)[2]==false){if(!Validation.get("IsEmpty").test(b)&&Validation.get("validate-digits").test(b)){return true}else{return false}}return validateCreditCard(b)}],["validate-cc-type","Credit card number does not match credit card type.",function(d,g){g.value=removeDelimiters(g.value);d=removeDelimiters(d);var f=$(g.id.substr(0,g.id.indexOf("_cc_number"))+"_cc_type");if(!f){return true}var e=f.value;if(typeof Validation.creditCartTypes.get(e)=="undefined"){return false}if(Validation.creditCartTypes.get(e)[0]==false){return true}var b="";Validation.creditCartTypes.each(function(h){if(h.value[0]&&d.match(h.value[0])){b=h.key;throw $break}});if(b!=e){return false}if(f.hasClassName("validation-failed")&&Validation.isOnChange){Validation.validate(f)}return true}],["validate-cc-type-select","Card type does not match credit card number.",function(d,e){var b=$(e.id.substr(0,e.id.indexOf("_cc_type"))+"_cc_number");if(Validation.isOnChange&&Validation.get("IsEmpty").test(b.value)){return true}if(Validation.get("validate-cc-type").test(b.value,b)){Validation.validate(b)}return Validation.get("validate-cc-type").test(b.value,b)}],["validate-cc-exp","Incorrect credit card expiration date.",function(b,l){var h=b;var g=$(l.id.substr(0,l.id.indexOf("_expiration"))+"_expiration_yr").value;var f=new Date();var e=f.getMonth()+1;var d=f.getFullYear();if(h<e&&g==d){return false}return true}],["validate-cc-cvn","Please enter a valid credit card verification number.",function(b,g){var f=$(g.id.substr(0,g.id.indexOf("_cc_cid"))+"_cc_type");if(!f){return true}var d=f.value;if(typeof Validation.creditCartTypes.get(d)=="undefined"){return false}var e=Validation.creditCartTypes.get(d)[1];if(b.match(e)){return true}return false}],["validate-ajax","",function(b,d){return true}],["validate-data","Please use only letters (a-z or A-Z), numbers (0-9) or underscore (_) in this field, and the first character should be a letter.",function(b){if(b!=""&&b){return/^[A-Za-z]+[A-Za-z0-9_]+$/.test(b)}return true}],["validate-css-length","Please input a valid CSS-length (Ex: 100px, 77pt, 20em, .5ex or 50%).",function(b){if(b!=""&&b){return/^[0-9\.]+(px|pt|em|ex|%)?$/.test(b)&&(!(/\..*\./.test(b)))&&!(/\.$/.test(b))}return true}],["validate-length","Text length does not meet the specified text range.",function(d,g){var e=new RegExp(/^maximum-length-[0-9]+$/);var f=new RegExp(/^minimum-length-[0-9]+$/);var b=true;$w(g.className).each(function(l,h){if(l.match(e)&&b){var n=l.split("-")[2];b=(d.length<=n)}if(l.match(f)&&b&&!Validation.get("IsEmpty").test(d)){var n=l.split("-")[2];b=(d.length>=n)}});return b}],["validate-percents","Please enter a number lower than 100.",{max:100}],["required-file","Please select a file.",function(d,e){var b=!Validation.get("IsEmpty").test(d);if(b===false){ovId=e.id+"_value";if($(ovId)){b=!Validation.get("IsEmpty").test($(ovId).value)}}return b}],["validate-cc-ukss","Please enter issue number or start date for switch/solo card type.",function(o,g){var b;if(g.id.match(/(.)+_cc_issue$/)){b=g.id.indexOf("_cc_issue")}else{if(g.id.match(/(.)+_start_month$/)){b=g.id.indexOf("_start_month")}else{b=g.id.indexOf("_start_year")}}var f=g.id.substr(0,b);var d=$(f+"_cc_type");if(!d){return true}var n=d.value;if(["SS","SM","SO"].indexOf(n)==-1){return true}$(f+"_cc_issue").advaiceContainer=$(f+"_start_month").advaiceContainer=$(f+"_start_year").advaiceContainer=$(f+"_cc_type_ss_div").down(".adv-container");var h=$(f+"_cc_issue").value;var l=$(f+"_start_month").value;var p=$(f+"_start_year").value;var e=(l&&p)?true:false;if(!e&&!h){return false}return true}]]);function removeDelimiters(b){b=b.replace(/\s/g,"");b=b.replace(/\-/g,"");return b}function parseNumber(b){if(typeof b!="string"){return parseFloat(b)}var e=b.indexOf(".");var d=b.indexOf(",");if(e!=-1&&d!=-1){if(d>e){b=b.replace(".","").replace(",",".")}else{b=b.replace(",","")}}else{if(d!=-1){b=b.replace(",",".")}}return parseFloat(b)}Validation.creditCartTypes=$H({SO:[new RegExp("^(6334[5-9]([0-9]{11}|[0-9]{13,14}))|(6767([0-9]{12}|[0-9]{14,15}))$"),new RegExp("^([0-9]{3}|[0-9]{4})?$"),true],SM:[new RegExp("(^(5[0678])[0-9]{11,18}$)|(^(6[^05])[0-9]{11,18}$)|(^(601)[^1][0-9]{9,16}$)|(^(6011)[0-9]{9,11}$)|(^(6011)[0-9]{13,16}$)|(^(65)[0-9]{11,13}$)|(^(65)[0-9]{15,18}$)|(^(49030)[2-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49033)[5-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49110)[1-2]([0-9]{10}$|[0-9]{12,13}$))|(^(49117)[4-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49118)[0-2]([0-9]{10}$|[0-9]{12,13}$))|(^(4936)([0-9]{12}$|[0-9]{14,15}$))"),new RegExp("^([0-9]{3}|[0-9]{4})?$"),true],VI:[new RegExp("^4[0-9]{12}([0-9]{3})?$"),new RegExp("^[0-9]{3}$"),true],MC:[new RegExp("^5[1-5][0-9]{14}$"),new RegExp("^[0-9]{3}$"),true],AE:[new RegExp("^3[47][0-9]{13}$"),new RegExp("^[0-9]{4}$"),true],DI:[new RegExp("^6(011|4[4-9][0-9]|5[0-9]{2})[0-9]{12}$"),new RegExp("^[0-9]{3}$"),true],JCB:[new RegExp("^(3[0-9]{15}|(2131|1800)[0-9]{11})$"),new RegExp("^[0-9]{3,4}$"),true],OT:[false,new RegExp("^([0-9]{3}|[0-9]{4})?$"),false]});function popWin(d,e,b){var e=window.open(d,e,b);e.focus()}function setLocation(b){window.location.href=b}function setPLocation(d,b){if(b){window.opener.focus()}window.opener.location.href=d}function setLanguageCode(e,f){var b=window.location.href;var h="",g;if(g=b.match(/\#(.*)$/)){b=b.replace(/\#(.*)$/,"");h=g[0]}if(b.match(/[?]/)){var d=/([?&]store=)[a-z0-9_]*/;if(b.match(d)){b=b.replace(d,"$1"+e)}else{b+="&store="+e}var d=/([?&]from_store=)[a-z0-9_]*/;if(b.match(d)){b=b.replace(d,"")}}else{b+="?store="+e}if(typeof(f)!="undefined"){b+="&from_store="+f}b+=h;setLocation(b)}function decorateGeneric(h,e){var l=["odd","even","first","last"];var d={};var g=h.length;if(g){if(typeof(e)=="undefined"){e=l}if(!e.length){return}for(var b in l){d[l[b]]=false}for(var b in e){d[e[b]]=true}if(d.first){Element.addClassName(h[0],"first")}if(d.last){Element.addClassName(h[g-1],"last")}for(var f=0;f<g;f++){if((f+1)%2==0){if(d.even){Element.addClassName(h[f],"even")}}else{if(d.odd){Element.addClassName(h[f],"odd")}}}}}function decorateTable(h,e){var h=$(h);if(h){var b={tbody:false,"tbody tr":["odd","even","first","last"],"thead tr":["first","last"],"tfoot tr":["first","last"],"tr td":["last"]};if(typeof(e)!="undefined"){for(var d in e){b[d]=e[d]}}if(b.tbody){decorateGeneric(h.select("tbody"),b.tbody)}if(b["tbody tr"]){decorateGeneric(h.select("tbody tr"),b["tbody tr"])}if(b["thead tr"]){decorateGeneric(h.select("thead tr"),b["thead tr"])}if(b["tfoot tr"]){decorateGeneric(h.select("tfoot tr"),b["tfoot tr"])}if(b["tr td"]){var g=h.select("tr");if(g.length){for(var f=0;f<g.length;f++){decorateGeneric(g[f].getElementsByTagName("TD"),b["tr td"])}}}}}function decorateList(e,d){if($(e)){if(typeof(d)=="undefined"){var b=$(e).select("li")}else{var b=$(e).childElements()}decorateGeneric(b,["odd","even","last"])}}function decorateDataList(b){b=$(b);if(b){decorateGeneric(b.select("dt"),["odd","even","last"]);decorateGeneric(b.select("dd"),["odd","even","last"])}}function parseSidUrl(f,e){var d=f.indexOf("/?SID=");var b="";e=(e!=undefined)?e:"";if(d>-1){b="?"+f.substring(d+2);f=f.substring(0,d+1)}return f+e+b}function formatCurrency(n,q,g){var l=isNaN(q.precision=Math.abs(q.precision))?2:q.precision;var v=isNaN(q.requiredPrecision=Math.abs(q.requiredPrecision))?2:q.requiredPrecision;l=v;var t=isNaN(q.integerRequired=Math.abs(q.integerRequired))?1:q.integerRequired;var p=q.decimalSymbol==undefined?",":q.decimalSymbol;var e=q.groupSymbol==undefined?".":q.groupSymbol;var d=q.groupLength==undefined?3:q.groupLength;var u="";if(g==undefined||g==true){u=n<0?"-":(g?"+":"")}else{if(g==false){u=""}}var h=parseInt(n=Math.abs(+n||0).toFixed(l))+"";var f=(h.length<t)?(t-h.length):0;while(f){h="0"+h;f--}j=(j=h.length)>d?j%d:0;re=new RegExp("(\\d{"+d+"})(?=\\d)","g");var b=(j?h.substr(0,j)+e:"")+h.substr(j).replace(re,"$1"+e)+(l?p+Math.abs(n-h).toFixed(l).replace(/-/,0).slice(2):"");var o="";if(q.pattern.indexOf("{sign}")==-1){o=u+q.pattern}else{o=q.pattern.replace("{sign}",u)}return o.replace("%s",b).replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function expandDetails(d,b){if(Element.hasClassName(d,"show-details")){$$(b).each(function(e){e.hide()});Element.removeClassName(d,"show-details")}else{$$(b).each(function(e){e.show()});Element.addClassName(d,"show-details")}}var isIE=navigator.appVersion.match(/MSIE/)=="MSIE";if(!window.Varien){var Varien=new Object()}Varien.showLoading=function(){var b=$("loading-process");b&&b.show()};Varien.hideLoading=function(){var b=$("loading-process");b&&b.hide()};Varien.GlobalHandlers={onCreate:function(){Varien.showLoading()},onComplete:function(){if(Ajax.activeRequestCount==0){Varien.hideLoading()}}};Ajax.Responders.register(Varien.GlobalHandlers);Varien.searchForm=Class.create();Varien.searchForm.prototype={initialize:function(d,e,b){this.form=$(d);this.field=$(e);this.emptyText=b;Event.observe(this.form,"submit",this.submit.bind(this));Event.observe(this.field,"focus",this.focus.bind(this));Event.observe(this.field,"blur",this.blur.bind(this));this.blur()},submit:function(b){if(this.field.value==this.emptyText||this.field.value==""){Event.stop(b);return false}return true},focus:function(b){if(this.field.value==this.emptyText){this.field.value=""}},blur:function(b){if(this.field.value==""){this.field.value=this.emptyText}}};Varien.DateElement=Class.create();Varien.DateElement.prototype={initialize:function(b,d,f,e){if(b=="id"){this.day=$(d+"day");this.month=$(d+"month");this.year=$(d+"year");this.full=$(d+"full");this.advice=$(d+"date-advice")}else{if(b=="container"){this.day=d.day;this.month=d.month;this.year=d.year;this.full=d.full;this.advice=d.advice}else{return}}this.required=f;this.format=e;this.day.addClassName("validate-custom");this.day.validate=this.validate.bind(this);this.month.addClassName("validate-custom");this.month.validate=this.validate.bind(this);this.year.addClassName("validate-custom");this.year.validate=this.validate.bind(this);this.setDateRange(false,false);this.year.setAttribute("autocomplete","off");this.advice.hide()},validate:function(){var l=false,o=parseInt(this.day.value,10)||0,f=parseInt(this.month.value,10)||0,h=parseInt(this.year.value,10)||0;if(this.day.value.strip().empty()&&this.month.value.strip().empty()&&this.year.value.strip().empty()){if(this.required){l="Please enter a date."}else{this.full.value=""}}else{if(!o||!f||!h){l="Please enter a valid full date."}else{var d=new Date,n=0,e=null;d.setYear(h);d.setMonth(f-1);d.setDate(32);n=32-d.getDate();if(!n||n>31){n=31}if(o<1||o>n){e="day";l="Please enter a valid day (1-%1)."}else{if(f<1||f>12){e="month";l="Please enter a valid month (1-12)."}else{if(o%10==o){this.day.value="0"+o}if(f%10==f){this.month.value="0"+f}this.full.value=this.format.replace(/%[mb]/i,this.month.value).replace(/%[de]/i,this.day.value).replace(/%y/i,this.year.value);var b=this.month.value+"/"+this.day.value+"/"+this.year.value;var g=new Date(b);if(isNaN(g)){l="Please enter a valid date."}else{this.setFullDate(g)}}}var p=false;if(!l&&!this.validateData()){e=this.validateDataErrorType;p=this.validateDataErrorText;l=p}}}if(l!==false){if(jQuery.mage.__){l=jQuery.mage.__(l)}if(!p){this.advice.innerHTML=l.replace("%1",n)}else{this.advice.innerHTML=this.errorTextModifier(l)}this.advice.show();return false}this.day.removeClassName("validation-failed");this.month.removeClassName("validation-failed");this.year.removeClassName("validation-failed");this.advice.hide();return true},validateData:function(){var d=this.fullDate.getFullYear();var b=new Date;this.curyear=b.getFullYear();return(d>=1900&&d<=this.curyear)},validateDataErrorType:"year",validateDataErrorText:"Please enter a valid year (1900-%1).",errorTextModifier:function(b){return b.replace("%1",this.curyear)},setDateRange:function(b,d){this.minDate=b;this.maxDate=d},setFullDate:function(b){this.fullDate=b}};Varien.DOB=Class.create();Varien.DOB.prototype={initialize:function(b,g,f){var e=$$(b)[0];var d={};d.day=Element.select(e,".dob-day input")[0];d.month=Element.select(e,".dob-month input")[0];d.year=Element.select(e,".dob-year input")[0];d.full=Element.select(e,".dob-full input")[0];d.advice=Element.select(e,".validation-advice")[0];new Varien.DateElement("container",d,g,f)}};Varien.dateRangeDate=Class.create();Varien.dateRangeDate.prototype=Object.extend(new Varien.DateElement(),{validateData:function(){var b=true;if(this.minDate||this.maxValue){if(this.minDate){this.minDate=new Date(this.minDate);this.minDate.setHours(0);if(isNaN(this.minDate)){this.minDate=new Date("1/1/1900")}b=b&&(this.fullDate>=this.minDate)}if(this.maxDate){this.maxDate=new Date(this.maxDate);this.minDate.setHours(0);if(isNaN(this.maxDate)){this.maxDate=new Date()}b=b&&(this.fullDate<=this.maxDate)}if(this.maxDate&&this.minDate){this.validateDataErrorText="Please enter a valid date between %s and %s"}else{if(this.maxDate){this.validateDataErrorText="Please enter a valid date less than or equal to %s"}else{if(this.minDate){this.validateDataErrorText="Please enter a valid date equal to or greater than %s"}else{this.validateDataErrorText=""}}}}return b},validateDataErrorText:"Date should be between %s and %s",errorTextModifier:function(b){if(this.minDate){b=b.sub("%s",this.dateFormat(this.minDate))}if(this.maxDate){b=b.sub("%s",this.dateFormat(this.maxDate))}return b},dateFormat:function(b){return(b.getMonth()+1)+"/"+b.getDate()+"/"+b.getFullYear()}});Varien.FileElement=Class.create();Varien.FileElement.prototype={initialize:function(b){this.fileElement=$(b);this.hiddenElement=$(b+"_value");this.fileElement.observe("change",this.selectFile.bind(this))},selectFile:function(b){this.hiddenElement.value=this.fileElement.getValue()}};Validation.addAllThese([["validate-custom"," ",function(b,d){return d.validate()}]]);Element.addMethods({getInnerText:function(b){b=$(b);if(b.innerText&&!Prototype.Browser.Opera){return b.innerText}return b.innerHTML.stripScripts().unescapeHTML().replace(/[\n\r\s]+/g," ").strip()}});function fireEvent(d,e){if(document.createEvent){var b=document.createEvent("HTMLEvents");b.initEvent(e,true,true);return d.dispatchEvent(b)}else{var b=document.createEventObject();return d.fireEvent("on"+e,b)}}function modulo(b,f){var e=f/10000;var d=b%f;if(Math.abs(d-f)<e||Math.abs(d)<e){d=0}return d}if((typeof Range!="undefined")&&!Range.prototype.createContextualFragment){Range.prototype.createContextualFragment=function(b){var e=document.createDocumentFragment(),d=document.createElement("div");e.appendChild(d);d.outerHTML=b;return e}}var byteConvert=function(b){if(isNaN(b)){return""}var d=["bytes","KB","MB","GB","TB","PB","EB","ZB","YB"];var f=Math.floor(Math.log(b)/Math.log(2));if(f<1){f=0}var e=Math.floor(f/10);b=b/Math.pow(2,10*e);if(b.toString().length>b.toFixed(2).toString().length){b=b.toFixed(2)}return b+" "+d[e]};var SessionError=Class.create();SessionError.prototype={initialize:function(b){this.errorText=b},toString:function(){return"Session Error:"+this.errorText}};Ajax.Request.addMethods({initialize:function($super,d,b){$super(b);this.transport=Ajax.getTransport();if(!d.match(new RegExp("[?&]isAjax=true",""))){d=d.match(new RegExp("\\?","g"))?d+"&isAjax=true":d+"?isAjax=true"}if(Object.isString(this.options.parameters)&&this.options.parameters.indexOf("form_key=")==-1){this.options.parameters+="&"+Object.toQueryString({form_key:FORM_KEY})}else{if(!this.options.parameters){this.options.parameters={form_key:FORM_KEY}}if(!this.options.parameters.form_key){this.options.parameters.form_key=FORM_KEY}}this.request(d)},respondToReadyState:function(b){var g=Ajax.Request.Events[b],d=new Ajax.Response(this);if(g=="Complete"){try{this._complete=true;if(d.responseText.isJSON()){var f=d.responseText.evalJSON();if(f.ajaxExpired&&f.ajaxRedirect){window.location.replace(f.ajaxRedirect);throw new SessionError("session expired")}}(this.options["on"+d.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(d,d.headerJSON)}catch(h){this.dispatchException(h);if(h instanceof SessionError){return}}var l=d.getHeader("Content-type");if(this.options.evalJS=="force"||(this.options.evalJS&&this.isSameOrigin()&&l&&l.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))){this.evalResponse()}}try{(this.options["on"+g]||Prototype.emptyFunction)(d,d.headerJSON);Ajax.Responders.dispatch("on"+g,this,d,d.headerJSON)}catch(h){this.dispatchException(h)}if(g=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}}});Ajax.Updater.respondToReadyState=Ajax.Request.respondToReadyState;var varienLoader=new Class.create();varienLoader.prototype={initialize:function(b){this.callback=false;this.cache=$H();this.caching=b||false;this.url=false},getCache:function(b){if(this.cache.get(b)){return this.cache.get(b)}return false},load:function(b,d,f){this.url=b;this.callback=f;if(this.caching){var e=this.getCache(b);if(e){this.processResult(e);return}}if(typeof(d.updaterId)!="undefined"){new varienUpdater(d.updaterId,b,{evalScripts:true,onComplete:this.processResult.bind(this),onFailure:this._processFailure.bind(this)})}else{new Ajax.Request(b,{method:"post",parameters:d||{},onComplete:this.processResult.bind(this),onFailure:this._processFailure.bind(this)})}},_processFailure:function(b){location.href=BASE_URL},processResult:function(b){if(this.caching){this.cache.set(this.url,b)}if(this.callback){this.callback(b.responseText)}}};if(!window.varienLoaderHandler){var varienLoaderHandler=new Object()}varienLoaderHandler.handler={onCreate:function(b){if(b.options.loaderArea===false){return}jQuery("body").trigger("processStart")},onException:function(b){jQuery("body").trigger("processStop")},onComplete:function(b){jQuery("body").trigger("processStop")}};function setLoaderPosition(){var e=$("loading_mask_loader");if(e&&Prototype.Browser.IE){var d=e.getDimensions();var f=document.viewport.getDimensions();var b=document.viewport.getScrollOffsets();e.style.left=Math.floor(f.width/2+b.left-d.width/2)+"px";e.style.top=Math.floor(f.height/2+b.top-d.height/2)+"px";e.style.position="absolute"}}function toggleSelectsUnderBlock(f,b){if(Prototype.Browser.IE){var e=document.getElementsByTagName("select");for(var d=0;d<e.length;d++){if(b){if(e[d].needShowOnSuccess){e[d].needShowOnSuccess=false;e[d].style.visibility=""}}else{if(Element.visible(e[d])){e[d].style.visibility="hidden";e[d].needShowOnSuccess=true}}}}}Ajax.Responders.register(varienLoaderHandler.handler);var varienUpdater=Class.create(Ajax.Updater,{updateContent:function($super,b){if(b.isJSON()){var d=b.evalJSON();if(d.ajaxExpired&&d.ajaxRedirect){window.location.replace(d.ajaxRedirect)}}else{$super(b)}}});function setLocation(b){window.location.href=b}function confirmSetLocation(d,b){if(confirm(d)){setLocation(b)}return false}function deleteConfirm(d,b){confirmSetLocation(d,b)}function setElementDisable(d,b){if($(d)){$(d).disabled=b}}function toggleParentVis(b){b=$(b).parentNode;if(b.style.display=="none"){b.style.display=""}else{b.style.display="none"}}function toggleFieldsetVis(d){id=d;d=$(d);if(d.style.display=="none"){d.style.display=""}else{d.style.display="none"}d=d.parentNode.childElements();for(var b=0;b<d.length;b++){if(d[b].id!=undefined&&d[b].id==id&&d[(b-1)].classNames()=="entry-edit-head"){if(d[b-1].style.display=="none"){d[b-1].style.display=""}else{d[b-1].style.display="none"}}}}function toggleVis(b){b=$(b);if(b.style.display=="none"){b.style.display=""}else{b.style.display="none"}}function imagePreview(b){if($(b)){var d=window.open("","preview","width=400,height=400,resizable=1,scrollbars=1");d.document.open();d.document.write('<body style="padding:0;margin:0"><img src="'+$(b).src+'" id="image_preview"/></body>');d.document.close();Event.observe(d,"load",function(){var e=d.document.getElementById("image_preview");d.resizeTo(e.width+40,e.height+80)})}}function checkByProductPriceType(b){if(b.id=="price_type"){this.productPriceType=b.value;return false}else{if(b.id=="price"&&this.productPriceType==0){return false}return true}}Event.observe(window,"load",function(){if($("price_default")&&$("price_default").checked){$("price").disabled="disabled"}});function toggleSeveralValueElements(f,e,b,d){if(e&&f){if(Object.prototype.toString.call(e)!="[object Array]"){e=[e]}e.each(function(g){toggleValueElements(f,g,b,d)})}}function toggleValueElements(l,d,f,h){if(d&&l){var n=[l];if(typeof f!="undefined"){if(Object.prototype.toString.call(f)!="[object Array]"){f=[f]}for(var g=0;g<f.length;g++){n.push(f[g])}}var e=Element.select(d,["select","input","textarea","button","img"]).filter(function(o){return(o.readAttribute("type")!="hidden")});var b=(h!=undefined?h:l.checked);e.each(function(p){if(checkByProductPriceType(p)){var o=n.length;while(o--&&p!=n[o]){}if(o!=-1){return}p.disabled=b;if(b){p.addClassName("disabled")}else{p.removeClassName("disabled")}if(p.nodeName.toLowerCase()=="img"){b?p.hide():p.show()}}})}}function submitAndReloadArea(e,d){if($(e)){var b=$(e).select("input","select","textarea");var f=Form.serializeElements(b,true);d=d+(d.match(new RegExp("\\?"))?"&isAjax=true":"?isAjax=true");new Ajax.Request(d,{parameters:$H(f),loaderArea:e,onSuccess:function(l){try{if(l.responseText.isJSON()){var g=l.responseText.evalJSON();if(g.error){alert(g.message)}if(g.ajaxExpired&&g.ajaxRedirect){setLocation(g.ajaxRedirect)}}else{$(e).update(l.responseText)}}catch(h){$(e).update(l.responseText)}}})}}function syncOnchangeValue(d,e){var b={baseElem:d,distElem:e};Event.observe(d,"change",function(){if($(this.baseElem)&&$(this.distElem)){$(this.distElem).value=$(this.baseElem).value}}.bind(b))}function updateElementAtCursor(e,f,g){if(g==undefined){g=window.self}if(document.selection){e.focus();sel=g.document.selection.createRange();sel.text=f}else{if(e.selectionStart||e.selectionStart=="0"){var d=e.selectionStart;var b=e.selectionEnd;e.value=e.value.substring(0,d)+f+e.value.substring(b,e.value.length)}else{e.value+=f}}}function firebugEnabled(){if(window.console&&window.console.firebug){return true}return false}function disableElement(b){b.disabled=true;b.addClassName("disabled")}function enableElement(b){b.disabled=false;b.removeClassName("disabled")}function disableElements(b){$$("."+b).each(disableElement)}function enableElements(b){$$("."+b).each(enableElement)}var Cookie={all:function(){var d=document.cookie.split(";");var b={};d.each(function(f,e){var g=f.strip().split("=");b[unescape(g[0])]=unescape(g[1])});return b},read:function(d){var b=this.all();if(b[d]){return b[d]}return null},write:function(h,f,g){var b="";if(g){var e=new Date();e.setTime(e.getTime()+(g*1000));b="; expires="+e.toGMTString()}var d="/"+BASE_URL.split("/").slice(3).join("/");document.cookie=escape(h)+"="+escape(f)+b+"; path="+d},clear:function(b){this.write(b,"",-1)}};var Fieldset={cookiePrefix:"fh-",applyCollapse:function(b){if($(b+"-state")){collapsed=$(b+"-state").value==1?0:1}else{collapsed=$(b+"-head").collapsed}if(collapsed==1||collapsed===undefined){$(b+"-head").removeClassName("open");if($(b+"-head").up(".section-config")){$(b+"-head").up(".section-config").removeClassName("active")}$(b).hide()}else{$(b+"-head").addClassName("open");if($(b+"-head").up(".section-config")){$(b+"-head").up(".section-config").addClassName("active")}$(b).show()}},toggleCollapse:function(b,d){if($(b+"-state")){collapsed=$(b+"-state").value==1?0:1}else{collapsed=$(b+"-head").collapsed}if(collapsed==1||collapsed===undefined){if($(b+"-state")){$(b+"-state").value=1}$(b+"-head").collapsed=0}else{if($(b+"-state")){$(b+"-state").value=0}$(b+"-head").collapsed=1}this.applyCollapse(b);if(typeof d!="undefined"){this.saveState(d,{container:b,value:$(b+"-state").value})}},addToPrefix:function(b){this.cookiePrefix+=b+"-"},saveState:function(b,d){new Ajax.Request(b,{method:"get",parameters:Object.toQueryString(d),loaderArea:false})}};var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var b="";var p,n,h,o,l,g,f;var d=0;if(typeof window.btoa==="function"){return window.btoa(e)}e=Base64._utf8_encode(e);while(d<e.length){p=e.charCodeAt(d++);n=e.charCodeAt(d++);h=e.charCodeAt(d++);o=p>>2;l=((p&3)<<4)|(n>>4);g=((n&15)<<2)|(h>>6);f=h&63;if(isNaN(n)){g=f=64}else{if(isNaN(h)){f=64}}b=b+this._keyStr.charAt(o)+this._keyStr.charAt(l)+this._keyStr.charAt(g)+this._keyStr.charAt(f)}return b},decode:function(e){var b="";var p,n,h;var o,l,g,f;var d=0;if(typeof window.atob==="function"){return window.atob(e)}e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(d<e.length){o=this._keyStr.indexOf(e.charAt(d++));l=this._keyStr.indexOf(e.charAt(d++));g=this._keyStr.indexOf(e.charAt(d++));f=this._keyStr.indexOf(e.charAt(d++));p=(o<<2)|(l>>4);n=((l&15)<<4)|(g>>2);h=((g&3)<<6)|f;b=b+String.fromCharCode(p);if(g!=64){b=b+String.fromCharCode(n)}if(f!=64){b=b+String.fromCharCode(h)}}b=Base64._utf8_decode(b);return b},mageEncode:function(b){return this.encode(b).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,",")},mageDecode:function(b){b=b.replace(/\-/g,"+").replace(/_/g,"/").replace(/,/g,"=");return this.decode(b)},idEncode:function(b){return this.encode(b).replace(/\+/g,":").replace(/\//g,"_").replace(/=/g,"-")},idDecode:function(b){b=b.replace(/\-/g,"=").replace(/_/g,"/").replace(/\:/g,"+");return this.decode(b)},_utf8_encode:function(d){d=d.replace(/\r\n/g,"\n");var b="";for(var f=0;f<d.length;f++){var e=d.charCodeAt(f);if(e<128){b+=String.fromCharCode(e)}else{if((e>127)&&(e<2048)){b+=String.fromCharCode((e>>6)|192);b+=String.fromCharCode((e&63)|128)}else{b+=String.fromCharCode((e>>12)|224);b+=String.fromCharCode(((e>>6)&63)|128);b+=String.fromCharCode((e&63)|128)}}}return b},_utf8_decode:function(b){var d="";var e=0;var f=c1=c2=0;while(e<b.length){f=b.charCodeAt(e);if(f<128){d+=String.fromCharCode(f);e++}else{if((f>191)&&(f<224)){c2=b.charCodeAt(e+1);d+=String.fromCharCode(((f&31)<<6)|(c2&63));e+=2}else{c2=b.charCodeAt(e+1);c3=b.charCodeAt(e+2);d+=String.fromCharCode(((f&15)<<12)|((c2&63)<<6)|(c3&63));e+=3}}}return d}};function sortNumeric(d,b){return d-b}(function(){var globals=["Prototype","Abstract","Try","Class","PeriodicalExecuter","Template","$break","Enumerable","$A","$w","$H","Hash","$R","ObjectRange","Ajax","$","Form","Field","$F","Toggle","Insertion","$continue","Position","Windows","Dialog","array","WindowUtilities","Builder","Effect","validateCreditCard","Validator","Validation","removeDelimiters","parseNumber","popWin","setLocation","setPLocation","setLanguageCode","decorateGeneric","decorateTable","decorateList","decorateDataList","parseSidUrl","formatCurrency","expandDetails","isIE","Varien","fireEvent","modulo","byteConvert","SessionError","varienLoader","varienLoaderHandler","setLoaderPosition","toggleSelectsUnderBlock","varienUpdater","confirmSetLocation","deleteConfirm","setElementDisable","toggleParentVis","toggleFieldsetVis","toggleVis","imagePreview","checkByProductPriceType","toggleSeveralValueElements","toggleValueElements","submitAndReloadArea","syncOnchangeValue","updateElementAtCursor","firebugEnabled","disableElement","enableElement","disableElements","enableElements","Cookie","Fieldset","Base64","sortNumeric","Element","$$","Sizzle","Selector","Window"];globals.forEach(function(prop){window[prop]=eval(prop)})})();
\ No newline at end of file
+(function(){var w=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,p=0,g=Object.prototype.toString,u=false,o=true;[0,0].sort(function(){o=false;return 0});var d=function(L,B,I,D){I=I||[];var e=B=B||document;if(B.nodeType!==1&&B.nodeType!==9){return[]}if(!L||typeof L!=="string"){return I}var J=[],K,G,P,O,H,A,z=true,E=v(B),N=L;while((w.exec(""),K=w.exec(N))!==null){N=K[3];J.push(K[1]);if(K[2]){A=K[3];break}}if(J.length>1&&q.exec(L)){if(J.length===2&&h.relative[J[0]]){G=l(J[0]+J[1],B)}else{G=h.relative[J[0]]?[B]:d(J.shift(),B);while(J.length){L=J.shift();if(h.relative[L]){L+=J.shift()}G=l(L,G)}}}else{if(!D&&J.length>1&&B.nodeType===9&&!E&&h.match.ID.test(J[0])&&!h.match.ID.test(J[J.length-1])){var Q=d.find(J.shift(),B,E);B=Q.expr?d.filter(Q.expr,Q.set)[0]:Q.set[0]}if(B){var Q=D?{expr:J.pop(),set:b(D)}:d.find(J.pop(),J.length===1&&(J[0]==="~"||J[0]==="+")&&B.parentNode?B.parentNode:B,E);G=Q.expr?d.filter(Q.expr,Q.set):Q.set;if(J.length>0){P=b(G)}else{z=false}while(J.length){var C=J.pop(),F=C;if(!h.relative[C]){C=""}else{F=J.pop()}if(F==null){F=B}h.relative[C](P,F,E)}}else{P=J=[]}}if(!P){P=G}if(!P){throw"Syntax error, unrecognized expression: "+(C||L)}if(g.call(P)==="[object Array]"){if(!z){I.push.apply(I,P)}else{if(B&&B.nodeType===1){for(var M=0;P[M]!=null;M++){if(P[M]&&(P[M]===true||P[M].nodeType===1&&n(B,P[M]))){I.push(G[M])}}}else{for(var M=0;P[M]!=null;M++){if(P[M]&&P[M].nodeType===1){I.push(G[M])}}}}}else{b(P,I)}if(A){d(A,e,I,D);d.uniqueSort(I)}return I};d.uniqueSort=function(z){if(f){u=o;z.sort(f);if(u){for(var e=1;e<z.length;e++){if(z[e]===z[e-1]){z.splice(e--,1)}}}}return z};d.matches=function(e,z){return d(e,null,null,z)};d.find=function(F,e,G){var E,C;if(!F){return[]}for(var B=0,A=h.order.length;B<A;B++){var D=h.order[B],C;if((C=h.leftMatch[D].exec(F))){var z=C[1];C.splice(1,1);if(z.substr(z.length-1)!=="\\"){C[1]=(C[1]||"").replace(/\\/g,"");E=h.find[D](C,e,G);if(E!=null){F=F.replace(h.match[D],"");break}}}}if(!E){E=e.getElementsByTagName("*")}return{set:E,expr:F}};d.filter=function(I,H,L,B){var A=I,N=[],F=H,D,e,E=H&&H[0]&&v(H[0]);while(I&&H.length){for(var G in h.filter){if((D=h.match[G].exec(I))!=null){var z=h.filter[G],M,K;e=false;if(F==N){N=[]}if(h.preFilter[G]){D=h.preFilter[G](D,F,L,N,B,E);if(!D){e=M=true}else{if(D===true){continue}}}if(D){for(var C=0;(K=F[C])!=null;C++){if(K){M=z(K,D,C,F);var J=B^!!M;if(L&&M!=null){if(J){e=true}else{F[C]=false}}else{if(J){N.push(K);e=true}}}}}if(M!==undefined){if(!L){F=N}I=I.replace(h.match[G],"");if(!e){return[]}break}}}if(I==A){if(e==null){throw"Syntax error, unrecognized expression: "+I}else{break}}A=I}return F};var h=d.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")}},relative:{"+":function(F,e,E){var C=typeof e==="string",G=C&&!/\W/.test(e),D=C&&!G;if(G&&!E){e=e.toUpperCase()}for(var B=0,A=F.length,z;B<A;B++){if((z=F[B])){while((z=z.previousSibling)&&z.nodeType!==1){}F[B]=D||z&&z.nodeName===e?z||false:z===e}}if(D){d.filter(e,F,true)}},">":function(E,z,F){var C=typeof z==="string";if(C&&!/\W/.test(z)){z=F?z:z.toUpperCase();for(var A=0,e=E.length;A<e;A++){var D=E[A];if(D){var B=D.parentNode;E[A]=B.nodeName===z?B:false}}}else{for(var A=0,e=E.length;A<e;A++){var D=E[A];if(D){E[A]=C?D.parentNode:D.parentNode===z}}if(C){d.filter(z,E,true)}}},"":function(B,z,D){var A=p++,e=y;if(!/\W/.test(z)){var C=z=D?z:z.toUpperCase();e=t}e("parentNode",z,A,B,C,D)},"~":function(B,z,D){var A=p++,e=y;if(typeof z==="string"&&!/\W/.test(z)){var C=z=D?z:z.toUpperCase();e=t}e("previousSibling",z,A,B,C,D)}},find:{ID:function(z,A,B){if(typeof A.getElementById!=="undefined"&&!B){var e=A.getElementById(z[1]);return e?[e]:[]}},NAME:function(A,D,E){if(typeof D.getElementsByName!=="undefined"){var z=[],C=D.getElementsByName(A[1]);for(var B=0,e=C.length;B<e;B++){if(C[B].getAttribute("name")===A[1]){z.push(C[B])}}return z.length===0?null:z}},TAG:function(e,z){return z.getElementsByTagName(e[1])}},preFilter:{CLASS:function(B,z,A,e,E,F){B=" "+B[1].replace(/\\/g,"")+" ";if(F){return B}for(var C=0,D;(D=z[C])!=null;C++){if(D){if(E^(D.className&&(" "+D.className+" ").indexOf(B)>=0)){if(!A){e.push(D)}}else{if(A){z[C]=false}}}}return false},ID:function(e){return e[1].replace(/\\/g,"")},TAG:function(z,e){for(var A=0;e[A]===false;A++){}return e[A]&&v(e[A])?z[1]:z[1].toUpperCase()},CHILD:function(e){if(e[1]=="nth"){var z=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(e[2]=="even"&&"2n"||e[2]=="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(z[1]+(z[2]||1))-0;e[3]=z[3]-0}e[0]=p++;return e},ATTR:function(C,z,A,e,D,E){var B=C[1].replace(/\\/g,"");if(!E&&h.attrMap[B]){C[1]=h.attrMap[B]}if(C[2]==="~="){C[4]=" "+C[4]+" "}return C},PSEUDO:function(C,z,A,e,D){if(C[1]==="not"){if((w.exec(C[3])||"").length>1||/^\w/.test(C[3])){C[3]=d(C[3],null,null,z)}else{var B=d.filter(C[3],z,A,true^D);if(!A){e.push.apply(e,B)}return false}}else{if(h.match.POS.test(C[0])||h.match.CHILD.test(C[0])){return true}}return C},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){e.parentNode.selectedIndex;return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(A,z,e){return !!d(e[3],A).length},header:function(e){return/h\d/i.test(e.nodeName)},text:function(e){return"text"===e.type},radio:function(e){return"radio"===e.type},checkbox:function(e){return"checkbox"===e.type},file:function(e){return"file"===e.type},password:function(e){return"password"===e.type},submit:function(e){return"submit"===e.type},image:function(e){return"image"===e.type},reset:function(e){return"reset"===e.type},button:function(e){return"button"===e.type||e.nodeName.toUpperCase()==="BUTTON"},input:function(e){return/input|select|textarea|button/i.test(e.nodeName)}},setFilters:{first:function(z,e){return e===0},last:function(A,z,e,B){return z===B.length-1},even:function(z,e){return e%2===0},odd:function(z,e){return e%2===1},lt:function(A,z,e){return z<e[3]-0},gt:function(A,z,e){return z>e[3]-0},nth:function(A,z,e){return e[3]-0==z},eq:function(A,z,e){return e[3]-0==z}},filter:{PSEUDO:function(E,A,B,F){var z=A[1],C=h.filters[z];if(C){return C(E,B,A,F)}else{if(z==="contains"){return(E.textContent||E.innerText||"").indexOf(A[3])>=0}else{if(z==="not"){var D=A[3];for(var B=0,e=D.length;B<e;B++){if(D[B]===E){return false}}return true}}}},CHILD:function(e,B){var E=B[1],z=e;switch(E){case"only":case"first":while((z=z.previousSibling)){if(z.nodeType===1){return false}}if(E=="first"){return true}z=e;case"last":while((z=z.nextSibling)){if(z.nodeType===1){return false}}return true;case"nth":var A=B[2],H=B[3];if(A==1&&H==0){return true}var D=B[0],G=e.parentNode;if(G&&(G.sizcache!==D||!e.nodeIndex)){var C=0;for(z=G.firstChild;z;z=z.nextSibling){if(z.nodeType===1){z.nodeIndex=++C}}G.sizcache=D}var F=e.nodeIndex-H;if(A==0){return F==0}else{return(F%A==0&&F/A>=0)}}},ID:function(z,e){return z.nodeType===1&&z.getAttribute("id")===e},TAG:function(z,e){return(e==="*"&&z.nodeType===1)||z.nodeName===e},CLASS:function(z,e){return(" "+(z.className||z.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(D,B){var A=B[1],e=h.attrHandle[A]?h.attrHandle[A](D):D[A]!=null?D[A]:D.getAttribute(A),E=e+"",C=B[2],z=B[4];return e==null?C==="!=":C==="="?E===z:C==="*="?E.indexOf(z)>=0:C==="~="?(" "+E+" ").indexOf(z)>=0:!z?E&&e!==false:C==="!="?E!=z:C==="^="?E.indexOf(z)===0:C==="$="?E.substr(E.length-z.length)===z:C==="|="?E===z||E.substr(0,z.length+1)===z+"-":false},POS:function(C,z,A,D){var e=z[2],B=h.setFilters[e];if(B){return B(C,A,z,D)}}}};var q=h.match.POS;for(var s in h.match){h.match[s]=new RegExp(h.match[s].source+/(?![^\[]*\])(?![^\(]*\))/.source);h.leftMatch[s]=new RegExp(/(^(?:.|\r|\n)*?)/.source+h.match[s].source)}var b=function(z,e){z=Array.prototype.slice.call(z,0);if(e){e.push.apply(e,z);return e}return z};try{Array.prototype.slice.call(document.documentElement.childNodes,0)}catch(r){b=function(C,B){var z=B||[];if(g.call(C)==="[object Array]"){Array.prototype.push.apply(z,C)}else{if(typeof C.length==="number"){for(var A=0,e=C.length;A<e;A++){z.push(C[A])}}else{for(var A=0;C[A];A++){z.push(C[A])}}}return z}}var f;if(document.documentElement.compareDocumentPosition){f=function(z,e){if(!z.compareDocumentPosition||!e.compareDocumentPosition){if(z==e){u=true}return 0}var A=z.compareDocumentPosition(e)&4?-1:z===e?0:1;if(A===0){u=true}return A}}else{if("sourceIndex" in document.documentElement){f=function(z,e){if(!z.sourceIndex||!e.sourceIndex){if(z==e){u=true}return 0}var A=z.sourceIndex-e.sourceIndex;if(A===0){u=true}return A}}else{if(document.createRange){f=function(B,z){if(!B.ownerDocument||!z.ownerDocument){if(B==z){u=true}return 0}var A=B.ownerDocument.createRange(),e=z.ownerDocument.createRange();A.setStart(B,0);A.setEnd(B,0);e.setStart(z,0);e.setEnd(z,0);var C=A.compareBoundaryPoints(Range.START_TO_END,e);if(C===0){u=true}return C}}}}(function(){var z=document.createElement("div"),A="script"+(new Date).getTime();z.innerHTML="<a name='"+A+"'/>";var e=document.documentElement;e.insertBefore(z,e.firstChild);if(!!document.getElementById(A)){h.find.ID=function(C,D,E){if(typeof D.getElementById!=="undefined"&&!E){var B=D.getElementById(C[1]);return B?B.id===C[1]||typeof B.getAttributeNode!=="undefined"&&B.getAttributeNode("id").nodeValue===C[1]?[B]:undefined:[]}};h.filter.ID=function(D,B){var C=typeof D.getAttributeNode!=="undefined"&&D.getAttributeNode("id");return D.nodeType===1&&C&&C.nodeValue===B}}e.removeChild(z);e=z=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){h.find.TAG=function(z,D){var C=D.getElementsByTagName(z[1]);if(z[1]==="*"){var B=[];for(var A=0;C[A];A++){if(C[A].nodeType===1){B.push(C[A])}}C=B}return C}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){h.attrHandle.href=function(z){return z.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=d,A=document.createElement("div");A.innerHTML="<p class='TEST'></p>";if(A.querySelectorAll&&A.querySelectorAll(".TEST").length===0){return}d=function(E,D,B,C){D=D||document;if(!C&&D.nodeType===9&&!v(D)){try{return b(D.querySelectorAll(E),B)}catch(F){}}return e(E,D,B,C)};for(var z in e){d[z]=e[z]}A=null})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var e=document.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}h.order.splice(1,0,"CLASS");h.find.CLASS=function(z,A,B){if(typeof A.getElementsByClassName!=="undefined"&&!B){return A.getElementsByClassName(z[1])}};e=null})()}function t(z,E,D,I,F,H){var G=z=="previousSibling"&&!H;for(var B=0,A=I.length;B<A;B++){var e=I[B];if(e){if(G&&e.nodeType===1){e.sizcache=D;e.sizset=B}e=e[z];var C=false;while(e){if(e.sizcache===D){C=I[e.sizset];break}if(e.nodeType===1&&!H){e.sizcache=D;e.sizset=B}if(e.nodeName===E){C=e;break}e=e[z]}I[B]=C}}}function y(z,E,D,I,F,H){var G=z=="previousSibling"&&!H;for(var B=0,A=I.length;B<A;B++){var e=I[B];if(e){if(G&&e.nodeType===1){e.sizcache=D;e.sizset=B}e=e[z];var C=false;while(e){if(e.sizcache===D){C=I[e.sizset];break}if(e.nodeType===1){if(!H){e.sizcache=D;e.sizset=B}if(typeof E!=="string"){if(e===E){C=true;break}}else{if(d.filter(E,[e]).length>0){C=e;break}}}e=e[z]}I[B]=C}}}var n=document.compareDocumentPosition?function(z,e){return z.compareDocumentPosition(e)&16}:function(z,e){return z!==e&&(z.contains?z.contains(e):true)};var v=function(e){return e.nodeType===9&&e.documentElement.nodeName!=="HTML"||!!e.ownerDocument&&e.ownerDocument.documentElement.nodeName!=="HTML"};var l=function(e,F){var B=[],C="",D,A=F.nodeType?[F]:F;while((D=h.match.PSEUDO.exec(e))){C+=D[0];e=e.replace(h.match.PSEUDO,"")}e=h.relative[e]?e+"*":e;for(var E=0,z=A.length;E<z;E++){d(e,A[E],B)}return d.filter(C,B)};window.Sizzle=d})();(function(e){var f=Prototype.Selector.extendElements;function b(g,h){return f(e(g,h||document))}function d(h,g){return e.matches(g,[h]).length==1}Prototype.Selector.engine=e;Prototype.Selector.select=b;Prototype.Selector.match=d})(Sizzle);window.Sizzle=Prototype._original_property;delete Prototype._original_property;var Form={reset:function(b){b=$(b);b.reset();return b},serializeElements:function(n,f){if(typeof f!="object"){f={hash:!!f}}else{if(Object.isUndefined(f.hash)){f.hash=true}}var g,l,b=false,h=f.submit,d,e;if(f.hash){e={};d=function(o,p,q){if(p in o){if(!Object.isArray(o[p])){o[p]=[o[p]]}o[p].push(q)}else{o[p]=q}return o}}else{e="";d=function(o,p,q){return o+(o?"&":"")+encodeURIComponent(p)+"="+encodeURIComponent(q)}}return n.inject(e,function(o,p){if(!p.disabled&&p.name){g=p.name;l=$(p).getValue();if(l!=null&&p.type!="file"&&(p.type!="submit"||(!b&&h!==false&&(!h||g==h)&&(b=true)))){o=d(o,g,l)}}return o})}};Form.Methods={serialize:function(d,b){return Form.serializeElements(Form.getElements(d),b)},getElements:function(g){var h=$(g).getElementsByTagName("*"),f,b=[],e=Form.Element.Serializers;for(var d=0;f=h[d];d++){b.push(f)}return b.inject([],function(l,n){if(e[n.tagName.toLowerCase()]){l.push(Element.extend(n))}return l})},getInputs:function(l,e,f){l=$(l);var b=l.getElementsByTagName("input");if(!e&&!f){return $A(b).map(Element.extend)}for(var g=0,n=[],h=b.length;g<h;g++){var d=b[g];if((e&&d.type!=e)||(f&&d.name!=f)){continue}n.push(Element.extend(d))}return n},disable:function(b){b=$(b);Form.getElements(b).invoke("disable");return b},enable:function(b){b=$(b);Form.getElements(b).invoke("enable");return b},findFirstElement:function(d){var e=$(d).getElements().findAll(function(f){return"hidden"!=f.type&&!f.disabled});var b=e.findAll(function(f){return f.hasAttribute("tabIndex")&&f.tabIndex>=0}).sortBy(function(f){return f.tabIndex}).first();return b?b:e.find(function(f){return/^(?:input|select|textarea)$/i.test(f.tagName)})},focusFirstElement:function(d){d=$(d);var b=d.findFirstElement();if(b){b.activate()}return d},request:function(d,b){d=$(d),b=Object.clone(b||{});var f=b.parameters,e=d.readAttribute("action")||"";if(e.blank()){e=window.location.href}b.parameters=d.serialize(true);if(f){if(Object.isString(f)){f=f.toQueryParams()}Object.extend(b.parameters,f)}if(d.hasAttribute("method")&&!b.method){b.method=d.method}return new Ajax.Request(e,b)}};Form.Element={focus:function(b){$(b).focus();return b},select:function(b){$(b).select();return b}};Form.Element.Methods={serialize:function(b){b=$(b);if(!b.disabled&&b.name){var d=b.getValue();if(d!=undefined){var e={};e[b.name]=d;return Object.toQueryString(e)}}return""},getValue:function(b){b=$(b);var d=b.tagName.toLowerCase();return Form.Element.Serializers[d](b)},setValue:function(b,d){b=$(b);var e=b.tagName.toLowerCase();Form.Element.Serializers[e](b,d);return b},clear:function(b){$(b).value="";return b},present:function(b){return $(b).value!=""},activate:function(b){b=$(b);try{b.focus();if(b.select&&(b.tagName.toLowerCase()!="input"||!(/^(?:button|reset|submit)$/i.test(b.type)))){b.select()}}catch(d){}return b},disable:function(b){b=$(b);b.disabled=true;return b},enable:function(b){b=$(b);b.disabled=false;return b}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers=(function(){function d(n,o){switch(n.type.toLowerCase()){case"checkbox":case"radio":return h(n,o);default:return g(n,o)}}function h(n,o){if(Object.isUndefined(o)){return n.checked?n.value:null}else{n.checked=!!o}}function g(n,o){if(Object.isUndefined(o)){return n.value}else{n.value=o}}function b(p,s){if(Object.isUndefined(s)){return(p.type==="select-one"?e:f)(p)}var o,q,t=!Object.isArray(s);for(var n=0,r=p.length;n<r;n++){o=p.options[n];q=this.optionValue(o);if(t){if(q==s){o.selected=true;return}}else{o.selected=s.include(q)}}}function e(o){var n=o.selectedIndex;return n>=0?l(o.options[n]):null}function f(q){var n,r=q.length;if(!r){return null}for(var p=0,n=[];p<r;p++){var o=q.options[p];if(o.selected){n.push(l(o))}}return n}function l(n){return Element.hasAttribute(n,"value")?n.value:n.text}return{input:d,inputSelector:h,textarea:g,select:b,selectOne:e,selectMany:f,optionValue:l,button:g}})();Abstract.TimedObserver=Class.create(PeriodicalExecuter,{initialize:function($super,b,d,e){$super(e,d);this.element=$(b);this.lastValue=this.getValue()},execute:function(){var b=this.getValue();if(Object.isString(this.lastValue)&&Object.isString(b)?this.lastValue!=b:String(this.lastValue)!=String(b)){this.callback(this.element,b);this.lastValue=b}}});Form.Element.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.Element.getValue(this.element)}});Form.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.serialize(this.element)}});Abstract.EventObserver=Class.create({initialize:function(b,d){this.element=$(b);this.callback=d;this.lastValue=this.getValue();if(this.element.tagName.toLowerCase()=="form"){this.registerFormCallbacks()}else{this.registerCallback(this.element)}},onElementEvent:function(){var b=this.getValue();if(this.lastValue!=b){this.callback(this.element,b);this.lastValue=b}},registerFormCallbacks:function(){Form.getElements(this.element).each(this.registerCallback,this)},registerCallback:function(b){if(b.type){switch(b.type.toLowerCase()){case"checkbox":case"radio":Event.observe(b,"click",this.onElementEvent.bind(this));break;default:Event.observe(b,"change",this.onElementEvent.bind(this));break}}}});Form.Element.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.Element.getValue(this.element)}});Form.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.serialize(this.element)}});(function(){var J={KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,KEY_ESC:27,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_DELETE:46,KEY_HOME:36,KEY_END:35,KEY_PAGEUP:33,KEY_PAGEDOWN:34,KEY_INSERT:45,cache:{}};var h=document.documentElement;var K="onmouseenter" in h&&"onmouseleave" in h;var b=function(L){return false};if(window.attachEvent){if(window.addEventListener){b=function(L){return !(L instanceof window.Event)}}else{b=function(L){return true}}}var y;function H(M,L){return M.which?(M.which===L+1):(M.button===L)}var u={0:1,1:4,2:2};function F(M,L){return M.button===u[L]}function I(M,L){switch(L){case 0:return M.which==1&&!M.metaKey;case 1:return M.which==2||(M.which==1&&M.metaKey);case 2:return M.which==3;default:return false}}if(window.attachEvent){if(!window.addEventListener){y=F}else{y=function(M,L){return b(M)?F(M,L):H(M,L)}}}else{if(Prototype.Browser.WebKit){y=I}else{y=H}}function C(L){return y(L,0)}function A(L){return y(L,1)}function t(L){return y(L,2)}function f(N){N=J.extend(N);var M=N.target,L=N.type,O=N.currentTarget;if(O&&O.tagName){if(L==="load"||L==="error"||(L==="click"&&O.tagName.toLowerCase()==="input"&&O.type==="radio")){M=O}}if(M.nodeType==Node.TEXT_NODE){M=M.parentNode}return Element.extend(M)}function v(M,N){var L=J.element(M);if(!N){return L}while(L){if(Object.isElement(L)&&Prototype.Selector.match(L,N)){return Element.extend(L)}L=L.parentNode}}function z(L){return{x:e(L),y:d(L)}}function e(N){var M=document.documentElement,L=document.body||{scrollLeft:0};return N.pageX||(N.clientX+(M.scrollLeft||L.scrollLeft)-(M.clientLeft||0))}function d(N){var M=document.documentElement,L=document.body||{scrollTop:0};return N.pageY||(N.clientY+(M.scrollTop||L.scrollTop)-(M.clientTop||0))}function w(L){J.extend(L);L.preventDefault();L.stopPropagation();L.stopped=true}J.Methods={isLeftClick:C,isMiddleClick:A,isRightClick:t,element:f,findElement:v,pointer:z,pointerX:e,pointerY:d,stop:w};var E=Object.keys(J.Methods).inject({},function(L,M){L[M]=J.Methods[M].methodize();return L});if(window.attachEvent){function o(M){var L;switch(M.type){case"mouseover":case"mouseenter":L=M.fromElement;break;case"mouseout":case"mouseleave":L=M.toElement;break;default:return null}return Element.extend(L)}var B={stopPropagation:function(){this.cancelBubble=true},preventDefault:function(){this.returnValue=false},inspect:function(){return"[object Event]"}};J.extend=function(M,L){if(!M){return false}if(!b(M)){return M}if(M._extendedByPrototype){return M}M._extendedByPrototype=Prototype.emptyFunction;var N=J.pointer(M);Object.extend(M,{target:M.srcElement||L,relatedTarget:o(M),pageX:N.x,pageY:N.y});Object.extend(M,E);Object.extend(M,B);return M}}else{J.extend=Prototype.K}if(window.addEventListener){J.prototype=window.Event.prototype||document.createEvent("HTMLEvents").__proto__;Object.extend(J.prototype,E)}function s(P,O,Q){var N=Element.retrieve(P,"prototype_event_registry");if(Object.isUndefined(N)){g.push(P);N=Element.retrieve(P,"prototype_event_registry",$H())}var L=N.get(O);if(Object.isUndefined(L)){L=[];N.set(O,L)}if(L.pluck("handler").include(Q)){return false}var M;if(O.include(":")){M=function(R){if(Object.isUndefined(R.eventName)){return false}if(R.eventName!==O){return false}J.extend(R,P);Q.call(P,R)}}else{if(!K&&(O==="mouseenter"||O==="mouseleave")){if(O==="mouseenter"||O==="mouseleave"){M=function(S){J.extend(S,P);var R=S.relatedTarget;while(R&&R!==P){try{R=R.parentNode}catch(T){R=P}}if(R===P){return}Q.call(P,S)}}}else{M=function(R){J.extend(R,P);Q.call(P,R)}}}M.handler=Q;L.push(M);return M}function n(){for(var L=0,M=g.length;L<M;L++){J.stopObserving(g[L]);g[L]=null}}var g=[];if(Prototype.Browser.IE){window.attachEvent("onunload",n)}if(Prototype.Browser.WebKit){window.addEventListener("unload",Prototype.emptyFunction,false)}var r=Prototype.K,l={mouseenter:"mouseover",mouseleave:"mouseout"};if(!K){r=function(L){return(l[L]||L)}}function D(O,N,P){O=$(O);var M=s(O,N,P);if(!M){return O}if(N.include(":")){if(O.addEventListener){O.addEventListener("dataavailable",M,false)}else{O.attachEvent("ondataavailable",M);O.attachEvent("onlosecapture",M)}}else{var L=r(N);if(O.addEventListener){O.addEventListener(L,M,false)}else{O.attachEvent("on"+L,M)}}return O}function q(R,O,S){R=$(R);var N=Element.retrieve(R,"prototype_event_registry");if(!N){return R}if(!O){N.each(function(U){var T=U.key;q(R,T)});return R}var P=N.get(O);if(!P){return R}if(!S){P.each(function(T){q(R,O,T.handler)});return R}var Q=P.length,M;while(Q--){if(P[Q].handler===S){M=P[Q];break}}if(!M){return R}if(O.include(":")){if(R.removeEventListener){R.removeEventListener("dataavailable",M,false)}else{R.detachEvent("ondataavailable",M);R.detachEvent("onlosecapture",M)}}else{var L=r(O);if(R.removeEventListener){R.removeEventListener(L,M,false)}else{R.detachEvent("on"+L,M)}}N.set(O,P.without(M));return R}function G(O,N,M,L){O=$(O);if(Object.isUndefined(L)){L=true}if(O==document&&document.createEvent&&!O.dispatchEvent){O=document.documentElement}var P;if(document.createEvent){P=document.createEvent("HTMLEvents");P.initEvent("dataavailable",L,true)}else{P=document.createEventObject();P.eventType=L?"ondataavailable":"onlosecapture"}P.eventName=N;P.memo=M||{};if(document.createEvent){O.dispatchEvent(P)}else{O.fireEvent(P.eventType,P)}return J.extend(P)}J.Handler=Class.create({initialize:function(N,M,L,O){this.element=$(N);this.eventName=M;this.selector=L;this.callback=O;this.handler=this.handleEvent.bind(this)},start:function(){J.observe(this.element,this.eventName,this.handler);return this},stop:function(){J.stopObserving(this.element,this.eventName,this.handler);return this},handleEvent:function(M){var L=J.findElement(M,this.selector);if(L){this.callback.call(this.element,M,L)}}});function p(N,M,L,O){N=$(N);if(Object.isFunction(L)&&Object.isUndefined(O)){O=L,L=null}return new J.Handler(N,M,L,O).start()}Object.extend(J,J.Methods);Object.extend(J,{fire:G,observe:D,stopObserving:q,on:p});Element.addMethods({fire:G,observe:D,stopObserving:q,on:p});Object.extend(document,{fire:G.methodize(),observe:D.methodize(),stopObserving:q.methodize(),on:p.methodize(),loaded:false});if(window.Event){Object.extend(window.Event,J)}else{window.Event=J}})();(function(){var e;function b(){if(document.loaded){return}if(e){window.clearTimeout(e)}document.loaded=true;document.fire("dom:loaded")}function d(){if(document.readyState==="complete"){document.stopObserving("readystatechange",d);b()}}if(document.addEventListener){document.addEventListener("DOMContentLoaded",b,false)}else{document.observe("readystatechange",d);if(window==top){var e=window.setInterval(function(){try{document.documentElement.doScroll("left")}catch(f){return}window.clearInterval(e);b()},5)}}Event.observe(window,"load",b)})();Element.addMethods();Hash.toQueryString=Object.toQueryString;var Toggle={display:Element.toggle};Element.Methods.childOf=Element.Methods.descendantOf;var Insertion={Before:function(b,d){return Element.insert(b,{before:d})},Top:function(b,d){return Element.insert(b,{top:d})},Bottom:function(b,d){return Element.insert(b,{bottom:d})},After:function(b,d){return Element.insert(b,{after:d})}};var $continue=new Error('"throw $continue" is deprecated, use "return" instead');var Position={includeScrollOffsets:false,prepare:function(){this.deltaX=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;this.deltaY=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0},within:function(d,b,e){if(this.includeScrollOffsets){return this.withinIncludingScrolloffsets(d,b,e)}this.xcomp=b;this.ycomp=e;this.offset=Element.cumulativeOffset(d);return(e>=this.offset[1]&&e<this.offset[1]+d.offsetHeight&&b>=this.offset[0]&&b<this.offset[0]+d.offsetWidth)},withinIncludingScrolloffsets:function(d,b,f){var e=Element.cumulativeScrollOffset(d);this.xcomp=b+e[0]-this.deltaX;this.ycomp=f+e[1]-this.deltaY;this.offset=Element.cumulativeOffset(d);return(this.ycomp>=this.offset[1]&&this.ycomp<this.offset[1]+d.offsetHeight&&this.xcomp>=this.offset[0]&&this.xcomp<this.offset[0]+d.offsetWidth)},overlap:function(d,b){if(!d){return 0}if(d=="vertical"){return((this.offset[1]+b.offsetHeight)-this.ycomp)/b.offsetHeight}if(d=="horizontal"){return((this.offset[0]+b.offsetWidth)-this.xcomp)/b.offsetWidth}},cumulativeOffset:Element.Methods.cumulativeOffset,positionedOffset:Element.Methods.positionedOffset,absolutize:function(b){Position.prepare();return Element.absolutize(b)},relativize:function(b){Position.prepare();return Element.relativize(b)},realOffset:Element.Methods.cumulativeScrollOffset,offsetParent:Element.Methods.getOffsetParent,page:Element.Methods.viewportOffset,clone:function(d,e,b){b=b||{};return Element.clonePosition(e,d,b)}};if(!document.getElementsByClassName){document.getElementsByClassName=function(d){function b(e){return e.blank()?null:"[contains(concat(' ', @class, ' '), ' "+e+" ')]"}d.getElementsByClassName=Prototype.BrowserFeatures.XPath?function(e,g){g=g.toString().strip();var f=/\s/.test(g)?$w(g).map(b).join(""):b(g);return f?document._getElementsByXPath(".//*"+f,e):[]}:function(g,h){h=h.toString().strip();var l=[],n=(/\s/.test(h)?$w(h):null);if(!n&&!h){return l}var e=$(g).getElementsByTagName("*");h=" "+h+" ";for(var f=0,p,o;p=e[f];f++){if(p.className&&(o=" "+p.className+" ")&&(o.include(h)||(n&&n.all(function(q){return !q.toString().blank()&&o.include(" "+q+" ")})))){l.push(Element.extend(p))}}return l};return function(f,e){return $(e||document.body).getElementsByClassName(f)}}(Element.Methods)}Element.ClassNames=Class.create();Element.ClassNames.prototype={initialize:function(b){this.element=$(b)},_each:function(b){this.element.className.split(/\s+/).select(function(d){return d.length>0})._each(b)},set:function(b){this.element.className=b},add:function(b){if(this.include(b)){return}this.set($A(this).concat(b).join(" "))},remove:function(b){if(!this.include(b)){return}this.set($A(this).without(b).join(" "))},toString:function(){return $A(this).join(" ")}};Object.extend(Element.ClassNames.prototype,Enumerable);(function(){window.Selector=Class.create({initialize:function(b){this.expression=b.strip()},findElements:function(b){return Prototype.Selector.select(this.expression,b)},match:function(b){return Prototype.Selector.match(b,this.expression)},toString:function(){return this.expression},inspect:function(){return"#<Selector: "+this.expression+">"}});Object.extend(Selector,{matchElements:function(h,l){var b=Prototype.Selector.match,f=[];for(var e=0,g=h.length;e<g;e++){var d=h[e];if(b(d,l)){f.push(Element.extend(d))}}return f},findElement:function(h,l,d){d=d||0;var b=0,f;for(var e=0,g=h.length;e<g;e++){f=h[e];if(Prototype.Selector.match(f,l)&&d===b++){return Element.extend(f)}}},findChildElements:function(d,e){var b=e.toArray().join(", ");return Prototype.Selector.select(b,d||document)}})})();var Window=Class.create();Window.keepMultiModalWindow=false;Window.hasEffectLib=(typeof Effect!="undefined");Window.resizeEffectDuration=0.4;Window.prototype={initialize:function(){var e;var d=0;if(arguments.length>0){if(typeof arguments[0]=="string"){e=arguments[0];d=1}else{e=arguments[0]?arguments[0].id:null}}if(!e){e="window_"+new Date().getTime()}if($(e)){alert("Window "+e+" is already registered in the DOM! Make sure you use setDestroyOnClose() or destroyOnClose: true in the constructor")}this.options=Object.extend({className:"dialog",windowClassName:null,blurClassName:null,minWidth:100,minHeight:20,resizable:true,closable:true,minimizable:true,maximizable:true,draggable:true,userData:null,showEffect:(Window.hasEffectLib?Effect.Appear:Element.show),hideEffect:(Window.hasEffectLib?Effect.Fade:Element.hide),showEffectOptions:{},hideEffectOptions:{},effectOptions:null,parent:document.body,title:"&nbsp;",url:null,onload:Prototype.emptyFunction,width:200,height:300,opacity:1,recenterAuto:true,wiredDrag:false,closeOnEsc:true,closeCallback:null,destroyOnClose:false,gridX:1,gridY:1},arguments[d]||{});if(this.options.blurClassName){this.options.focusClassName=this.options.className}if(typeof this.options.top=="undefined"&&typeof this.options.bottom=="undefined"){this.options.top=this._round(Math.random()*500,this.options.gridY)}if(typeof this.options.left=="undefined"&&typeof this.options.right=="undefined"){this.options.left=this._round(Math.random()*500,this.options.gridX)}if(this.options.effectOptions){Object.extend(this.options.hideEffectOptions,this.options.effectOptions);Object.extend(this.options.showEffectOptions,this.options.effectOptions);if(this.options.showEffect==Element.Appear){this.options.showEffectOptions.to=this.options.opacity}}if(Window.hasEffectLib){if(this.options.showEffect==Effect.Appear){this.options.showEffectOptions.to=this.options.opacity}if(this.options.hideEffect==Effect.Fade){this.options.hideEffectOptions.from=this.options.opacity}}if(this.options.hideEffect==Element.hide){this.options.hideEffect=function(){Element.hide(this.element);if(this.options.destroyOnClose){this.destroy()}}.bind(this)}if(this.options.parent!=document.body){this.options.parent=$(this.options.parent)}this.element=this._createWindow(e);this.element.win=this;this.eventMouseDown=this._initDrag.bindAsEventListener(this);this.eventMouseUp=this._endDrag.bindAsEventListener(this);this.eventMouseMove=this._updateDrag.bindAsEventListener(this);this.eventOnLoad=this._getWindowBorderSize.bindAsEventListener(this);this.eventMouseDownContent=this.toFront.bindAsEventListener(this);this.eventResize=this._recenter.bindAsEventListener(this);this.eventKeyUp=this._keyUp.bindAsEventListener(this);this.topbar=$(this.element.id+"_top");this.bottombar=$(this.element.id+"_bottom");this.content=$(this.element.id+"_content");Event.observe(this.topbar,"mousedown",this.eventMouseDown);Event.observe(this.bottombar,"mousedown",this.eventMouseDown);Event.observe(this.content,"mousedown",this.eventMouseDownContent);Event.observe(window,"load",this.eventOnLoad);Event.observe(window,"resize",this.eventResize);Event.observe(window,"scroll",this.eventResize);Event.observe(document,"keyup",this.eventKeyUp);Event.observe(this.options.parent,"scroll",this.eventResize);if(this.options.draggable){var b=this;[this.topbar,this.topbar.up().previous(),this.topbar.up().next()].each(function(f){f.observe("mousedown",b.eventMouseDown);f.addClassName("top_draggable")});[this.bottombar.up(),this.bottombar.up().previous(),this.bottombar.up().next()].each(function(f){f.observe("mousedown",b.eventMouseDown);f.addClassName("bottom_draggable")})}if(this.options.resizable){this.sizer=$(this.element.id+"_sizer");Event.observe(this.sizer,"mousedown",this.eventMouseDown)}this.useLeft=null;this.useTop=null;if(typeof this.options.left!="undefined"){this.element.setStyle({left:parseFloat(this.options.left)+"px"});this.useLeft=true}else{this.element.setStyle({right:parseFloat(this.options.right)+"px"});this.useLeft=false}if(typeof this.options.top!="undefined"){this.element.setStyle({top:parseFloat(this.options.top)+"px"});this.useTop=true}else{this.element.setStyle({bottom:parseFloat(this.options.bottom)+"px"});this.useTop=false}this.storedLocation=null;this.setOpacity(this.options.opacity);if(this.options.zIndex){this.setZIndex(this.options.zIndex)}else{this.setZIndex(this.getMaxZIndex())}if(this.options.destroyOnClose){this.setDestroyOnClose(true)}this._getWindowBorderSize();this.width=this.options.width;this.height=this.options.height;this.visible=false;this.constraint=false;this.constraintPad={top:0,left:0,bottom:0,right:0};if(this.width&&this.height){this.setSize(this.options.width,this.options.height)}this.setTitle(this.options.title);Windows.register(this)},getMaxZIndex:function(){var b=0,d;var g=document.body.childNodes;for(d=0;d<g.length;d++){var e=g[d];var f=e.nodeType==1?parseInt(e.style.zIndex,10)||0:0;if(f<10000){b=Math.max(b,f)}}return b+10},destroy:function(){this._notify("onDestroy");Event.stopObserving(this.topbar,"mousedown",this.eventMouseDown);Event.stopObserving(this.bottombar,"mousedown",this.eventMouseDown);Event.stopObserving(this.content,"mousedown",this.eventMouseDownContent);Event.stopObserving(window,"load",this.eventOnLoad);Event.stopObserving(window,"resize",this.eventResize);Event.stopObserving(window,"scroll",this.eventResize);Event.stopObserving(this.content,"load",this.options.onload);Event.stopObserving(document,"keyup",this.eventKeyUp);if(this._oldParent){var e=this.getContent();var b=null;for(var d=0;d<e.childNodes.length;d++){b=e.childNodes[d];if(b.nodeType==1){break}b=null}if(b){this._oldParent.appendChild(b)}this._oldParent=null}if(this.sizer){Event.stopObserving(this.sizer,"mousedown",this.eventMouseDown)}if(this.options.url){this.content.src=null}if(this.iefix){Element.remove(this.iefix)}Element.remove(this.element);Windows.unregister(this)},setCloseCallback:function(b){this.options.closeCallback=b},getContent:function(){return this.content},setContent:function(n,l,e){var b=$(n);if(null==b){throw"Unable to find element '"+n+"' in DOM"}this._oldParent=b.parentNode;var h=null;var g=null;if(l){h=Element.getDimensions(b)}if(e){g=Position.cumulativeOffset(b)}var f=this.getContent();this.setHTMLContent("");f=this.getContent();f.appendChild(b);b.show();if(l){this.setSize(h.width,h.height)}if(e){this.setLocation(g[1]-this.heightN,g[0]-this.widthW)}},setHTMLContent:function(b){if(this.options.url){this.content.src=null;this.options.url=null;var d='<div id="'+this.getId()+'_content" class="'+this.options.className+'_content"> </div>';$(this.getId()+"_table_content").innerHTML=d;this.content=$(this.element.id+"_content")}this.getContent().innerHTML=b},setAjaxContent:function(d,b,f,e){this.showFunction=f?"showCenter":"show";this.showModal=e||false;b=b||{};this.setHTMLContent("");this.onComplete=b.onComplete;if(!this._onCompleteHandler){this._onCompleteHandler=this._setAjaxContent.bind(this)}b.onComplete=this._onCompleteHandler;new Ajax.Request(d,b);b.onComplete=this.onComplete},_setAjaxContent:function(b){Element.update(this.getContent(),b.responseText);if(this.onComplete){this.onComplete(b)}this.onComplete=null;this[this.showFunction](this.showModal)},setURL:function(b){if(this.options.url){this.content.src=null}this.options.url=b;var d="<iframe frameborder='0' name='"+this.getId()+"_content'  id='"+this.getId()+"_content' src='"+b+"' width='"+this.width+"' height='"+this.height+"'> </iframe>";$(this.getId()+"_table_content").innerHTML=d;this.content=$(this.element.id+"_content")},getURL:function(){return this.options.url?this.options.url:null},refresh:function(){if(this.options.url){$(this.element.getAttribute("id")+"_content").src=this.options.url}},setCookie:function(d,e,t,g,b){d=d||this.element.id;this.cookie=[d,e,t,g,b];var r=WindowUtilities.getCookie(d);if(r){var s=r.split(",");var p=s[0].split(":");var o=s[1].split(":");var q=parseFloat(s[2]),l=parseFloat(s[3]);var n=s[4];var f=s[5];this.setSize(q,l);if(n=="true"){this.doMinimize=true}else{if(f=="true"){this.doMaximize=true}}this.useLeft=p[0]=="l";this.useTop=o[0]=="t";this.element.setStyle(this.useLeft?{left:p[1]}:{right:p[1]});this.element.setStyle(this.useTop?{top:o[1]}:{bottom:o[1]})}},getId:function(){return this.element.id},setDestroyOnClose:function(){this.options.destroyOnClose=true},setConstraint:function(b,d){this.constraint=b;this.constraintPad=Object.extend(this.constraintPad,d||{});if(this.useTop&&this.useLeft){this.setLocation(parseFloat(this.element.style.top),parseFloat(this.element.style.left))}},_initDrag:function(d){if(Event.element(d)==this.sizer&&this.isMinimized()){return}if(Event.element(d)!=this.sizer&&this.isMaximized()){return}if(Prototype.Browser.IE&&this.heightN==0){this._getWindowBorderSize()}this.pointer=[this._round(Event.pointerX(d),this.options.gridX),this._round(Event.pointerY(d),this.options.gridY)];if(this.options.wiredDrag){this.currentDrag=this._createWiredElement()}else{this.currentDrag=this.element}if(Event.element(d)==this.sizer){this.doResize=true;this.widthOrg=this.width;this.heightOrg=this.height;this.bottomOrg=parseFloat(this.element.getStyle("bottom"));this.rightOrg=parseFloat(this.element.getStyle("right"));this._notify("onStartResize")}else{this.doResize=false;var b=$(this.getId()+"_close");if(b&&Position.within(b,this.pointer[0],this.pointer[1])){this.currentDrag=null;return}this.toFront();if(!this.options.draggable){return}this._notify("onStartMove")}Event.observe(document,"mouseup",this.eventMouseUp,false);Event.observe(document,"mousemove",this.eventMouseMove,false);WindowUtilities.disableScreen("__invisible__","__invisible__",this.overlayOpacity);document.body.ondrag=function(){return false};document.body.onselectstart=function(){return false};this.currentDrag.show();Event.stop(d)},_round:function(d,b){return b==1?d:d=Math.floor(d/b)*b},_updateDrag:function(d){var b=[this._round(Event.pointerX(d),this.options.gridX),this._round(Event.pointerY(d),this.options.gridY)];var q=b[0]-this.pointer[0];var p=b[1]-this.pointer[1];if(this.doResize){var o=this.widthOrg+q;var f=this.heightOrg+p;q=this.width-this.widthOrg;p=this.height-this.heightOrg;if(this.useLeft){o=this._updateWidthConstraint(o)}else{this.currentDrag.setStyle({right:(this.rightOrg-q)+"px"})}if(this.useTop){f=this._updateHeightConstraint(f)}else{this.currentDrag.setStyle({bottom:(this.bottomOrg-p)+"px"})}this.setSize(o,f);this._notify("onResize")}else{this.pointer=b;if(this.useLeft){var e=parseFloat(this.currentDrag.getStyle("left"))+q;var n=this._updateLeftConstraint(e);this.pointer[0]+=n-e;this.currentDrag.setStyle({left:n+"px"})}else{this.currentDrag.setStyle({right:parseFloat(this.currentDrag.getStyle("right"))-q+"px"})}if(this.useTop){var l=parseFloat(this.currentDrag.getStyle("top"))+p;var g=this._updateTopConstraint(l);this.pointer[1]+=g-l;this.currentDrag.setStyle({top:g+"px"})}else{this.currentDrag.setStyle({bottom:parseFloat(this.currentDrag.getStyle("bottom"))-p+"px"})}this._notify("onMove")}if(this.iefix){this._fixIEOverlapping()}this._removeStoreLocation();Event.stop(d)},_endDrag:function(b){WindowUtilities.enableScreen("__invisible__");if(this.doResize){this._notify("onEndResize")}else{this._notify("onEndMove")}Event.stopObserving(document,"mouseup",this.eventMouseUp,false);Event.stopObserving(document,"mousemove",this.eventMouseMove,false);Event.stop(b);this._hideWiredElement();this._saveCookie();document.body.ondrag=null;document.body.onselectstart=null},_updateLeftConstraint:function(d){if(this.constraint&&this.useLeft&&this.useTop){var b=this.options.parent==document.body?WindowUtilities.getPageSize().windowWidth:this.options.parent.getDimensions().width;if(d<this.constraintPad.left){d=this.constraintPad.left}if(d+this.width+this.widthE+this.widthW>b-this.constraintPad.right){d=b-this.constraintPad.right-this.width-this.widthE-this.widthW}}return d},_updateTopConstraint:function(e){if(this.constraint&&this.useLeft&&this.useTop){var b=this.options.parent==document.body?WindowUtilities.getPageSize().windowHeight:this.options.parent.getDimensions().height;var d=this.height+this.heightN+this.heightS;if(e<this.constraintPad.top){e=this.constraintPad.top}if(e+d>b-this.constraintPad.bottom){e=b-this.constraintPad.bottom-d}}return e},_updateWidthConstraint:function(b){if(this.constraint&&this.useLeft&&this.useTop){var d=this.options.parent==document.body?WindowUtilities.getPageSize().windowWidth:this.options.parent.getDimensions().width;var e=parseFloat(this.element.getStyle("left"));if(e+b+this.widthE+this.widthW>d-this.constraintPad.right){b=d-this.constraintPad.right-e-this.widthE-this.widthW}}return b},_updateHeightConstraint:function(d){if(this.constraint&&this.useLeft&&this.useTop){var b=this.options.parent==document.body?WindowUtilities.getPageSize().windowHeight:this.options.parent.getDimensions().height;var e=parseFloat(this.element.getStyle("top"));if(e+d+this.heightN+this.heightS>b-this.constraintPad.bottom){d=b-this.constraintPad.bottom-e-this.heightN-this.heightS}}return d},_createWindow:function(b){var h=this.options.className;var f=document.createElement("div");f.setAttribute("id",b);f.className="dialog";if(this.options.windowClassName){f.className+=" "+this.options.windowClassName}var g;if(this.options.url){g='<iframe frameborder="0" name="'+b+'_content"  id="'+b+'_content" src="'+this.options.url+'"> </iframe>'}else{g='<div id="'+b+'_content" class="'+h+'_content"> </div>'}var l=this.options.closable?"<div class='"+h+"_close' id='"+b+"_close' onclick='Windows.close(\""+b+"\", event)'> </div>":"";var n=this.options.minimizable?"<div class='"+h+"_minimize' id='"+b+"_minimize' onclick='Windows.minimize(\""+b+"\", event)'> </div>":"";var o=this.options.maximizable?"<div class='"+h+"_maximize' id='"+b+"_maximize' onclick='Windows.maximize(\""+b+"\", event)'> </div>":"";var e=this.options.resizable?"class='"+h+"_sizer' id='"+b+"_sizer'":"class='"+h+"_se'";var d="../themes/default/blank.gif";f.innerHTML=l+n+o+"      <a href='#' id='"+b+"_focus_anchor'><!-- --></a>      <table id='"+b+"_row1' class=\"top table_window\">        <tr>          <td class='"+h+"_nw'></td>          <td class='"+h+"_n'><div id='"+b+"_top' class='"+h+"_title title_window'>"+this.options.title+"</div></td>          <td class='"+h+"_ne'></td>        </tr>      </table>      <table id='"+b+"_row2' class=\"mid table_window\">        <tr>          <td class='"+h+"_w'></td>            <td id='"+b+"_table_content' class='"+h+"_content' valign='top'>"+g+"</td>          <td class='"+h+"_e'></td>        </tr>      </table>        <table id='"+b+"_row3' class=\"bot table_window\">        <tr>          <td class='"+h+"_sw'></td>            <td class='"+h+"_s'><div id='"+b+"_bottom' class='status_bar'><span style='float:left; width:1px; height:1px'></span></div></td>            <td "+e+"></td>        </tr>      </table>    ";Element.hide(f);this.options.parent.insertBefore(f,this.options.parent.firstChild);Event.observe($(b+"_content"),"load",this.options.onload);return f},changeClassName:function(b){var d=this.options.className;var e=this.getId();$A(["_close","_minimize","_maximize","_sizer","_content"]).each(function(f){this._toggleClassName($(e+f),d+f,b+f)}.bind(this));this._toggleClassName($(e+"_top"),d+"_title",b+"_title");$$("#"+e+" td").each(function(f){f.className=f.className.sub(d,b)});this.options.className=b},_toggleClassName:function(e,d,b){if(e){e.removeClassName(d);e.addClassName(b)}},setLocation:function(f,d){f=this._updateTopConstraint(f);d=this._updateLeftConstraint(d);var b=this.currentDrag||this.element;b.setStyle({top:f+"px"});b.setStyle({left:d+"px"});this.useLeft=true;this.useTop=true},getLocation:function(){var b={};if(this.useTop){b=Object.extend(b,{top:this.element.getStyle("top")})}else{b=Object.extend(b,{bottom:this.element.getStyle("bottom")})}if(this.useLeft){b=Object.extend(b,{left:this.element.getStyle("left")})}else{b=Object.extend(b,{right:this.element.getStyle("right")})}return b},getSize:function(){return{width:this.width,height:this.height}},setSize:function(f,d,b){f=parseFloat(f);d=parseFloat(d);if(!this.minimized&&f<this.options.minWidth){f=this.options.minWidth}if(!this.minimized&&d<this.options.minHeight){d=this.options.minHeight}if(this.options.maxHeight&&d>this.options.maxHeight){d=this.options.maxHeight}if(this.options.maxWidth&&f>this.options.maxWidth){f=this.options.maxWidth}if(this.useTop&&this.useLeft&&Window.hasEffectLib&&Effect.ResizeWindow&&b){new Effect.ResizeWindow(this,null,null,f,d,{duration:Window.resizeEffectDuration})}else{this.width=f;this.height=d;var h=this.currentDrag?this.currentDrag:this.element;h.setStyle({width:f+this.widthW+this.widthE+"px"});h.setStyle({height:d+this.heightN+this.heightS+"px"});if(!this.currentDrag||this.currentDrag==this.element){var g=$(this.element.id+"_content");g.setStyle({height:d+"px"});g.setStyle({width:f+"px"})}}},updateHeight:function(){this.setSize(this.width,this.content.scrollHeight,true)},updateWidth:function(){this.setSize(this.content.scrollWidth,this.height,true)},toFront:function(){if(this.element.style.zIndex<Windows.maxZIndex){this.setZIndex(Windows.maxZIndex+1)}if(this.iefix){this._fixIEOverlapping()}},getBounds:function(d){if(!this.width||!this.height||!this.visible){this.computeBounds()}var b=this.width;var e=this.height;if(!d){b+=this.widthW+this.widthE;e+=this.heightN+this.heightS}var f=Object.extend(this.getLocation(),{width:b+"px",height:e+"px"});return f},computeBounds:function(){if(!this.width||!this.height){var b=WindowUtilities._computeSize(this.content.innerHTML,this.content.id,this.width,this.height,0,this.options.className);if(this.height){this.width=b+5}else{this.height=b+5}}this.setSize(this.width,this.height);if(this.centered){this._center(this.centerTop,this.centerLeft)}},show:function(d){this.visible=true;if(d){if(typeof this.overlayOpacity=="undefined"){var b=this;setTimeout(function(){b.show(d)},10);return}Windows.addModalWindow(this);this.modal=true;this.setZIndex(Windows.maxZIndex+1);Windows.unsetOverflow(this)}else{if(!this.element.style.zIndex){this.setZIndex(Windows.maxZIndex+1)}}if(this.oldStyle){this.getContent().setStyle({overflow:this.oldStyle})}this.computeBounds();this._notify("onBeforeShow");if(this.options.showEffect!=Element.show&&this.options.showEffectOptions){this.options.showEffect(this.element,this.options.showEffectOptions)}else{this.options.showEffect(this.element)}this._checkIEOverlapping();WindowUtilities.focusedWindow=this;this._notify("onShow");$(this.element.id+"_focus_anchor").focus()},showCenter:function(b,e,d){this.centered=true;this.centerTop=e;this.centerLeft=d;this.show(b)},isVisible:function(){return this.visible},_center:function(e,d){var f=WindowUtilities.getWindowScroll(this.options.parent);var b=WindowUtilities.getPageSize(this.options.parent);if(typeof e=="undefined"){e=(b.windowHeight-(this.height+this.heightN+this.heightS))/2}e+=f.top;if(typeof d=="undefined"){d=(b.windowWidth-(this.width+this.widthW+this.widthE))/2}d+=f.left;this.setLocation(e,d);this.toFront()},_recenter:function(d){if(this.centered){var b=WindowUtilities.getPageSize(this.options.parent);var e=WindowUtilities.getWindowScroll(this.options.parent);if(this.pageSize&&this.pageSize.windowWidth==b.windowWidth&&this.pageSize.windowHeight==b.windowHeight&&this.windowScroll.left==e.left&&this.windowScroll.top==e.top){return}this.pageSize=b;this.windowScroll=e;if($("overlay_modal")){$("overlay_modal").setStyle({height:(b.pageHeight+"px")})}if(this.options.recenterAuto){this._center(this.centerTop,this.centerLeft)}}},hide:function(){this.visible=false;if(this.modal){Windows.removeModalWindow(this);Windows.resetOverflow()}this.oldStyle=this.getContent().getStyle("overflow")||"auto";this.getContent().setStyle({overflow:"hidden"});this.options.hideEffect(this.element,this.options.hideEffectOptions);if(this.iefix){this.iefix.hide()}if(!this.doNotNotifyHide){this._notify("onHide")}},close:function(){if(this.visible){if(this.options.closeCallback&&!this.options.closeCallback(this)){return}if(this.options.destroyOnClose){var b=this.destroy.bind(this);if(this.options.hideEffectOptions.afterFinish){var d=this.options.hideEffectOptions.afterFinish;this.options.hideEffectOptions.afterFinish=function(){d();b()}}else{this.options.hideEffectOptions.afterFinish=function(){b()}}}Windows.updateFocusedWindow();this.doNotNotifyHide=true;this.hide();this.doNotNotifyHide=false;this._notify("onClose")}},minimize:function(){if(this.resizing){return}var b=$(this.getId()+"_row2");if(!this.minimized){this.minimized=true;var f=b.getDimensions().height;this.r2Height=f;var e=this.element.getHeight()-f;if(this.useLeft&&this.useTop&&Window.hasEffectLib&&Effect.ResizeWindow){new Effect.ResizeWindow(this,null,null,null,this.height-f,{duration:Window.resizeEffectDuration})}else{this.height-=f;this.element.setStyle({height:e+"px"});b.hide()}if(!this.useTop){var d=parseFloat(this.element.getStyle("bottom"));this.element.setStyle({bottom:(d+f)+"px"})}}else{this.minimized=false;var f=this.r2Height;this.r2Height=null;if(this.useLeft&&this.useTop&&Window.hasEffectLib&&Effect.ResizeWindow){new Effect.ResizeWindow(this,null,null,null,this.height+f,{duration:Window.resizeEffectDuration})}else{var e=this.element.getHeight()+f;this.height+=f;this.element.setStyle({height:e+"px"});b.show()}if(!this.useTop){var d=parseFloat(this.element.getStyle("bottom"));this.element.setStyle({bottom:(d-f)+"px"})}this.toFront()}this._notify("onMinimize");this._saveCookie()},maximize:function(){if(this.isMinimized()||this.resizing){return}if(Prototype.Browser.IE&&this.heightN==0){this._getWindowBorderSize()}if(this.storedLocation!=null){this._restoreLocation();if(this.iefix){this.iefix.hide()}}else{this._storeLocation();Windows.unsetOverflow(this);var l=WindowUtilities.getWindowScroll(this.options.parent);var d=WindowUtilities.getPageSize(this.options.parent);var h=l.left;var g=l.top;if(this.options.parent!=document.body){l={top:0,left:0,bottom:0,right:0};var f=this.options.parent.getDimensions();d.windowWidth=f.width;d.windowHeight=f.height;g=0;h=0}if(this.constraint){d.windowWidth-=Math.max(0,this.constraintPad.left)+Math.max(0,this.constraintPad.right);d.windowHeight-=Math.max(0,this.constraintPad.top)+Math.max(0,this.constraintPad.bottom);h+=Math.max(0,this.constraintPad.left);g+=Math.max(0,this.constraintPad.top)}var e=d.windowWidth-this.widthW-this.widthE;var b=d.windowHeight-this.heightN-this.heightS;if(this.useLeft&&this.useTop&&Window.hasEffectLib&&Effect.ResizeWindow){new Effect.ResizeWindow(this,g,h,e,b,{duration:Window.resizeEffectDuration})}else{this.setSize(e,b);this.element.setStyle(this.useLeft?{left:h}:{right:h});this.element.setStyle(this.useTop?{top:g}:{bottom:g})}this.toFront();if(this.iefix){this._fixIEOverlapping()}}this._notify("onMaximize");this._saveCookie()},isMinimized:function(){return this.minimized},isMaximized:function(){return(this.storedLocation!=null)},setOpacity:function(b){if(Element.setOpacity){Element.setOpacity(this.element,b)}},setZIndex:function(b){this.element.setStyle({zIndex:b});Windows.updateZindex(b,this)},setTitle:function(b){if(!b||b==""){b="&nbsp;"}Element.update(this.element.id+"_top",b)},getTitle:function(){return $(this.element.id+"_top").innerHTML},setStatusBar:function(d){var b=$(this.getId()+"_bottom");if(typeof(d)=="object"){if(this.bottombar.firstChild){this.bottombar.replaceChild(d,this.bottombar.firstChild)}else{this.bottombar.appendChild(d)}}else{this.bottombar.innerHTML=d}},_checkIEOverlapping:function(){if(!this.iefix&&(navigator.appVersion.indexOf("MSIE")>0)&&(navigator.userAgent.indexOf("Opera")<0)&&(this.element.getStyle("position")=="absolute")){new Insertion.After(this.element.id,'<iframe id="'+this.element.id+'_iefix" style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" src="javascript:false;" frameborder="0" scrolling="no"></iframe>');this.iefix=$(this.element.id+"_iefix")}if(this.iefix){setTimeout(this._fixIEOverlapping.bind(this),50)}},_fixIEOverlapping:function(){Position.clone(this.element,this.iefix);this.iefix.style.zIndex=this.element.style.zIndex-1;this.iefix.show()},_keyUp:function(b){if(27==b.keyCode&&this.options.closeOnEsc){this.close()}},_getWindowBorderSize:function(d){var e=this._createHiddenDiv(this.options.className+"_n");this.heightN=Element.getDimensions(e).height;e.parentNode.removeChild(e);var e=this._createHiddenDiv(this.options.className+"_s");this.heightS=Element.getDimensions(e).height;e.parentNode.removeChild(e);var e=this._createHiddenDiv(this.options.className+"_e");this.widthE=Element.getDimensions(e).width;e.parentNode.removeChild(e);var e=this._createHiddenDiv(this.options.className+"_w");this.widthW=Element.getDimensions(e).width;e.parentNode.removeChild(e);var e=document.createElement("div");e.className="overlay_"+this.options.className;document.body.appendChild(e);var b=this;setTimeout(function(){b.overlayOpacity=($(e).getStyle("opacity"));e.parentNode.removeChild(e)},10);if(Prototype.Browser.IE){this.heightS=$(this.getId()+"_row3").getDimensions().height;this.heightN=$(this.getId()+"_row1").getDimensions().height}if(Prototype.Browser.WebKit&&Prototype.Browser.WebKitVersion<420){this.setSize(this.width,this.height)}if(this.doMaximize){this.maximize()}if(this.doMinimize){this.minimize()}},_createHiddenDiv:function(d){var b=document.body;var e=document.createElement("div");e.setAttribute("id",this.element.id+"_tmp");e.className=d;e.style.display="none";e.innerHTML="";b.insertBefore(e,b.firstChild);return e},_storeLocation:function(){if(this.storedLocation==null){this.storedLocation={useTop:this.useTop,useLeft:this.useLeft,top:this.element.getStyle("top"),bottom:this.element.getStyle("bottom"),left:this.element.getStyle("left"),right:this.element.getStyle("right"),width:this.width,height:this.height}}},_restoreLocation:function(){if(this.storedLocation!=null){this.useLeft=this.storedLocation.useLeft;this.useTop=this.storedLocation.useTop;if(this.useLeft&&this.useTop&&Window.hasEffectLib&&Effect.ResizeWindow){new Effect.ResizeWindow(this,this.storedLocation.top,this.storedLocation.left,this.storedLocation.width,this.storedLocation.height,{duration:Window.resizeEffectDuration})}else{this.element.setStyle(this.useLeft?{left:this.storedLocation.left}:{right:this.storedLocation.right});this.element.setStyle(this.useTop?{top:this.storedLocation.top}:{bottom:this.storedLocation.bottom});this.setSize(this.storedLocation.width,this.storedLocation.height)}Windows.resetOverflow();this._removeStoreLocation()}},_removeStoreLocation:function(){this.storedLocation=null},_saveCookie:function(){if(this.cookie){var b="";if(this.useLeft){b+="l:"+(this.storedLocation?this.storedLocation.left:this.element.getStyle("left"))}else{b+="r:"+(this.storedLocation?this.storedLocation.right:this.element.getStyle("right"))}if(this.useTop){b+=",t:"+(this.storedLocation?this.storedLocation.top:this.element.getStyle("top"))}else{b+=",b:"+(this.storedLocation?this.storedLocation.bottom:this.element.getStyle("bottom"))}b+=","+(this.storedLocation?this.storedLocation.width:this.width);b+=","+(this.storedLocation?this.storedLocation.height:this.height);b+=","+this.isMinimized();b+=","+this.isMaximized();WindowUtilities.setCookie(b,this.cookie)}},_createWiredElement:function(){if(!this.wiredElement){if(Prototype.Browser.IE){this._getWindowBorderSize()}var d=document.createElement("div");d.className="wired_frame "+this.options.className+"_wired_frame";d.style.position="absolute";this.options.parent.insertBefore(d,this.options.parent.firstChild);this.wiredElement=$(d)}if(this.useLeft){this.wiredElement.setStyle({left:this.element.getStyle("left")})}else{this.wiredElement.setStyle({right:this.element.getStyle("right")})}if(this.useTop){this.wiredElement.setStyle({top:this.element.getStyle("top")})}else{this.wiredElement.setStyle({bottom:this.element.getStyle("bottom")})}var b=this.element.getDimensions();this.wiredElement.setStyle({width:b.width+"px",height:b.height+"px"});this.wiredElement.setStyle({zIndex:Windows.maxZIndex+30});return this.wiredElement},_hideWiredElement:function(){if(!this.wiredElement||!this.currentDrag){return}if(this.currentDrag==this.element){this.currentDrag=null}else{if(this.useLeft){this.element.setStyle({left:this.currentDrag.getStyle("left")})}else{this.element.setStyle({right:this.currentDrag.getStyle("right")})}if(this.useTop){this.element.setStyle({top:this.currentDrag.getStyle("top")})}else{this.element.setStyle({bottom:this.currentDrag.getStyle("bottom")})}this.currentDrag.hide();this.currentDrag=null;if(this.doResize){this.setSize(this.width,this.height)}}},_notify:function(b){if(this.options[b]){this.options[b](this)}else{Windows.notify(b,this)}}};var Windows={windows:[],modalWindows:[],observers:[],focusedWindow:null,maxZIndex:0,overlayShowEffectOptions:{duration:0.5},overlayHideEffectOptions:{duration:0.5},addObserver:function(b){this.removeObserver(b);this.observers.push(b)},removeObserver:function(b){this.observers=this.observers.reject(function(d){return d==b})},notify:function(b,d){this.observers.each(function(e){if(e[b]){e[b](b,d)}})},getWindow:function(b){return this.windows.detect(function(e){return e.getId()==b})},getFocusedWindow:function(){return this.focusedWindow},updateFocusedWindow:function(){this.focusedWindow=this.windows.length>=2?this.windows[this.windows.length-2]:null},register:function(b){this.windows.push(b)},addModalWindow:function(b){if(this.modalWindows.length==0){WindowUtilities.disableScreen(b.options.className,"overlay_modal",b.overlayOpacity,b.getId(),b.options.parent)}else{if(Window.keepMultiModalWindow){$("overlay_modal").style.zIndex=Windows.maxZIndex+1;Windows.maxZIndex+=1;WindowUtilities._hideSelect(this.modalWindows.last().getId())}else{this.modalWindows.last().element.hide()}WindowUtilities._showSelect(b.getId())}this.modalWindows.push(b)},removeModalWindow:function(b){this.modalWindows.pop();if(this.modalWindows.length==0){WindowUtilities.enableScreen()}else{if(Window.keepMultiModalWindow){this.modalWindows.last().toFront();WindowUtilities._showSelect(this.modalWindows.last().getId())}else{this.modalWindows.last().element.show()}}},register:function(b){this.windows.push(b)},unregister:function(b){this.windows=this.windows.reject(function(e){return e==b})},closeAll:function(){this.windows.each(function(b){Windows.close(b.getId())})},closeAllModalWindows:function(){WindowUtilities.enableScreen();this.modalWindows.each(function(b){if(b){b.close()}})},minimize:function(e,b){var d=this.getWindow(e);if(d&&d.visible){d.minimize()}Event.stop(b)},maximize:function(e,b){var d=this.getWindow(e);if(d&&d.visible){d.maximize()}Event.stop(b)},close:function(e,b){var d=this.getWindow(e);if(d){d.close()}if(b){Event.stop(b)}},blur:function(d){var b=this.getWindow(d);if(!b){return}if(b.options.blurClassName){b.changeClassName(b.options.blurClassName)}if(this.focusedWindow==b){this.focusedWindow=null}b._notify("onBlur")},focus:function(d){var b=this.getWindow(d);if(!b){return}if(this.focusedWindow){this.blur(this.focusedWindow.getId())}if(b.options.focusClassName){b.changeClassName(b.options.focusClassName)}this.focusedWindow=b;b._notify("onFocus")},unsetOverflow:function(b){this.windows.each(function(e){e.oldOverflow=e.getContent().getStyle("overflow")||"auto";e.getContent().setStyle({overflow:"hidden"})});if(b&&b.oldOverflow){b.getContent().setStyle({overflow:b.oldOverflow})}},resetOverflow:function(){this.windows.each(function(b){if(b.oldOverflow){b.getContent().setStyle({overflow:b.oldOverflow})}})},updateZindex:function(b,d){if(b>this.maxZIndex){this.maxZIndex=b;if(this.focusedWindow){this.blur(this.focusedWindow.getId())}}this.focusedWindow=d;if(this.focusedWindow){this.focus(this.focusedWindow.getId())}}};var Dialog={dialogId:null,onCompleteFunc:null,callFunc:null,parameters:null,confirm:function(f,e){if(f&&typeof f!="string"){Dialog._runAjaxRequest(f,e,Dialog.confirm);return}f=f||"";e=e||{};var h=e.okLabel?e.okLabel:"Ok";var b=e.cancelLabel?e.cancelLabel:"Cancel";e=Object.extend(e,e.windowParameters||{});e.windowParameters=e.windowParameters||{};e.className=e.className||"alert";var d="class ='"+(e.buttonClass?e.buttonClass+" ":"")+" ok_button'";var g="class ='"+(e.buttonClass?e.buttonClass+" ":"")+" cancel_button'";var f="      <div class='"+e.className+"_message'>"+f+"</div>        <div class='"+e.className+"_buttons'>          <button type='button' title='"+h+"' onclick='Dialog.okCallback()' "+d+"><span><span><span>"+h+"</span></span></span></button>          <button type='button' title='"+b+"' onclick='Dialog.cancelCallback()' "+g+"><span><span><span>"+b+"</span></span></span></button>        </div>    ";return this._openDialog(f,e)},alert:function(e,d){if(e&&typeof e!="string"){Dialog._runAjaxRequest(e,d,Dialog.alert);return}e=e||"";d=d||{};var f=d.okLabel?d.okLabel:"Ok";d=Object.extend(d,d.windowParameters||{});d.windowParameters=d.windowParameters||{};d.className=d.className||"alert";var b="class ='"+(d.buttonClass?d.buttonClass+" ":"")+" ok_button'";var e="      <div class='"+d.className+"_message'>"+e+"</div>        <div class='"+d.className+"_buttons'>          <button type='button' title='"+f+"' onclick='Dialog.okCallback()' "+b+"><span><span><span>"+f+"</span></span></span></button>        </div>";return this._openDialog(e,d)},info:function(d,b){if(d&&typeof d!="string"){Dialog._runAjaxRequest(d,b,Dialog.info);return}d=d||"";b=b||{};b=Object.extend(b,b.windowParameters||{});b.windowParameters=b.windowParameters||{};b.className=b.className||"alert";var d="<div id='modal_dialog_message' class='"+b.className+"_message'>"+d+"</div>";if(b.showProgress){d+="<div id='modal_dialog_progress' class='"+b.className+"_progress'>  </div>"}b.ok=null;b.cancel=null;return this._openDialog(d,b)},setInfoMessage:function(b){$("modal_dialog_message").update(b)},closeInfo:function(){Windows.close(this.dialogId)},_openDialog:function(g,f){var e=f.className;if(!f.height&&!f.width){f.width=WindowUtilities.getPageSize(f.options.parent||document.body).pageWidth/2}if(f.id){this.dialogId=f.id}else{var d=new Date();this.dialogId="modal_dialog_"+d.getTime();f.id=this.dialogId}if(!f.height||!f.width){var b=WindowUtilities._computeSize(g,this.dialogId,f.width,f.height,5,e);if(f.height){f.width=b+5}else{f.height=b+5}}f.effectOptions=f.effectOptions;f.resizable=f.resizable||false;f.minimizable=f.minimizable||false;f.maximizable=f.maximizable||false;f.draggable=f.draggable||false;f.closable=f.closable||false;var h=new Window(f);h.getContent().innerHTML=g;h.showCenter(true,f.top,f.left);h.setDestroyOnClose();h.cancelCallback=f.onCancel||f.cancel;h.okCallback=f.onOk||f.ok;return h},_getAjaxContent:function(b){Dialog.callFunc(b.responseText,Dialog.parameters)},_runAjaxRequest:function(e,d,b){if(e.options==null){e.options={}}Dialog.onCompleteFunc=e.options.onComplete;Dialog.parameters=d;Dialog.callFunc=b;e.options.onComplete=Dialog._getAjaxContent;new Ajax.Request(e.url,e.options)},okCallback:function(){var b=Windows.focusedWindow;if(!b.okCallback||b.okCallback(b)){$$("#"+b.getId()+" input").each(function(d){d.onclick=null});b.close()}},cancelCallback:function(){var b=Windows.focusedWindow;$$("#"+b.getId()+" input").each(function(d){d.onclick=null});b.close();if(b.cancelCallback){b.cancelCallback(b)}}};if(Prototype.Browser.WebKit){var array=navigator.userAgent.match(new RegExp(/AppleWebKit\/([\d\.\+]*)/));Prototype.Browser.WebKitVersion=parseFloat(array[1])}var WindowUtilities={getWindowScroll:function(parent){var T,L,W,H;parent=parent||document.body;if(parent!=document.body){T=parent.scrollTop;L=parent.scrollLeft;W=parent.scrollWidth;H=parent.scrollHeight}else{var w=window;with(w.document){if(w.document.documentElement&&documentElement.scrollTop){T=documentElement.scrollTop;L=documentElement.scrollLeft}else{if(w.document.body){T=body.scrollTop;L=body.scrollLeft}}if(w.innerWidth){W=w.innerWidth;H=w.innerHeight}else{if(w.document.documentElement&&documentElement.clientWidth){W=documentElement.clientWidth;H=documentElement.clientHeight}else{W=body.offsetWidth;H=body.offsetHeight}}}}return{top:T,left:L,width:W,height:H}},getPageSize:function(f){f=f||document.body;var e,l;var g,d;if(f!=document.body){e=f.getWidth();l=f.getHeight();d=f.scrollWidth;g=f.scrollHeight}else{var h,b;if(window.innerHeight&&window.scrollMaxY){h=document.body.scrollWidth;b=window.innerHeight+window.scrollMaxY}else{if(document.body.scrollHeight>document.body.offsetHeight){h=document.body.scrollWidth;b=document.body.scrollHeight}else{h=document.body.offsetWidth;b=document.body.offsetHeight}}if(self.innerHeight){e=document.documentElement.clientWidth;l=self.innerHeight}else{if(document.documentElement&&document.documentElement.clientHeight){e=document.documentElement.clientWidth;l=document.documentElement.clientHeight}else{if(document.body){e=document.body.clientWidth;l=document.body.clientHeight}}}if(b<l){g=l}else{g=b}if(h<e){d=e}else{d=h}}return{pageWidth:d,pageHeight:g,windowWidth:e,windowHeight:l}},disableScreen:function(e,b,f,g,d){WindowUtilities.initLightbox(b,e,function(){this._disableScreen(e,b,f,g)}.bind(this),d||document.body)},_disableScreen:function(e,d,g,h){var f=$(d);var b=WindowUtilities.getPageSize(f.parentNode);if(h&&Prototype.Browser.IE){WindowUtilities._hideSelect();WindowUtilities._showSelect(h)}f.style.height=(b.pageHeight+"px");f.style.display="none";if(d=="overlay_modal"&&Window.hasEffectLib&&Windows.overlayShowEffectOptions){f.overlayOpacity=g;new Effect.Appear(f,Object.extend({from:0,to:g},Windows.overlayShowEffectOptions))}else{f.style.display="block"}},enableScreen:function(d){d=d||"overlay_modal";var b=$(d);if(b){if(d=="overlay_modal"&&Window.hasEffectLib&&Windows.overlayHideEffectOptions){new Effect.Fade(b,Object.extend({from:b.overlayOpacity,to:0},Windows.overlayHideEffectOptions))}else{b.style.display="none";b.parentNode.removeChild(b)}if(d!="__invisible__"){WindowUtilities._showSelect()}}},_hideSelect:function(b){if(Prototype.Browser.IE){b=b==null?"":"#"+b+" ";$$(b+"select").each(function(d){if(!WindowUtilities.isDefined(d.oldVisibility)){d.oldVisibility=d.style.visibility?d.style.visibility:"visible";d.style.visibility="hidden"}})}},_showSelect:function(b){if(Prototype.Browser.IE){b=b==null?"":"#"+b+" ";$$(b+"select").each(function(d){if(WindowUtilities.isDefined(d.oldVisibility)){try{d.style.visibility=d.oldVisibility}catch(f){d.style.visibility="visible"}d.oldVisibility=null}else{if(d.style.visibility){d.style.visibility="visible"}}})}},isDefined:function(b){return typeof(b)!="undefined"&&b!=null},initLightbox:function(g,e,b,d){if($(g)){Element.setStyle(g,{zIndex:Windows.maxZIndex+1});Windows.maxZIndex++;b()}else{var f=document.createElement("div");f.setAttribute("id",g);f.className="overlay_"+e;f.style.display="none";f.style.position="absolute";f.style.top="0";f.style.left="0";f.style.zIndex=Windows.maxZIndex+1;Windows.maxZIndex++;f.style.width="100%";d.insertBefore(f,d.firstChild);if(Prototype.Browser.WebKit&&g=="overlay_modal"){setTimeout(function(){b()},10)}else{b()}}},setCookie:function(d,b){document.cookie=b[0]+"="+escape(d)+((b[1])?"; expires="+b[1].toGMTString():"")+((b[2])?"; path="+b[2]:"")+((b[3])?"; domain="+b[3]:"")+((b[4])?"; secure":"")},getCookie:function(e){var d=document.cookie;var g=e+"=";var f=d.indexOf("; "+g);if(f==-1){f=d.indexOf(g);if(f!=0){return null}}else{f+=2}var b=document.cookie.indexOf(";",f);if(b==-1){b=d.length}return unescape(d.substring(f+g.length,b))},_computeSize:function(g,b,d,l,f,h){var o=document.body;var e=document.createElement("div");e.setAttribute("id",b);e.className=h+"_content";if(l){e.style.height=l+"px"}else{e.style.width=d+"px"}e.style.position="absolute";e.style.top="0";e.style.left="0";e.style.display="none";e.innerHTML=g;o.insertBefore(e,o.firstChild);var n;if(l){n=$(e).getDimensions().width+f}else{n=$(e).getDimensions().height+f}o.removeChild(e);return n}};var Builder={NODEMAP:{AREA:"map",CAPTION:"table",COL:"table",COLGROUP:"table",LEGEND:"fieldset",OPTGROUP:"select",OPTION:"select",PARAM:"object",TBODY:"table",TD:"table",TFOOT:"table",TH:"table",THEAD:"table",TR:"table"},node:function(b){b=b.toUpperCase();var l=this.NODEMAP[b]||"div";var d=document.createElement(l);try{d.innerHTML="<"+b+"></"+b+">"}catch(h){}var g=d.firstChild||null;if(g&&(g.tagName.toUpperCase()!=b)){g=g.getElementsByTagName(b)[0]}if(!g){g=document.createElement(b)}if(!g){return}if(arguments[1]){if(this._isStringOrNumber(arguments[1])||(arguments[1] instanceof Array)||arguments[1].tagName){this._children(g,arguments[1])}else{var f=this._attributes(arguments[1]);if(f.length){try{d.innerHTML="<"+b+" "+f+"></"+b+">"}catch(h){}g=d.firstChild||null;if(!g){g=document.createElement(b);for(attr in arguments[1]){g[attr=="class"?"className":attr]=arguments[1][attr]}}if(g.tagName.toUpperCase()!=b){g=d.getElementsByTagName(b)[0]}}}}if(arguments[2]){this._children(g,arguments[2])}return $(g)},_text:function(b){return document.createTextNode(b)},ATTR_MAP:{className:"class",htmlFor:"for"},_attributes:function(b){var d=[];for(attribute in b){d.push((attribute in this.ATTR_MAP?this.ATTR_MAP[attribute]:attribute)+'="'+b[attribute].toString().escapeHTML().gsub(/"/,"&quot;")+'"')}return d.join(" ")},_children:function(d,b){if(b.tagName){d.appendChild(b);return}if(typeof b=="object"){b.flatten().each(function(f){if(typeof f=="object"){d.appendChild(f)}else{if(Builder._isStringOrNumber(f)){d.appendChild(Builder._text(f))}}})}else{if(Builder._isStringOrNumber(b)){d.appendChild(Builder._text(b))}}},_isStringOrNumber:function(b){return(typeof b=="string"||typeof b=="number")},build:function(d){var b=this.node("div");$(b).update(d.strip());return b.down()},dump:function(d){if(typeof d!="object"&&typeof d!="function"){d=window}var b=("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);b.each(function(e){d[e]=function(){return Builder.node.apply(Builder,[e].concat($A(arguments)))}})}};String.prototype.parseColor=function(){var b="#";if(this.slice(0,4)=="rgb("){var e=this.slice(4,this.length-1).split(",");var d=0;do{b+=parseInt(e[d]).toColorPart()}while(++d<3)}else{if(this.slice(0,1)=="#"){if(this.length==4){for(var d=1;d<4;d++){b+=(this.charAt(d)+this.charAt(d)).toLowerCase()}}if(this.length==7){b=this.toLowerCase()}}}return(b.length==7?b:(arguments[0]||this))};Element.collectTextNodes=function(b){return $A($(b).childNodes).collect(function(d){return(d.nodeType==3?d.nodeValue:(d.hasChildNodes()?Element.collectTextNodes(d):""))}).flatten().join("")};Element.collectTextNodesIgnoreClass=function(b,d){return $A($(b).childNodes).collect(function(e){return(e.nodeType==3?e.nodeValue:((e.hasChildNodes()&&!Element.hasClassName(e,d))?Element.collectTextNodesIgnoreClass(e,d):""))}).flatten().join("")};Element.setContentZoom=function(b,d){b=$(b);b.setStyle({fontSize:(d/100)+"em"});if(Prototype.Browser.WebKit){window.scrollBy(0,0)}return b};Element.getInlineOpacity=function(b){return $(b).style.opacity||""};Element.forceRerendering=function(b){try{b=$(b);var f=document.createTextNode(" ");b.appendChild(f);b.removeChild(f)}catch(d){}};var Effect={_elementDoesNotExistError:{name:"ElementDoesNotExistError",message:"The specified DOM element does not exist, but is required for this effect to operate"},Transitions:{linear:Prototype.K,sinoidal:function(b){return(-Math.cos(b*Math.PI)/2)+0.5},reverse:function(b){return 1-b},flicker:function(b){var b=((-Math.cos(b*Math.PI)/4)+0.75)+Math.random()/4;return b>1?1:b},wobble:function(b){return(-Math.cos(b*Math.PI*(9*b))/2)+0.5},pulse:function(d,b){return(-Math.cos((d*((b||5)-0.5)*2)*Math.PI)/2)+0.5},spring:function(b){return 1-(Math.cos(b*4.5*Math.PI)*Math.exp(-b*6))},none:function(b){return 0},full:function(b){return 1}},DefaultOptions:{duration:1,fps:100,sync:false,from:0,to:1,delay:0,queue:"parallel"},tagifyText:function(b){var d="position:relative";if(Prototype.Browser.IE){d+=";zoom:1"}b=$(b);$A(b.childNodes).each(function(e){if(e.nodeType==3){e.nodeValue.toArray().each(function(f){b.insertBefore(new Element("span",{style:d}).update(f==" "?String.fromCharCode(160):f),e)});Element.remove(e)}})},multiple:function(d,e){var g;if(((typeof d=="object")||Object.isFunction(d))&&(d.length)){g=d}else{g=$(d).childNodes}var b=Object.extend({speed:0.1,delay:0},arguments[2]||{});var f=b.delay;$A(g).each(function(l,h){new e(l,Object.extend(b,{delay:h*b.speed+f}))})},PAIRS:{slide:["SlideDown","SlideUp"],blind:["BlindDown","BlindUp"],appear:["Appear","Fade"]},toggle:function(d,e){d=$(d);e=(e||"appear").toLowerCase();var b=Object.extend({queue:{position:"end",scope:(d.id||"global"),limit:1}},arguments[2]||{});Effect[d.visible()?Effect.PAIRS[e][1]:Effect.PAIRS[e][0]](d,b)}};Effect.DefaultOptions.transition=Effect.Transitions.sinoidal;Effect.ScopedQueue=Class.create(Enumerable,{initialize:function(){this.effects=[];this.interval=null},_each:function(b){this.effects._each(b)},add:function(d){var e=new Date().getTime();var b=Object.isString(d.options.queue)?d.options.queue:d.options.queue.position;switch(b){case"front":this.effects.findAll(function(f){return f.state=="idle"}).each(function(f){f.startOn+=d.finishOn;f.finishOn+=d.finishOn});break;case"with-last":e=this.effects.pluck("startOn").max()||e;break;case"end":e=this.effects.pluck("finishOn").max()||e;break}d.startOn+=e;d.finishOn+=e;if(!d.options.queue.limit||(this.effects.length<d.options.queue.limit)){this.effects.push(d)}if(!this.interval){this.interval=setInterval(this.loop.bind(this),15)}},remove:function(b){this.effects=this.effects.reject(function(d){return d==b});if(this.effects.length==0){clearInterval(this.interval);this.interval=null}},loop:function(){var e=new Date().getTime();for(var d=0,b=this.effects.length;d<b;d++){this.effects[d]&&this.effects[d].loop(e)}}});Effect.Queues={instances:$H(),get:function(b){if(!Object.isString(b)){return b}return this.instances.get(b)||this.instances.set(b,new Effect.ScopedQueue())}};Effect.Queue=Effect.Queues.get("global");Effect.Base=Class.create({position:null,start:function(b){function d(f,e){return((f[e+"Internal"]?"this.options."+e+"Internal(this);":"")+(f[e]?"this.options."+e+"(this);":""))}if(b&&b.transition===false){b.transition=Effect.Transitions.linear}this.options=Object.extend(Object.extend({},Effect.DefaultOptions),b||{});this.currentFrame=0;this.state="idle";this.startOn=this.options.delay*1000;this.finishOn=this.startOn+(this.options.duration*1000);this.fromToDelta=this.options.to-this.options.from;this.totalTime=this.finishOn-this.startOn;this.totalFrames=this.options.fps*this.options.duration;this.render=(function(){function e(g,f){if(g.options[f+"Internal"]){g.options[f+"Internal"](g)}if(g.options[f]){g.options[f](g)}}return function(f){if(this.state==="idle"){this.state="running";e(this,"beforeSetup");if(this.setup){this.setup()}e(this,"afterSetup")}if(this.state==="running"){f=(this.options.transition(f)*this.fromToDelta)+this.options.from;this.position=f;e(this,"beforeUpdate");if(this.update){this.update(f)}e(this,"afterUpdate")}}})();this.event("beforeStart");if(!this.options.sync){Effect.Queues.get(Object.isString(this.options.queue)?"global":this.options.queue.scope).add(this)}},loop:function(e){if(e>=this.startOn){if(e>=this.finishOn){this.render(1);this.cancel();this.event("beforeFinish");if(this.finish){this.finish()}this.event("afterFinish");return}var d=(e-this.startOn)/this.totalTime,b=(d*this.totalFrames).round();if(b>this.currentFrame){this.render(d);this.currentFrame=b}}},cancel:function(){if(!this.options.sync){Effect.Queues.get(Object.isString(this.options.queue)?"global":this.options.queue.scope).remove(this)}this.state="finished"},event:function(b){if(this.options[b+"Internal"]){this.options[b+"Internal"](this)}if(this.options[b]){this.options[b](this)}},inspect:function(){var b=$H();for(property in this){if(!Object.isFunction(this[property])){b.set(property,this[property])}}return"#<Effect:"+b.inspect()+",options:"+$H(this.options).inspect()+">"}});Effect.Parallel=Class.create(Effect.Base,{initialize:function(b){this.effects=b||[];this.start(arguments[1])},update:function(b){this.effects.invoke("render",b)},finish:function(b){this.effects.each(function(d){d.render(1);d.cancel();d.event("beforeFinish");if(d.finish){d.finish(b)}d.event("afterFinish")})}});Effect.Tween=Class.create(Effect.Base,{initialize:function(e,h,g){e=Object.isString(e)?$(e):e;var d=$A(arguments),f=d.last(),b=d.length==5?d[3]:null;this.method=Object.isFunction(f)?f.bind(e):Object.isFunction(e[f])?e[f].bind(e):function(l){e[f]=l};this.start(Object.extend({from:h,to:g},b||{}))},update:function(b){this.method(b)}});Effect.Event=Class.create(Effect.Base,{initialize:function(){this.start(Object.extend({duration:0},arguments[0]||{}))},update:Prototype.emptyFunction});Effect.Opacity=Class.create(Effect.Base,{initialize:function(d){this.element=$(d);if(!this.element){throw (Effect._elementDoesNotExistError)}if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout)){this.element.setStyle({zoom:1})}var b=Object.extend({from:this.element.getOpacity()||0,to:1},arguments[1]||{});this.start(b)},update:function(b){this.element.setOpacity(b)}});Effect.Move=Class.create(Effect.Base,{initialize:function(d){this.element=$(d);if(!this.element){throw (Effect._elementDoesNotExistError)}var b=Object.extend({x:0,y:0,mode:"relative"},arguments[1]||{});this.start(b)},setup:function(){this.element.makePositioned();this.originalLeft=parseFloat(this.element.getStyle("left")||"0");this.originalTop=parseFloat(this.element.getStyle("top")||"0");if(this.options.mode=="absolute"){this.options.x=this.options.x-this.originalLeft;this.options.y=this.options.y-this.originalTop}},update:function(b){this.element.setStyle({left:(this.options.x*b+this.originalLeft).round()+"px",top:(this.options.y*b+this.originalTop).round()+"px"})}});Effect.MoveBy=function(d,b,e){return new Effect.Move(d,Object.extend({x:e,y:b},arguments[3]||{}))};Effect.Scale=Class.create(Effect.Base,{initialize:function(d,e){this.element=$(d);if(!this.element){throw (Effect._elementDoesNotExistError)}var b=Object.extend({scaleX:true,scaleY:true,scaleContent:true,scaleFromCenter:false,scaleMode:"box",scaleFrom:100,scaleTo:e},arguments[2]||{});this.start(b)},setup:function(){this.restoreAfterFinish=this.options.restoreAfterFinish||false;this.elementPositioning=this.element.getStyle("position");this.originalStyle={};["top","left","width","height","fontSize"].each(function(d){this.originalStyle[d]=this.element.style[d]}.bind(this));this.originalTop=this.element.offsetTop;this.originalLeft=this.element.offsetLeft;var b=this.element.getStyle("font-size")||"100%";["em","px","%","pt"].each(function(d){if(b.indexOf(d)>0){this.fontSize=parseFloat(b);this.fontSizeType=d}}.bind(this));this.factor=(this.options.scaleTo-this.options.scaleFrom)/100;this.dims=null;if(this.options.scaleMode=="box"){this.dims=[this.element.offsetHeight,this.element.offsetWidth]}if(/^content/.test(this.options.scaleMode)){this.dims=[this.element.scrollHeight,this.element.scrollWidth]}if(!this.dims){this.dims=[this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth]}},update:function(b){var d=(this.options.scaleFrom/100)+(this.factor*b);if(this.options.scaleContent&&this.fontSize){this.element.setStyle({fontSize:this.fontSize*d+this.fontSizeType})}this.setDimensions(this.dims[0]*d,this.dims[1]*d)},finish:function(b){if(this.restoreAfterFinish){this.element.setStyle(this.originalStyle)}},setDimensions:function(b,g){var h={};if(this.options.scaleX){h.width=g.round()+"px"}if(this.options.scaleY){h.height=b.round()+"px"}if(this.options.scaleFromCenter){var f=(b-this.dims[0])/2;var e=(g-this.dims[1])/2;if(this.elementPositioning=="absolute"){if(this.options.scaleY){h.top=this.originalTop-f+"px"}if(this.options.scaleX){h.left=this.originalLeft-e+"px"}}else{if(this.options.scaleY){h.top=-f+"px"}if(this.options.scaleX){h.left=-e+"px"}}}this.element.setStyle(h)}});Effect.Highlight=Class.create(Effect.Base,{initialize:function(d){this.element=$(d);if(!this.element){throw (Effect._elementDoesNotExistError)}var b=Object.extend({startcolor:"#ffff99"},arguments[1]||{});this.start(b)},setup:function(){if(this.element.getStyle("display")=="none"){this.cancel();return}this.oldStyle={};if(!this.options.keepBackgroundImage){this.oldStyle.backgroundImage=this.element.getStyle("background-image");this.element.setStyle({backgroundImage:"none"})}if(!this.options.endcolor){this.options.endcolor=this.element.getStyle("background-color").parseColor("#ffffff")}if(!this.options.restorecolor){this.options.restorecolor=this.element.getStyle("background-color")}this._base=$R(0,2).map(function(b){return parseInt(this.options.startcolor.slice(b*2+1,b*2+3),16)}.bind(this));this._delta=$R(0,2).map(function(b){return parseInt(this.options.endcolor.slice(b*2+1,b*2+3),16)-this._base[b]}.bind(this))},update:function(b){this.element.setStyle({backgroundColor:$R(0,2).inject("#",function(d,e,f){return d+((this._base[f]+(this._delta[f]*b)).round().toColorPart())}.bind(this))})},finish:function(){this.element.setStyle(Object.extend(this.oldStyle,{backgroundColor:this.options.restorecolor}))}});Effect.ScrollTo=function(e){var d=arguments[1]||{},b=document.viewport.getScrollOffsets(),f=$(e).cumulativeOffset();if(d.offset){f[1]+=d.offset}return new Effect.Tween(null,b.top,f[1],d,function(g){scrollTo(b.left,g.round())})};Effect.Fade=function(e){e=$(e);var b=e.getInlineOpacity();var d=Object.extend({from:e.getOpacity()||1,to:0,afterFinishInternal:function(f){if(f.options.to!=0){return}f.element.hide().setStyle({opacity:b})}},arguments[1]||{});return new Effect.Opacity(e,d)};Effect.Appear=function(d){d=$(d);var b=Object.extend({from:(d.getStyle("display")=="none"?0:d.getOpacity()||0),to:1,afterFinishInternal:function(e){e.element.forceRerendering()},beforeSetup:function(e){e.element.setOpacity(e.options.from).show()}},arguments[1]||{});return new Effect.Opacity(d,b)};Effect.Puff=function(d){d=$(d);var b={opacity:d.getInlineOpacity(),position:d.getStyle("position"),top:d.style.top,left:d.style.left,width:d.style.width,height:d.style.height};return new Effect.Parallel([new Effect.Scale(d,200,{sync:true,scaleFromCenter:true,scaleContent:true,restoreAfterFinish:true}),new Effect.Opacity(d,{sync:true,to:0})],Object.extend({duration:1,beforeSetupInternal:function(e){Position.absolutize(e.effects[0].element)},afterFinishInternal:function(e){e.effects[0].element.hide().setStyle(b)}},arguments[1]||{}))};Effect.BlindUp=function(b){b=$(b);b.makeClipping();return new Effect.Scale(b,0,Object.extend({scaleContent:false,scaleX:false,restoreAfterFinish:true,afterFinishInternal:function(d){d.element.hide().undoClipping()}},arguments[1]||{}))};Effect.BlindDown=function(d){d=$(d);var b=d.getDimensions();return new Effect.Scale(d,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:b.height,originalWidth:b.width},restoreAfterFinish:true,afterSetup:function(e){e.element.makeClipping().setStyle({height:"0px"}).show()},afterFinishInternal:function(e){e.element.undoClipping()}},arguments[1]||{}))};Effect.SwitchOff=function(d){d=$(d);var b=d.getInlineOpacity();return new Effect.Appear(d,Object.extend({duration:0.4,from:0,transition:Effect.Transitions.flicker,afterFinishInternal:function(e){new Effect.Scale(e.element,1,{duration:0.3,scaleFromCenter:true,scaleX:false,scaleContent:false,restoreAfterFinish:true,beforeSetup:function(f){f.element.makePositioned().makeClipping()},afterFinishInternal:function(f){f.element.hide().undoClipping().undoPositioned().setStyle({opacity:b})}})}},arguments[1]||{}))};Effect.DropOut=function(d){d=$(d);var b={top:d.getStyle("top"),left:d.getStyle("left"),opacity:d.getInlineOpacity()};return new Effect.Parallel([new Effect.Move(d,{x:0,y:100,sync:true}),new Effect.Opacity(d,{sync:true,to:0})],Object.extend({duration:0.5,beforeSetup:function(e){e.effects[0].element.makePositioned()},afterFinishInternal:function(e){e.effects[0].element.hide().undoPositioned().setStyle(b)}},arguments[1]||{}))};Effect.Shake=function(f){f=$(f);var d=Object.extend({distance:20,duration:0.5},arguments[1]||{});var g=parseFloat(d.distance);var e=parseFloat(d.duration)/10;var b={top:f.getStyle("top"),left:f.getStyle("left")};return new Effect.Move(f,{x:g,y:0,duration:e,afterFinishInternal:function(h){new Effect.Move(h.element,{x:-g*2,y:0,duration:e*2,afterFinishInternal:function(l){new Effect.Move(l.element,{x:g*2,y:0,duration:e*2,afterFinishInternal:function(n){new Effect.Move(n.element,{x:-g*2,y:0,duration:e*2,afterFinishInternal:function(o){new Effect.Move(o.element,{x:g*2,y:0,duration:e*2,afterFinishInternal:function(p){new Effect.Move(p.element,{x:-g,y:0,duration:e,afterFinishInternal:function(q){q.element.undoPositioned().setStyle(b)}})}})}})}})}})}})};Effect.SlideDown=function(e){e=$(e).cleanWhitespace();var b=e.down().getStyle("bottom");var d=e.getDimensions();return new Effect.Scale(e,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:window.opera?0:1,scaleMode:{originalHeight:d.height,originalWidth:d.width},restoreAfterFinish:true,afterSetup:function(f){f.element.makePositioned();f.element.down().makePositioned();if(window.opera){f.element.setStyle({top:""})}f.element.makeClipping().setStyle({height:"0px"}).show()},afterUpdateInternal:function(f){f.element.down().setStyle({bottom:(f.dims[0]-f.element.clientHeight)+"px"})},afterFinishInternal:function(f){f.element.undoClipping().undoPositioned();f.element.down().undoPositioned().setStyle({bottom:b})}},arguments[1]||{}))};Effect.SlideUp=function(e){e=$(e).cleanWhitespace();var b=e.down().getStyle("bottom");var d=e.getDimensions();return new Effect.Scale(e,window.opera?0:1,Object.extend({scaleContent:false,scaleX:false,scaleMode:"box",scaleFrom:100,scaleMode:{originalHeight:d.height,originalWidth:d.width},restoreAfterFinish:true,afterSetup:function(f){f.element.makePositioned();f.element.down().makePositioned();if(window.opera){f.element.setStyle({top:""})}f.element.makeClipping().show()},afterUpdateInternal:function(f){f.element.down().setStyle({bottom:(f.dims[0]-f.element.clientHeight)+"px"})},afterFinishInternal:function(f){f.element.hide().undoClipping().undoPositioned();f.element.down().undoPositioned().setStyle({bottom:b})}},arguments[1]||{}))};Effect.Squish=function(b){return new Effect.Scale(b,window.opera?1:0,{restoreAfterFinish:true,beforeSetup:function(d){d.element.makeClipping()},afterFinishInternal:function(d){d.element.hide().undoClipping()}})};Effect.Grow=function(e){e=$(e);var d=Object.extend({direction:"center",moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.full},arguments[1]||{});var b={top:e.style.top,left:e.style.left,height:e.style.height,width:e.style.width,opacity:e.getInlineOpacity()};var l=e.getDimensions();var n,h;var g,f;switch(d.direction){case"top-left":n=h=g=f=0;break;case"top-right":n=l.width;h=f=0;g=-l.width;break;case"bottom-left":n=g=0;h=l.height;f=-l.height;break;case"bottom-right":n=l.width;h=l.height;g=-l.width;f=-l.height;break;case"center":n=l.width/2;h=l.height/2;g=-l.width/2;f=-l.height/2;break}return new Effect.Move(e,{x:n,y:h,duration:0.01,beforeSetup:function(o){o.element.hide().makeClipping().makePositioned()},afterFinishInternal:function(o){new Effect.Parallel([new Effect.Opacity(o.element,{sync:true,to:1,from:0,transition:d.opacityTransition}),new Effect.Move(o.element,{x:g,y:f,sync:true,transition:d.moveTransition}),new Effect.Scale(o.element,100,{scaleMode:{originalHeight:l.height,originalWidth:l.width},sync:true,scaleFrom:window.opera?1:0,transition:d.scaleTransition,restoreAfterFinish:true})],Object.extend({beforeSetup:function(p){p.effects[0].element.setStyle({height:"0px"}).show()},afterFinishInternal:function(p){p.effects[0].element.undoClipping().undoPositioned().setStyle(b)}},d))}})};Effect.Shrink=function(e){e=$(e);var d=Object.extend({direction:"center",moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.none},arguments[1]||{});var b={top:e.style.top,left:e.style.left,height:e.style.height,width:e.style.width,opacity:e.getInlineOpacity()};var h=e.getDimensions();var g,f;switch(d.direction){case"top-left":g=f=0;break;case"top-right":g=h.width;f=0;break;case"bottom-left":g=0;f=h.height;break;case"bottom-right":g=h.width;f=h.height;break;case"center":g=h.width/2;f=h.height/2;break}return new Effect.Parallel([new Effect.Opacity(e,{sync:true,to:0,from:1,transition:d.opacityTransition}),new Effect.Scale(e,window.opera?1:0,{sync:true,transition:d.scaleTransition,restoreAfterFinish:true}),new Effect.Move(e,{x:g,y:f,sync:true,transition:d.moveTransition})],Object.extend({beforeStartInternal:function(l){l.effects[0].element.makePositioned().makeClipping()},afterFinishInternal:function(l){l.effects[0].element.hide().undoClipping().undoPositioned().setStyle(b)}},d))};Effect.Pulsate=function(e){e=$(e);var d=arguments[1]||{},b=e.getInlineOpacity(),g=d.transition||Effect.Transitions.linear,f=function(h){return 1-g((-Math.cos((h*(d.pulses||5)*2)*Math.PI)/2)+0.5)};return new Effect.Opacity(e,Object.extend(Object.extend({duration:2,from:0,afterFinishInternal:function(h){h.element.setStyle({opacity:b})}},d),{transition:f}))};Effect.Fold=function(d){d=$(d);var b={top:d.style.top,left:d.style.left,width:d.style.width,height:d.style.height};d.makeClipping();return new Effect.Scale(d,5,Object.extend({scaleContent:false,scaleX:false,afterFinishInternal:function(e){new Effect.Scale(d,1,{scaleContent:false,scaleY:false,afterFinishInternal:function(f){f.element.hide().undoClipping().setStyle(b)}})}},arguments[1]||{}))};Effect.Morph=Class.create(Effect.Base,{initialize:function(e){this.element=$(e);if(!this.element){throw (Effect._elementDoesNotExistError)}var b=Object.extend({style:{}},arguments[1]||{});if(!Object.isString(b.style)){this.style=$H(b.style)}else{if(b.style.include(":")){this.style=b.style.parseStyle()}else{this.element.addClassName(b.style);this.style=$H(this.element.getStyles());this.element.removeClassName(b.style);var d=this.element.getStyles();this.style=this.style.reject(function(f){return f.value==d[f.key]});b.afterFinishInternal=function(f){f.element.addClassName(f.options.style);f.transforms.each(function(g){f.element.style[g.style]=""})}}}this.start(b)},setup:function(){function b(d){if(!d||["rgba(0, 0, 0, 0)","transparent"].include(d)){d="#ffffff"}d=d.parseColor();return $R(0,2).map(function(e){return parseInt(d.slice(e*2+1,e*2+3),16)})}this.transforms=this.style.map(function(l){var h=l[0],g=l[1],f=null;if(g.parseColor("#zzzzzz")!="#zzzzzz"){g=g.parseColor();f="color"}else{if(h=="opacity"){g=parseFloat(g);if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout)){this.element.setStyle({zoom:1})}}else{if(Element.CSS_LENGTH.test(g)){var e=g.match(/^([\+\-]?[0-9\.]+)(.*)$/);g=parseFloat(e[1]);f=(e.length==3)?e[2]:null}}}var d=this.element.getStyle(h);return{style:h.camelize(),originalValue:f=="color"?b(d):parseFloat(d||0),targetValue:f=="color"?b(g):g,unit:f}}.bind(this)).reject(function(d){return((d.originalValue==d.targetValue)||(d.unit!="color"&&(isNaN(d.originalValue)||isNaN(d.targetValue))))})},update:function(b){var f={},d,e=this.transforms.length;while(e--){f[(d=this.transforms[e]).style]=d.unit=="color"?"#"+(Math.round(d.originalValue[0]+(d.targetValue[0]-d.originalValue[0])*b)).toColorPart()+(Math.round(d.originalValue[1]+(d.targetValue[1]-d.originalValue[1])*b)).toColorPart()+(Math.round(d.originalValue[2]+(d.targetValue[2]-d.originalValue[2])*b)).toColorPart():(d.originalValue+(d.targetValue-d.originalValue)*b).toFixed(3)+(d.unit===null?"":d.unit)}this.element.setStyle(f,true)}});Effect.Transform=Class.create({initialize:function(b){this.tracks=[];this.options=arguments[1]||{};this.addTracks(b)},addTracks:function(b){b.each(function(d){d=$H(d);var e=d.values().first();this.tracks.push($H({ids:d.keys().first(),effect:Effect.Morph,options:{style:e}}))}.bind(this));return this},play:function(){return new Effect.Parallel(this.tracks.map(function(b){var f=b.get("ids"),e=b.get("effect"),d=b.get("options");var g=[$(f)||$$(f)].flatten();return g.map(function(h){return new e(h,Object.extend({sync:true},d))})}).flatten(),this.options)}});Element.CSS_PROPERTIES=$w("backgroundColor backgroundPosition borderBottomColor borderBottomStyle borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth borderRightColor borderRightStyle borderRightWidth borderSpacing borderTopColor borderTopStyle borderTopWidth bottom clip color fontSize fontWeight height left letterSpacing lineHeight marginBottom marginLeft marginRight marginTop markerOffset maxHeight maxWidth minHeight minWidth opacity outlineColor outlineOffset outlineWidth paddingBottom paddingLeft paddingRight paddingTop right textIndent top width wordSpacing zIndex");Element.CSS_LENGTH=/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;String.__parseStyleElement=document.createElement("div");String.prototype.parseStyle=function(){var d,b=$H();if(Prototype.Browser.WebKit){d=new Element("div",{style:this}).style}else{String.__parseStyleElement.innerHTML='<div style="'+this+'"></div>';d=String.__parseStyleElement.childNodes[0].style}Element.CSS_PROPERTIES.each(function(e){if(d[e]){b.set(e,d[e])}});if(Prototype.Browser.IE&&this.include("opacity")){b.set("opacity",this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1])}return b};if(document.defaultView&&document.defaultView.getComputedStyle){Element.getStyles=function(d){var b=document.defaultView.getComputedStyle($(d),null);return Element.CSS_PROPERTIES.inject({},function(e,f){e[f]=b[f];return e})}}else{Element.getStyles=function(d){d=$(d);var b=d.currentStyle,e;e=Element.CSS_PROPERTIES.inject({},function(f,g){f[g]=b[g];return f});if(!e.opacity){e.opacity=d.getOpacity()}return e}}Effect.Methods={morph:function(b,d){b=$(b);new Effect.Morph(b,Object.extend({style:d},arguments[2]||{}));return b},visualEffect:function(e,g,d){e=$(e);var f=g.dasherize().camelize(),b=f.charAt(0).toUpperCase()+f.substring(1);new Effect[b](e,d);return e},highlight:function(d,b){d=$(d);new Effect.Highlight(d,b);return d}};$w("fade appear grow shrink fold blindUp blindDown slideUp slideDown pulsate shake puff squish switchOff dropOut").each(function(b){Effect.Methods[b]=function(e,d){e=$(e);Effect[b.charAt(0).toUpperCase()+b.substring(1)](e,d);return e}});$w("getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles").each(function(b){Effect.Methods[b]=Element[b]});Element.addMethods(Effect.Methods);function validateCreditCard(e){var d="0123456789";var b="";for(i=0;i<e.length;i++){x=e.charAt(i);if(d.indexOf(x,0)!=-1){b+=x}}j=b.length/2;k=Math.floor(j);m=Math.ceil(j)-k;c=0;for(i=0;i<k;i++){a=b.charAt(i*2+m)*2;c+=a>9?Math.floor(a/10+a%10):a}for(i=0;i<k+m;i++){c+=b.charAt(i*2+1-m)*1}return(c%10==0)}var Validator=Class.create();Validator.prototype={initialize:function(e,d,f,b){if(typeof f=="function"){this.options=$H(b);this._test=f}else{this.options=$H(f);this._test=function(){return true}}this.error=d||"Validation failed.";this.className=e},test:function(b,d){return(this._test(b,d)&&this.options.all(function(e){return Validator.methods[e.key]?Validator.methods[e.key](b,d,e.value):true}))}};Validator.methods={pattern:function(b,e,d){return Validation.get("IsEmpty").test(b)||d.test(b)},minLength:function(b,e,d){return b.length>=d},maxLength:function(b,e,d){return b.length<=d},min:function(b,e,d){return b>=parseFloat(d)},max:function(b,e,d){return b<=parseFloat(d)},notOneOf:function(b,e,d){return $A(d).all(function(f){return b!=f})},oneOf:function(b,e,d){return $A(d).any(function(f){return b==f})},is:function(b,e,d){return b==d},isNot:function(b,e,d){return b!=d},equalToField:function(b,e,d){return b==$F(d)},notEqualToField:function(b,e,d){return b!=$F(d)},include:function(b,e,d){return $A(d).all(function(f){return Validation.get(f).test(b,e)})}};var Validation=Class.create();Validation.defaultOptions={onSubmit:true,stopOnFirst:false,immediate:false,focusOnError:true,useTitles:false,addClassNameToContainer:false,containerClassName:".input-box",onFormValidate:function(b,d){},onElementValidate:function(b,d){}};Validation.prototype={initialize:function(d,b){this.form=$(d);if(!this.form){return}this.options=Object.extend({onSubmit:Validation.defaultOptions.onSubmit,stopOnFirst:Validation.defaultOptions.stopOnFirst,immediate:Validation.defaultOptions.immediate,focusOnError:Validation.defaultOptions.focusOnError,useTitles:Validation.defaultOptions.useTitles,onFormValidate:Validation.defaultOptions.onFormValidate,onElementValidate:Validation.defaultOptions.onElementValidate},b||{});if(this.options.onSubmit){Event.observe(this.form,"submit",this.onSubmit.bind(this),false)}if(this.options.immediate){Form.getElements(this.form).each(function(e){if(e.tagName.toLowerCase()=="select"){Event.observe(e,"blur",this.onChange.bindAsEventListener(this))}if(e.type.toLowerCase()=="radio"||e.type.toLowerCase()=="checkbox"){Event.observe(e,"click",this.onChange.bindAsEventListener(this))}else{Event.observe(e,"change",this.onChange.bindAsEventListener(this))}},this)}},onChange:function(b){Validation.isOnChange=true;Validation.validate(Event.element(b),{useTitle:this.options.useTitles,onElementValidate:this.options.onElementValidate});Validation.isOnChange=false},onSubmit:function(b){if(!this.validate()){Event.stop(b)}},validate:function(){var b=false;var d=this.options.useTitles;var g=this.options.onElementValidate;try{if(this.options.stopOnFirst){b=Form.getElements(this.form).all(function(e){if(e.hasClassName("local-validation")&&!this.isElementInForm(e,this.form)){return true}return Validation.validate(e,{useTitle:d,onElementValidate:g})},this)}else{b=Form.getElements(this.form).collect(function(e){if(e.hasClassName("local-validation")&&!this.isElementInForm(e,this.form)){return true}if(e.hasClassName("validation-disabled")){return true}return Validation.validate(e,{useTitle:d,onElementValidate:g})},this).all()}}catch(f){}if(!b&&this.options.focusOnError){try{Form.getElements(this.form).findAll(function(e){return $(e).hasClassName("validation-failed")}).first().focus()}catch(f){}}this.options.onFormValidate(b,this.form);return b},reset:function(){Form.getElements(this.form).each(Validation.reset)},isElementInForm:function(e,d){var b=e.up("form");if(b==d){return true}return false}};Object.extend(Validation,{validate:function(e,b){b=Object.extend({useTitle:false,onElementValidate:function(f,g){}},b||{});e=$(e);var d=$w(e.className);return result=d.all(function(f){var g=Validation.test(f,e,b.useTitle);b.onElementValidate(g,e);return g})},insertAdvice:function(f,d){var b=$(f).up(".field-row");if(b){Element.insert(b,{after:d})}else{if(f.up("td.value")){f.up("td.value").insert({bottom:d})}else{if(f.advaiceContainer&&$(f.advaiceContainer)){$(f.advaiceContainer).update(d)}else{switch(f.type.toLowerCase()){case"checkbox":case"radio":var e=f.parentNode;if(e){Element.insert(e,{bottom:d})}else{Element.insert(f,{after:d})}break;default:Element.insert(f,{after:d})}}}}},showAdvice:function(e,d,b){if(!e.advices){e.advices=new Hash()}else{e.advices.each(function(f){if(!d||f.value.id!=d.id){this.hideAdvice(e,f.value)}}.bind(this))}e.advices.set(b,d);if(typeof Effect=="undefined"){d.style.display="block"}else{if(!d._adviceAbsolutize){new Effect.Appear(d,{duration:1})}else{Position.absolutize(d);d.show();d.setStyle({top:d._adviceTop,left:d._adviceLeft,width:d._adviceWidth,"z-index":1000});d.addClassName("advice-absolute")}}},hideAdvice:function(d,b){if(b!=null){new Effect.Fade(b,{duration:1,afterFinishInternal:function(){b.hide()}})}},updateCallback:function(elm,status){if(typeof elm.callbackFunction!="undefined"){eval(elm.callbackFunction+"('"+elm.id+"','"+status+"')")}},ajaxError:function(g,f){var e="validate-ajax";var d=Validation.getAdvice(e,g);if(d==null){d=this.createAdvice(e,g,false,f)}this.showAdvice(g,d,"validate-ajax");this.updateCallback(g,"failed");g.addClassName("validation-failed");g.addClassName("validate-ajax");if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=""){var b=g.up(Validation.defaultOptions.containerClassName);if(b&&this.allowContainerClassName(g)){b.removeClassName("validation-passed");b.addClassName("validation-error")}}},allowContainerClassName:function(b){if(b.type=="radio"||b.type=="checkbox"){return b.hasClassName("change-container-classname")}return true},test:function(g,o,l){var d=Validation.get(g);var n="__advice"+g.camelize();try{if(Validation.isVisible(o)&&!d.test($F(o),o)){var f=Validation.getAdvice(g,o);if(f==null){f=this.createAdvice(g,o,l)}this.showAdvice(o,f,g);this.updateCallback(o,"failed");o[n]=1;if(!o.advaiceContainer){o.removeClassName("validation-passed");o.addClassName("validation-failed")}if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=""){var b=o.up(Validation.defaultOptions.containerClassName);if(b&&this.allowContainerClassName(o)){b.removeClassName("validation-passed");b.addClassName("validation-error")}}return false}else{var f=Validation.getAdvice(g,o);this.hideAdvice(o,f);this.updateCallback(o,"passed");o[n]="";o.removeClassName("validation-failed");o.addClassName("validation-passed");if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=""){var b=o.up(Validation.defaultOptions.containerClassName);if(b&&!b.down(".validation-failed")&&this.allowContainerClassName(o)){if(!Validation.get("IsEmpty").test(o.value)||!this.isVisible(o)){b.addClassName("validation-passed")}else{b.removeClassName("validation-passed")}b.removeClassName("validation-error")}}return true}}catch(h){throw (h)}},isVisible:function(b){while(b.tagName!="BODY"){if(!$(b).visible()){return false}b=b.parentNode}return true},getAdvice:function(b,d){return $("advice-"+b+"-"+Validation.getElmID(d))||$("advice-"+Validation.getElmID(d))},createAdvice:function(e,n,l,d){var b=Validation.get(e);var h=l?((n&&n.title)?n.title:b.error):b.error;if(d){h=d}if(jQuery.mage.__){h=jQuery.mage.__(h)}advice='<div class="validation-advice" id="advice-'+e+"-"+Validation.getElmID(n)+'" style="display:none">'+h+"</div>";Validation.insertAdvice(n,advice);advice=Validation.getAdvice(e,n);if($(n).hasClassName("absolute-advice")){var g=$(n).getDimensions();var f=Position.cumulativeOffset(n);advice._adviceTop=(f[1]+g.height)+"px";advice._adviceLeft=(f[0])+"px";advice._adviceWidth=(g.width)+"px";advice._adviceAbsolutize=true}return advice},getElmID:function(b){return b.id?b.id:b.name},reset:function(d){d=$(d);var b=$w(d.className);b.each(function(g){var h="__advice"+g.camelize();if(d[h]){var f=Validation.getAdvice(g,d);if(f){f.hide()}d[h]=""}d.removeClassName("validation-failed");d.removeClassName("validation-passed");if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=""){var e=d.up(Validation.defaultOptions.containerClassName);if(e){e.removeClassName("validation-passed");e.removeClassName("validation-error")}}})},add:function(f,e,g,d){var b={};b[f]=new Validator(f,e,g,d);Object.extend(Validation.methods,b)},addAllThese:function(b){var d={};$A(b).each(function(e){d[e[0]]=new Validator(e[0],e[1],e[2],(e.length>3?e[3]:{}))});Object.extend(Validation.methods,d)},get:function(b){return Validation.methods[b]?Validation.methods[b]:Validation.methods._LikeNoIDIEverSaw_},methods:{_LikeNoIDIEverSaw_:new Validator("_LikeNoIDIEverSaw_","",{})}});Validation.add("IsEmpty","",function(b){return(b==""||(b==null)||(b.length==0)||/^\s+$/.test(b))});Validation.addAllThese([["validate-no-html-tags","HTML tags are not allowed",function(b){return !/<(\/)?\w+/.test(b)}],["validate-select","Please select an option.",function(b){return((b!="none")&&(b!=null)&&(b.length!=0))}],["required-entry","This is a required field.",function(b){return !Validation.get("IsEmpty").test(b)}],["validate-number","Please enter a valid number in this field.",function(b){return Validation.get("IsEmpty").test(b)||(!isNaN(parseNumber(b))&&/^\s*-?\d*(\.\d*)?\s*$/.test(b))}],["validate-number-range","The value is not within the specified range.",function(e,g){if(Validation.get("IsEmpty").test(e)){return true}var f=parseNumber(e);if(isNaN(f)){return false}var d=/^number-range-(-?[\d.,]+)?-(-?[\d.,]+)?$/,b=true;$w(g.className).each(function(l){var h=d.exec(l);if(h){b=b&&(h[1]==null||h[1]==""||f>=parseNumber(h[1]))&&(h[2]==null||h[2]==""||f<=parseNumber(h[2]))}});return b}],["validate-digits","Please use numbers only in this field. Please avoid spaces or other characters such as dots or commas.",function(b){return Validation.get("IsEmpty").test(b)||!/[^\d]/.test(b)}],["validate-digits-range","The value is not within the specified range.",function(e,g){if(Validation.get("IsEmpty").test(e)){return true}var f=parseNumber(e);if(isNaN(f)){return false}var d=/^digits-range-(-?\d+)?-(-?\d+)?$/,b=true;$w(g.className).each(function(l){var h=d.exec(l);if(h){b=b&&(h[1]==null||h[1]==""||f>=parseNumber(h[1]))&&(h[2]==null||h[2]==""||f<=parseNumber(h[2]))}});return b}],["validate-range","The value is not within the specified range.",function(f,l){var g,h;if(Validation.get("IsEmpty").test(f)){return true}else{if(Validation.get("validate-digits").test(f)){g=h=parseNumber(f)}else{var e=/^(-?\d+)?-(-?\d+)?$/.exec(f);if(e){g=parseNumber(e[1]);h=parseNumber(e[2]);if(g>h){return false}}else{return false}}}var d=/^range-(-?\d+)?-(-?\d+)?$/,b=true;$w(l.className).each(function(n){var q=d.exec(n);if(q){var p=parseNumber(q[1]);var o=parseNumber(q[2]);b=b&&(isNaN(p)||g>=p)&&(isNaN(o)||h<=o)}});return b}],["validate-alpha","Please use letters only (a-z or A-Z) in this field.",function(b){return Validation.get("IsEmpty").test(b)||/^[a-zA-Z]+$/.test(b)}],["validate-code","Please use only letters (a-z), numbers (0-9) or underscore (_) in this field, and the first character should be a letter.",function(b){return Validation.get("IsEmpty").test(b)||/^[a-z]+[a-z0-9_]+$/.test(b)}],["validate-alphanum","Please use only letters (a-z or A-Z) or numbers (0-9) in this field. No spaces or other characters are allowed.",function(b){return Validation.get("IsEmpty").test(b)||/^[a-zA-Z0-9]+$/.test(b)}],["validate-alphanum-with-spaces","Please use only letters (a-z or A-Z), numbers (0-9) or spaces only in this field.",function(b){return Validation.get("IsEmpty").test(b)||/^[a-zA-Z0-9 ]+$/.test(b)}],["validate-street",'Please use only letters (a-z or A-Z), numbers (0-9), spaces and "#" in this field.',function(b){return Validation.get("IsEmpty").test(b)||/^[ \w]{3,}([A-Za-z]\.)?([ \w]*\#\d+)?(\r\n| )[ \w]{3,}/.test(b)}],["validate-phoneStrict","Please enter a valid phone number (Ex: 123-456-7890).",function(b){return Validation.get("IsEmpty").test(b)||/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(b)}],["validate-phoneLax","Please enter a valid phone number (Ex: 123-456-7890).",function(b){return Validation.get("IsEmpty").test(b)||/^((\d[-. ]?)?((\(\d{3}\))|\d{3}))?[-. ]?\d{3}[-. ]?\d{4}$/.test(b)}],["validate-fax","Please enter a valid fax number (Ex: 123-456-7890).",function(b){return Validation.get("IsEmpty").test(b)||/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(b)}],["validate-date","Please enter a valid date.",function(b){var d=new Date(b);return Validation.get("IsEmpty").test(b)||!isNaN(d)}],["validate-date-range","Make sure the To Date is later than or the same as the From Date.",function(e,h){var d=/\bdate-range-(\w+)-(\w+)\b/.exec(h.className);if(!d||d[2]=="to"||Validation.get("IsEmpty").test(e)){return true}var f=new Date().getFullYear()+"";var b=function(l){l=l.split(/[.\/]/);if(l[2]&&l[2].length<4){l[2]=f.substr(0,l[2].length)+l[2]}return new Date(l.join("/")).getTime()};var g=Element.select(h.form,".validate-date-range.date-range-"+d[1]+"-to");return !g.length||Validation.get("IsEmpty").test(g[0].value)||b(e)<=b(g[0].value)}],["validate-email","Please enter a valid email address (Ex: johndoe@domain.com).",function(b){return Validation.get("IsEmpty").test(b)||/^([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i.test(b)}],["validate-emailSender","Please use only visible characters and spaces.",function(b){return Validation.get("IsEmpty").test(b)||/^[\S ]+$/.test(b)}],["validate-password","Please enter 6 or more characters. Leading or trailing spaces will be ignored.",function(b){var d=b.strip();return !(d.length>0&&d.length<6)}],["validate-admin-password","Please enter 7 or more characters, using both numeric and alphabetic.",function(b){var d=b.strip();if(0==d.length){return true}if(!(/[a-z]/i.test(b))||!(/[0-9]/.test(b))){return false}return !(d.length<7)}],["validate-cpassword","Please make sure your passwords match.",function(b){var d=$("confirmation")?$("confirmation"):$$(".validate-cpassword")[0];var g=false;if($("password")){g=$("password")}var h=$$(".validate-password");for(var e=0;e<h.size();e++){var f=h[e];if(f.up("form").id==d.up("form").id){g=f}}if($$(".validate-admin-password").size()){g=$$(".validate-admin-password")[0]}return(g.value==d.value)}],["validate-both-passwords","Please make sure your passwords match.",function(e,d){var b=$(d.form[d.name=="password"?"confirmation":"password"]),f=d.value==b.value;if(f&&b.hasClassName("validation-failed")){Validation.test(this.className,b)}return b.value==""||f}],["validate-url","Please enter a valid URL. Protocol is required (http://, https:// or ftp://)",function(b){b=(b||"").replace(/^\s+/,"").replace(/\s+$/,"");return Validation.get("IsEmpty").test(b)||/^(http|https|ftp):\/\/(([A-Z0-9]([A-Z0-9_-]*[A-Z0-9]|))(\.[A-Z0-9]([A-Z0-9_-]*[A-Z0-9]|))*)(:(\d+))?(\/[A-Z0-9~](([A-Z0-9_~-]|\.)*[A-Z0-9~]|))*\/?(.*)?$/i.test(b)}],["validate-clean-url",'Please enter a valid URL (Ex: "http://www.example.com" or "www.example.com").',function(b){return Validation.get("IsEmpty").test(b)||/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(b)||/^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(b)}],["validate-identifier",'Please enter a valid URL Key (Ex: "example-page", "example-page.html" or "anotherlevel/example-page").',function(b){return Validation.get("IsEmpty").test(b)||/^[a-z0-9][a-z0-9_\/-]+(\.[a-z0-9_-]+)?$/.test(b)}],["validate-xml-identifier","Please enter a valid XML-identifier (Ex: something_1, block5, id-4).",function(b){return Validation.get("IsEmpty").test(b)||/^[A-Z][A-Z0-9_\/-]*$/i.test(b)}],["validate-ssn","Please enter a valid social security number (Ex: 123-45-6789).",function(b){return Validation.get("IsEmpty").test(b)||/^\d{3}-?\d{2}-?\d{4}$/.test(b)}],["validate-zip-us","Please enter a valid zip code (Ex: 90602 or 90602-1234).",function(b){return Validation.get("IsEmpty").test(b)||/(^\d{5}$)|(^\d{5}-\d{4}$)/.test(b)}],["validate-zip-international","Please enter a valid zip code.",function(b){return true}],["validate-date-au",'Please use this date format: dd/mm/yyyy (Ex: "17/03/2006" for the 17th of March, 2006).',function(b){if(Validation.get("IsEmpty").test(b)){return true}var e=/^(\d{2})\/(\d{2})\/(\d{4})$/;if(!e.test(b)){return false}var f=new Date(b.replace(e,"$2/$1/$3"));return(parseInt(RegExp.$2,10)==(1+f.getMonth()))&&(parseInt(RegExp.$1,10)==f.getDate())&&(parseInt(RegExp.$3,10)==f.getFullYear())}],["validate-currency-dollar","Please enter a valid $ amount (Ex: $100.00).",function(b){return Validation.get("IsEmpty").test(b)||/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(b)}],["validate-one-required","Please select one of the options above.",function(b,f){var e=f.parentNode;var d=e.getElementsByTagName("INPUT");return $A(d).any(function(g){return $F(g)})}],["validate-one-required-by-name","Please select one of the options.",function(d,g){var b=$$('input[name="'+g.name.replace(/([\\"])/g,"\\$1")+'"]');var e=1;for(var f=0;f<b.length;f++){if((b[f].type=="checkbox"||b[f].type=="radio")&&b[f].checked==true){e=0}if(Validation.isOnChange&&(b[f].type=="checkbox"||b[f].type=="radio")){Validation.reset(b[f])}}if(e==0){return true}else{return false}}],["validate-not-negative-number","Please enter a number 0 or greater in this field.",function(b){if(Validation.get("IsEmpty").test(b)){return true}b=parseNumber(b);return !isNaN(b)&&b>=0}],["validate-zero-or-greater","Please enter a number 0 or greater in this field.",function(b){return Validation.get("validate-not-negative-number").test(b)}],["validate-greater-than-zero","Please enter a number greater than 0 in this field.",function(b){if(Validation.get("IsEmpty").test(b)){return true}b=parseNumber(b);return !isNaN(b)&&b>0}],["validate-state","Please select State/Province.",function(b){return(b!=0||b=="")}],["validate-new-password","Please enter 6 or more characters. Leading or trailing spaces will be ignored.",function(b){if(!Validation.get("validate-password").test(b)){return false}if(Validation.get("IsEmpty").test(b)&&b!=""){return false}return true}],["validate-cc-number","Please enter a valid credit card number.",function(b,e){var d=$(e.id.substr(0,e.id.indexOf("_cc_number"))+"_cc_type");if(d&&typeof Validation.creditCartTypes.get(d.value)!="undefined"&&Validation.creditCartTypes.get(d.value)[2]==false){if(!Validation.get("IsEmpty").test(b)&&Validation.get("validate-digits").test(b)){return true}else{return false}}return validateCreditCard(b)}],["validate-cc-type","Credit card number does not match credit card type.",function(d,g){g.value=removeDelimiters(g.value);d=removeDelimiters(d);var f=$(g.id.substr(0,g.id.indexOf("_cc_number"))+"_cc_type");if(!f){return true}var e=f.value;if(typeof Validation.creditCartTypes.get(e)=="undefined"){return false}if(Validation.creditCartTypes.get(e)[0]==false){return true}var b="";Validation.creditCartTypes.each(function(h){if(h.value[0]&&d.match(h.value[0])){b=h.key;throw $break}});if(b!=e){return false}if(f.hasClassName("validation-failed")&&Validation.isOnChange){Validation.validate(f)}return true}],["validate-cc-type-select","Card type does not match credit card number.",function(d,e){var b=$(e.id.substr(0,e.id.indexOf("_cc_type"))+"_cc_number");if(Validation.isOnChange&&Validation.get("IsEmpty").test(b.value)){return true}if(Validation.get("validate-cc-type").test(b.value,b)){Validation.validate(b)}return Validation.get("validate-cc-type").test(b.value,b)}],["validate-cc-exp","Incorrect credit card expiration date.",function(b,l){var h=b;var g=$(l.id.substr(0,l.id.indexOf("_expiration"))+"_expiration_yr").value;var f=new Date();var e=f.getMonth()+1;var d=f.getFullYear();if(h<e&&g==d){return false}return true}],["validate-cc-cvn","Please enter a valid credit card verification number.",function(b,g){var f=$(g.id.substr(0,g.id.indexOf("_cc_cid"))+"_cc_type");if(!f){return true}var d=f.value;if(typeof Validation.creditCartTypes.get(d)=="undefined"){return false}var e=Validation.creditCartTypes.get(d)[1];if(b.match(e)){return true}return false}],["validate-ajax","",function(b,d){return true}],["validate-data","Please use only letters (a-z or A-Z), numbers (0-9) or underscore (_) in this field, and the first character should be a letter.",function(b){if(b!=""&&b){return/^[A-Za-z]+[A-Za-z0-9_]+$/.test(b)}return true}],["validate-css-length","Please input a valid CSS-length (Ex: 100px, 77pt, 20em, .5ex or 50%).",function(b){if(b!=""&&b){return/^[0-9\.]+(px|pt|em|ex|%)?$/.test(b)&&(!(/\..*\./.test(b)))&&!(/\.$/.test(b))}return true}],["validate-length","Text length does not meet the specified text range.",function(d,g){var e=new RegExp(/^maximum-length-[0-9]+$/);var f=new RegExp(/^minimum-length-[0-9]+$/);var b=true;$w(g.className).each(function(l,h){if(l.match(e)&&b){var n=l.split("-")[2];b=(d.length<=n)}if(l.match(f)&&b&&!Validation.get("IsEmpty").test(d)){var n=l.split("-")[2];b=(d.length>=n)}});return b}],["validate-percents","Please enter a number lower than 100.",{max:100}],["required-file","Please select a file.",function(d,e){var b=!Validation.get("IsEmpty").test(d);if(b===false){ovId=e.id+"_value";if($(ovId)){b=!Validation.get("IsEmpty").test($(ovId).value)}}return b}],["validate-cc-ukss","Please enter issue number or start date for switch/solo card type.",function(o,g){var b;if(g.id.match(/(.)+_cc_issue$/)){b=g.id.indexOf("_cc_issue")}else{if(g.id.match(/(.)+_start_month$/)){b=g.id.indexOf("_start_month")}else{b=g.id.indexOf("_start_year")}}var f=g.id.substr(0,b);var d=$(f+"_cc_type");if(!d){return true}var n=d.value;if(["SS","SM","SO"].indexOf(n)==-1){return true}$(f+"_cc_issue").advaiceContainer=$(f+"_start_month").advaiceContainer=$(f+"_start_year").advaiceContainer=$(f+"_cc_type_ss_div").down(".adv-container");var h=$(f+"_cc_issue").value;var l=$(f+"_start_month").value;var p=$(f+"_start_year").value;var e=(l&&p)?true:false;if(!e&&!h){return false}return true}]]);function removeDelimiters(b){b=b.replace(/\s/g,"");b=b.replace(/\-/g,"");return b}function parseNumber(b){if(typeof b!="string"){return parseFloat(b)}var e=b.indexOf(".");var d=b.indexOf(",");if(e!=-1&&d!=-1){if(d>e){b=b.replace(".","").replace(",",".")}else{b=b.replace(",","")}}else{if(d!=-1){b=b.replace(",",".")}}return parseFloat(b)}Validation.creditCartTypes=$H({SO:[new RegExp("^(6334[5-9]([0-9]{11}|[0-9]{13,14}))|(6767([0-9]{12}|[0-9]{14,15}))$"),new RegExp("^([0-9]{3}|[0-9]{4})?$"),true],SM:[new RegExp("(^(5[0678])[0-9]{11,18}$)|(^(6[^05])[0-9]{11,18}$)|(^(601)[^1][0-9]{9,16}$)|(^(6011)[0-9]{9,11}$)|(^(6011)[0-9]{13,16}$)|(^(65)[0-9]{11,13}$)|(^(65)[0-9]{15,18}$)|(^(49030)[2-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49033)[5-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49110)[1-2]([0-9]{10}$|[0-9]{12,13}$))|(^(49117)[4-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49118)[0-2]([0-9]{10}$|[0-9]{12,13}$))|(^(4936)([0-9]{12}$|[0-9]{14,15}$))"),new RegExp("^([0-9]{3}|[0-9]{4})?$"),true],VI:[new RegExp("^4[0-9]{12}([0-9]{3})?$"),new RegExp("^[0-9]{3}$"),true],MC:[new RegExp("^5[1-5][0-9]{14}$"),new RegExp("^[0-9]{3}$"),true],AE:[new RegExp("^3[47][0-9]{13}$"),new RegExp("^[0-9]{4}$"),true],DI:[new RegExp("^6(011|4[4-9][0-9]|5[0-9]{2})[0-9]{12}$"),new RegExp("^[0-9]{3}$"),true],JCB:[new RegExp("^(3[0-9]{15}|(2131|1800)[0-9]{11})$"),new RegExp("^[0-9]{3,4}$"),true],OT:[false,new RegExp("^([0-9]{3}|[0-9]{4})?$"),false]});function popWin(d,e,b){var e=window.open(d,e,b);e.focus()}function setLocation(b){window.location.href=b}function setPLocation(d,b){if(b){window.opener.focus()}window.opener.location.href=d}function setLanguageCode(e,f){var b=window.location.href;var h="",g;if(g=b.match(/\#(.*)$/)){b=b.replace(/\#(.*)$/,"");h=g[0]}if(b.match(/[?]/)){var d=/([?&]store=)[a-z0-9_]*/;if(b.match(d)){b=b.replace(d,"$1"+e)}else{b+="&store="+e}var d=/([?&]from_store=)[a-z0-9_]*/;if(b.match(d)){b=b.replace(d,"")}}else{b+="?store="+e}if(typeof(f)!="undefined"){b+="&from_store="+f}b+=h;setLocation(b)}function decorateGeneric(h,e){var l=["odd","even","first","last"];var d={};var g=h.length;if(g){if(typeof(e)=="undefined"){e=l}if(!e.length){return}for(var b in l){d[l[b]]=false}for(var b in e){d[e[b]]=true}if(d.first){Element.addClassName(h[0],"first")}if(d.last){Element.addClassName(h[g-1],"last")}for(var f=0;f<g;f++){if((f+1)%2==0){if(d.even){Element.addClassName(h[f],"even")}}else{if(d.odd){Element.addClassName(h[f],"odd")}}}}}function decorateTable(h,e){var h=$(h);if(h){var b={tbody:false,"tbody tr":["odd","even","first","last"],"thead tr":["first","last"],"tfoot tr":["first","last"],"tr td":["last"]};if(typeof(e)!="undefined"){for(var d in e){b[d]=e[d]}}if(b.tbody){decorateGeneric(h.select("tbody"),b.tbody)}if(b["tbody tr"]){decorateGeneric(h.select("tbody tr"),b["tbody tr"])}if(b["thead tr"]){decorateGeneric(h.select("thead tr"),b["thead tr"])}if(b["tfoot tr"]){decorateGeneric(h.select("tfoot tr"),b["tfoot tr"])}if(b["tr td"]){var g=h.select("tr");if(g.length){for(var f=0;f<g.length;f++){decorateGeneric(g[f].getElementsByTagName("TD"),b["tr td"])}}}}}function decorateList(e,d){if($(e)){if(typeof(d)=="undefined"){var b=$(e).select("li")}else{var b=$(e).childElements()}decorateGeneric(b,["odd","even","last"])}}function decorateDataList(b){b=$(b);if(b){decorateGeneric(b.select("dt"),["odd","even","last"]);decorateGeneric(b.select("dd"),["odd","even","last"])}}function parseSidUrl(f,e){var d=f.indexOf("/?SID=");var b="";e=(e!=undefined)?e:"";if(d>-1){b="?"+f.substring(d+2);f=f.substring(0,d+1)}return f+e+b}function formatCurrency(n,q,g){var l=isNaN(q.precision=Math.abs(q.precision))?2:q.precision;var v=isNaN(q.requiredPrecision=Math.abs(q.requiredPrecision))?2:q.requiredPrecision;l=v;var t=isNaN(q.integerRequired=Math.abs(q.integerRequired))?1:q.integerRequired;var p=q.decimalSymbol==undefined?",":q.decimalSymbol;var e=q.groupSymbol==undefined?".":q.groupSymbol;var d=q.groupLength==undefined?3:q.groupLength;var u="";if(g==undefined||g==true){u=n<0?"-":(g?"+":"")}else{if(g==false){u=""}}var h=parseInt(n=Math.abs(+n||0).toFixed(l))+"";var f=(h.length<t)?(t-h.length):0;while(f){h="0"+h;f--}j=(j=h.length)>d?j%d:0;re=new RegExp("(\\d{"+d+"})(?=\\d)","g");var b=(j?h.substr(0,j)+e:"")+h.substr(j).replace(re,"$1"+e)+(l?p+Math.abs(n-h).toFixed(l).replace(/-/,0).slice(2):"");var o="";if(q.pattern.indexOf("{sign}")==-1){o=u+q.pattern}else{o=q.pattern.replace("{sign}",u)}return o.replace("%s",b).replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function expandDetails(d,b){if(Element.hasClassName(d,"show-details")){$$(b).each(function(e){e.hide()});Element.removeClassName(d,"show-details")}else{$$(b).each(function(e){e.show()});Element.addClassName(d,"show-details")}}var isIE=navigator.appVersion.match(/MSIE/)=="MSIE";if(!window.Varien){var Varien=new Object()}Varien.showLoading=function(){var b=$("loading-process");b&&b.show()};Varien.hideLoading=function(){var b=$("loading-process");b&&b.hide()};Varien.GlobalHandlers={onCreate:function(){Varien.showLoading()},onComplete:function(){if(Ajax.activeRequestCount==0){Varien.hideLoading()}}};Ajax.Responders.register(Varien.GlobalHandlers);Varien.searchForm=Class.create();Varien.searchForm.prototype={initialize:function(d,e,b){this.form=$(d);this.field=$(e);this.emptyText=b;Event.observe(this.form,"submit",this.submit.bind(this));Event.observe(this.field,"focus",this.focus.bind(this));Event.observe(this.field,"blur",this.blur.bind(this));this.blur()},submit:function(b){if(this.field.value==this.emptyText||this.field.value==""){Event.stop(b);return false}return true},focus:function(b){if(this.field.value==this.emptyText){this.field.value=""}},blur:function(b){if(this.field.value==""){this.field.value=this.emptyText}}};Varien.DateElement=Class.create();Varien.DateElement.prototype={initialize:function(b,d,f,e){if(b=="id"){this.day=$(d+"day");this.month=$(d+"month");this.year=$(d+"year");this.full=$(d+"full");this.advice=$(d+"date-advice")}else{if(b=="container"){this.day=d.day;this.month=d.month;this.year=d.year;this.full=d.full;this.advice=d.advice}else{return}}this.required=f;this.format=e;this.day.addClassName("validate-custom");this.day.validate=this.validate.bind(this);this.month.addClassName("validate-custom");this.month.validate=this.validate.bind(this);this.year.addClassName("validate-custom");this.year.validate=this.validate.bind(this);this.setDateRange(false,false);this.year.setAttribute("autocomplete","off");this.advice.hide()},validate:function(){var l=false,o=parseInt(this.day.value,10)||0,f=parseInt(this.month.value,10)||0,h=parseInt(this.year.value,10)||0;if(this.day.value.strip().empty()&&this.month.value.strip().empty()&&this.year.value.strip().empty()){if(this.required){l="Please enter a date."}else{this.full.value=""}}else{if(!o||!f||!h){l="Please enter a valid full date."}else{var d=new Date,n=0,e=null;d.setYear(h);d.setMonth(f-1);d.setDate(32);n=32-d.getDate();if(!n||n>31){n=31}if(o<1||o>n){e="day";l="Please enter a valid day (1-%1)."}else{if(f<1||f>12){e="month";l="Please enter a valid month (1-12)."}else{if(o%10==o){this.day.value="0"+o}if(f%10==f){this.month.value="0"+f}this.full.value=this.format.replace(/%[mb]/i,this.month.value).replace(/%[de]/i,this.day.value).replace(/%y/i,this.year.value);var b=this.month.value+"/"+this.day.value+"/"+this.year.value;var g=new Date(b);if(isNaN(g)){l="Please enter a valid date."}else{this.setFullDate(g)}}}var p=false;if(!l&&!this.validateData()){e=this.validateDataErrorType;p=this.validateDataErrorText;l=p}}}if(l!==false){if(jQuery.mage.__){l=jQuery.mage.__(l)}if(!p){this.advice.innerHTML=l.replace("%1",n)}else{this.advice.innerHTML=this.errorTextModifier(l)}this.advice.show();return false}this.day.removeClassName("validation-failed");this.month.removeClassName("validation-failed");this.year.removeClassName("validation-failed");this.advice.hide();return true},validateData:function(){var d=this.fullDate.getFullYear();var b=new Date;this.curyear=b.getFullYear();return(d>=1900&&d<=this.curyear)},validateDataErrorType:"year",validateDataErrorText:"Please enter a valid year (1900-%1).",errorTextModifier:function(b){return b.replace("%1",this.curyear)},setDateRange:function(b,d){this.minDate=b;this.maxDate=d},setFullDate:function(b){this.fullDate=b}};Varien.DOB=Class.create();Varien.DOB.prototype={initialize:function(b,g,f){var e=$$(b)[0];var d={};d.day=Element.select(e,".dob-day input")[0];d.month=Element.select(e,".dob-month input")[0];d.year=Element.select(e,".dob-year input")[0];d.full=Element.select(e,".dob-full input")[0];d.advice=Element.select(e,".validation-advice")[0];new Varien.DateElement("container",d,g,f)}};Varien.dateRangeDate=Class.create();Varien.dateRangeDate.prototype=Object.extend(new Varien.DateElement(),{validateData:function(){var b=true;if(this.minDate||this.maxValue){if(this.minDate){this.minDate=new Date(this.minDate);this.minDate.setHours(0);if(isNaN(this.minDate)){this.minDate=new Date("1/1/1900")}b=b&&(this.fullDate>=this.minDate)}if(this.maxDate){this.maxDate=new Date(this.maxDate);this.minDate.setHours(0);if(isNaN(this.maxDate)){this.maxDate=new Date()}b=b&&(this.fullDate<=this.maxDate)}if(this.maxDate&&this.minDate){this.validateDataErrorText="Please enter a valid date between %s and %s"}else{if(this.maxDate){this.validateDataErrorText="Please enter a valid date less than or equal to %s"}else{if(this.minDate){this.validateDataErrorText="Please enter a valid date equal to or greater than %s"}else{this.validateDataErrorText=""}}}}return b},validateDataErrorText:"Date should be between %s and %s",errorTextModifier:function(b){if(this.minDate){b=b.sub("%s",this.dateFormat(this.minDate))}if(this.maxDate){b=b.sub("%s",this.dateFormat(this.maxDate))}return b},dateFormat:function(b){return(b.getMonth()+1)+"/"+b.getDate()+"/"+b.getFullYear()}});Varien.FileElement=Class.create();Varien.FileElement.prototype={initialize:function(b){this.fileElement=$(b);this.hiddenElement=$(b+"_value");this.fileElement.observe("change",this.selectFile.bind(this))},selectFile:function(b){this.hiddenElement.value=this.fileElement.getValue()}};Validation.addAllThese([["validate-custom"," ",function(b,d){return d.validate()}]]);Element.addMethods({getInnerText:function(b){b=$(b);if(b.innerText&&!Prototype.Browser.Opera){return b.innerText}return b.innerHTML.stripScripts().unescapeHTML().replace(/[\n\r\s]+/g," ").strip()}});function fireEvent(d,e){if(document.createEvent){var b=document.createEvent("HTMLEvents");b.initEvent(e,true,true);return d.dispatchEvent(b)}else{var b=document.createEventObject();return d.fireEvent("on"+e,b)}}function modulo(b,f){var e=f/10000;var d=b%f;if(Math.abs(d-f)<e||Math.abs(d)<e){d=0}return d}if((typeof Range!="undefined")&&!Range.prototype.createContextualFragment){Range.prototype.createContextualFragment=function(b){var e=document.createDocumentFragment(),d=document.createElement("div");e.appendChild(d);d.outerHTML=b;return e}}var byteConvert=function(b){if(isNaN(b)){return""}var d=["bytes","KB","MB","GB","TB","PB","EB","ZB","YB"];var f=Math.floor(Math.log(b)/Math.log(2));if(f<1){f=0}var e=Math.floor(f/10);b=b/Math.pow(2,10*e);if(b.toString().length>b.toFixed(2).toString().length){b=b.toFixed(2)}return b+" "+d[e]};var SessionError=Class.create();SessionError.prototype={initialize:function(b){this.errorText=b},toString:function(){return"Session Error:"+this.errorText}};Ajax.Request.addMethods({initialize:function($super,d,b){$super(b);this.transport=Ajax.getTransport();if(!d.match(new RegExp("[?&]isAjax=true",""))){d=d.match(new RegExp("\\?","g"))?d+"&isAjax=true":d+"?isAjax=true"}if(Object.isString(this.options.parameters)&&this.options.parameters.indexOf("form_key=")==-1){this.options.parameters+="&"+Object.toQueryString({form_key:FORM_KEY})}else{if(!this.options.parameters){this.options.parameters={form_key:FORM_KEY}}if(!this.options.parameters.form_key){this.options.parameters.form_key=FORM_KEY}}this.request(d)},respondToReadyState:function(b){var g=Ajax.Request.Events[b],d=new Ajax.Response(this);if(g=="Complete"){try{this._complete=true;if(d.responseText.isJSON()){var f=d.responseText.evalJSON();if(f.ajaxExpired&&f.ajaxRedirect){window.location.replace(f.ajaxRedirect);throw new SessionError("session expired")}}(this.options["on"+d.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(d,d.headerJSON)}catch(h){this.dispatchException(h);if(h instanceof SessionError){return}}var l=d.getHeader("Content-type");if(this.options.evalJS=="force"||(this.options.evalJS&&this.isSameOrigin()&&l&&l.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))){this.evalResponse()}}try{(this.options["on"+g]||Prototype.emptyFunction)(d,d.headerJSON);Ajax.Responders.dispatch("on"+g,this,d,d.headerJSON)}catch(h){this.dispatchException(h)}if(g=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}}});Ajax.Updater.respondToReadyState=Ajax.Request.respondToReadyState;var varienLoader=new Class.create();varienLoader.prototype={initialize:function(b){this.callback=false;this.cache=$H();this.caching=b||false;this.url=false},getCache:function(b){if(this.cache.get(b)){return this.cache.get(b)}return false},load:function(b,d,f){this.url=b;this.callback=f;if(this.caching){var e=this.getCache(b);if(e){this.processResult(e);return}}if(typeof(d.updaterId)!="undefined"){new varienUpdater(d.updaterId,b,{evalScripts:true,onComplete:this.processResult.bind(this),onFailure:this._processFailure.bind(this)})}else{new Ajax.Request(b,{method:"post",parameters:d||{},onComplete:this.processResult.bind(this),onFailure:this._processFailure.bind(this)})}},_processFailure:function(b){location.href=BASE_URL},processResult:function(b){if(this.caching){this.cache.set(this.url,b)}if(this.callback){this.callback(b.responseText)}}};if(!window.varienLoaderHandler){var varienLoaderHandler=new Object()}varienLoaderHandler.handler={onCreate:function(b){if(b.options.loaderArea===false){return}jQuery("body").trigger("processStart")},onException:function(b){jQuery("body").trigger("processStop")},onComplete:function(b){jQuery("body").trigger("processStop")}};function setLoaderPosition(){var e=$("loading_mask_loader");if(e&&Prototype.Browser.IE){var d=e.getDimensions();var f=document.viewport.getDimensions();var b=document.viewport.getScrollOffsets();e.style.left=Math.floor(f.width/2+b.left-d.width/2)+"px";e.style.top=Math.floor(f.height/2+b.top-d.height/2)+"px";e.style.position="absolute"}}function toggleSelectsUnderBlock(f,b){if(Prototype.Browser.IE){var e=document.getElementsByTagName("select");for(var d=0;d<e.length;d++){if(b){if(e[d].needShowOnSuccess){e[d].needShowOnSuccess=false;e[d].style.visibility=""}}else{if(Element.visible(e[d])){e[d].style.visibility="hidden";e[d].needShowOnSuccess=true}}}}}Ajax.Responders.register(varienLoaderHandler.handler);var varienUpdater=Class.create(Ajax.Updater,{updateContent:function($super,b){if(b.isJSON()){var d=b.evalJSON();if(d.ajaxExpired&&d.ajaxRedirect){window.location.replace(d.ajaxRedirect)}}else{$super(b)}}});function setLocation(b){window.location.href=b}function setElementDisable(d,b){if($(d)){$(d).disabled=b}}function toggleParentVis(b){b=$(b).parentNode;if(b.style.display=="none"){b.style.display=""}else{b.style.display="none"}}function toggleFieldsetVis(d){id=d;d=$(d);if(d.style.display=="none"){d.style.display=""}else{d.style.display="none"}d=d.parentNode.childElements();for(var b=0;b<d.length;b++){if(d[b].id!=undefined&&d[b].id==id&&d[(b-1)].classNames()=="entry-edit-head"){if(d[b-1].style.display=="none"){d[b-1].style.display=""}else{d[b-1].style.display="none"}}}}function toggleVis(b){b=$(b);if(b.style.display=="none"){b.style.display=""}else{b.style.display="none"}}function imagePreview(b){if($(b)){var d=window.open("","preview","width=400,height=400,resizable=1,scrollbars=1");d.document.open();d.document.write('<body style="padding:0;margin:0"><img src="'+$(b).src+'" id="image_preview"/></body>');d.document.close();Event.observe(d,"load",function(){var e=d.document.getElementById("image_preview");d.resizeTo(e.width+40,e.height+80)})}}function checkByProductPriceType(b){if(b.id=="price_type"){this.productPriceType=b.value;return false}else{if(b.id=="price"&&this.productPriceType==0){return false}return true}}Event.observe(window,"load",function(){if($("price_default")&&$("price_default").checked){$("price").disabled="disabled"}});function toggleSeveralValueElements(f,e,b,d){if(e&&f){if(Object.prototype.toString.call(e)!="[object Array]"){e=[e]}e.each(function(g){toggleValueElements(f,g,b,d)})}}function toggleValueElements(l,d,f,h){if(d&&l){var n=[l];if(typeof f!="undefined"){if(Object.prototype.toString.call(f)!="[object Array]"){f=[f]}for(var g=0;g<f.length;g++){n.push(f[g])}}var e=Element.select(d,["select","input","textarea","button","img"]).filter(function(o){return(o.readAttribute("type")!="hidden")});var b=(h!=undefined?h:l.checked);e.each(function(p){if(checkByProductPriceType(p)){var o=n.length;while(o--&&p!=n[o]){}if(o!=-1){return}p.disabled=b;if(b){p.addClassName("disabled")}else{p.removeClassName("disabled")}if(p.nodeName.toLowerCase()=="img"){b?p.hide():p.show()}}})}}function submitAndReloadArea(e,d){if($(e)){var b=$(e).select("input","select","textarea");var f=Form.serializeElements(b,true);d=d+(d.match(new RegExp("\\?"))?"&isAjax=true":"?isAjax=true");new Ajax.Request(d,{parameters:$H(f),loaderArea:e,onSuccess:function(l){try{if(l.responseText.isJSON()){var g=l.responseText.evalJSON();if(g.error){alert(g.message)}if(g.ajaxExpired&&g.ajaxRedirect){setLocation(g.ajaxRedirect)}}else{$(e).update(l.responseText)}}catch(h){$(e).update(l.responseText)}}})}}function syncOnchangeValue(d,e){var b={baseElem:d,distElem:e};Event.observe(d,"change",function(){if($(this.baseElem)&&$(this.distElem)){$(this.distElem).value=$(this.baseElem).value}}.bind(b))}function updateElementAtCursor(e,f,g){if(g==undefined){g=window.self}if(document.selection){e.focus();sel=g.document.selection.createRange();sel.text=f}else{if(e.selectionStart||e.selectionStart=="0"){var d=e.selectionStart;var b=e.selectionEnd;e.value=e.value.substring(0,d)+f+e.value.substring(b,e.value.length)}else{e.value+=f}}}function firebugEnabled(){if(window.console&&window.console.firebug){return true}return false}function disableElement(b){b.disabled=true;b.addClassName("disabled")}function enableElement(b){b.disabled=false;b.removeClassName("disabled")}function disableElements(b){$$("."+b).each(disableElement)}function enableElements(b){$$("."+b).each(enableElement)}var Cookie={all:function(){var d=document.cookie.split(";");var b={};d.each(function(f,e){var g=f.strip().split("=");b[unescape(g[0])]=unescape(g[1])});return b},read:function(d){var b=this.all();if(b[d]){return b[d]}return null},write:function(h,f,g){var b="";if(g){var e=new Date();e.setTime(e.getTime()+(g*1000));b="; expires="+e.toGMTString()}var d="/"+BASE_URL.split("/").slice(3).join("/");document.cookie=escape(h)+"="+escape(f)+b+"; path="+d},clear:function(b){this.write(b,"",-1)}};var Fieldset={cookiePrefix:"fh-",applyCollapse:function(b){if($(b+"-state")){collapsed=$(b+"-state").value==1?0:1}else{collapsed=$(b+"-head").collapsed}if(collapsed==1||collapsed===undefined){$(b+"-head").removeClassName("open");if($(b+"-head").up(".section-config")){$(b+"-head").up(".section-config").removeClassName("active")}$(b).hide()}else{$(b+"-head").addClassName("open");if($(b+"-head").up(".section-config")){$(b+"-head").up(".section-config").addClassName("active")}$(b).show()}},toggleCollapse:function(b,d){if($(b+"-state")){collapsed=$(b+"-state").value==1?0:1}else{collapsed=$(b+"-head").collapsed}if(collapsed==1||collapsed===undefined){if($(b+"-state")){$(b+"-state").value=1}$(b+"-head").collapsed=0}else{if($(b+"-state")){$(b+"-state").value=0}$(b+"-head").collapsed=1}this.applyCollapse(b);if(typeof d!="undefined"){this.saveState(d,{container:b,value:$(b+"-state").value})}},addToPrefix:function(b){this.cookiePrefix+=b+"-"},saveState:function(b,d){new Ajax.Request(b,{method:"get",parameters:Object.toQueryString(d),loaderArea:false})}};var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var b="";var p,n,h,o,l,g,f;var d=0;if(typeof window.btoa==="function"){return window.btoa(e)}e=Base64._utf8_encode(e);while(d<e.length){p=e.charCodeAt(d++);n=e.charCodeAt(d++);h=e.charCodeAt(d++);o=p>>2;l=((p&3)<<4)|(n>>4);g=((n&15)<<2)|(h>>6);f=h&63;if(isNaN(n)){g=f=64}else{if(isNaN(h)){f=64}}b=b+this._keyStr.charAt(o)+this._keyStr.charAt(l)+this._keyStr.charAt(g)+this._keyStr.charAt(f)}return b},decode:function(e){var b="";var p,n,h;var o,l,g,f;var d=0;if(typeof window.atob==="function"){return window.atob(e)}e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(d<e.length){o=this._keyStr.indexOf(e.charAt(d++));l=this._keyStr.indexOf(e.charAt(d++));g=this._keyStr.indexOf(e.charAt(d++));f=this._keyStr.indexOf(e.charAt(d++));p=(o<<2)|(l>>4);n=((l&15)<<4)|(g>>2);h=((g&3)<<6)|f;b=b+String.fromCharCode(p);if(g!=64){b=b+String.fromCharCode(n)}if(f!=64){b=b+String.fromCharCode(h)}}b=Base64._utf8_decode(b);return b},mageEncode:function(b){return this.encode(b).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,",")},mageDecode:function(b){b=b.replace(/\-/g,"+").replace(/_/g,"/").replace(/,/g,"=");return this.decode(b)},idEncode:function(b){return this.encode(b).replace(/\+/g,":").replace(/\//g,"_").replace(/=/g,"-")},idDecode:function(b){b=b.replace(/\-/g,"=").replace(/_/g,"/").replace(/\:/g,"+");return this.decode(b)},_utf8_encode:function(d){d=d.replace(/\r\n/g,"\n");var b="";for(var f=0;f<d.length;f++){var e=d.charCodeAt(f);if(e<128){b+=String.fromCharCode(e)}else{if((e>127)&&(e<2048)){b+=String.fromCharCode((e>>6)|192);b+=String.fromCharCode((e&63)|128)}else{b+=String.fromCharCode((e>>12)|224);b+=String.fromCharCode(((e>>6)&63)|128);b+=String.fromCharCode((e&63)|128)}}}return b},_utf8_decode:function(b){var d="";var e=0;var f=c1=c2=0;while(e<b.length){f=b.charCodeAt(e);if(f<128){d+=String.fromCharCode(f);e++}else{if((f>191)&&(f<224)){c2=b.charCodeAt(e+1);d+=String.fromCharCode(((f&31)<<6)|(c2&63));e+=2}else{c2=b.charCodeAt(e+1);c3=b.charCodeAt(e+2);d+=String.fromCharCode(((f&15)<<12)|((c2&63)<<6)|(c3&63));e+=3}}}return d}};function sortNumeric(d,b){return d-b}(function(){var globals=["Prototype","Abstract","Try","Class","PeriodicalExecuter","Template","$break","Enumerable","$A","$w","$H","Hash","$R","ObjectRange","Ajax","$","Form","Field","$F","Toggle","Insertion","$continue","Position","Windows","Dialog","array","WindowUtilities","Builder","Effect","validateCreditCard","Validator","Validation","removeDelimiters","parseNumber","popWin","setLocation","setPLocation","setLanguageCode","decorateGeneric","decorateTable","decorateList","decorateDataList","parseSidUrl","formatCurrency","expandDetails","isIE","Varien","fireEvent","modulo","byteConvert","SessionError","varienLoader","varienLoaderHandler","setLoaderPosition","toggleSelectsUnderBlock","varienUpdater","setElementDisable","toggleParentVis","toggleFieldsetVis","toggleVis","imagePreview","checkByProductPriceType","toggleSeveralValueElements","toggleValueElements","submitAndReloadArea","syncOnchangeValue","updateElementAtCursor","firebugEnabled","disableElement","enableElement","disableElements","enableElements","Cookie","Fieldset","Base64","sortNumeric","Element","$$","Sizzle","Selector","Window"];globals.forEach(function(prop){window[prop]=eval(prop)})})();
\ No newline at end of file
diff --git a/lib/web/mage/adminhtml/tools.js b/lib/web/mage/adminhtml/tools.js
index d936857d8da..336fc2d4d0c 100644
--- a/lib/web/mage/adminhtml/tools.js
+++ b/lib/web/mage/adminhtml/tools.js
@@ -6,17 +6,6 @@ function setLocation(url){
     window.location.href = url;
 }
 
-function confirmSetLocation(message, url){
-    if( confirm(message) ) {
-        setLocation(url);
-    }
-    return false;
-}
-
-function deleteConfirm(message, url) {
-    confirmSetLocation(message, url);
-}
-
 function setElementDisable(element, disable){
     if($(element)){
         $(element).disabled = disable;
-- 
GitLab


From 2bea2a12115a60ece4d0128e4e948188ca68c3f7 Mon Sep 17 00:00:00 2001
From: Andrii Kasian <akasian@magento.com>
Date: Thu, 22 Oct 2015 16:46:29 +0300
Subject: [PATCH 194/370] MAGETWO-44159: Configurable product price in store
 front doesn't reflect price change from backend

---
 .../ResourceModel/Product/Indexer/Price/DefaultPrice.php      | 2 +-
 .../ResourceModel/Product/Indexer/Price/Configurable.php      | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php
index dd5a49a9af6..8b433296b32 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php
@@ -591,7 +591,7 @@ class DefaultPrice extends AbstractIndexer implements PriceInterface
         $select = $connection->select()->from($table, $columns);
 
         if ($entityIds !== null) {
-            $select->where('entity_id in (?)', $entityIds);
+            $select->where('entity_id in (?)', count($entityIds) > 0 ? $entityIds : 0);
         }
 
         $query = $select->insertFromSelect($this->getIdxTable(), [], false);
diff --git a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
index d81a4e96af0..84395f7f5b1 100644
--- a/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
+++ b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
@@ -49,7 +49,7 @@ class Configurable extends \Magento\Catalog\Model\ResourceModel\Product\Indexer\
     {
         if ($this->hasEntity() || !empty($entityIds)) {
             if (!empty($entityIds)) {
-                $allEntityIds = $this->getRelatedProduct($entityIds);
+                $allEntityIds = $this->getRelatedProducts($entityIds);
                 $this->prepareFinalPriceDataForType($allEntityIds, null);
             } else {
                 $this->_prepareFinalPriceData($entityIds);
@@ -67,7 +67,7 @@ class Configurable extends \Magento\Catalog\Model\ResourceModel\Product\Indexer\
      * @param int[] $entityIds
      * @return int[]
      */
-    private function getRelatedProduct($entityIds)
+    private function getRelatedProducts($entityIds)
     {
         $select = $this->getConnection()->select()->union(
             [
-- 
GitLab


From b839e7bd252c195fc5b08d36b3de79b626159a21 Mon Sep 17 00:00:00 2001
From: Dmytro Aponasenko <daponasenko@ebay.com>
Date: Thu, 22 Oct 2015 16:57:59 +0300
Subject: [PATCH 195/370] MTA-2723: Functional test maintenance. Part 2

---
 .../Backend/Test/Block/Widget/Grid.php        |  2 +-
 .../Adminhtml/Category/Edit/CategoryForm.php  |  2 +-
 .../Product/Attribute/CustomAttribute.php     |  6 +-
 .../Adminhtml/Product/Edit/ProductTab.php     |  1 -
 .../Edit/Tab/ProductDetails/AttributeSet.php  | 29 +++++++-
 .../CatalogProductSimple/CustomAttribute.php  |  7 +-
 ...ductAttributeEntityFromProductPageTest.xml |  3 +
 .../CreateProductAttributeEntityTest.xml      |  5 +-
 ...AssignedToTemplateProductAttributeTest.xml |  3 +
 .../AddAttributeToProductTemplateStep.php     | 18 ++++-
 .../Product/Edit/Tab/Super/Config.php         | 12 +++-
 .../Edit/Tab/Super/Config/Attribute.php       |  2 +-
 .../Config/Attribute/AttributeSelector.php    | 12 ----
 ...ductAttributeAbsenceInVariationsSearch.php | 19 ++---
 .../AssertProductAttributeIsConfigurable.php  | 13 ++--
 .../TestCase/MassAssignCustomerGroupTest.php  |  3 +-
 .../UpdateCustomerBackendEntityTest.php       | 36 ++++++----
 .../UpdateCustomerBackendEntityTest.xml       | 28 --------
 .../UpdateCustomerFrontendEntityTest.xml      |  8 ---
 .../Ui/Test/Block/Adminhtml/DataGrid.php      | 70 +++++++++++++++++--
 20 files changed, 185 insertions(+), 94 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php
index 65017b9c85d..5952f4690c1 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php
@@ -189,7 +189,7 @@ abstract class Grid extends Block
     protected $rowPattern = '//tbody/tr[%s]';
 
     /**
-     *  Selector for confirm.
+     * Selector for confirm.
      *
      * @var string
      */
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Category/Edit/CategoryForm.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Category/Edit/CategoryForm.php
index 6af0253e217..486ca5577dd 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Category/Edit/CategoryForm.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Category/Edit/CategoryForm.php
@@ -31,7 +31,7 @@ class CategoryForm extends FormTabs
     protected $dropdownBlock = '.dropdown';
 
     /**
-     *  Selector for confirm.
+     * Selector for confirm.
      *
      * @var string
      */
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/CustomAttribute.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/CustomAttribute.php
index 4dfc6d203b3..7d85ae5b237 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/CustomAttribute.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/CustomAttribute.php
@@ -19,7 +19,7 @@ class CustomAttribute extends SimpleElement
      *
      * @var string
      */
-    protected $inputSelector = '.control [data-ui-id][name]';
+    protected $inputSelector = '.control [name]:not([type="hidden"]), table';
 
     /**
      * Attribute class to element type reference.
@@ -45,7 +45,9 @@ class CustomAttribute extends SimpleElement
         $this->eventManager->dispatchEvent(['set_value'], [__METHOD__, $this->getAbsoluteSelector()]);
         $element = $this->getElementByClass($this->getElementClass());
         $value = is_array($data) ? $data['value'] : $data;
-        $this->find($this->inputSelector, Locator::SELECTOR_CSS, $element)->setValue($value);
+        if ($value !== null) {
+            $this->find($this->inputSelector, Locator::SELECTOR_CSS, $element)->setValue($value);
+        }
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/ProductTab.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/ProductTab.php
index c7c48a1847c..4754efe1f1b 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/ProductTab.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/ProductTab.php
@@ -9,7 +9,6 @@ namespace Magento\Catalog\Test\Block\Adminhtml\Product\Edit;
 use Magento\Mtf\Client\Locator;
 use Magento\Backend\Test\Block\Widget\Tab;
 use Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Edit;
-use Magento\Catalog\Test\Fixture\CatalogProductAttribute;
 
 /**
  * General class for tabs on product FormTabs with "Add attribute" button.
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Tab/ProductDetails/AttributeSet.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Tab/ProductDetails/AttributeSet.php
index 93e96cf4e28..2ecde06b84b 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Tab/ProductDetails/AttributeSet.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Tab/ProductDetails/AttributeSet.php
@@ -7,6 +7,7 @@
 namespace Magento\Catalog\Test\Block\Adminhtml\Product\Edit\Tab\ProductDetails;
 
 use Magento\Mtf\Client\Element\SuggestElement;
+use Magento\Mtf\Client\Locator;
 
 /**
  * Class AttributeSet
@@ -35,6 +36,13 @@ class AttributeSet extends SuggestElement
      */
     protected $loader = '[data-role="loader"]';
 
+    /**
+     * Page header selector.
+     *
+     * @var string
+     */
+    protected $header = 'header';
+
     /**
      * Set value
      *
@@ -44,8 +52,27 @@ class AttributeSet extends SuggestElement
     public function setValue($value)
     {
         if ($value !== $this->find($this->actionToggle)->getText()) {
+            $this->eventManager->dispatchEvent(['set_value'], [__METHOD__, $this->getAbsoluteSelector()]);
             $this->find($this->actionToggle)->click();
-            parent::setValue($value);
+            $this->clear();
+            if ($value == '') {
+                return;
+            }
+            foreach (str_split($value) as $symbol) {
+                $this->keys([$symbol]);
+                $searchedItem = $this->find(sprintf($this->resultItem, $value), Locator::SELECTOR_XPATH);
+                if ($searchedItem->isVisible()) {
+                    try {
+                        $searchedItem->hover();
+                        $this->driver->find($this->header)->hover();
+                        $searchedItem->click();
+                        break;
+                    } catch (\Exception $e) {
+                        // In parallel run on windows change the focus is lost on element
+                        // that causes disappearing of category suggest list.
+                    }
+                }
+            }
         }
         // Wait loader
         $element = $this->driver;
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple/CustomAttribute.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple/CustomAttribute.php
index 1e9a5690533..d41542b0e75 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple/CustomAttribute.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple/CustomAttribute.php
@@ -35,7 +35,12 @@ class CustomAttribute extends DataSource
             /** @var CatalogProductAttribute $data */
             $data = $fixtureFactory->createByCode('catalogProductAttribute', ['dataset' => $data['dataset']]);
         }
-        $this->data['value'] = $this->getDefaultAttributeValue($data);
+        if (is_array($data) && isset($data['value'])) {
+            $this->data['value'] = $data['value'];
+            $data = $data['attribute'];
+        } else {
+            $this->data['value'] = $this->getDefaultAttributeValue($data);
+        }
         $this->data['code'] = $data->hasData('attribute_code') == false
             ? $this->createAttributeCode($data)
             : $data->getAttributeCode();
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateProductAttributeEntityFromProductPageTest.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateProductAttributeEntityFromProductPageTest.xml
index 007e25239d7..d58f5e1afef 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateProductAttributeEntityFromProductPageTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateProductAttributeEntityFromProductPageTest.xml
@@ -41,6 +41,9 @@
             <data name="attribute/data/is_global" xsi:type="string">Global</data>
             <data name="attribute/data/is_filterable" xsi:type="string">Filterable (with results)</data>
             <data name="attribute/data/is_filterable_in_search" xsi:type="string">Yes</data>
+            <data name="assertProduct/data/name" xsi:type="string">Product name</data>
+            <data name="assertProduct/data/sku" xsi:type="string">product-sku</data>
+            <data name="assertProduct/data/price" xsi:type="string">25</data>
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeIsFilterable" />
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeIsFilterableInSearch" />
             <constraint name="Magento\ConfigurableProduct\Test\Constraint\AssertProductAttributeIsConfigurable" />
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateProductAttributeEntityTest.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateProductAttributeEntityTest.xml
index b945d770fe8..15b041044cb 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateProductAttributeEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/CreateProductAttributeEntityTest.xml
@@ -126,6 +126,9 @@
             <data name="productAttribute/data/is_visible_on_front" xsi:type="string">Yes</data>
             <data name="productAttribute/data/used_in_product_listing" xsi:type="string">Yes</data>
             <data name="productAttribute/data/used_for_sort_by" xsi:type="string">Yes</data>
+            <data name="assertProduct/data/name" xsi:type="string">Product name</data>
+            <data name="assertProduct/data/sku" xsi:type="string">product-sku</data>
+            <data name="assertProduct/data/price" xsi:type="string">25</data>
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeInGrid" />
             <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeForm" />
             <constraint name="Magento\Catalog\Test\Constraint\AssertAddedProductAttributeOnProductForm" />
@@ -154,10 +157,10 @@
             <data name="productAttribute/data/is_comparable" xsi:type="string">No</data>
             <data name="productAttribute/data/is_filterable" xsi:type="string">Filterable (with results)</data>
             <data name="productAttribute/data/is_filterable_in_search" xsi:type="string">Yes</data>
+            <data name="attributeValue" xsi:type="number">15</data>
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeInGrid" />
             <constraint name="Magento\Catalog\Test\Constraint\AssertAttributeForm" />
             <constraint name="Magento\Catalog\Test\Constraint\AssertAddedProductAttributeOnProductForm" />
-            <constraint name="Magento\CatalogSearch\Test\Constraint\AssertAttributeSearchableByLabel" />
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeDisplayingOnSearchForm" />
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeIsFilterable" />
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeIsFilterableInSearch" />
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.xml
index 75b7694459a..174d41b6e86 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.xml
@@ -18,6 +18,9 @@
         <variation name="DeleteAssignedToTemplateProductAttributeTestVariation2">
             <data name="productTemplate/dataset" xsi:type="string">default</data>
             <data name="productTemplate/data/assigned_attributes/dataset" xsi:type="string">attribute_type_text_field</data>
+            <data name="assertProduct/data/name" xsi:type="string">Product name</data>
+            <data name="assertProduct/data/sku" xsi:type="string">product-sku</data>
+            <data name="assertProduct/data/price" xsi:type="string">25</data>
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeSuccessDeleteMessage" />
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductAttributeAbsenceInGrid" />
             <constraint name="Magento\ConfigurableProduct\Test\Constraint\AssertProductAttributeAbsenceInVariationsSearch" />
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/AddAttributeToProductTemplateStep.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/AddAttributeToProductTemplateStep.php
index 3d5aa19186c..e710f19bb12 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/AddAttributeToProductTemplateStep.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/AddAttributeToProductTemplateStep.php
@@ -62,6 +62,13 @@ class AddAttributeToProductTemplateStep implements TestStepInterface
      */
     protected $catalogProductEdit;
 
+    /**
+     * Custom attribute value to set while product creation.
+     *
+     * @var mixed
+     */
+    protected $attributeValue;
+
     /**
      * @constructor
      * @param CatalogProductSetIndex $catalogProductSetIndex
@@ -71,6 +78,7 @@ class AddAttributeToProductTemplateStep implements TestStepInterface
      * @param FixtureFactory $fixtureFactory
      * @param CatalogProductIndex $catalogProductIndex
      * @param CatalogProductEdit $catalogProductEdit
+     * @param mixed $attributeValue [optional]
      */
     public function __construct(
         CatalogProductSetIndex $catalogProductSetIndex,
@@ -79,7 +87,8 @@ class AddAttributeToProductTemplateStep implements TestStepInterface
         CatalogAttributeSet $productTemplate,
         FixtureFactory $fixtureFactory,
         CatalogProductIndex $catalogProductIndex,
-        CatalogProductEdit $catalogProductEdit
+        CatalogProductEdit $catalogProductEdit,
+        $attributeValue = null
     ) {
         $this->catalogProductSetIndex = $catalogProductSetIndex;
         $this->catalogProductSetEdit = $catalogProductSetEdit;
@@ -88,6 +97,7 @@ class AddAttributeToProductTemplateStep implements TestStepInterface
         $this->fixtureFactory = $fixtureFactory;
         $this->catalogProductIndex = $catalogProductIndex;
         $this->catalogProductEdit = $catalogProductEdit;
+        $this->attributeValue = $attributeValue;
     }
 
     /**
@@ -103,13 +113,17 @@ class AddAttributeToProductTemplateStep implements TestStepInterface
         $this->catalogProductSetEdit->getPageActions()->save();
 
         // Create product with attribute set mentioned above:
+        $customAttribute = $this->attribute;
+        if ($this->attributeValue !== null) {
+            $customAttribute = ['value' => $this->attributeValue, 'attribute' => $customAttribute];
+        }
         $product = $this->fixtureFactory->createByCode(
             'catalogProductSimple',
             [
                 'dataset' => 'product_with_category_with_anchor',
                 'data' => [
                     'attribute_set_id' => ['attribute_set' => $this->productTemplate],
-                    'custom_attribute' => $this->attribute
+                    'custom_attribute' => $customAttribute
                 ],
             ]
         );
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config.php
index 846c920cd94..ec16f30dfc1 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config.php
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config.php
@@ -98,7 +98,7 @@ class Config extends Tab
         foreach ($attributesValue as $key => $value) {
             $attributesValue[$key] = array_merge($value, $attributes['attributes_data'][$key]);
         }
-        $this->_rootElement->find($this->createConfigurationsButton)->click();
+        $this->createConfigurations();
         $this->getAttributeBlock()->fillAttributes($attributesValue);
         if (!empty($attributes['matrix'])) {
             $this->generateVariations();
@@ -122,6 +122,16 @@ class Config extends Tab
         }
     }
 
+    /**
+     * Click 'Create Configurations' button.
+     *
+     * @return void
+     */
+    public function createConfigurations()
+    {
+        $this->_rootElement->find($this->createConfigurationsButton)->click();
+    }
+
     /**
      * Generate variations.
      *
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute.php
index be8653668f1..e12f036a49b 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute.php
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute.php
@@ -181,7 +181,7 @@ class Attribute extends Form
     /**
      * @return \Magento\Ui\Test\Block\Adminhtml\DataGrid
      */
-    protected function getAttributesGrid()
+    public function getAttributesGrid()
     {
         return $this->blockFactory->create(
             'Magento\ConfigurableProduct\Test\Block\Adminhtml\Product\AttributesGrid',
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute/AttributeSelector.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute/AttributeSelector.php
index 4d2bf2cb826..e41ef61382f 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute/AttributeSelector.php
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute/AttributeSelector.php
@@ -7,7 +7,6 @@
 namespace Magento\ConfigurableProduct\Test\Block\Adminhtml\Product\Edit\Tab\Super\Config\Attribute;
 
 use Magento\Mtf\Client\Element\SuggestElement;
-use Magento\Catalog\Test\Fixture\CatalogProductAttribute;
 
 /**
  * Form Attribute Search on Product page.
@@ -32,15 +31,4 @@ class AttributeSelector extends SuggestElement
             // that causes disappearing of result suggest list.
         }
     }
-
-    /**
-     * Checking exist configurable attribute in search result.
-     *
-     * @param CatalogProductAttribute $productAttribute
-     * @return bool
-     */
-    public function isExistAttributeInSearchResult(CatalogProductAttribute $productAttribute)
-    {
-        return $this->isExistValueInSearchResult($productAttribute->getFrontendLabel());
-    }
 }
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertProductAttributeAbsenceInVariationsSearch.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertProductAttributeAbsenceInVariationsSearch.php
index 1c7edf16fe5..f2cd88751db 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertProductAttributeAbsenceInVariationsSearch.php
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertProductAttributeAbsenceInVariationsSearch.php
@@ -11,29 +11,31 @@ use Magento\ConfigurableProduct\Test\Block\Adminhtml\Product\Edit\Tab\Super\Conf
 use Magento\Catalog\Test\Fixture\CatalogProductAttribute;
 use Magento\Catalog\Test\Page\Adminhtml\CatalogProductIndex;
 use Magento\Catalog\Test\Page\Adminhtml\CatalogProductNew;
+use Magento\ConfigurableProduct\Test\Fixture\ConfigurableProduct;
 use Magento\Mtf\Constraint\AbstractConstraint;
 
 /**
- * Class AssertProductAttributeAbsenceInVariationsSearch
- * Check that deleted attribute can't be added to product template on Product Page via Add Attribute control
+ * Check that deleted attribute can't be added to product template on Product Page via Add Attribute control.
  */
 class AssertProductAttributeAbsenceInVariationsSearch extends AbstractConstraint
 {
     /**
-     * Label "Variations" tab
+     * Label "Variations" tab.
      */
     const TAB_VARIATIONS = 'variations';
 
     /**
-     * Assert that deleted attribute can't be added to product template on Product Page via Add Attribute control
+     * Assert that deleted attribute can't be added to product template on Product Page via Add Attribute control.
      *
      * @param CatalogProductAttribute $productAttribute
+     * @param ConfigurableProduct $assertProduct
      * @param CatalogProductIndex $productGrid
      * @param CatalogProductNew $newProductPage
      * @return void
      */
     public function processAssert(
         CatalogProductAttribute $productAttribute,
+        ConfigurableProduct $assertProduct,
         CatalogProductIndex $productGrid,
         CatalogProductNew $newProductPage
     ) {
@@ -41,18 +43,19 @@ class AssertProductAttributeAbsenceInVariationsSearch extends AbstractConstraint
         $productGrid->getGridPageActionBlock()->addProduct('simple');
 
         /** @var VariationsTab $variationsTab */
+        $newProductPage->getProductForm()->fill($assertProduct);
         $variationsTab = $newProductPage->getProductForm()->getTab(self::TAB_VARIATIONS);
         $variationsTab->showContent();
-        /** @var AttributeBlock $attributesBlock */
-        $attributesBlock = $variationsTab->getAttributeBlock();
+        $variationsTab->createConfigurations();
+        $attributesGrid = $variationsTab->getAttributeBlock()->getAttributesGrid();
         \PHPUnit_Framework_Assert::assertFalse(
-            $attributesBlock->getAttributeSelector()->isExistAttributeInSearchResult($productAttribute),
+            $attributesGrid->isRowVisible(['frontend_label' => $productAttribute->getFrontendLabel()]),
             "Product attribute found in Attribute Search form."
         );
     }
 
     /**
-     * Text absent Product Attribute in Attribute Search form
+     * Text absent Product Attribute in Attribute Search form.
      *
      * @return string
      */
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertProductAttributeIsConfigurable.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertProductAttributeIsConfigurable.php
index e088a33cf70..2c9d735450f 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertProductAttributeIsConfigurable.php
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertProductAttributeIsConfigurable.php
@@ -10,6 +10,7 @@ use Magento\Catalog\Test\Fixture\CatalogProductAttribute;
 use Magento\Catalog\Test\Page\Adminhtml\CatalogProductIndex;
 use Magento\Catalog\Test\Page\Adminhtml\CatalogProductNew;
 use Magento\ConfigurableProduct\Test\Block\Adminhtml\Product\Edit\Tab\Super\Config as TabVariation;
+use Magento\ConfigurableProduct\Test\Fixture\ConfigurableProduct;
 use Magento\Mtf\Constraint\AbstractConstraint;
 
 /**
@@ -21,23 +22,27 @@ class AssertProductAttributeIsConfigurable extends AbstractConstraint
      * Assert check whether the attribute is used to create a configurable products.
      *
      * @param CatalogProductAttribute $attribute
+     * @param ConfigurableProduct $assertProduct
      * @param CatalogProductIndex $productGrid
      * @param CatalogProductNew $newProductPage
      */
     public function processAssert(
         CatalogProductAttribute $attribute,
+        ConfigurableProduct $assertProduct,
         CatalogProductIndex $productGrid,
         CatalogProductNew $newProductPage
     ) {
         $productGrid->open();
         $productGrid->getGridPageActionBlock()->addProduct('configurable');
         $productBlockForm = $newProductPage->getProductForm();
+        $productBlockForm->fill($assertProduct);
         $productBlockForm->openTab('variations');
-        /** @var TabVariation $tabVariation */
-        $tabVariation = $productBlockForm->getTab('variations');
-        $configurableAttributeSelector = $tabVariation->getAttributeBlock()->getAttributeSelector();
+        /** @var \Magento\ConfigurableProduct\Test\Block\Adminhtml\Product\Edit\Tab\Super\Config  $variationsTab */
+        $variationsTab = $productBlockForm->getTab('variations');
+        $variationsTab->createConfigurations();
+        $attributesGrid = $variationsTab->getAttributeBlock()->getAttributesGrid();
         \PHPUnit_Framework_Assert::assertTrue(
-            $configurableAttributeSelector->isExistAttributeInSearchResult($attribute),
+            $attributesGrid->isRowVisible(['frontend_label' => $attribute->getFrontendLabel()]),
             "Product attribute is absent on the product page."
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/MassAssignCustomerGroupTest.php b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/MassAssignCustomerGroupTest.php
index d253c87f9ff..fa144a9b396 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/MassAssignCustomerGroupTest.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/MassAssignCustomerGroupTest.php
@@ -91,7 +91,8 @@ class MassAssignCustomerGroupTest extends Injectable
         $this->customerIndex->open();
         $this->customerIndex->getCustomerGridBlock()->massaction(
             [['email' => $customer->getEmail()]],
-            [$this->customersGridActions => $customerGroup->getCustomerGroupCode()]
+            [$this->customersGridActions => $customerGroup->getCustomerGroupCode()],
+            true
         );
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/UpdateCustomerBackendEntityTest.php b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/UpdateCustomerBackendEntityTest.php
index 1bb9544c621..95684cb07b8 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/UpdateCustomerBackendEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/UpdateCustomerBackendEntityTest.php
@@ -13,15 +13,16 @@ use Magento\Customer\Test\Page\Adminhtml\CustomerIndexEdit;
 use Magento\Mtf\TestCase\Injectable;
 
 /**
- * Test Creation for UpdateCustomerBackendEntity
+ * Precondition:
+ * 1. Create customer.
  *
- * General Flow:
- * 1. Login to backend as admin
- * 2. Navigate to CUSTOMERS->All Customers
- * 3. Open from grid test customer
- * 4. Edit some values, if addresses fields are not presented click 'Add New Address' button
- * 5. Click 'Save' button
- * 6. Perform all assertions
+ * Steps:
+ * 1. Login to backend as admin.
+ * 2. Navigate to CUSTOMERS->All Customers.
+ * 3. Open from grid test customer.
+ * 4. Edit some values, if addresses fields are not presented click 'Add New Address' button.
+ * 5. Click 'Save' button.
+ * 6. Perform all assertions.
  *
  * @ZephyrId MAGETWO-23881
  */
@@ -33,18 +34,25 @@ class UpdateCustomerBackendEntityTest extends Injectable
     /* end tags */
 
     /**
+     * Customer grid page.
+     *
      * @var CustomerIndex
      */
     protected $customerIndexPage;
 
     /**
+     * Customer edit page.
+     *
      * @var CustomerIndexEdit
      */
     protected $customerIndexEditPage;
 
     /**
+     * Inject pages.
+     *
      * @param CustomerIndex $customerIndexPage
      * @param CustomerIndexEdit $customerIndexEditPage
+     * @return void
      */
     public function __inject(
         CustomerIndex $customerIndexPage,
@@ -55,19 +63,19 @@ class UpdateCustomerBackendEntityTest extends Injectable
     }
 
     /**
+     * Run update customer test.
+     *
      * @param Customer $initialCustomer
      * @param Customer $customer
-     * @param Address $address
+     * @param Address $address [optional]
+     * @return void
      */
     public function testUpdateCustomerBackendEntity(
         Customer $initialCustomer,
         Customer $customer,
-        Address $address
+        Address $address = null
     ) {
-        // Prepare data
-        $address = $address->hasData() ? $address : null;
-
-        // Preconditions:
+        // Precondition
         $initialCustomer->persist();
 
         // Steps
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/UpdateCustomerBackendEntityTest.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/UpdateCustomerBackendEntityTest.xml
index afe288811e9..0193f9cb8fa 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/UpdateCustomerBackendEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/UpdateCustomerBackendEntityTest.xml
@@ -19,37 +19,13 @@
             <data name="customer/data/dob" xsi:type="string">01/08/1986</data>
             <data name="customer/data/taxvat" xsi:type="string">123456789001</data>
             <data name="customer/data/gender" xsi:type="string">Male</data>
-            <data name="address/data/prefix" xsi:type="string">-</data>
-            <data name="address/data/firstname" xsi:type="string">-</data>
-            <data name="address/data/middlename" xsi:type="string">-</data>
-            <data name="address/data/lastname" xsi:type="string">-</data>
-            <data name="address/data/suffix" xsi:type="string">-</data>
-            <data name="address/data/company" xsi:type="string">-</data>
-            <data name="address/data/street" xsi:type="string">-</data>
-            <data name="address/data/city" xsi:type="string">-</data>
-            <data name="address/data/country_id" xsi:type="string">-</data>
-            <data name="address/data/region_id" xsi:type="string">-</data>
-            <data name="address/data/region" xsi:type="string">-</data>
-            <data name="address/data/postcode" xsi:type="string">-</data>
-            <data name="address/data/telephone" xsi:type="string">-</data>
-            <data name="address/data/fax" xsi:type="string">-</data>
-            <data name="address/data/vat_id" xsi:type="string">-</data>
             <constraint name="Magento\Customer\Test\Constraint\AssertCustomerSuccessSaveMessage" />
             <constraint name="Magento\Customer\Test\Constraint\AssertCustomerForm" />
             <constraint name="Magento\Customer\Test\Constraint\AssertCustomerInGrid" />
         </variation>
         <variation name="UpdateCustomerBackendEntityTestVariation2">
             <data name="initialCustomer/dataset" xsi:type="string">default</data>
-            <data name="customer/data/group_id/dataset" xsi:type="string">-</data>
-            <data name="customer/data/prefix" xsi:type="string">-</data>
-            <data name="customer/data/firstname" xsi:type="string">-</data>
-            <data name="customer/data/middlename" xsi:type="string">-</data>
-            <data name="customer/data/lastname" xsi:type="string">-</data>
-            <data name="customer/data/suffix" xsi:type="string">-</data>
             <data name="customer/data/email" xsi:type="string">-</data>
-            <data name="customer/data/dob" xsi:type="string">-</data>
-            <data name="customer/data/taxvat" xsi:type="string">-</data>
-            <data name="customer/data/gender" xsi:type="string">-</data>
             <data name="address/data/prefix" xsi:type="string">Prefix%isolation%_</data>
             <data name="address/data/firstname" xsi:type="string">Doe%isolation%</data>
             <data name="address/data/middlename" xsi:type="string">Middle Name %isolation%</data>
@@ -60,10 +36,8 @@
             <data name="address/data/city" xsi:type="string">Dothan</data>
             <data name="address/data/country_id" xsi:type="string">United States</data>
             <data name="address/data/region_id" xsi:type="string">Alabama</data>
-            <data name="address/data/region" xsi:type="string">-</data>
             <data name="address/data/postcode" xsi:type="string">36303</data>
             <data name="address/data/telephone" xsi:type="string">334-200-4060</data>
-            <data name="address/data/fax" xsi:type="string">555-666-777-8910</data>
             <data name="address/data/vat_id" xsi:type="string">U1234567890</data>
             <constraint name="Magento\Customer\Test\Constraint\AssertCustomerSuccessSaveMessage" />
             <constraint name="Magento\Customer\Test\Constraint\AssertCustomerForm" />
@@ -90,11 +64,9 @@
             <data name="address/data/street" xsi:type="string">39 Northgate Street</data>
             <data name="address/data/city" xsi:type="string">BICKTON</data>
             <data name="address/data/country_id" xsi:type="string">United Kingdom</data>
-            <data name="address/data/region_id" xsi:type="string">-</data>
             <data name="address/data/region" xsi:type="string">PINMINNOCH</data>
             <data name="address/data/postcode" xsi:type="string">KA26 1PF</data>
             <data name="address/data/telephone" xsi:type="string">999-777-111-2345</data>
-            <data name="address/data/fax" xsi:type="string">-</data>
             <data name="address/data/vat_id" xsi:type="string">987654321</data>
             <constraint name="Magento\Customer\Test\Constraint\AssertCustomerSuccessSaveMessage" />
             <constraint name="Magento\Customer\Test\Constraint\AssertCustomerForm" />
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/UpdateCustomerFrontendEntityTest.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/UpdateCustomerFrontendEntityTest.xml
index 8d70104f70a..9398ab7ae74 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/UpdateCustomerFrontendEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/UpdateCustomerFrontendEntityTest.xml
@@ -19,9 +19,7 @@
             <data name="address/data/city" xsi:type="string">City %isolation%</data>
             <data name="address/data/country_id" xsi:type="string">United States</data>
             <data name="address/data/region_id" xsi:type="string">Colorado</data>
-            <data name="address/data/region" xsi:type="string">-</data>
             <data name="address/data/telephone" xsi:type="string">555-888-111-999</data>
-            <data name="address/data/fax" xsi:type="string">161-999-8888</data>
             <data name="address/data/postcode" xsi:type="string">12345</data>
             <constraint name="Magento\Customer\Test\Constraint\AssertCustomerAddressSuccessSaveMessage" />
             <constraint name="Magento\Customer\Test\Constraint\AssertCustomerDefaultAddresses" />
@@ -37,10 +35,8 @@
             <data name="address/data/street" xsi:type="string">Some street %isolation%</data>
             <data name="address/data/city" xsi:type="string">City %isolation%</data>
             <data name="address/data/country_id" xsi:type="string">United Kingdom</data>
-            <data name="address/data/region_id" xsi:type="string">-</data>
             <data name="address/data/region" xsi:type="string">Region %isolation%</data>
             <data name="address/data/telephone" xsi:type="string">0123456789-02134567</data>
-            <data name="address/data/fax" xsi:type="string">5555-874-99634</data>
             <data name="address/data/postcode" xsi:type="string">12345</data>
             <constraint name="Magento\Customer\Test\Constraint\AssertCustomerAddressSuccessSaveMessage" />
             <constraint name="Magento\Customer\Test\Constraint\AssertCustomerDefaultAddresses" />
@@ -57,9 +53,7 @@
             <data name="address/data/city" xsi:type="string">Quintin</data>
             <data name="address/data/country_id" xsi:type="string">France</data>
             <data name="address/data/region_id" xsi:type="string">Côtes-d'Armor</data>
-            <data name="address/data/region" xsi:type="string">-</data>
             <data name="address/data/telephone" xsi:type="string">555-888-111-999</data>
-            <data name="address/data/fax" xsi:type="string">161-999-8888</data>
             <data name="address/data/postcode" xsi:type="string">12345</data>
             <constraint name="Magento\Customer\Test\Constraint\AssertCustomerAddressSuccessSaveMessage" />
             <constraint name="Magento\Customer\Test\Constraint\AssertCustomerDefaultAddresses" />
@@ -75,9 +69,7 @@
             <data name="address/data/city" xsi:type="string">Culver City</data>
             <data name="address/data/country_id" xsi:type="string">United States</data>
             <data name="address/data/region_id" xsi:type="string">California</data>
-            <data name="address/data/region" xsi:type="string">-</data>
             <data name="address/data/telephone" xsi:type="string">555-55-555-55</data>
-            <data name="address/data/fax" xsi:type="string">-</data>
             <data name="address/data/postcode" xsi:type="string">90230</data>
             <data name="tag" xsi:type="string">test_type:acceptance_test</data>
             <constraint name="Magento\Customer\Test\Constraint\AssertCustomerAddressSuccessSaveMessage" />
diff --git a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
index 5757bf446e6..05c53bc6296 100644
--- a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
+++ b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
@@ -128,6 +128,20 @@ class DataGrid extends Grid
      */
     protected $alertModal = '._show[data-role=modal]';
 
+    /**
+     * Locator for 'Sort' link.
+     *
+     * @var string
+     */
+    protected $sortLink = "//th[contains(@class, '%s')]/span[contains(text(), '%s')]";
+
+    /**
+     * Current page input.
+     *
+     * @var string
+     */
+    protected $currentPage = '#pageCurrent';
+
     /**
      * Clear all applied Filters.
      *
@@ -239,23 +253,23 @@ class DataGrid extends Grid
         if ($this->_rootElement->find($this->noRecords)->isVisible()) {
             return;
         }
-        if (!is_array($action)) {
-            $action = [$action => '-'];
-        }
-        foreach ($items as $item) {
-            $this->searchAndSelect($item);
-        }
+        $this->selectItems($items);
         if ($massActionSelection) {
             $this->_rootElement->find($this->massActionToggleButton)->click();
             $this->_rootElement
                 ->find(sprintf($this->massActionToggleList, $massActionSelection), Locator::SELECTOR_XPATH)
                 ->click();
         }
-        $actionType = key($action);
+        $actionType = is_array($action) ? key($action) : $action;
         $this->_rootElement->find($this->massActionButton)->click();
         $this->_rootElement
             ->find(sprintf($this->massActionToggleList, $actionType), Locator::SELECTOR_XPATH)
             ->click();
+        if (is_array($action)) {
+            $this->_rootElement
+                ->find(sprintf($this->massActionToggleList, end($action)), Locator::SELECTOR_XPATH)
+                ->click();
+        }
         if ($acceptAlert) {
             $element = $this->browser->find($this->alertModal);
             /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
@@ -264,6 +278,48 @@ class DataGrid extends Grid
         }
     }
 
+    /**
+     * Select items without using grid search.
+     *
+     * @param array $items
+     * @return void
+     * @throws \Exception
+     */
+    protected function selectItems(array $items)
+    {
+        $this->sortGridByField('ID');
+        foreach ($items as $item) {
+            $this->_rootElement->find($this->currentPage)->setValue('');
+            $this->waitLoader();
+            $selectItem = $this->getRow($item)->find($this->selectItem);
+            do {
+                if ($selectItem->isVisible()) {
+                    $selectItem->click();
+                    break;
+                }
+            } while ($this->nextPage());
+            if (!$selectItem->isVisible()) {
+                throw new \Exception('Searched item was not found.');
+            }
+        }
+    }
+
+    /**
+     * Sort grid by field.
+     *
+     * @param $field
+     * @param string $sort
+     */
+    public function sortGridByField($field, $sort = "desc")
+    {
+        $reverseSort = $sort == 'desc' ? 'asc' : 'desc';
+        $sortBlock = $this->_rootElement->find(sprintf($this->sortLink, $reverseSort, $field), Locator::SELECTOR_XPATH);
+        if ($sortBlock->isVisible()) {
+            $sortBlock->click();
+            $this->waitLoader();
+        }
+    }
+
     /**
      * @param string $columnLabel
      */
-- 
GitLab


From 4966479bf08ffabdb8986fcd8578c21b6e240a77 Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Thu, 22 Oct 2015 17:11:03 +0300
Subject: [PATCH 196/370] MAGETWO-44434: Some untranslatable fields in Magento
 backend

---
 .../Unit/Model/Entity/Attribute/Frontend/DatetimeTest.php   | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Frontend/DatetimeTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Frontend/DatetimeTest.php
index 03858a596f4..4bb5a0fcabe 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Frontend/DatetimeTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Frontend/DatetimeTest.php
@@ -75,7 +75,8 @@ class DatetimeTest extends \PHPUnit_Framework_TestCase
      * @param string $expectedResult
      * @dataProvider getLabelDataProvider
      */
-    public function testGetLocalizedLabel($labelText, $attributeCode, $expectedResult) {
+    public function testGetLocalizedLabel($labelText, $attributeCode, $expectedResult)
+    {
         $this->attributeMock->expects($this->exactly(2))
             ->method('getFrontendLabel')
             ->willReturn($labelText);
@@ -90,7 +91,8 @@ class DatetimeTest extends \PHPUnit_Framework_TestCase
     /**
      * @return array
      */
-    public function getLabelDataProvider() {
+    public function getLabelDataProvider()
+    {
         return [
             [null, 'test code', 'test code'],
             ['', 'test code', 'test code'],
-- 
GitLab


From 3fe31b7cb6684a12f6c24d8b4d0396ca23bc4b59 Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Thu, 22 Oct 2015 09:16:27 -0500
Subject: [PATCH 197/370] MAGETWO-43857: [github] cache types don't properly
 invalidate all the time #1844

---
 .../Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php
index 75530869fa5..4082cac2232 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php
@@ -50,7 +50,7 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->context = $objectManager->getObject(
             'Magento\Framework\Model\Context',
-            ['cacheManager' => $this->cacheManagerMock,]
+            ['cacheManager' => $this->cacheManagerMock]
         );
 
         $this->designMock = $this->getMockBuilder('Magento\Framework\View\DesignInterface')->getMock();
-- 
GitLab


From b021249f1fbea52716b68d4f9e057648aa001821 Mon Sep 17 00:00:00 2001
From: Dmytro Voskoboinikov <dvoskoboinikov@ebay.com>
Date: Thu, 22 Oct 2015 17:17:54 +0300
Subject: [PATCH 198/370] MAGETWO-44416: Bugfixes PR preparation and processing

---
 .../Api/CreditmemoManagementInterface.php     |  4 +---
 .../Sales/Model/Order/AddressRepository.php   |  2 ++
 .../Sales/Model/Order/ShipmentRepository.php  |  2 ++
 .../Sales/Model/Service/CreditmemoService.php |  4 +---
 .../Sales/Model/Service/OrderService.php      |  1 +
 .../Observer/GridProcessAddressChange.php     |  1 +
 .../Model/ResourceModel/Order/AddressTest.php | 19 +------------------
 app/code/Magento/SalesRule/Model/Rule.php     |  2 +-
 .../UpdateProductAttributeEntityTest.php      |  8 ++++----
 9 files changed, 14 insertions(+), 29 deletions(-)

diff --git a/app/code/Magento/Sales/Api/CreditmemoManagementInterface.php b/app/code/Magento/Sales/Api/CreditmemoManagementInterface.php
index 551f4848886..b2d7aab6eb0 100644
--- a/app/code/Magento/Sales/Api/CreditmemoManagementInterface.php
+++ b/app/code/Magento/Sales/Api/CreditmemoManagementInterface.php
@@ -48,12 +48,10 @@ interface CreditmemoManagementInterface
      *
      * @param \Magento\Sales\Api\Data\CreditmemoInterface $creditmemo
      * @param bool $offlineRequested
-     * @param bool $notifyCustomer
      * @return \Magento\Sales\Api\Data\CreditmemoInterface
      */
     public function refund(
         \Magento\Sales\Api\Data\CreditmemoInterface $creditmemo,
-        $offlineRequested = false,
-        $notifyCustomer = false
+        $offlineRequested = false
     );
 }
diff --git a/app/code/Magento/Sales/Model/Order/AddressRepository.php b/app/code/Magento/Sales/Model/Order/AddressRepository.php
index fb77f8d17c3..ec5a39bce3b 100644
--- a/app/code/Magento/Sales/Model/Order/AddressRepository.php
+++ b/app/code/Magento/Sales/Model/Order/AddressRepository.php
@@ -14,6 +14,8 @@ use Magento\Framework\Exception\InputException;
 
 /**
  * Repository class for @see \Magento\Sales\Api\Data\OrderAddressInterface
+ *
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
 class AddressRepository implements \Magento\Sales\Api\OrderAddressRepositoryInterface
 {
diff --git a/app/code/Magento/Sales/Model/Order/ShipmentRepository.php b/app/code/Magento/Sales/Model/Order/ShipmentRepository.php
index 0476e481452..9cb32363b48 100644
--- a/app/code/Magento/Sales/Model/Order/ShipmentRepository.php
+++ b/app/code/Magento/Sales/Model/Order/ShipmentRepository.php
@@ -14,6 +14,8 @@ use Magento\Framework\Exception\InputException;
 
 /**
  * Repository class for @see \Magento\Sales\Api\Data\ShipmentInterface
+ *
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
 class ShipmentRepository implements \Magento\Sales\Api\ShipmentRepositoryInterface
 {
diff --git a/app/code/Magento/Sales/Model/Service/CreditmemoService.php b/app/code/Magento/Sales/Model/Service/CreditmemoService.php
index 6b949718c11..1993e1d1cae 100644
--- a/app/code/Magento/Sales/Model/Service/CreditmemoService.php
+++ b/app/code/Magento/Sales/Model/Service/CreditmemoService.php
@@ -129,13 +129,11 @@ class CreditmemoService implements \Magento\Sales\Api\CreditmemoManagementInterf
      *
      * @param \Magento\Sales\Api\Data\CreditmemoInterface $creditmemo
      * @param bool $offlineRequested
-     * @param bool $notifyCustomer
      * @return \Magento\Sales\Api\Data\CreditmemoInterface
      */
     public function refund(
         \Magento\Sales\Api\Data\CreditmemoInterface $creditmemo,
-        $offlineRequested = false,
-        $notifyCustomer = false
+        $offlineRequested = false
     ) {
         $this->validateForRefund($creditmemo);
         $creditmemo->setState(\Magento\Sales\Model\Order\Creditmemo::STATE_REFUNDED);
diff --git a/app/code/Magento/Sales/Model/Service/OrderService.php b/app/code/Magento/Sales/Model/Service/OrderService.php
index 27132f9d5ce..29b719a1873 100644
--- a/app/code/Magento/Sales/Model/Service/OrderService.php
+++ b/app/code/Magento/Sales/Model/Service/OrderService.php
@@ -58,6 +58,7 @@ class OrderService implements OrderManagementInterface
      * @param \Magento\Framework\Api\FilterBuilder $filterBuilder
      * @param \Magento\Sales\Model\OrderNotifier $notifier
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
+     * @param \Magento\Sales\Model\Order\Email\Sender\OrderCommentSender $orderCommentSender
      */
     public function __construct(
         \Magento\Sales\Api\OrderRepositoryInterface $orderRepository,
diff --git a/app/code/Magento/Sales/Observer/GridProcessAddressChange.php b/app/code/Magento/Sales/Observer/GridProcessAddressChange.php
index 878d4c95b7d..e053801290d 100644
--- a/app/code/Magento/Sales/Observer/GridProcessAddressChange.php
+++ b/app/code/Magento/Sales/Observer/GridProcessAddressChange.php
@@ -35,6 +35,7 @@ class GridProcessAddressChange implements ObserverInterface
      * This is manual admin action, as result we perform this operation without delay
      *
      * @param EventObserver $observer
+     * @return void
      */
     public function execute(EventObserver $observer)
     {
diff --git a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/AddressTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/AddressTest.php
index ffeb136782b..8ac891f47b4 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/AddressTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/AddressTest.php
@@ -40,11 +40,6 @@ class AddressTest extends \PHPUnit_Framework_TestCase
      */
     protected $validatorMock;
 
-    /**
-     * @var \Magento\Sales\Model\ResourceModel\GridPool|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $gridPoolMock;
-
     /**
      * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
@@ -87,13 +82,6 @@ class AddressTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $this->gridPoolMock = $this->getMock(
-            'Magento\Sales\Model\ResourceModel\GridPool',
-            ['refreshByOrderId'],
-            [],
-            '',
-            false
-        );
         $this->entitySnapshotMock = $this->getMock(
             'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
@@ -117,7 +105,6 @@ class AddressTest extends \PHPUnit_Framework_TestCase
             [
                 'resource' => $this->appResourceMock,
                 'validator' => $this->validatorMock,
-                'gridPool' => $this->gridPoolMock,
                 'entitySnapshot' => $this->entitySnapshotMock
             ]
         );
@@ -136,13 +123,9 @@ class AddressTest extends \PHPUnit_Framework_TestCase
             ->method('isModified')
             ->with($this->addressMock)
             ->willReturn(true);
-        $this->addressMock->expects($this->exactly(3))
+        $this->addressMock->expects($this->once())
             ->method('getParentId')
             ->will($this->returnValue(1));
-        $this->gridPoolMock->expects($this->once())
-            ->method('refreshByOrderId')
-            ->with($this->equalTo(1))
-            ->will($this->returnSelf());
 
         $this->addressResource->save($this->addressMock);
     }
diff --git a/app/code/Magento/SalesRule/Model/Rule.php b/app/code/Magento/SalesRule/Model/Rule.php
index b9ad49da250..4ecc75f77dd 100644
--- a/app/code/Magento/SalesRule/Model/Rule.php
+++ b/app/code/Magento/SalesRule/Model/Rule.php
@@ -238,7 +238,7 @@ class Rule extends \Magento\Rule\Model\AbstractModel
     /**
      * Load all relative data
      *
-     * return void
+     * @return void
      */
     public function loadRelations()
     {
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/UpdateProductAttributeEntityTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/UpdateProductAttributeEntityTest.php
index b4c06c6796c..d3b51ebdce2 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/UpdateProductAttributeEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/UpdateProductAttributeEntityTest.php
@@ -91,7 +91,7 @@ class UpdateProductAttributeEntityTest extends Injectable
         $attribute = $this->prepareAttribute($attribute, $productAttributeOriginal);
         $productSimple->persist();
 
-        return ['product' => $this->prepareProduct($productSimple, $attribute, $productTemplate)];
+        return ['product' => $this->prepareProduct($productSimple, $attribute, $attributeSet)];
     }
 
     /**
@@ -99,13 +99,13 @@ class UpdateProductAttributeEntityTest extends Injectable
      *
      * @param CatalogProductSimple $product
      * @param CatalogProductAttribute $attribute
-     * @param CatalogAttributeSet $productTemplate
+     * @param CatalogAttributeSet $attributeSet
      * @return CatalogProductSimple
      */
-    protected function prepareProduct($product, $attribute, $productTemplate)
+    protected function prepareProduct($product, $attribute, $attributeSet)
     {
         $data = [
-            'attribute_set_id' => ['attribute_set' => $productTemplate],
+            'attribute_set_id' => ['attribute_set' => $attributeSet],
             'custom_attribute' => $attribute
         ];
         $data = array_merge($data, $product->getData());
-- 
GitLab


From 2d189deb01d58025204dd926520705fa273a3a2c Mon Sep 17 00:00:00 2001
From: Olga Kopylova <okopylova@ebay.com>
Date: Mon, 19 Oct 2015 17:10:30 -0500
Subject: [PATCH 199/370] MAGETWO-44119: Module-specific styles are not
 available for EE modules while installing magento via composer

- move theme files to CE themes
---
 .../Magento_Enterprise/layout/default.xml     |  16 +
 .../web/css/source/module.less                |  23 +
 .../web/css/source/module.less                | 271 +++++++++
 .../web/css/source/_module.less               | 146 +++++
 .../web/css/source/_widgets.less              |  88 +++
 .../web/css/source/_widgets.less              |  32 ++
 .../web/css/source/_module.less               | 116 ++++
 .../web/css/source/_widgets.less              | 156 +++++
 .../web/css/source/_module.less               |  46 ++
 .../layout/checkout_cart_index.xml            |  12 +
 .../web/css/source/_module.less               |  41 ++
 .../web/css/source/_module.less               | 253 +++++++++
 .../web/css/source/_widgets.less              |   7 +
 .../web/css/source/_module.less               | 216 +++++++
 .../web/css/source/_module.less               |  48 ++
 .../web/css/source/_module.less               |  55 ++
 .../web/css/source/_module.less               | 494 ++++++++++++++++
 .../web/css/source/_widgets.less              |  10 +
 .../web/css/source/_module.less               |  48 ++
 .../Magento_Rma/web/css/source/_email.less    |  17 +
 .../Magento_Rma/web/css/source/_module.less   | 151 +++++
 .../web/css/source/_widgets.less              |  25 +
 .../web/css/source/_module.less               | 165 ++++++
 .../web/css/source/_widgets.less              |  89 +++
 .../web/css/source/_module.less               |  56 ++
 .../web/css/source/_module.less               | 141 +++++
 .../layout/checkout_cart_index.xml            |  12 +
 .../web/css/source/_module.less               |  58 ++
 .../web/css/source/_module.less               | 364 ++++++++++++
 .../web/css/source/_module.less               | 238 ++++++++
 .../web/css/source/_module.less               | 100 ++++
 .../web/css/source/_module.less               |  75 +++
 .../web/css/source/_module.less               | 534 ++++++++++++++++++
 .../web/css/source/_module.less               |  48 ++
 .../Magento_Rma/web/css/source/_module.less   | 157 +++++
 35 files changed, 4308 insertions(+)
 create mode 100644 app/design/adminhtml/Magento/backend/Magento_Enterprise/layout/default.xml
 create mode 100644 app/design/adminhtml/Magento/backend/Magento_GiftCard/web/css/source/module.less
 create mode 100644 app/design/adminhtml/Magento/backend/Magento_VisualMerchandiser/web/css/source/module.less
 create mode 100644 app/design/frontend/Magento/blank/Magento_AdvancedCheckout/web/css/source/_module.less
 create mode 100644 app/design/frontend/Magento/blank/Magento_AdvancedCheckout/web/css/source/_widgets.less
 create mode 100644 app/design/frontend/Magento/blank/Magento_Banner/web/css/source/_widgets.less
 create mode 100644 app/design/frontend/Magento/blank/Magento_CatalogEvent/web/css/source/_module.less
 create mode 100644 app/design/frontend/Magento/blank/Magento_CatalogEvent/web/css/source/_widgets.less
 create mode 100644 app/design/frontend/Magento/blank/Magento_GiftCard/web/css/source/_module.less
 create mode 100644 app/design/frontend/Magento/blank/Magento_GiftCardAccount/layout/checkout_cart_index.xml
 create mode 100644 app/design/frontend/Magento/blank/Magento_GiftCardAccount/web/css/source/_module.less
 create mode 100644 app/design/frontend/Magento/blank/Magento_GiftRegistry/web/css/source/_module.less
 create mode 100644 app/design/frontend/Magento/blank/Magento_GiftRegistry/web/css/source/_widgets.less
 create mode 100644 app/design/frontend/Magento/blank/Magento_GiftWrapping/web/css/source/_module.less
 create mode 100644 app/design/frontend/Magento/blank/Magento_GroupedProduct/web/css/source/_module.less
 create mode 100644 app/design/frontend/Magento/blank/Magento_Invitation/web/css/source/_module.less
 create mode 100644 app/design/frontend/Magento/blank/Magento_MultipleWishlist/web/css/source/_module.less
 create mode 100644 app/design/frontend/Magento/blank/Magento_MultipleWishlist/web/css/source/_widgets.less
 create mode 100644 app/design/frontend/Magento/blank/Magento_Reward/web/css/source/_module.less
 create mode 100644 app/design/frontend/Magento/blank/Magento_Rma/web/css/source/_email.less
 create mode 100644 app/design/frontend/Magento/blank/Magento_Rma/web/css/source/_module.less
 create mode 100644 app/design/frontend/Magento/blank/Magento_VersionsCms/web/css/source/_widgets.less
 create mode 100644 app/design/frontend/Magento/luma/Magento_AdvancedCheckout/web/css/source/_module.less
 create mode 100644 app/design/frontend/Magento/luma/Magento_AdvancedCheckout/web/css/source/_widgets.less
 create mode 100644 app/design/frontend/Magento/luma/Magento_CustomerBalance/web/css/source/_module.less
 create mode 100644 app/design/frontend/Magento/luma/Magento_GiftCard/web/css/source/_module.less
 create mode 100644 app/design/frontend/Magento/luma/Magento_GiftCardAccount/layout/checkout_cart_index.xml
 create mode 100644 app/design/frontend/Magento/luma/Magento_GiftCardAccount/web/css/source/_module.less
 create mode 100644 app/design/frontend/Magento/luma/Magento_GiftRegistry/web/css/source/_module.less
 create mode 100644 app/design/frontend/Magento/luma/Magento_GiftWrapping/web/css/source/_module.less
 create mode 100644 app/design/frontend/Magento/luma/Magento_GroupedProduct/web/css/source/_module.less
 create mode 100644 app/design/frontend/Magento/luma/Magento_Invitation/web/css/source/_module.less
 create mode 100644 app/design/frontend/Magento/luma/Magento_MultipleWishlist/web/css/source/_module.less
 create mode 100644 app/design/frontend/Magento/luma/Magento_Reward/web/css/source/_module.less
 create mode 100644 app/design/frontend/Magento/luma/Magento_Rma/web/css/source/_module.less

diff --git a/app/design/adminhtml/Magento/backend/Magento_Enterprise/layout/default.xml b/app/design/adminhtml/Magento/backend/Magento_Enterprise/layout/default.xml
new file mode 100644
index 00000000000..39859341ebc
--- /dev/null
+++ b/app/design/adminhtml/Magento/backend/Magento_Enterprise/layout/default.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
+    <body>
+        <referenceBlock name="logo">
+            <arguments>
+                <argument name="edition" xsi:type="string">Enterprise</argument>
+            </arguments>
+        </referenceBlock>
+    </body>
+</page>
diff --git a/app/design/adminhtml/Magento/backend/Magento_GiftCard/web/css/source/module.less b/app/design/adminhtml/Magento/backend/Magento_GiftCard/web/css/source/module.less
new file mode 100644
index 00000000000..12ccb3531ea
--- /dev/null
+++ b/app/design/adminhtml/Magento/backend/Magento_GiftCard/web/css/source/module.less
@@ -0,0 +1,23 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  IE9 styles
+//  ---------------------------------------------
+
+.ie9 {
+    .giftcard-info-container {
+        .fieldset {
+            .admin__field {
+                .admin__field-label {
+                    display: table;
+                    span {
+                        display: table-cell;
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/app/design/adminhtml/Magento/backend/Magento_VisualMerchandiser/web/css/source/module.less b/app/design/adminhtml/Magento/backend/Magento_VisualMerchandiser/web/css/source/module.less
new file mode 100644
index 00000000000..33e8affd44b
--- /dev/null
+++ b/app/design/adminhtml/Magento/backend/Magento_VisualMerchandiser/web/css/source/module.less
@@ -0,0 +1,271 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+#merchandiser-app {
+    .merchandiser-toolbar {
+        float: right;
+    }
+
+    ul.tabs {
+        float: right;
+    }
+
+    .clearfix {
+        clear: both;
+    }
+
+    #catalog_category_merchandiser {
+        div.grid {
+            padding: 0;
+        }
+        div.grid-actions {
+            padding: 10px 0;
+            float: right;
+        }
+    }
+
+    .merchandiser-tab {
+        padding: 0;
+    }
+
+    .tabs {
+        list-style: none;
+        overflow: hidden;
+        li {
+            background-color: #f0f0f0;
+            float: left;
+            > a {
+                border: 1px solid #cccccc;
+                padding: 7px 10px;
+                text-decoration: none;
+                display: block;
+                color: #7d7d7d;
+            }
+        }
+        li:last-child > a {
+            border-left: 0;
+        }
+        li.ui-tabs-active {
+            background-color: #dedede;
+        }
+    }
+
+    #catalog_category_merchandiser_list {
+        overflow: hidden;
+        > li {
+            list-style: none;
+            width: 190px;
+            height: 340px;
+            float: left;
+            border: 1px solid #7d7d7d;
+            margin:0 25px 20px 0;
+            padding: 10px;
+            background-color: #fff;
+        }
+        .image-holder {
+            text-align: center;
+            img {
+                max-height: 130px;
+            }
+        }
+        .controlbar-top {
+            overflow: hidden;
+            a {
+                text-decoration: none;
+                color: #7d7d7d;
+                float:left;
+                display: inline-block;
+            }
+            a:last-child {
+                float:right;
+            }
+        }
+        .info-block {
+            height: 100px;
+        }
+        .controlbar-bottom {
+            .position {
+                border-top: 1px solid #7d7d7d;
+                margin-top: 6px;
+                padding-top: 4px;
+                input {
+                    width: 50px;
+                    height: 25px;
+                    float:left;
+                    margin-right: 5px;
+                }
+                a {
+                    text-decoration: none;
+                    color: #7d7d7d;
+                    margin-right: 5px;
+                    margin-top: -2px;
+                    float: left;
+                    display: block;
+                }
+            }
+        }
+        .selected {
+            background-color: #f5d6c7;
+        }
+    }
+
+    table.data-grid {
+        th.col-draggable-position {
+            width: 10px;
+            margin: 0 auto 0 auto;
+        }
+        td.col-draggable-position span.draggable-handle {
+            width: 8px;
+            height: 14px;
+            line-height: 14px;
+            background: url(../Magento_Backend/images/draggable-handle-vertical.png) no-repeat 0 0;
+            cursor: ns-resize;
+            color: #b2b0ad;
+            display: block;
+        }
+        td.col-position {
+            >* {
+                float: left;
+                margin-right: 5px;
+            }
+            .position input {
+                width: 40px;
+                text-align: center;
+            }
+            a {
+                text-decoration: none;
+                color: #7d7d7d;
+            }
+        }
+        .selected td {
+            background-color: #f5d6c7;
+        }
+
+        tr.on-mouse td {
+            background-color: #e5f7fe;
+        }
+    }
+
+    .mode-tile:before, .mode-grid:before, .icon-gripper:before, .icon-close-mage:before,
+    .icon-backward:before, .icon-forward:before, .block-search .label:before {
+        font-family: 'Admin Icons';
+        -webkit-font-smoothing: antialiased;
+        font-size: 17px;
+        speak: none;
+    }
+    .mode-grid > span,
+    .mode-tile > span,
+    .icon-backward > span,
+    .icon-forward > span,
+    .icon-close-mage > span,
+    .icon-gripper > span {
+        border: 0;
+        clip: rect(0, 0, 0, 0);
+        height: 1px;
+        margin: -1px;
+        overflow: hidden;
+        padding: 0;
+        position: absolute;
+        width: 1px;
+    }
+
+    .mode-tile:before {
+        content: "\e63d";
+    }
+
+    .mode-grid:before {
+        content: "\e63e";
+    }
+
+    .icon-gripper:before {
+        content: "\e617";
+    }
+
+    .icon-close-mage:before {
+        content: "\e62f";
+    }
+
+    .icon-backward:before {
+        content: "\e619";
+    }
+
+    .icon-forward:before {
+        content: "\e618";
+    }
+
+    .hidden {
+        display: none;
+    }
+
+    .smart_category_table {
+        width: 100%;
+        border-collapse:collapse;
+        margin-bottom: 5px;
+        border-spacing:0 5px;
+        overflow: auto;
+        display:block;
+    }
+
+    .smart_category_table tr:nth-of-type(odd) {
+        background:#eee;
+    }
+
+    .smart_category_table th {
+        background: #333;
+        color: white;
+        font-weight: bold;
+    }
+
+    .smart_category_table td, th {
+        padding: 6px;
+        border: 1px solid #ccc;
+        text-align: left;
+    }
+    .smart_category {
+        display:block;
+        clear:both;
+        margin-bottom: 5px;
+    }
+
+    .mode_select {
+        float:right;
+    }
+
+    .add_product_sku {
+        float:left;
+        display: block;
+        margin: 5px;
+    }
+
+    .add_product_sku_buttons {
+        display: block;
+        margin: 5px;
+    }
+}
+
+#catalog_category_add_product_tabs_content {
+    .admin__data-grid-header {
+        .admin__data-grid-pager-wrap {
+            float: right;
+        }
+    }
+    .data-grid-search-control-wrap {
+        .massassign_textarea, .massassign_buttons, .massassign_messages {
+            display:block;
+            margin:5px;
+        }
+    }
+}
+
+.visual_merchandiser_draggable_container {
+    > li {
+        list-style: none;
+        width: 190px;
+        height: 340px;
+        float: left;
+        border: 1px solid #7d7d7d;
+        margin:0 15px 15px 0;
+        padding: 10px;
+    }
+}
diff --git a/app/design/frontend/Magento/blank/Magento_AdvancedCheckout/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_AdvancedCheckout/web/css/source/_module.less
new file mode 100644
index 00000000000..170ebe4b62b
--- /dev/null
+++ b/app/design/frontend/Magento/blank/Magento_AdvancedCheckout/web/css/source/_module.less
@@ -0,0 +1,146 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  Common
+//  _____________________________________________
+
+& when (@media-common = true) {
+    .column {
+        .block-addbysku {
+            .fieldset {
+                margin: 0;
+                .fields {
+                    position: relative;
+                    .field {
+                        display: inline-block;
+                        margin-bottom: @indent__s;
+                        vertical-align: top;
+                    }
+                    .actions-toolbar {
+                        position: absolute;
+                        right: 0;
+                        top: 4px;
+                    }
+                }
+            }
+            .sku {
+                &:extend(.abs-add-box-sizing all);
+                margin-right: -155px;
+                padding-right: 160px;
+                width: 100%;
+            }
+            .skus {
+                > .label {
+                    margin-top: @indent__s;
+                }
+            }
+            .qty {
+                .qty {
+                    &:extend(.abs-input-qty all);
+                    + .mage-error {
+                        width: 80px;
+                    }
+                }
+            }
+            .block-content {
+                &:extend(.abs-add-clearfix-desktop all);
+                .box {
+                    &:extend(.abs-blocks-2columns all);
+                }
+                .actions-toolbar {
+                    clear: both;
+                    .lib-actions-toolbar(
+                    @_actions-toolbar-actions-position: left,
+                    @_actions-toolbar-margin: 0 0 @indent__base
+                    );
+                    .lib-actions-toolbar-clear-floats();
+                    > .secondary {
+                        text-align: left;
+                    }
+                }
+            }
+            .reset {
+                margin: @indent__s 0;
+            }
+            .note {
+                display: block;
+                margin: 0 0 @indent__base;
+            }
+        }
+    }
+
+    .block-cart-failed {
+        margin-top: @indent__xl;
+        &:extend(.abs-shopping-cart-items all);
+        .block-title {
+            .lib-font-size(@h2__font-size);
+            strong {
+                font-weight: @h2__font-weight;
+            }
+        }
+        .actions {
+            text-align: center;
+            .action {
+                margin-bottom: @indent__s;
+                &.tocart {
+                    margin-right: @indent__s;
+                }
+            }
+        }
+    }
+}
+
+//
+//  Mobile
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) {
+    .column {
+        .block-addbysku {
+            .sku {
+                margin-right: -85px;
+                padding-right: 90px;
+            }
+            .action {
+                &.remove {
+                    .lib-button-icon(
+                    @_icon-font-content: @icon-remove,
+                    @_icon-font-text-hide: true,
+                    @_icon-font-size: 28px
+                    );
+                    .lib-button-reset();
+                }
+            }
+        }
+    }
+}
+
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__s) {
+    .column {
+        .block-addbysku {
+            .action {
+                &.remove {
+                    .lib-button-reset();
+                    .lib-button-as-link();
+                    margin-top: 4px;
+                }
+            }
+        }
+    }
+}
+
+//
+//  Desktop
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
+    .block-cart-failed {
+        &:extend(.abs-shopping-cart-items-desktop all);
+        .actions {
+            text-align: left;
+        }
+    }
+}
diff --git a/app/design/frontend/Magento/blank/Magento_AdvancedCheckout/web/css/source/_widgets.less b/app/design/frontend/Magento/blank/Magento_AdvancedCheckout/web/css/source/_widgets.less
new file mode 100644
index 00000000000..e5fff5791b6
--- /dev/null
+++ b/app/design/frontend/Magento/blank/Magento_AdvancedCheckout/web/css/source/_widgets.less
@@ -0,0 +1,88 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//    Common
+//  _____________________________________________
+
+& when (@media-common = true) {
+    .sidebar {
+        .block-addbysku {
+            .fieldset {
+                margin: 0;
+                .fields {
+                    position: relative;
+                    .field {
+                        display: inline-block;
+                        margin-bottom: @indent__s;
+                        vertical-align: top;
+                        &.sku {
+                            &:extend(.abs-add-box-sizing all);
+                            margin-right: -85px;
+                            padding-right: 90px;
+                            width: 100%;
+                        }
+                        &.qty {
+                            .qty {
+                                &:extend(.abs-input-qty all);
+                                + .mage-error {
+                                    width: 80px;
+                                }
+                            }
+                        }
+                    }
+                    .actions-toolbar {
+                        position: absolute;
+                        right: 0;
+                        top: 6px;
+                    }
+                }
+            }
+            .form-addbysku {
+                .actions-toolbar {
+                    margin-bottom: @indent__base;
+                    .primary {
+                        text-align: left;
+                        .action {
+                            width: auto;
+                        }
+                    }
+                    .secondary {
+                        float: none;
+                        text-align: left;
+                    }
+                }
+            }
+            .action {
+                &.add {
+                    .lib-button-icon(
+                    @_icon-font-content: @icon-expand,
+                    @_icon-font-text-hide: true,
+                    @_icon-font-size: 31px
+                    );
+                    line-height: normal;
+                    padding: 2px 0;
+                    width: auto;
+                }
+                &.links {
+                    display: inline-block;
+                    margin: @indent__base 0 0;
+                }
+                &.reset {
+                    margin: @indent__s 0;
+                    display: block;
+                }
+                &.remove {
+                    .lib-button-icon(
+                    @_icon-font-content: @icon-remove,
+                    @_icon-font-text-hide: true,
+                    @_icon-font-size: 28px
+                    );
+                    .lib-button-reset();
+                }
+            }
+        }
+    }
+}
diff --git a/app/design/frontend/Magento/blank/Magento_Banner/web/css/source/_widgets.less b/app/design/frontend/Magento/blank/Magento_Banner/web/css/source/_widgets.less
new file mode 100644
index 00000000000..f79ad22a9e8
--- /dev/null
+++ b/app/design/frontend/Magento/blank/Magento_Banner/web/css/source/_widgets.less
@@ -0,0 +1,32 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  Common
+//  _____________________________________________
+
+& when (@media-common = true) {
+
+    .block-banners,
+    .block-banners-inline {
+        &:extend(.abs-margin-for-blocks-and-widgets);
+
+        .banner-items {
+           &:extend(.abs-reset-list all);
+        }
+
+        .banner-item {
+            display: block;
+        }
+
+        .banner-item-content {
+            .lib-css(margin-bottom, @indent__base);
+            img {
+                display: block;
+                margin: 0 auto;
+            }
+        }
+    }
+}
diff --git a/app/design/frontend/Magento/blank/Magento_CatalogEvent/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_CatalogEvent/web/css/source/_module.less
new file mode 100644
index 00000000000..eec3d9c2c76
--- /dev/null
+++ b/app/design/frontend/Magento/blank/Magento_CatalogEvent/web/css/source/_module.less
@@ -0,0 +1,116 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+@catalog-event-background-color: @color-gray94;
+@catalog-event-color: @primary__color;
+
+//
+//    Common
+//--------------------------------------
+
+& when (@media-common = true) {
+
+//
+//     Catalog Events
+// --------------------------------------
+.block-category-event {
+    .lib-css(background, @catalog-event-background-color);
+    .lib-css(color, @catalog-event-color);
+    text-align: center;
+    padding: @indent__s 0 15px;
+    &.block:last-child {
+        margin-bottom: @indent__s;
+    }
+    .block-title {
+        margin: 0 0 @indent__s;
+        strong {
+            .lib-font-size(15);
+            font-weight: @font-weight__light;
+        }
+    }
+    .ticker {
+        .lib-list-reset-styles();
+        li {
+            display: none;
+            margin: 0 15px;
+        }
+        .value {
+            .lib-font-size(18);
+            font-weight: @font-weight__light;
+        }
+        .label {
+            display: block;
+            text-transform: lowercase;
+            .lib-font-size(10);
+        }
+    }
+    .dates {
+        .start,
+        .end {
+            display: block;
+        }
+        .date {
+            .lib-font-size(50);
+        }
+        .time {
+            display: block;
+        }
+        .start {
+            &:after {
+                content: "\2013";
+                .lib-font-size(50);
+                display: block;
+            }
+        }
+    }
+}
+
+}
+
+//
+//    Desktop
+//--------------------------------------
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
+    .block-category-event {
+        &.block:last-child {
+            margin-bottom: @indent__l;
+            padding: @indent__s 0 @indent__l;
+        }
+        .block-title {
+            margin: 0;
+            strong {
+                .lib-font-size(24);
+            }
+        }
+        .ticker {
+            li {
+                display: none;
+                margin: 0 50px;
+            }
+            .value {
+                .lib-font-size(60);
+            }
+            .label {
+                .lib-font-size(14);
+                text-transform: none;
+            }
+        }
+        .dates {
+            .start,
+            .end {
+                display: inline-block;
+            }
+            .start {
+                padding-right: 50px;
+                position: relative;
+                &:after {
+                    position: absolute;
+                    right: 10px;
+                    top: 0;
+                }
+            }
+        }
+    }
+}
diff --git a/app/design/frontend/Magento/blank/Magento_CatalogEvent/web/css/source/_widgets.less b/app/design/frontend/Magento/blank/Magento_CatalogEvent/web/css/source/_widgets.less
new file mode 100644
index 00000000000..109186faad1
--- /dev/null
+++ b/app/design/frontend/Magento/blank/Magento_CatalogEvent/web/css/source/_widgets.less
@@ -0,0 +1,156 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//    Common
+//--------------------------------------
+
+& when (@media-common = true) {
+
+.block-event {
+    .columns & {
+        position: relative;
+        z-index: 2;
+    }
+    .block-content {
+        position: relative;
+        >  .action {
+            cursor: pointer;
+            margin-top: -6px;
+            position: absolute;
+            top: 50%;
+            z-index: 3;
+            &.backward,
+            &.forward  {
+                opacity: .5;
+                overflow: hidden;
+                width: 20px;
+                .lib-icon-font(
+                    @_icon-font-content: @icon-prev,
+                    @_icon-font-text-hide: true,
+                    @_icon-font-size: 55px,
+                    @_icon-font-line-height: 30px
+                );
+                &:before {
+                    margin-left: -15px;
+                }
+            }
+            &.backward {
+                left: 0;
+            }
+            &.forward {
+                right: 0;
+                .lib-icon-font-symbol(@icon-next);
+            }
+            &.inactive {
+                cursor: default;
+                display: none;
+            }
+            &:hover {
+                opacity: 1;
+            }
+        }
+    }
+    .slider-panel {
+        position: relative;
+        overflow: hidden;
+        z-index: 2;
+        .slider {
+            &:extend(.abs-reset-list all);
+            white-space: nowrap;
+            .item {
+                .lib-css(background, @catalog-event-background-color);
+                display: inline-block;
+                text-align: center;
+                white-space: normal;
+                vertical-align: top;
+                width: 16.35%;
+                .sidebar-main &,
+                .sidebar-additional & {
+                    width: 100%;
+                }
+                img {
+                    max-width: 100%;
+                }
+                .category-name {
+                    display: inline-block;
+                    .lib-font-size(18);
+                    padding-top: 15px;
+                }
+                .ticker {
+                    .lib-list-reset-styles();
+                    li {
+                        display: none;
+                        margin: 0 5px;
+                    }
+                    .value {
+                        .lib-font-size(26);
+                        font-weight: @font-weight__light;
+                    }
+                    .label {
+                        display: block;
+                        .lib-font-size(13);
+                    }
+                }
+                .dates {
+                    font-weight: @font-weight__light;
+                    .start,
+                    .end,
+                    .date {
+                        display: block;
+                    }
+                    .start {
+                        &:after {
+                            content: "\2013";
+                            .lib-font-size(18);
+                            display: block;
+                        }
+                    }
+                    .date {
+                        .lib-font-size(18);
+                        font-weight: @font-weight__light;
+                    }
+                    .time {
+                        .lib-font-size(13);
+                    }
+                }
+                .box-event {
+                    .box-content {
+                        padding: 5px 0 @indent__s;
+                    }
+                    .box-title {
+                        font-weight: @font-weight__light;
+                        display: block;
+                        margin: @indent__s 0 0;
+                    }
+                }
+                .action {
+                    &.show {
+                        &:extend(.abs-add-box-sizing all);
+                        display: block;
+                        padding: 0;
+                        .category.name {
+                            display: inline-block;
+                            padding: 30px 10px 0;
+                        }
+                        img {
+                            display: block;
+                        }
+                    }
+                    &.event {
+                        .lib-button-primary();
+                        &:extend(.abs-action-link-button all);
+                        margin-top: 15px;
+                        &:hover {
+                            text-decoration: none;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+}
diff --git a/app/design/frontend/Magento/blank/Magento_GiftCard/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_GiftCard/web/css/source/_module.less
new file mode 100644
index 00000000000..5c0f40733da
--- /dev/null
+++ b/app/design/frontend/Magento/blank/Magento_GiftCard/web/css/source/_module.less
@@ -0,0 +1,46 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//    Common
+//--------------------------------------
+
+& when (@media-common = true) {
+
+.cart {
+    &-summary {
+        .block {
+            &.giftcard {
+                .action.check {
+                    .lib-button-s();
+                    &:extend(.abs-action-button-as-link all);
+                    margin-top: @indent__base;
+                }
+            }
+        }
+    }
+}
+.page-product-giftcard {
+    .giftcard-amount {
+        text-align: left;
+        margin-bottom: 0;
+        .field:last-child {
+            padding-bottom: @form-field__vertical-indent;
+        }
+    }
+    .product-options-wrapper .field:first-of-type {
+        margin-top: @form-field__vertical-indent;
+    }
+    .fieldset.giftcard {
+        >.legend {
+            &:extend(.abs-visually-hidden all);
+        }
+        >.legend + br {
+            &:extend(.abs-no-display all);
+        }
+    }
+}
+
+}
diff --git a/app/design/frontend/Magento/blank/Magento_GiftCardAccount/layout/checkout_cart_index.xml b/app/design/frontend/Magento/blank/Magento_GiftCardAccount/layout/checkout_cart_index.xml
new file mode 100644
index 00000000000..56fda77e69b
--- /dev/null
+++ b/app/design/frontend/Magento/blank/Magento_GiftCardAccount/layout/checkout_cart_index.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
+    <body>
+        <move element="checkout.cart.giftcardaccount" destination="cart.summary" after="checkout.cart.coupon" before="checkout.cart.totals.container"/>
+    </body>
+</page>
diff --git a/app/design/frontend/Magento/blank/Magento_GiftCardAccount/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_GiftCardAccount/web/css/source/_module.less
new file mode 100644
index 00000000000..033a058c1f0
--- /dev/null
+++ b/app/design/frontend/Magento/blank/Magento_GiftCardAccount/web/css/source/_module.less
@@ -0,0 +1,41 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  Common
+//  _____________________________________________
+
+& when (@media-common = true) {
+
+    .giftcard-account {
+        .please-wait {
+            display: none;
+        }
+        .form-giftcard-redeem {
+            .giftcard.info {
+                margin-bottom: @indent__l;
+            }
+        }
+    }
+
+    .opc-wrapper {
+        .form-giftcard-account {
+            max-width: 500px;
+            .field {
+                margin: 0 0 @indent__base;
+                .label {
+                    &:extend(.abs-visually-hidden all);
+                }
+            }
+        }
+        .giftcard-account-info {
+            margin: 0 0 @indent__base;
+
+            .giftcard-account-number {
+                margin: 0 0 @indent__s;
+            }
+        }
+    }
+}
diff --git a/app/design/frontend/Magento/blank/Magento_GiftRegistry/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_GiftRegistry/web/css/source/_module.less
new file mode 100644
index 00000000000..3419334602f
--- /dev/null
+++ b/app/design/frontend/Magento/blank/Magento_GiftRegistry/web/css/source/_module.less
@@ -0,0 +1,253 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  Common
+//  _____________________________________________
+
+& when (@media-common = true) {
+
+    .form-giftregistry-share,
+    .form-giftregistry-edit {
+        &:extend(.abs-add-fields all);
+        .actions-toolbar:not(:last-child) {
+            margin-bottom: @indent__xl;
+        }
+        .fieldset {
+            .nested {
+                .field:not(.choice) {
+                    .control {
+                        width: 100%;
+                    }
+                }
+            }
+        }
+    }
+
+    .form.giftregistry.items {
+        .actions-toolbar {
+            &:extend(.abs-reset-left-margin all);
+        }
+    }
+
+    .giftregisty-dropdown {
+        &:extend(.abs-dropdown-simple all);
+    }
+
+    .table-giftregistry-items {
+        .field.qty .qty {
+            &:extend(.abs-input-qty all);
+        }
+        .product-image {
+            float: left;
+            .lib-css(margin-right, @indent__s);
+        }
+    }
+
+    .form.giftregistry .fieldset {
+        .cart-summary & {
+            margin: 25px 0 @indent__xs;
+            .field {
+                margin: 0 0 @indent__s;
+                .control {
+                    float: none;
+                    width: auto;
+                }
+            }
+            .action.primary {
+                margin-bottom: 0;
+                &:extend(.abs-revert-secondary-color all);
+                &:extend(.abs-revert-secondary-size all);
+            }
+        }
+    }
+
+    .form-giftregistry-search {
+        margin-bottom: @indent__l*2;
+        .legend {
+            &:extend(.abs-account-title all);
+        }
+        .fields-specific-options {
+            .field {
+                &:nth-last-of-type(1) {
+                    margin-bottom: 0;
+                }
+            }
+            .datetime-picker {
+                &:extend(.abs-field-date-input all);
+            }
+        }
+    }
+
+    .block-giftregistry-results {
+        .block-title {
+            &:extend(.abs-block-title all);
+        }
+
+        .toolbar-giftregistry-results {
+            text-align: center;
+        }
+    }
+
+    .block-giftregistry {
+        .actions-toolbar {
+            margin: 17px 0 0;
+        }
+    }
+
+    .block-giftregistry-shared {
+        .item-options {
+            .item-value {
+                margin: 0 0 @indent__m;
+            }
+        }
+    }
+
+    .block-giftregistry-shared-items {
+        .block-title {
+            &:extend(.abs-block-title all);
+        }
+        .product-image-wrapper {
+            &:extend(.abs-reset-image-wrapper all);
+        }
+        .item {
+            border-bottom: @border-width__base solid @border-color__base;
+        }
+        .qty {
+            .qty {
+                &:extend(.abs-input-qty all);
+            }
+        }
+        .col {
+            padding: @indent__base 8px @indent__s;
+            .price-box {
+                display: inline-block;
+            }
+            .price-wrapper {
+                .lib-font-size(18);
+                display: block;
+                font-weight: @font-weight__bold;
+                white-space: nowrap;
+            }
+        }
+
+        .product {
+            .item-options {
+                &:extend(.abs-product-options-list all);
+                &:extend(.abs-add-clearfix all);
+                margin-bottom: 0;
+            }
+            &-item-photo {
+                display: block;
+                max-width: 65px;
+                padding: @indent__s 0;
+            }
+            &-item-name {
+                display: block;
+                margin: 0 0 @indent__xs;
+            }
+        }
+    }
+}
+
+//
+//  Mobile
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) {
+    .table-giftregistry-items {
+        .col.product {
+            &:before {
+                &:extend(.abs-visually-hidden-mobile all);
+            }
+            &:extend(.abs-add-clearfix-mobile all);
+        }
+        .field.choice,
+        .field.qty {
+            display: inline-block;
+        }
+    }
+    .form-giftregistry-search {
+        .fieldset {
+            margin-bottom: 15px;
+        }
+    }
+
+    .toolbar-giftregistry-results {
+        &:extend(.abs-pager-toolbar-mobile-s all);
+    }
+}
+
+//
+//  Desktop
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
+    .form-giftregistry-share,
+    .form-giftregistry-edit {
+        &:extend(.abs-add-fields-desktop all);
+    }
+
+    .form-giftregistry-search {
+        .fieldset {
+            margin-bottom: @form-field__vertical-indent__desktop;
+            > .fields-specific-options {
+                > .field {
+                    .lib-form-field-type-revert();
+                }
+            }
+        }
+    }
+
+    .toolbar-giftregistry-results {
+        &:extend(.abs-pager-toolbar all);
+    }
+
+    .block-giftregistry-shared {
+        .item-options {
+            &:extend(.abs-product-options-list-desktop all);
+            &:extend(.abs-add-clearfix-desktop all);
+        }
+    }
+
+    .block-giftregistry-shared-items {
+        .column.main & {
+            .actions-toolbar {
+                &:extend(.abs-reset-left-margin-desktop all);
+            }
+        }
+        .product {
+            &-item-photo {
+                display: table-cell;
+                max-width: 100%;
+                padding: 0 @indent__base 0 0;
+                vertical-align: top;
+                width: 1%;
+            }
+            &-item-details {
+                display: table-cell;
+                vertical-align: top;
+                width: 99%;
+                word-break: normal;
+            }
+        }
+        .col {
+            &.product {
+                width: 48%;
+            }
+            &:not(.product) {
+                text-align: center;
+            }
+            &.price {
+                padding-top: 17px;
+            }
+        }
+        .input-text {
+            &.qty {
+                margin-top: -4px;
+            }
+        }
+    }
+}
diff --git a/app/design/frontend/Magento/blank/Magento_GiftRegistry/web/css/source/_widgets.less b/app/design/frontend/Magento/blank/Magento_GiftRegistry/web/css/source/_widgets.less
new file mode 100644
index 00000000000..b5d0ca095c5
--- /dev/null
+++ b/app/design/frontend/Magento/blank/Magento_GiftRegistry/web/css/source/_widgets.less
@@ -0,0 +1,7 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+.widget.block-giftregistry {
+}
diff --git a/app/design/frontend/Magento/blank/Magento_GiftWrapping/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_GiftWrapping/web/css/source/_module.less
new file mode 100644
index 00000000000..7395b73c638
--- /dev/null
+++ b/app/design/frontend/Magento/blank/Magento_GiftWrapping/web/css/source/_module.less
@@ -0,0 +1,216 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  Variables
+//  _____________________________________________
+
+@gift-wrapping__border-color: @color-gray-light5;
+@gift-wrapping__border-width: @border-width__base;
+
+@gift-wrapping-preview__active__border-color: @color-gray20;
+@gift-wrapping-preview__active__border-width: 3px;
+
+@gift-wrapping-thumbnail__height: 4rem;
+@gift-wrapping-thumbnail__width: @gift-wrapping-thumbnail__height;
+
+@gift-wrapping-no-image__background: @color-gray95;
+@gift-wrapping-no-image-icon__color: @color-gray-darken4;
+@gift-wrapping-no-image-icon__font-size: 38px;
+
+//
+//  Common
+//  _____________________________________________
+
+& when (@media-common = true) {
+    .gift-wrapping-info {
+        .lib-css(font-weight, @font-weight__light);
+        font-size: @font-size__l;
+        margin: @indent__base 0;
+    }
+
+    .gift-wrapping-list {
+        &:extend(.abs-add-clearfix all);
+        list-style: none;
+        margin: @indent__base 0 @indent__s;
+        padding: 0;
+        .no-image {
+            .lib-css(background, @gift-wrapping-no-image__background);
+            .lib-icon-font(
+            @icon-present,
+            @_icon-font-size: @gift-wrapping-no-image-icon__font-size,
+            @_icon-font-line-height: @gift-wrapping-thumbnail__height,
+            @_icon-font-color: @gift-wrapping-no-image-icon__color,
+            @_icon-font-position: after,
+            @_icon-font-text-hide: true,
+            @_icon-font-vertical-align: middle
+            );
+            &:after {
+                display: block;
+            }
+        }
+    }
+
+    .gift-wrapping-preview,
+    .gift-wrapping-item > span {
+        cursor: pointer;
+        display: block;
+        overflow: hidden;
+        position: relative;
+        z-index: 1;
+    }
+
+    .gift-wrapping-item {
+        float: left;
+        margin: 0 @indent__s @indent__s 0;
+        &:last-child {
+            margin-right: 0;
+        }
+        &._active {
+            span {
+                &:before {
+                    .lib-css(border, @gift-wrapping-preview__active__border-width solid @gift-wrapping-preview__active__border-color);
+                    box-sizing: border-box;
+                    content: '';
+                    display: block;
+                    height: 100%;
+                    position: absolute;
+                    width: 100%;
+                    z-index: 2;
+                }
+            }
+        }
+        > span {
+            height: @gift-wrapping-thumbnail__height;
+            width: @gift-wrapping-thumbnail__width;
+        }
+    }
+
+    .gift-wrapping-title {
+        margin: @indent__s 0;
+        .action-remove {
+            margin-left: @indent__xs;
+        }
+    }
+
+    .gift-options-content {
+        .fieldset {
+            > .field {
+                margin: 0 0 @indent__xs;
+                &:before {
+                    display: none;
+                }
+            }
+        }
+    }
+
+    .gift-wrapping-summary {
+        .gift-wrapping-title {
+            border: 0;
+            display: inline-block;
+            padding: 0;
+        }
+    }
+
+    .opc-wrapper .data.table,
+    .table-order-items,
+    .table-order-review {
+        .gift-wrapping {
+            &:extend(.abs-add-clearfix all);
+            margin: @indent__base 0;
+            .title {
+                float: none;
+            }
+            .content {
+                margin: 0;
+                > img {
+                    float: left;
+                    margin: 0 @indent__s 0 0;
+                    max-height: 50px;
+                    max-width: 50px;
+                }
+            }
+        }
+    }
+
+    .gift-summary,
+    .gift-options {
+        .price-box {
+            margin-left: 22px;
+        }
+        .regular-price {
+            &:before {
+                content: attr(data-label)": ";
+            }
+            .price {
+                font-weight: @font-weight__bold;
+            }
+        }
+        &:extend(.abs-adjustment-incl-excl-tax all);
+    }
+}
+
+//
+//  Mobile
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) {
+    .gift-wrapping {
+        .lib-css(border-bottom, @gift-wrapping__border-width solid @gift-wrapping__border-color);
+        margin-bottom: @indent__base;
+        padding-bottom: @indent__s;
+    }
+    .gift-wrapping-list {
+        width: 100%;
+    }
+    .gift-wrapping-preview {
+        img {
+            width: 100%;
+        }
+    }
+    .item-actions {
+        .actions-toolbar {
+            .gift-options {
+                .gift-wrapping,
+                .gift-message {
+                    display: block;
+                }
+            }
+        }
+    }
+}
+
+//
+//  Desktop
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
+    .gift-wrapping {
+        .nested {
+            &:extend(.abs-add-clearfix-desktop all);
+        }
+    }
+    .table {
+        .gift-wrapping {
+            .content {
+                &:extend(.abs-add-clearfix-desktop all);
+            }
+        }
+    }
+    .gift-wrapping {
+        .lib-css(border-right, @gift-wrapping__border-width solid @gift-wrapping__border-color);
+        box-sizing: border-box;
+        float: left;
+        padding-right: @indent__base;
+        width: 50%;
+        & + .gift-message {
+            .lib-css(border-left, @gift-wrapping__border-width solid @gift-wrapping__border-color);
+            box-sizing: border-box;
+            float: left;
+            padding-left: 4.5rem;
+            width: 50%;
+        }
+    }
+}
diff --git a/app/design/frontend/Magento/blank/Magento_GroupedProduct/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_GroupedProduct/web/css/source/_module.less
new file mode 100644
index 00000000000..5423cfa8da2
--- /dev/null
+++ b/app/design/frontend/Magento/blank/Magento_GroupedProduct/web/css/source/_module.less
@@ -0,0 +1,48 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//    Common
+//--------------------------------------
+
+& when (@media-common = true) {
+
+.table.grouped {
+    .lib-table-bordered(
+        @_table_type: horizontal
+    );
+    > thead > tr > th {
+        border-bottom: 0;
+    }
+    .product-item-name {
+        font-weight: @font-weight__regular;
+    }
+    .price-box {
+        .price {
+            font-size: @font-size__base;
+        }
+    }
+    .control {
+        .qty {
+            &:extend(.abs-input-qty all);
+        }
+    }
+    .stock.unavailable {
+        font-weight: normal;
+        margin: 0;
+        text-transform: none;
+        white-space: nowrap;
+    }
+    .row-tier-price {
+        td {
+            border-top: 0;
+        }
+        .prices-tier {
+            margin: 0 -10px 10px;
+        }
+    }
+}
+
+}
diff --git a/app/design/frontend/Magento/blank/Magento_Invitation/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_Invitation/web/css/source/_module.less
new file mode 100644
index 00000000000..56d690b2e1d
--- /dev/null
+++ b/app/design/frontend/Magento/blank/Magento_Invitation/web/css/source/_module.less
@@ -0,0 +1,55 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//    Common
+//--------------------------------------
+
+& when (@media-common = true) {
+
+.form-add-invitations {
+    &:extend(.abs-add-fields all);
+    .action {
+        &.add {
+            .lib-button-icon(
+                @_icon-font-content: @icon-expand,
+                @_icon-font-text-hide: true,
+                @_icon-font-size: 31px
+            );
+            line-height: normal;
+            padding: 2px 0;
+            width: auto;
+        }
+    }
+}
+
+}
+
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) {
+    .form-add-invitations {
+        .additional,
+        .field.text {
+            .lib-css(margin-top, @form-field__vertical-indent);
+        }
+    }
+}
+
+//
+//    Desktop
+//--------------------------------------
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
+    .form-add-invitations {
+        &:extend(.abs-add-fields-desktop all);
+        .additional,
+        .field.text {
+            .lib-css(margin-top, @form-field__vertical-indent__desktop);
+        }
+    }
+    .table-invitations {
+        .col {
+            width: 50%;
+        }
+    }
+}
diff --git a/app/design/frontend/Magento/blank/Magento_MultipleWishlist/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_MultipleWishlist/web/css/source/_module.less
new file mode 100644
index 00000000000..ee2926d3acf
--- /dev/null
+++ b/app/design/frontend/Magento/blank/Magento_MultipleWishlist/web/css/source/_module.less
@@ -0,0 +1,494 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+@desktop-popup-width: 380px;
+@desktop-popup-margin-left: -((@desktop-popup-width+(@popup__padding*2))/2);
+@desktop-popup-position-left: 50%;
+@desktop-popup-position-top: 20%;
+
+//
+//  Common
+//  _____________________________________________
+
+& when (@media-common = true) {
+    .wishlist {
+        //  Wish list split button
+        &.split.button {
+            .lib-dropdown-split(
+            @_options-selector: ~".items",
+            @_dropdown-split-button-border-radius-fix: true,
+            @_dropdown-split-list-item-padding: 5px 5px 5px 23px,
+            @_dropdown-split-toggle-icon-content: @icon-down,
+            @_dropdown-split-toggle-active-icon-content: @icon-up,
+            @_dropdown-split-toggle-actions-padding: false,
+            @_icon-font-size: 22px,
+            @_icon-font-color: @addto-color,
+            @_icon-font-color-hover: @addto-hover-color,
+            @_dropdown-split-list-pointer-position: left,
+            @_dropdown-split-list-min-width: 200px
+            );
+            vertical-align: middle;
+            .items {
+                text-align: left;
+            }
+            .items .item:last-child {
+                background: @color-gray-darken1;
+                &:hover {
+                    .lib-css(background, @dropdown-list-item__hover);
+                }
+            }
+            &:extend(.abs-dropdown-items-new all);
+
+            .table-comparison &,
+            .product-items & {
+                > .action {
+                    &:extend(.abs-action-button-as-link all);
+                    &.split {
+                        &:extend(.abs-actions-addto-gridlist all);
+                        .lib-icon-font-symbol(
+                        @_icon-font-content: @icon-wishlist-empty
+                        );
+                    }
+                    &:active,
+                    &:focus,
+                    &:hover {
+                        .lib-css(color, @addto-hover-color);
+                    }
+                }
+                > .action.toggle {
+                    &:before {
+                        border-left: 1px solid lighten(@addto-color, 30%);
+                        content: '';
+                        float: left;
+                        height: 15px;
+                        margin-top: 3px;
+                    }
+                }
+            }
+            .product-info-main &,
+            .block-bundle-summary &,
+            .product-add-form &{
+                .action {
+                    &.split,
+                    &.toggle {
+                        .lib-button-s();
+                    }
+                    &.toggle {
+                        padding: 0;
+                    }
+                }
+            }
+            .cart.table-wrapper & {
+                margin-bottom: @indent__s;
+                > .action {
+                    &.split {
+                    }
+                    &.toggle {
+                        padding: 4px @indent__xs;
+                    }
+                }
+            }
+        }
+        &.window.popup {
+            .lib-popup();
+            &.active {
+                display: block;
+            }
+        }
+        &.overlay {
+            .lib-window-overlay();
+            &.active {
+                display: block;
+            }
+        }
+        &-dropdown {
+            &:extend(.abs-dropdown-simple all);
+            &:extend(.abs-dropdown-items-new all);
+        }
+    }
+
+    .block-wishlist-management {
+        position: relative;
+        .wishlist {
+            //  Select wish list
+            &-select {
+                .wishlist-name {
+                    &-label {
+                        font-weight: @font-weight__semibold;
+                        &:extend(.abs-colon all);
+                    }
+                    &-current {
+                    }
+                }
+                &-items {
+                    &:extend(.abs-reset-list all);
+                    &.active {
+                    }
+                }
+            }
+            &-add.item {
+                .action {
+                }
+            }
+            //  Wish list name
+            &-title {
+                margin-bottom: @indent__s;
+                strong {
+                    font-weight: @font-weight__light;
+                    margin-right: @indent__s;
+                }
+                .action.edit {
+                }
+            }
+            //  Wish list info
+            &-info {
+            }
+            &-notice {
+                .lib-css(color, @text__color__muted);
+                display: inline-block;
+                margin-right: @indent__base;
+                &.private {
+                }
+            }
+            //  Wish list toolbar
+            &-toolbar {
+                &-select,
+                &-actions {
+                    display: inline-block;
+                }
+                &-select {
+                    margin-right: @indent__base;
+                }
+                &-actions {
+                }
+            }
+            //  Wish list toolbar actions
+            &-dropdown.move {
+                margin-right: @indent__base;
+            }
+        }
+    }
+
+    .block-wishlist-search-form {
+        .block-title {
+            &:extend(.abs-account-title all);
+        }
+        .form-wishlist-search {
+            .lib-css(margin-bottom, @indent__l*2);
+            max-width: 500px;
+            .fieldset {
+                > .legend {
+                    &:extend(.abs-visually-hidden);
+                }
+            }
+        }
+    }
+
+    .block-wishlist-search-results {
+        .block-title {
+            &:extend(.abs-block-title all);
+        }
+        .toolbar-wishlist-results {
+            text-align: center;
+        }
+    }
+
+    .page-multiple-wishlist {
+        .page-title-wrapper {
+            .page-title {
+                &:extend(.abs-visually-hidden all);
+            }
+        }
+    }
+
+    .block-wishlist-info-items {
+        .block-title {
+            .lib-css(margin-bottom, @indent__base);
+            .lib-font-size(22);
+            > strong {
+                font-weight: @font-weight__light ;
+            }
+        }
+        .product-item {
+            width: 100%;
+        }
+        .product-item-photo {
+            margin-left: @indent__base;
+        }
+        .product-item-info {
+            width: auto;
+            &:hover {
+                .split {
+                    visibility: visible;
+                }
+            }
+        }
+        .price-wrapper {
+            display: block;
+            margin: 0 0 @indent__s;
+        }
+        .split {
+            clear: both;
+            padding: @indent__s 0;
+        }
+        .action {
+            &.towishlist {
+                padding: @indent__s 0;
+            }
+        }
+        .input-text {
+            &.qty {
+                &:extend(.abs-input-qty all);
+                margin-right: @indent__s;
+            }
+        }
+    }
+}
+
+//
+//  Mobile
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) {
+    .block-wishlist-management {
+        clear: both;
+        margin-top: -21px;
+        .wishlist {
+            //  Select wish list
+            &-select {
+                margin: 0 -@layout__width-xs-indent 20px;
+                .wishlist-name {
+                    &:extend(.abs-toggling-title-mobile all);
+                    &-label {
+                    }
+                    &-current {
+                    }
+                }
+                &-items {
+                    border-bottom: @border-width__base solid @border-color__base;
+                    .lib-css(background, @collapsible-nav-background);
+                    display: none;
+                    padding: 15px 0;
+                    &.active {
+                        display: block;
+                    }
+                    .item {
+                        margin: 3px 0 0;
+                        &:first-child {
+                            margin-top: 0;
+                        }
+                        &.current {
+                            display: none;
+                        }
+                        a {
+                            display: block;
+                            padding: @indent__xs 18px;
+                            text-decoration: none;
+                            &:hover {
+                                .lib-css(background, @collapsible-nav-item-hover);
+                            }
+                        }
+                    }
+                }
+            }
+            &-add.item {
+                .add {
+                    &:extend(.abs-icon-add-mobile all);
+                }
+            }
+            //  Wish list name
+            &-title {
+                strong {
+                    .lib-font-size(26);
+                }
+                .action.edit {
+                }
+            }
+            //  Wish list info
+            &-info {
+                margin-bottom: 15px;
+            }
+            &-notice {
+                &.private {
+                }
+            }
+            //  Wish list toolbar
+            &-toolbar {
+                &-select,
+                &-actions {
+                    margin-bottom: 15px;
+                }
+                &-select {
+                }
+                &-actions {
+                }
+            }
+            //  Wish list toolbar actions
+            &-dropdown.move {
+            }
+        }
+    }
+    .products-grid.wishlist {
+        .product {
+            &-item {
+                &-checkbox {
+                    left: 20px;
+                    position: absolute;
+                    top: 20px;
+                }
+                &-photo {
+                    .page-multiple-wishlist & {
+                        margin-left: @indent__m;
+                    }
+                }
+                &-name,
+                &-description,
+                .price-box,
+                &-tooltip {
+                    .page-multiple-wishlist & {
+                        margin-left: 115px;
+                    }
+                }
+            }
+        }
+        .wishlist-dropdown {
+            display: none;
+        }
+    }
+
+    .toolbar-wishlist-results {
+        &:extend(.abs-pager-toolbar-mobile all);
+    }
+}
+
+//
+//  Desktop
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
+    .wishlist {
+        &.window.popup {
+            bottom: auto;
+            .lib-css(top, @desktop-popup-position-top);
+            .lib-css(left, @desktop-popup-position-left);
+            .lib-css(margin-left, @desktop-popup-margin-left);
+            .lib-css(width, @desktop-popup-width);
+            right: auto;
+            .field {
+                .lib-form-field-type-revert(@_type: block);
+            }
+        }
+    }
+
+    .block-wishlist-management {
+        &:extend(.abs-add-clearfix-desktop all);
+        margin-bottom: @indent__base;
+        .wishlist {
+            //  Select wish list
+            &-select {
+                border-bottom: 1px solid @secondary__color;
+                display: table;
+                margin-bottom: 15px;
+                width: 100%;
+                .wishlist-name {
+                    display: table-cell;
+                    margin-right: @indent__s;
+                    padding: @indent__xs @indent__s @indent__s;
+                    vertical-align: top;
+                    white-space: nowrap;
+                    width: 5%;
+                    span {
+                    }
+                    &.active {
+                    }
+                    &-label {
+                    }
+                    &-current {
+                    }
+                }
+                &-items {
+                    display: table-cell;
+                    padding-right: 160px;
+                    vertical-align: top;
+                    &.active {
+                    }
+                    .item {
+                        display: inline-block;
+                        margin-right: @indent__s;
+                        padding: @indent__xs @indent__s @indent__s;
+                        &:last-child {
+                            margin-right: 0;
+                        }
+                    }
+                    .current {
+                        border-bottom: 3px solid @active__color;
+                        font-weight: @font-weight__semibold;
+                    }
+                }
+                .wishlist-name-current {
+                    display: none;
+                }
+            }
+            &-add.item {
+                position: absolute;
+                right: 0;
+                top: 0;
+            }
+            //  Wish list name
+            &-title {
+                strong {
+                    .lib-font-size(40);
+                }
+                .action.edit {
+                }
+            }
+            //  Wish list info
+            &-info {
+                float: left;
+            }
+            &-notice {
+                &.private {
+                }
+            }
+            //  Wish list toolbar
+            &-toolbar {
+                float: right;
+                &-select,
+                &-actions {
+                }
+                &-select {
+                }
+                &-actions {
+                }
+            }
+            //  Wish list toolbar actions
+            &-dropdown.move {
+            }
+        }
+    }
+
+    .block-wishlist-info-items {
+        .product-item-photo {
+            margin-left: 0;
+        }
+    }
+
+    .products-grid.wishlist {
+        .product {
+            &-item {
+                &-checkbox {
+                    float: left;
+                    + .product-item-name {
+                        margin-left: @indent__m;
+                    }
+                }
+            }
+        }
+    }
+
+    .toolbar-wishlist-results {
+        &:extend(.abs-pager-toolbar all);
+    }
+}
diff --git a/app/design/frontend/Magento/blank/Magento_MultipleWishlist/web/css/source/_widgets.less b/app/design/frontend/Magento/blank/Magento_MultipleWishlist/web/css/source/_widgets.less
new file mode 100644
index 00000000000..a8e77fb379b
--- /dev/null
+++ b/app/design/frontend/Magento/blank/Magento_MultipleWishlist/web/css/source/_widgets.less
@@ -0,0 +1,10 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+.block-wishlist-search {
+    .form-wishlist-search {
+        margin: @form-field__vertical-indent 0 0;
+    }
+}
diff --git a/app/design/frontend/Magento/blank/Magento_Reward/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_Reward/web/css/source/_module.less
new file mode 100644
index 00000000000..47da1a78bd1
--- /dev/null
+++ b/app/design/frontend/Magento/blank/Magento_Reward/web/css/source/_module.less
@@ -0,0 +1,48 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//    Common
+//--------------------------------------
+
+& when (@media-common = true) {
+
+.block-reward-info {
+    .reward-rates,
+    .reward-limit,
+    .reward-expiring {
+        &:not(:last-child) {
+            margin-bottom: @indent__m;
+        }
+        .title {
+            display: inline-block;
+            margin-bottom: @indent__s;
+        }
+    }
+}
+
+}
+
+//
+//    Mobile
+//--------------------------------------
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) {
+    .reward-settings {
+        + .actions-toolbar {
+            margin-top: 10px;
+        }
+    }
+}
+
+//
+//    Desktop
+//--------------------------------------
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
+    .reward-settings {
+        + .actions-toolbar {
+            margin-top: -32px;
+        }
+    }
+}
diff --git a/app/design/frontend/Magento/blank/Magento_Rma/web/css/source/_email.less b/app/design/frontend/Magento/blank/Magento_Rma/web/css/source/_email.less
new file mode 100644
index 00000000000..a45fa341306
--- /dev/null
+++ b/app/design/frontend/Magento/blank/Magento_Rma/web/css/source/_email.less
@@ -0,0 +1,17 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  RMA table styles
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) {
+    // Shrink table size on small screens to fit as much as possible without requiring horizontal scrolling
+    .rma-items td,
+    .rma-items th {
+        font-size: @font-size__s !important;
+        padding: 5px !important;
+    }
+}
diff --git a/app/design/frontend/Magento/blank/Magento_Rma/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_Rma/web/css/source/_module.less
new file mode 100644
index 00000000000..efdb489342a
--- /dev/null
+++ b/app/design/frontend/Magento/blank/Magento_Rma/web/css/source/_module.less
@@ -0,0 +1,151 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//    Common
+//--------------------------------------
+
+& when (@media-common = true) {
+
+.form-create-return {
+    &:extend(.abs-add-fields all);
+    .field {
+        .control > span,
+        address {
+            display: inline-block;
+            padding-top: @form-field-type-label-inline__padding-top;
+        }
+    }
+    .additional {
+        &:first-child {
+            margin-top: 0;
+        }
+        .field:nth-last-child(2) {
+            margin-bottom: 0;
+        }
+        .field:last-child {
+            margin-top: @form-field__vertical-indent;
+        }
+    }
+    .field.comment {
+        margin-top: 55px;
+    }
+}
+
+.block-returns-comments {
+    .returns-comments {
+        dt,
+        dd {
+            margin: 0;
+        }
+        dt {
+            font-weight: @font-weight__regular;
+        }
+        dd {
+            margin-bottom: 15px;
+            &:last-child {
+                margin-bottom: 0;
+            }
+        }
+    }
+    .fieldset {
+        margin-bottom: 20px;
+    }
+}
+
+.return-status {
+    &:extend(.abs-status all);
+}
+
+.magento-rma-returns-returns,
+.magento-rma-guest-returns,
+.magento-rma-returns-view {
+    .page-title-wrapper {
+        .page-title {
+            margin-right: 25px;
+        }
+    }
+}
+
+//
+//    Guest return view page
+//--------------------------------------
+.magento-rma-guest-returns {
+    .column.main {
+        .block:not(.widget) {
+            &:extend(.abs-account-blocks all);
+        }
+    }
+}
+
+}
+
+//
+//    Mobile
+//--------------------------------------
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) {
+    .form-create-return {
+        .fieldset {
+            > .actions-toolbar {
+                &:extend(.abs-add-clearfix-mobile-m all);
+            }
+        }
+    }
+    .account {
+        .column.main {
+            .returns-details-items {
+                .block-returns-tracking {
+                    .block-title {
+                        > .action.track {
+                            float: none;
+                            display: block;
+                            margin: @indent__s 0 0;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+//
+//    Desktop
+//--------------------------------------
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
+    .form-create-return {
+        &:extend(.abs-add-fields-desktop all);
+        .additional {
+            .field:last-child {
+                margin-top: @form-field__vertical-indent__desktop;
+            }
+        }
+    }
+    //
+    //    Guest return view page
+    //--------------------------------------
+    .magento-rma-guest-returns  {
+        .column.main {
+            .block:not(.widget) {
+                .block-content {
+                    &:extend(.abs-add-clearfix-desktop all);
+                    .box {
+                        &:extend(.abs-blocks-2columns all);
+                        margin-bottom: @indent__base;
+                    }
+                }
+            }
+        }
+    }
+    .block-returns-tracking {
+        .block-title {
+            .action {
+                margin: 12px 0 0 30px;
+                &.track {
+                    float: right;
+                }
+            }
+        }
+    }
+}
diff --git a/app/design/frontend/Magento/blank/Magento_VersionsCms/web/css/source/_widgets.less b/app/design/frontend/Magento/blank/Magento_VersionsCms/web/css/source/_widgets.less
new file mode 100644
index 00000000000..776754d62de
--- /dev/null
+++ b/app/design/frontend/Magento/blank/Magento_VersionsCms/web/css/source/_widgets.less
@@ -0,0 +1,25 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//    Common
+//--------------------------------------
+
+& when (@media-common = true) {
+
+.block-cms-hierarchy-link {
+    &.widget {
+        display: block;
+        margin-bottom: @indent__base;
+    }
+
+}
+.block-cms-hierarchy-link-inline {
+    &.widget {
+        margin: 0;
+    }
+}
+
+}
diff --git a/app/design/frontend/Magento/luma/Magento_AdvancedCheckout/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_AdvancedCheckout/web/css/source/_module.less
new file mode 100644
index 00000000000..c7df4ba9874
--- /dev/null
+++ b/app/design/frontend/Magento/luma/Magento_AdvancedCheckout/web/css/source/_module.less
@@ -0,0 +1,165 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  Common
+//  _____________________________________________
+
+& when (@media-common = true) {
+    .column {
+        .block-addbysku {
+            .fieldset {
+                margin: 0;
+                .fields {
+                    position: relative;
+                    .field {
+                        display: inline-block;
+                        margin-bottom: @indent__s;
+                        vertical-align: top;
+                    }
+                    .actions-toolbar {
+                        position: absolute;
+                        right: 0;
+                        top: 7px;
+                    }
+                }
+            }
+            .sku {
+                &:extend(.abs-add-box-sizing all);
+                margin-right: -155px;
+                padding-right: 160px;
+                width: 100%;
+            }
+            .qty {
+                .qty {
+                    &:extend(.abs-input-qty all);
+                    + .mage-error {
+                        width: 80px;
+                    }
+                }
+            }
+            .block-content {
+                &:extend(.abs-add-clearfix-desktop all);
+                .box {
+                    &:extend(.abs-blocks-2columns all);
+                }
+                .actions-toolbar {
+                    clear: both;
+                    .lib-actions-toolbar(
+                    @_actions-toolbar-actions-position: left,
+                    @_actions-toolbar-margin: 0 0 @indent__base
+                    );
+                    .lib-actions-toolbar-clear-floats();
+                    > .secondary {
+                        text-align: left;
+                    }
+                }
+            }
+            .action {
+                &.add {
+                    .lib-button-icon(
+                    @_icon-font-content: @icon-expand,
+                    @_icon-font-text-hide: true,
+                    @_icon-font-size: 20px
+                    );
+                    line-height: normal;
+                    padding: 4px;
+                    width: auto;
+                }
+            }
+            .reset {
+                margin: 7px 0;
+            }
+            .note {
+                display: block;
+                margin: 0 0 @indent__base;
+                padding-top: @indent__s;
+            }
+        }
+    }
+
+    .block-cart-failed {
+        margin: @indent__xl 0;
+        &:extend(.abs-shopping-cart-items all);
+        .block-title {
+            .lib-font-size(@h2__font-size);
+            strong {
+                font-weight: @h2__font-weight;
+            }
+        }
+        .actions.secondary {
+            text-align: center;
+            .action {
+                display: block;
+                margin: 0 auto @indent__s;
+            }
+        }
+    }
+}
+
+//
+//  Mobile
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) {
+    .column {
+        .block-addbysku {
+            .sku {
+                margin-right: -85px;
+                padding-right: 90px;
+            }
+            .action {
+                &.remove {
+                    .lib-button-icon(
+                    @_icon-font-content: @icon-trash,
+                    @_icon-font-text-hide: true,
+                    @_icon-font-size: 18px,
+                    @_icon-font-color: @minicart-icons-color
+                    );
+                    .lib-button-reset();
+                }
+            }
+        }
+    }
+}
+
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) {
+    .block-cart-failed {
+        .block-title {
+            margin: 0 @indent__base @indent__base;
+        }
+    }
+}
+
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__s) {
+    .column {
+        .block-addbysku {
+            .action {
+                &.remove {
+                    .lib-button-reset();
+                    .lib-button-as-link();
+                    margin-top: 4px;
+                }
+            }
+        }
+    }
+}
+
+//
+//  Desktop
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
+    .block-cart-failed {
+        &:extend(.abs-shopping-cart-items-desktop all);
+        .actions.secondary {
+            text-align: right;
+            .action {
+                display: inline-block;
+                margin: 0 0 0 @indent__s;
+            }
+        }
+    }
+}
diff --git a/app/design/frontend/Magento/luma/Magento_AdvancedCheckout/web/css/source/_widgets.less b/app/design/frontend/Magento/luma/Magento_AdvancedCheckout/web/css/source/_widgets.less
new file mode 100644
index 00000000000..bd1d1bf8248
--- /dev/null
+++ b/app/design/frontend/Magento/luma/Magento_AdvancedCheckout/web/css/source/_widgets.less
@@ -0,0 +1,89 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  Common
+//  _____________________________________________
+
+& when (@media-common = true) {
+    .sidebar {
+        .block-addbysku {
+            .fieldset {
+                margin: 0;
+                .fields {
+                    position: relative;
+                    .field {
+                        display: inline-block;
+                        margin-bottom: @indent__s;
+                        vertical-align: top;
+                        &.sku {
+                            &:extend(.abs-add-box-sizing all);
+                            margin-right: -85px;
+                            padding-right: 90px;
+                            width: 100%;
+                        }
+                        &.qty {
+                            .qty {
+                                &:extend(.abs-input-qty all);
+                                + .mage-error {
+                                    width: 80px;
+                                }
+                            }
+                        }
+                    }
+                    .actions-toolbar {
+                        position: absolute;
+                        top: 7px;
+                        right: 0;
+                    }
+                }
+            }
+            .form-addbysku {
+                .actions-toolbar {
+                    margin-bottom: @indent__base;
+                    .primary {
+                        text-align: left;
+                        .action {
+                            width: auto;
+                        }
+                    }
+                    .secondary {
+                        float: none;
+                        text-align: left;
+                    }
+                }
+            }
+            .action {
+                &.add {
+                    .lib-button-icon(
+                    @_icon-font-content: @icon-expand,
+                    @_icon-font-text-hide: true,
+                    @_icon-font-size: 18px
+                    );
+                    line-height: normal;
+                    padding: 4px;
+                    width: auto;
+                }
+                &.links {
+                    display: inline-block;
+                    margin: @indent__base 0 0;
+                }
+                &.reset {
+                    display: block;
+                    margin: @indent__s 0;
+                }
+                &.remove {
+                    .lib-button-icon(
+                    @_icon-font-content: @icon-remove,
+                    @_icon-font-text-hide: true,
+                    @_icon-font-size: 12px,
+                    @_icon-font-color: @color-gray60
+                    );
+                    .lib-button-reset();
+                }
+            }
+        }
+    }
+}
diff --git a/app/design/frontend/Magento/luma/Magento_CustomerBalance/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_CustomerBalance/web/css/source/_module.less
new file mode 100644
index 00000000000..93feda14b83
--- /dev/null
+++ b/app/design/frontend/Magento/luma/Magento_CustomerBalance/web/css/source/_module.less
@@ -0,0 +1,56 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//    Common
+//--------------------------------------
+
+& when (@media-common = true) {
+
+.block-balance {
+    .balance-price-label {
+        &:extend(.abs-visually-hidden all);
+    }
+    .price {
+        .lib-font-size(32);
+        line-height: 32px;
+        display: inline-block;
+        .lib-css(margin-top, -@indent__s);
+    }
+}
+
+}
+
+//
+//    Desktop
+//--------------------------------------
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
+    .storecredit {
+        .block {
+            &:extend(.abs-blocks-2columns all);
+        }
+        .block-balance-history {
+            width: 100%;
+        }
+    }
+    .table-balance-history {
+        .col {
+            width: 25%;
+        }
+    }
+    .table-wrapper.balance-history {
+        &:extend(.abs-account-table-margin-desktop all);
+    }
+}
+
+//
+//    Mobile
+//--------------------------------------
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) {
+    .table-wrapper.balance-history {
+        &:extend(.abs-account-table-margin-mobile all);
+        &:extend(.abs-no-border-top all);
+    }
+}
diff --git a/app/design/frontend/Magento/luma/Magento_GiftCard/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_GiftCard/web/css/source/_module.less
new file mode 100644
index 00000000000..48be33cd964
--- /dev/null
+++ b/app/design/frontend/Magento/luma/Magento_GiftCard/web/css/source/_module.less
@@ -0,0 +1,141 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  Common
+//  _____________________________________________
+
+& when (@media-common = true) {
+
+    .page-product-giftcard {
+        .giftcard-amount {
+            text-align: left;
+            margin-bottom: 0;
+            clear: both;
+            border-top: 1px @color-gray-light5 solid;
+            padding-top: 15px;
+            .field:last-child {
+                padding-bottom: @form-field__vertical-indent !important;
+            }
+        }
+        .product-info-main {
+            .price-box {
+                .old-price {
+                    font-size: 20px;
+                }
+                .price-container.price-final_price {
+                    > span {
+                        display: block;
+                        margin-bottom: @indent__xs;
+                        &:last-child {
+                            margin-bottom: 0;
+                        }
+                    }
+                    .price {
+                        font-size: 22px;
+                        line-height: 22px;
+                        font-weight: @font-weight__semibold;
+                    }
+                }
+                & + .giftcard.form {
+                    border-top: 1px @color-gray-light5 solid;
+                    padding-top: 15px;
+                }
+            }
+        }
+        .product-info-stock-sku {
+            display: block;
+        }
+        .product-add-form {
+            clear: none;
+            border: 0;
+            padding-top: 0;
+            .product-options-wrapper .field:not(.text) {
+                margin-top: @form-field__vertical-indent;
+                margin-bottom: @form-field__vertical-indent;
+            }
+        }
+        .giftcard.form {
+            clear: both;
+        }
+        .price-box {
+            margin-bottom: 10px;
+        }
+        .product-info-price {
+            float: right;
+            width: auto;
+            display: block;
+            white-space: nowrap;
+            border: 0;
+        }
+        .fieldset.giftcard {
+            >.legend {
+                &:extend(.abs-visually-hidden all);
+            }
+            >.legend + br {
+                &:extend(.abs-no-display all);
+            }
+        }
+    }
+}
+
+//
+//  Mobile
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) {
+    .cart-discount {
+        .giftcard .content {
+            padding-bottom: 35px;
+        }
+        .actions-toolbar {
+            .secondary {
+                bottom: 17px;
+            }
+        }
+    }
+    .field.open-amount {
+        width: 100%;
+    }
+}
+
+//
+//  Desktop
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
+    .page-product-giftcard {
+        .product-info-main {
+            .price-box {
+                .price-container.price-final_price {
+                    font-size: @font-size__xl;
+                    .price {
+                        font-size: 36px;
+                        line-height: 36px;
+                    }
+                }
+            }
+        }
+        .product-add-form {
+            .field:not(.text) {
+                .lib-form-field(
+                    @_type: block,
+                    @_column: true
+                );
+                &:nth-child(odd) {
+                    padding-right: 25px;
+                }
+                &:nth-child(even) {
+                    padding-right: 0;
+                }
+            }
+            .product-options-wrapper {
+                .field:not(.date) > .control {
+                    width: auto;
+                }
+            }
+        }
+    }
+}
diff --git a/app/design/frontend/Magento/luma/Magento_GiftCardAccount/layout/checkout_cart_index.xml b/app/design/frontend/Magento/luma/Magento_GiftCardAccount/layout/checkout_cart_index.xml
new file mode 100644
index 00000000000..79d15de6b67
--- /dev/null
+++ b/app/design/frontend/Magento/luma/Magento_GiftCardAccount/layout/checkout_cart_index.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
+    <body>
+        <move element="checkout.cart.giftcardaccount" destination="cart.discount" after="-"/>
+    </body>
+</page>
diff --git a/app/design/frontend/Magento/luma/Magento_GiftCardAccount/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_GiftCardAccount/web/css/source/_module.less
new file mode 100644
index 00000000000..b1c67cd2c68
--- /dev/null
+++ b/app/design/frontend/Magento/luma/Magento_GiftCardAccount/web/css/source/_module.less
@@ -0,0 +1,58 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  Common
+//  _____________________________________________
+
+& when (@media-common = true) {
+    .giftcard-account {
+        .please-wait {
+            display: none;
+        }
+        .form-giftcard-redeem {
+            .giftcard.info {
+                margin-bottom: @indent__l;
+            }
+            .fieldset {
+                &:extend(.abs-forms-margin-small all);
+            }
+        }
+    }
+
+    .opc-wrapper {
+        .form-giftcard-account {
+            max-width: 500px;
+            .field {
+                margin: 0 0 @indent__base;
+                .label {
+                    &:extend(.abs-visually-hidden all);
+                }
+            }
+        }
+        .giftcard-account-info {
+            margin: 0 0 @indent__base;
+
+            .giftcard-account-number {
+                margin: 0 0 @indent__s;
+            }
+        }
+    }
+}
+
+//
+//  Desktop
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
+    .form-giftcard-redeem {
+        &:extend(.abs-forms-general-desktop all);
+    }
+    .block-balance-giftcard {
+        .block-content {
+            &:extend(.abs-account-block-font-size all);
+        }
+    }
+}
diff --git a/app/design/frontend/Magento/luma/Magento_GiftRegistry/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_GiftRegistry/web/css/source/_module.less
new file mode 100644
index 00000000000..eb1e4d0d92d
--- /dev/null
+++ b/app/design/frontend/Magento/luma/Magento_GiftRegistry/web/css/source/_module.less
@@ -0,0 +1,364 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  Common
+//  _____________________________________________
+
+& when (@media-common = true) {
+    .form-giftregistry-share,
+    .form-giftregistry-edit {
+        &:extend(.abs-add-fields all);
+        .actions-toolbar:not(:last-child) {
+            margin-bottom: @indent__xl;
+        }
+        .fieldset {
+            .nested {
+                .field:not(.choice) {
+                    .control {
+                        width: 100%;
+                    }
+                }
+            }
+        }
+    }
+
+    .form.giftregistry.items {
+        .actions-toolbar {
+            &:extend(.abs-reset-left-margin all);
+        }
+    }
+
+    .giftregisty-dropdown {
+        &:extend(.abs-dropdown-simple all);
+        .action.toggle {
+            .lib-css(color, @link__color);
+        }
+    }
+
+    .table-giftregistry-items {
+        .field.qty .qty {
+            &:extend(.abs-input-qty all);
+        }
+        .product-image {
+            .lib-css(margin-right, @indent__s);
+            float: left;
+        }
+    }
+
+    .form.giftregistry .fieldset {
+        .cart-summary & {
+            margin: 15px 0 @indent__xs;
+            text-align: left;
+            .field {
+                margin: 0 0 @indent__s;
+                .control {
+                    float: none;
+                    width: auto;
+                }
+            }
+            .action.primary {
+                &:extend(.abs-revert-to-action-secondary all);
+            }
+        }
+    }
+
+    .form-giftregistry-create {
+        .fieldset {
+            &:extend(.abs-forms-margin-small all);
+        }
+    }
+
+    .form-giftregistry-edit {
+        .giftregistry-type {
+            .lib-css(margin-bottom, @indent__l);
+            .lib-css(margin-top, -@indent__m);
+        }
+        .field.date {
+            &:extend(.abs-field-date all);
+        }
+    }
+
+    .form-giftregistry-search {
+        margin-bottom: @indent__l*2;
+        .legend {
+            &:extend(.abs-account-title all);
+        }
+        .fields-specific-options {
+            .field {
+                &:nth-last-of-type(1) {
+                    margin-bottom: 0;
+                }
+            }
+            .datetime-picker {
+                &:extend(.abs-field-date-input all);
+            }
+        }
+    }
+
+    .block-giftregistry-results {
+        .block-title {
+            &:extend(.abs-account-title all);
+        }
+        .data.table {
+            &:extend(.abs-table-striped all);
+        }
+    }
+
+    .block-giftregistry {
+        .actions-toolbar {
+            margin: 17px 0 0;
+        }
+    }
+
+    .block-giftregistry-shared {
+        .item-options {
+            .item-value {
+                margin: 0 0 @indent__m;
+            }
+        }
+    }
+
+    .block-giftregistry-shared-items {
+        .block-title {
+            &:extend(.abs-account-title all);
+        }
+        .product-image-wrapper {
+            &:extend(.abs-reset-image-wrapper all);
+        }
+        .item {
+            .col {
+                border: 0;
+            }
+        }
+        th {
+            border-bottom: @border-width__base solid @border-color__base;
+        }
+        .col {
+            padding: @cart-item-cell-padding-top 11px 10px;
+            .price-box {
+                display: inline-block;
+            }
+            .price-wrapper {
+                .lib-font-size(18);
+                display: block;
+                font-weight: @font-weight__bold;
+                white-space: nowrap;
+            }
+        }
+
+        .qty {
+            .qty {
+                &:extend(.abs-input-qty all);
+            }
+        }
+
+        .product {
+            .item-options {
+                &:extend(.abs-product-options-list all);
+                &:extend(.abs-add-clearfix all);
+                margin: 0;
+            }
+            &-item-photo {
+                display: block;
+                max-width: 65px;
+                padding: @indent__s 0;
+            }
+            &-item-name {
+                .lib-font-size(18);
+                display: block;
+                margin: 0 0 @indent__xs;
+            }
+        }
+    }
+}
+
+//
+//  Mobile
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) {
+    .account {
+        .table-giftregistry {
+            .col.actions {
+                &:extend(.abs-col-no-prefix all);
+            }
+        }
+    }
+    .table-giftregistry-items {
+        .col.product {
+            &:before {
+                &:extend(.abs-visually-hidden-mobile all);
+            }
+            &:extend(.abs-add-clearfix-mobile all);
+        }
+        .field.choice,
+        .field.qty {
+            display: inline-block;
+        }
+    }
+    .form-giftregistry-search {
+        .fieldset {
+            margin-bottom: @indent__base;
+        }
+    }
+    .block-giftregistry-results {
+        .block-title {
+            margin-bottom: 0;
+        }
+        .table-wrapper {
+            border-top: none;
+        }
+    }
+    .block-giftregistry-shared-items {
+        .block-title {
+            margin-bottom: @indent__s;
+        }
+        .table-wrapper {
+            border-top: 0;
+        }
+    }
+}
+
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) {
+    //  Shopping cart link
+    .cart.table-wrapper {
+        .action-giftregistry {
+            .lib-icon-font(
+            @icon-gift-registry,
+            @_icon-font-size: 18px,
+            @_icon-font-line-height: 20px,
+            @_icon-font-text-hide: true,
+            @_icon-font-color: @minicart-icons-color,
+            @_icon-font-color-hover: @primary__color,
+            @_icon-font-color-active: @minicart-icons-color
+            );
+        }
+    }
+}
+
+//
+//  Desktop
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
+    .form-giftregistry-share,
+    .form-giftregistry-edit {
+        &:extend(.abs-add-fields-desktop all);
+        &:extend(.abs-form-field-column-2 all);
+        .fieldset .field {
+            width: 45%;
+        }
+    }
+    .form-giftregistry-edit {
+        .fieldset.shipping_address {
+            .fieldset {
+                margin-top: @form-field__vertical-indent;
+            }
+        }
+    }
+    .form-giftregistry-create {
+        &:extend(.abs-forms-general-desktop all);
+    }
+    .table-giftregistry {
+        .col.create {
+            white-space: nowrap;
+        }
+        .col.message {
+            width: 40%;
+        }
+        .col.actions {
+            width: 30%;
+        }
+    }
+    .table-giftregistry-items {
+        .col.note {
+            width: 30%;
+        }
+        .account .data.table& {
+            .lib-table-bordered(
+            @_table_type: horizontal
+            );
+            th {
+                border-bottom: 0;
+            }
+            > tbody > tr:nth-child(even) {
+                > td,
+                > th {
+                    background: none;
+                }
+            }
+        }
+    }
+    .form-giftregistry-search {
+        .fieldset {
+            margin-bottom: @form-field__vertical-indent__desktop;
+            .field {
+                &.name,
+                &.lastname {
+                    .lib-form-field-column(@_column: true);
+                    margin-bottom: auto;
+                }
+                &.lastname {
+                    padding: 0;
+                }
+            }
+        }
+    }
+
+    .toolbar-giftregistry-results {
+        &:extend(.abs-pager-toolbar all);
+    }
+
+    .block-giftregistry-shared {
+        .item-options {
+            &:extend(.abs-product-options-list-desktop all);
+            &:extend(.abs-add-clearfix-desktop all);
+        }
+    }
+
+    .block-giftregistry-shared-items {
+        .column.main & {
+            .actions-toolbar {
+                &:extend(.abs-reset-left-margin-desktop all);
+            }
+        }
+        .item {
+            border-bottom: @border-width__base solid @border-color__base;
+            border-top: 0;
+        }
+        .product {
+            &-item-photo {
+                display: table-cell;
+                max-width: 100%;
+                padding: 0 @indent__base 0 0;
+                vertical-align: top;
+                width: 1%;
+            }
+            &-item-details {
+                display: table-cell;
+                vertical-align: top;
+                width: 99%;
+                word-break: normal;
+            }
+        }
+        .col {
+            &.product {
+                width: 48%;
+            }
+            &:not(.product) {
+                text-align: center;
+            }
+            &.price {
+                padding-top: 17px;
+            }
+        }
+        .input-text {
+            &.qty {
+                margin-top: -4px;
+            }
+        }
+    }
+}
diff --git a/app/design/frontend/Magento/luma/Magento_GiftWrapping/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_GiftWrapping/web/css/source/_module.less
new file mode 100644
index 00000000000..e3296daa1bd
--- /dev/null
+++ b/app/design/frontend/Magento/luma/Magento_GiftWrapping/web/css/source/_module.less
@@ -0,0 +1,238 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  Variables
+//  _____________________________________________
+
+@gift-wrapping__border-color: @color-gray-light5;
+@gift-wrapping__border-width: @border-width__base;
+
+@gift-wrapping-preview__active__border-color: @color-gray20;
+@gift-wrapping-preview__active__border-width: 3px;
+
+@gift-wrapping-thumbnail__height: 4rem;
+@gift-wrapping-thumbnail__width: @gift-wrapping-thumbnail__height;
+
+@gift-wrapping-no-image__background: @color-gray95;
+@gift-wrapping-no-image-icon__color: @color-gray-darken4;
+@gift-wrapping-no-image-icon__font-size: 22px;
+
+//
+//  Common
+//  _____________________________________________
+
+& when (@media-common = true) {
+    .gift-wrapping-info {
+        .lib-css(font-weight, @font-weight__light);
+        font-size: @font-size__l;
+        margin: @indent__base 0;
+    }
+
+    .gift-wrapping-list {
+        &:extend(.abs-add-clearfix all);
+        list-style: none;
+        margin: @indent__base 0 @indent__s;
+        padding: 0;
+        .no-image {
+            .lib-css(background, @gift-wrapping-no-image__background);
+            .lib-icon-font(
+            @icon-present,
+            @_icon-font-size: @gift-wrapping-no-image-icon__font-size,
+            @_icon-font-line-height: @gift-wrapping-thumbnail__height,
+            @_icon-font-color: @gift-wrapping-no-image-icon__color,
+            @_icon-font-position: after,
+            @_icon-font-text-hide: true,
+            @_icon-font-vertical-align: middle
+            );
+            &:after {
+                display: block;
+            }
+        }
+    }
+
+    .gift-wrapping-preview,
+    .gift-wrapping-item > span {
+        cursor: pointer;
+        display: block;
+        overflow: hidden;
+        position: relative;
+        z-index: 1;
+    }
+
+    .gift-wrapping-item {
+        float: left;
+        margin: 0 @indent__s @indent__s 0;
+        &:last-child {
+            margin-right: 0;
+        }
+        &._active {
+            span {
+                &:before {
+                    .lib-css(border, @gift-wrapping-preview__active__border-width solid @gift-wrapping-preview__active__border-color);
+                    box-sizing: border-box;
+                    content: '';
+                    display: block;
+                    height: 100%;
+                    position: absolute;
+                    width: 100%;
+                    z-index: 2;
+                }
+            }
+        }
+        > span {
+            height: @gift-wrapping-thumbnail__height;
+            width: @gift-wrapping-thumbnail__width;
+        }
+    }
+
+    .gift-wrapping-title {
+        margin: @indent__s 0;
+        .action-remove {
+            &:extend(.abs-action-button-as-link all);
+            margin: -@indent__xs 0 0 @indent__xs;
+            .lib-icon-font(
+            @icon-trash,
+            @_icon-font-size: 18px,
+            @_icon-font-line-height: 20px,
+            @_icon-font-text-hide: true,
+            @_icon-font-color: @minicart-icons-color,
+            @_icon-font-color-hover: @primary__color,
+            @_icon-font-color-active: @minicart-icons-color
+            );
+        }
+    }
+
+    .gift-options-content {
+        .fieldset {
+            .field {
+                margin: @indent__s 0;
+            }
+        }
+    }
+
+    .gift-wrapping-summary {
+        padding-right: 7rem;
+
+        .gift-wrapping-title {
+            border: 0;
+            display: inline-block;
+            padding: 0;
+        }
+    }
+
+    .opc-wrapper {
+        .fieldset.gift-message .field.gift-wrapping {
+            padding: 0;
+            width: 100%;
+        }
+    }
+
+    .opc-wrapper .data.table,
+    .table-order-items {
+        .gift-wrapping {
+            margin: @indent__base 0 0;
+            .title {
+                float: none;
+            }
+            .content {
+                &:extend(.abs-add-clearfix all);
+                margin: 0;
+                > img {
+                    float: left;
+                    margin: 0 @indent__s 0 0;
+                    max-height: 50px;
+                    max-width: 50px;
+                }
+            }
+        }
+    }
+
+    .gift-summary,
+    .gift-options {
+        .price-box {
+            margin-left: 22px;
+        }
+        .regular-price {
+            &:before {
+                content: attr(data-label)": ";
+            }
+            .price {
+                font-weight: @font-weight__bold;
+            }
+        }
+        &:extend(.abs-adjustment-incl-excl-tax all);
+    }
+}
+
+//
+//  Mobile
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) {
+    .gift-wrapping {
+        .lib-css(border-bottom, @gift-wrapping__border-width solid @gift-wrapping__border-color);
+        margin-bottom: @indent__base;
+        padding-bottom: @indent__s;
+    }
+    .gift-wrapping-list {
+        width: 100%;
+    }
+    .gift-wrapping-summary {
+        + .gift-message-summary {
+            padding-right: 0;
+        }
+    }
+    .gift-options-cart-item {
+        float: left;
+    }
+    .gift-wrapping-preview {
+        img {
+            width: 100%;
+        }
+    }
+    .item-actions {
+        .actions-toolbar {
+            .gift-options {
+                .gift-wrapping,
+                .gift-message {
+                    display: block;
+                }
+            }
+        }
+    }
+}
+
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
+    .data.table {
+        .gift-wrapping {
+            .nested,
+            .content {
+                &:extend(.abs-add-clearfix-desktop all);
+            }
+        }
+    }
+}
+
+//
+//  Desktop
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
+    .gift-wrapping {
+        .lib-css(border-right, @gift-wrapping__border-width solid @gift-wrapping__border-color);
+        box-sizing: border-box;
+        float: left;
+        padding-right: @indent__base;
+        width: 50%;
+        & + .gift-message {
+            .lib-css(border-left, @gift-wrapping__border-width solid @gift-wrapping__border-color);
+            box-sizing: border-box;
+            float: left;
+            padding-left: 4.5rem;
+            width: 50%;
+        }
+    }
+}
diff --git a/app/design/frontend/Magento/luma/Magento_GroupedProduct/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_GroupedProduct/web/css/source/_module.less
new file mode 100644
index 00000000000..d5a3c3b5592
--- /dev/null
+++ b/app/design/frontend/Magento/luma/Magento_GroupedProduct/web/css/source/_module.less
@@ -0,0 +1,100 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//    Common
+//--------------------------------------
+
+& when (@media-common = true) {
+
+.table-wrapper.grouped {
+    width: auto;
+}
+
+.table.grouped {
+    .row-tier-price {
+        > td {
+            border-top: 0;
+        }
+    }
+    .col.item {
+        width: 90%;
+    }
+    .col.qty {
+        width: 10%;
+        .control.qty {
+            .qty {
+                &:extend(.abs-input-qty all);
+            }
+        }
+    }
+    .product-item-name {
+        font-weight: @font-weight__regular;
+        margin-bottom: @indent__s;
+        display: inline-block;
+    }
+    .price-box {
+        p {
+            margin: 0;
+        }
+        .price {
+            font-weight: @font-weight__bold;
+        }
+        .old-price {
+            .price {
+                font-weight: normal;
+            }
+        }
+    }
+    .stock.unavailable {
+        margin: 0;
+        white-space: nowrap;
+        text-transform: none;
+        font-weight: normal;
+    }
+    .row-tier-price {
+    }
+}
+
+.page-product-grouped .product-info-price {
+    float: right;
+    display: block;
+    width: auto;
+    border: 0;
+}
+
+}
+
+//
+//    Mobile
+//--------------------------------------
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) {
+    .table.grouped {
+        > thead > tr > th {
+            display: table-cell;
+            border-bottom: @table__border-width @table__border-style @table__border-color;
+        }
+        > tbody {
+            border-bottom: @table__border-width @table__border-style @table__border-color;
+            > tr > td {
+                &:extend(.abs-col-no-prefix all);
+                border: 0;
+                display: table-cell;
+                padding: @table-cell__padding-vertical @table-cell__padding-horizontal;
+                &:last-child {
+                    border: 0;
+                }
+            }
+        }
+    }
+}
+
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) {
+    .table-wrapper.grouped {
+        margin-left: -@layout__width-xs-indent;
+        margin-right: -@layout__width-xs-indent;
+    }
+}
+
diff --git a/app/design/frontend/Magento/luma/Magento_Invitation/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_Invitation/web/css/source/_module.less
new file mode 100644
index 00000000000..4aa9812a063
--- /dev/null
+++ b/app/design/frontend/Magento/luma/Magento_Invitation/web/css/source/_module.less
@@ -0,0 +1,75 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//    Common
+//--------------------------------------
+
+& when (@media-common = true) {
+
+.form-add-invitations {
+    &:extend(.abs-add-fields all);
+    .fields {
+        .label {
+            &:extend(.abs-visually-hidden all);
+        }
+    }
+    .additional,
+    .field.message {
+        .lib-css(margin-top, @form-field__vertical-indent);
+    }
+    .action {
+        &.remove {
+            top: 4px;
+        }
+        &.add {
+            .lib-button-icon(
+                @_icon-font-content: @icon-expand,
+                @_icon-font-text-hide: true,
+                @_icon-font-size: 18px
+            );
+            line-height: normal;
+            padding: 4px;
+            width: auto;
+        }
+    }
+}
+
+}
+
+//
+//    Mobile
+//--------------------------------------
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) {
+    .form-add-invitations {
+        .action {
+            &.remove {
+                .lib-button-icon(
+                    @_icon-font-content: @icon-trash,
+                    @_icon-font-text-hide: true,
+                    @_icon-font-size: 18px,
+                    @_icon-font-color: @minicart-icons-color
+                );
+            }
+        }
+    }
+}
+
+//
+//    Desktop
+//--------------------------------------
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__s) {
+    .form-add-invitations {
+        &:extend(.abs-add-fields-desktop all);
+    }
+}
+
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
+    .table-invitations {
+        .col {
+            width: 50%;
+        }
+    }
+}
diff --git a/app/design/frontend/Magento/luma/Magento_MultipleWishlist/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_MultipleWishlist/web/css/source/_module.less
new file mode 100644
index 00000000000..1bf8d88e340
--- /dev/null
+++ b/app/design/frontend/Magento/luma/Magento_MultipleWishlist/web/css/source/_module.less
@@ -0,0 +1,534 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+@desktop-popup-width: 380px;
+@desktop-popup-margin-left: -((@desktop-popup-width+(@popup__padding*2))/2);
+@desktop-popup-position-left: 50%;
+@desktop-popup-position-top: 20%;
+
+//
+//  Common
+//  _____________________________________________
+
+& when (@media-common = true) {
+    .wishlist {
+        //  Wish list split button
+        &.split.button {
+            .lib-dropdown-split(
+            @_options-selector: ~".items",
+            @_dropdown-split-button-border-radius-fix: false,
+            @_dropdown-split-list-item-padding: 5px 5px 5px 23px,
+            @_dropdown-split-toggle-icon-content: @icon-down,
+            @_dropdown-split-toggle-active-icon-content: @icon-up,
+            @_icon-font-size: 12px,
+            @_icon-font-color: @addto-color,
+            @_icon-font-color-hover: @addto-hover-color,
+            @_icon-font-vertical-align: middle,
+            @_dropdown-split-list-pointer-position: left,
+            @_dropdown-split-list-min-width: 200px
+            );
+            margin-right: 5%;
+            vertical-align: middle;
+            .items {
+                padding: 6px 0;
+            }
+            &:extend(.abs-dropdown-items-new all);
+
+            > .action {
+                &:extend(.abs-action-button-as-link all);
+                &.split {
+                    .lib-icon-font-symbol(
+                    @_icon-font-content: @icon-wishlist-full
+                    );
+                    &:extend(.abs-actions-addto all);
+                    margin-right: 5px;
+                    &:before {
+                        margin: 0;
+                    }
+                }
+                &:active,
+                &:focus,
+                &:hover {
+                    .lib-css(color, @addto-hover-color);
+                }
+            }
+            > .action.toggle {
+                &:before {
+                    border-left: 1px solid @addto-color;
+                    content: '';
+                    float: left;
+                    height: 15px;
+                    margin: 3px 4px 0 0;
+                }
+            }
+            .table-comparison &,
+            .product-items & {
+                > .action {
+                    &.split {
+                        span {
+                            &:extend(.abs-visually-hidden all);
+                        }
+                    }
+                }
+            }
+            .product-info-main &,
+            .block-bundle-summary & {
+                > .action {
+                    &.split {
+                    }
+                }
+            }
+            .cart.table-wrapper & {
+                vertical-align: baseline;
+                > .action {
+                    &.split {
+                        font-weight: normal;
+                        letter-spacing: normal;
+                        text-transform: none;
+                    }
+                    &.toggle {
+                        &:after {
+                            .lib-css(color, @link__color);
+                        }
+                    }
+                    &.split,
+                    &.toggle {
+                        .lib-css(color, @link__color);
+                        &:before {
+                            display: none;
+                        }
+                    }
+                }
+            }
+        }
+        //  Wish list popup
+        &.window.popup {
+            .lib-popup();
+            &.active {
+                display: block;
+            }
+        }
+        &.overlay {
+            .lib-window-overlay();
+            &.active {
+                display: block;
+            }
+        }
+        //  Wish list dropdown
+        &-dropdown {
+            &:extend(.abs-dropdown-simple all);
+            &:extend(.abs-dropdown-items-new all);
+        }
+        &-dropdown.move,
+        &-dropdown.copy {
+            .action.toggle {
+                .lib-css(color, @link__color);
+            }
+        }
+    }
+
+    .page-multiple-wishlist {
+        .page-title-wrapper {
+            .page-title {
+                &:extend(.abs-visually-hidden all);
+            }
+        }
+        .actions-toolbar {
+            > .primary {
+                display: block;
+                float: none;
+                text-align: left;
+                .action.remove {
+                    float: right;
+                }
+            }
+        }
+    }
+
+    .block-wishlist-management {
+        position: relative;
+        .wishlist {
+            //  Select wish list
+            &-select {
+                .wishlist-name {
+                    &-label {
+                        font-weight: @font-weight__semibold;
+                        &:extend(.abs-colon all);
+                    }
+                    &-current {
+                    }
+                }
+                &-items {
+                    &:extend(.abs-reset-list all);
+                    &.active {
+                    }
+                }
+            }
+            &-add.item {
+                .action {
+                }
+            }
+            //  Wish list name
+            &-title {
+                margin-bottom: @indent__s;
+                strong {
+                    font-weight: @font-weight__light;
+                    margin-right: @indent__s;
+                }
+                .action.edit {
+                }
+            }
+            //  Wish list info
+            &-info {
+            }
+            &-notice {
+                .lib-css(color, @text__color__muted);
+                display: inline-block;
+                margin-right: @indent__base;
+                &.private {
+                    .lib-icon-font(
+                    @_icon-font-content: @icon-private,
+                    @_icon-font-color: lighten(@text__color__muted, 15%),
+                    @_icon-font-vertical-align: text-bottom,
+                    @_icon-font-margin: 0 @indent__xs 0 0
+                    );
+                }
+            }
+            //  Wish list toolbar
+            &-toolbar {
+                &-select,
+                &-actions {
+                    display: inline-block;
+                }
+                &-select {
+                    margin-right: @indent__base;
+                }
+                &-actions {
+                }
+            }
+            //  Wish list toolbar actions
+            &-dropdown.move {
+                margin-right: @indent__base;
+            }
+        }
+    }
+
+    .block-wishlist-search-form {
+        .block-title {
+            &:extend(.abs-account-title all);
+        }
+        .form-wishlist-search {
+            .lib-css(margin-bottom, @indent__l*2);
+            max-width: 500px;
+            .fieldset {
+                > .legend {
+                    &:extend(.abs-visually-hidden);
+                }
+            }
+        }
+    }
+
+    .block-wishlist-search-results {
+        .block-title {
+            &:extend(.abs-account-title all);
+        }
+        .data.table {
+            &:extend(.abs-table-striped all);
+        }
+        .table-wrapper {
+            border-top: none;
+        }
+    }
+
+    .block-wishlist-info-items {
+        .block-title {
+            .lib-css(margin-bottom, @indent__base);
+            .lib-font-size(22px);
+            > strong {
+                font-weight: @font-weight__light ;
+            }
+        }
+        .product-item {
+            width: 100%;
+        }
+        .product-item-photo {
+            margin-left: @indent__base;
+        }
+        .product-item-info {
+            width: auto;
+            &:hover {
+                .split {
+                    visibility: visible;
+                }
+            }
+        }
+        .price-wrapper {
+            display: block;
+            margin: 0 0 @indent__s;
+        }
+        .split {
+            clear: both;
+            padding: @indent__s 0;
+            visibility: hidden;
+        }
+        .wishlist-dropdown {
+            .change {
+                .lib-css(color, @link__color);
+            }
+        }
+        .action {
+            &.towishlist {
+                padding: @indent__s 0;
+            }
+        }
+        .input-text {
+            &.qty {
+                &:extend(.abs-input-qty all);
+                margin-right: 10px;
+            }
+        }
+    }
+}
+
+//
+//  Mobile
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) {
+    .block-wishlist-management {
+        clear: both;
+        margin-top: -21px;
+        .wishlist {
+            //  Select wish list
+            &-select {
+                margin: 0 -@layout__width-xs-indent 20px;
+                .wishlist-name {
+                    .lib-font-size(16);
+                    &:extend(.abs-toggling-title-mobile all);
+                    &-label {
+                    }
+                    &-current {
+                    }
+                }
+                &-items {
+                    border-bottom: @border-width__base solid @border-color__base;
+                    .lib-css(background, @collapsible-nav-background);
+                    display: none;
+                    padding: 15px 0;
+                    &.active {
+                        display: block;
+                    }
+                    .item {
+                        margin: 3px 0 0;
+                        &:first-child {
+                            margin-top: 0;
+                        }
+                        &.current {
+                            display: none;
+                        }
+                        a {
+                            .lib-css(color, @text__color);
+                            display: block;
+                            padding: @indent__xs 18px;
+                            text-decoration: none;
+                            &:hover {
+                                .lib-css(background, @collapsible-nav-item-hover);
+                            }
+                        }
+                    }
+                }
+            }
+            &-add.item {
+                .add {
+                    &:extend(.abs-icon-add-mobile all);
+                }
+            }
+            //  Wish list name
+            &-title {
+                strong {
+                    .lib-font-size(26);
+                }
+                .action.edit {
+                }
+            }
+            //  Wish list info
+            &-info {
+                margin-bottom: 15px;
+            }
+            &-notice {
+                &.private {
+                }
+            }
+            //  Wish list toolbar
+            &-toolbar {
+                &-select,
+                &-actions {
+                    margin-bottom: 15px;
+                }
+                &-select {
+                }
+                &-actions {
+                }
+            }
+            //  Wish list toolbar actions
+            &-dropdown.move {
+            }
+        }
+    }
+    .products-grid.wishlist {
+        .product {
+            &-item {
+                &-checkbox {
+                    left: 20px;
+                    position: absolute;
+                    top: 20px;
+                }
+                &-photo {
+                    .page-multiple-wishlist & {
+                        margin-left: @indent__m;
+                    }
+                }
+                &-name,
+                &-description,
+                .price-box,
+                &-tooltip {
+                    .page-multiple-wishlist & {
+                        margin-left: 115px;
+                    }
+                }
+            }
+        }
+        .wishlist-dropdown {
+            display: none;
+        }
+    }
+}
+
+//
+//  Desktop
+//  _____________________________________________
+
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
+    .wishlist {
+        &.window.popup {
+            bottom: auto;
+            .lib-css(top, @desktop-popup-position-top);
+            .lib-css(left, @desktop-popup-position-left);
+            .lib-css(margin-left, @desktop-popup-margin-left);
+            .lib-css(width, @desktop-popup-width);
+            right: auto;
+        }
+    }
+
+    .block-wishlist-management {
+        &:extend(.abs-add-clearfix-desktop all);
+        margin-bottom: @indent__base;
+        .wishlist {
+            //  Select wish list
+            &-select {
+                border-bottom: 1px solid @secondary__color;
+                display: table;
+                margin-bottom: 15px;
+                width: 100%;
+                .wishlist-name {
+                    display: table-cell;
+                    margin-right: @indent__s;
+                    padding: @indent__xs @indent__s @indent__s;
+                    vertical-align: top;
+                    white-space: nowrap;
+                    width: 5%;
+                    span {
+                    }
+                    &.active {
+                    }
+                    &-label {
+                    }
+                    &-current {
+                    }
+                }
+                &-items {
+                    display: table-cell;
+                    padding-right: 160px;
+                    vertical-align: top;
+                    &.active {
+                    }
+                    .item {
+                        display: inline-block;
+                        margin-right: @indent__s;
+                        padding: @indent__xs @indent__s @indent__s;
+                        &:last-child {
+                            margin-right: 0;
+                        }
+                    }
+                    .current {
+                        border-bottom: 3px solid @active__color;
+                        font-weight: @font-weight__semibold;
+                    }
+                }
+                .wishlist-name-current {
+                    display: none;
+                }
+            }
+            &-add.item {
+                position: absolute;
+                right: 0;
+                top: 0;
+            }
+            //  Wish list name
+            &-title {
+                strong {
+                    .lib-font-size(40);
+                }
+                .action.edit {
+                }
+            }
+            //  Wish list info
+            &-info {
+                float: left;
+            }
+            &-notice {
+                &.private {
+                }
+            }
+            //  Wish list toolbar
+            &-toolbar {
+                float: right;
+                &-select,
+                &-actions {
+                }
+                &-select {
+                }
+                &-actions {
+                }
+            }
+            //  Wish list toolbar actions
+            &-dropdown.move {
+            }
+        }
+    }
+
+    .block-wishlist-info-items {
+        .product-item-photo {
+            margin-left: 0;
+        }
+    }
+
+    .products-grid.wishlist {
+        .product {
+            &-item {
+                &-checkbox {
+                    float: left;
+                    + .product-item-name {
+                        margin-left: @indent__m;
+                    }
+                }
+            }
+        }
+    }
+
+    .toolbar-wishlist-results {
+        &:extend(.abs-pager-toolbar all);
+    }
+}
diff --git a/app/design/frontend/Magento/luma/Magento_Reward/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_Reward/web/css/source/_module.less
new file mode 100644
index 00000000000..943689c0b48
--- /dev/null
+++ b/app/design/frontend/Magento/luma/Magento_Reward/web/css/source/_module.less
@@ -0,0 +1,48 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//    Common
+//--------------------------------------
+
+& when (@media-common = true) {
+
+.block-reward-info {
+    .reward-balance {
+        .lib-font-size(18);
+        margin-bottom: @indent__m;
+    }
+    .reward-rates,
+    .reward-limit,
+    .reward-expiring {
+        &:not(:last-child) {
+            margin-bottom: @indent__m;
+        }
+        .title {
+            display: inline-block;
+            margin-bottom: @indent__s;
+        }
+    }
+}
+
+}
+
+//
+//    Mobile
+//--------------------------------------
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) {
+    .table-wrapper.reward-history {
+        &:extend(.abs-account-table-margin-mobile all);
+    }
+}
+
+//
+//    Desktop
+//--------------------------------------
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
+    .table-wrapper.reward-history {
+        &:extend(.abs-account-table-margin-desktop all);
+    }
+}
diff --git a/app/design/frontend/Magento/luma/Magento_Rma/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_Rma/web/css/source/_module.less
new file mode 100644
index 00000000000..45d70d9720a
--- /dev/null
+++ b/app/design/frontend/Magento/luma/Magento_Rma/web/css/source/_module.less
@@ -0,0 +1,157 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//    Common
+//--------------------------------------
+
+& when (@media-common = true) {
+
+.order-details-items.rma {
+    .order-title {
+        display: none;
+        + .toolbar {
+            display: none;
+        }
+    }
+}
+
+.form-create-return {
+    &:extend(.abs-add-fields all);
+    .additional {
+        &:first-child {
+            margin-top: 0;
+        }
+    }
+    .field.comment {
+        margin-top: 55px;
+    }
+    .actions-toolbar {
+        &:extend(.abs-add-clearfix all);
+    }
+}
+
+.return-status {
+    &:extend(.abs-status all);
+}
+
+.block-returns-comments {
+    .returns-comments {
+        dt,
+        dd {
+            margin: 0;
+        }
+        dt {
+            font-weight: @font-weight__regular;
+        }
+        dd {
+            margin-bottom: 15px;
+            &:last-child {
+                margin-bottom: 0;
+            }
+        }
+    }
+    .fieldset {
+        margin-bottom: @indent__base;
+    }
+}
+
+.magento-rma-returns-returns,
+.magento-rma-returns-view {
+    &:extend(.abs-title-orders all);
+}
+
+//
+//    Guest return view page
+//--------------------------------------
+.magento-rma-guest-returns {
+    .column.main {
+        .block:not(.widget) {
+            &:extend(.abs-account-blocks all);
+        }
+    }
+    &:extend(.abs-title-orders all);
+}
+
+}
+
+//
+//    Mobile
+//--------------------------------------
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) {
+    .form-create-return {
+        .additional {
+            .field:nth-last-child(2) {
+                margin-bottom: 0;
+            }
+            .field:last-child {
+                margin-top: @form-field__vertical-indent;
+            }
+        }
+    }
+    .magento-rma-returns-returns,
+    .magento-rma-returns-view {
+        &:extend(.abs-title-orders-mobile all);
+    }
+    .account {
+        .column.main {
+            .returns-details-items {
+                .block-returns-tracking {
+                    .block-title {
+                        > .action.track {
+                            float: none;
+                            display: block;
+                            margin: @indent__s 0 0;
+                        }
+                    }
+                }
+            }
+        }
+    }
+    .table-wrapper.table-returns {
+        &:extend(.abs-no-border-top all);
+    }
+}
+
+//
+//    Desktop
+//--------------------------------------
+.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
+    .form-create-return {
+        &:extend(.abs-add-fields-desktop all);
+        &:extend(.abs-form-field-column-2 all);
+        .fieldset .field {
+           width: 45%;
+        }
+    }
+    .return-status {
+        &:extend(.abs-status-desktop all);
+    }
+    .magento-rma-returns-returns,
+    .magento-rma-returns-view {
+        &:extend(.abs-title-orders-desktop all);
+    }
+    .magento-rma-guest-returns {
+        .column.main .block.block-order-details-view {
+            &:extend(.abs-add-clearfix-desktop all);
+            .block-content:not(.widget) .box {
+                &:extend(.abs-add-box-sizing-desktop all);
+                clear: none;
+                float: left;
+                width: 100%/4;
+            }
+        }
+    }
+    .block-returns-tracking {
+        .block-title {
+            .action {
+                margin: 12px 0 0 30px;
+                &.track {
+                    float: right;
+                }
+            }
+        }
+    }
+}
-- 
GitLab


From 4fb21473f83f8b58755d7d07aed1a7fcaf659f3d Mon Sep 17 00:00:00 2001
From: Oleksii Kolesnyk <okolesnyk@ebay.com>
Date: Thu, 22 Oct 2015 17:30:21 +0300
Subject: [PATCH 200/370] MTA-2723: Functional test maintenance. Part 2

---
 .../tests/app/Magento/Backend/Test/Block/Widget/Grid.php    | 1 +
 .../Test/Block/Adminhtml/Category/Edit/CategoryForm.php     | 4 ++--
 .../Catalog/Test/Block/Product/View/CustomOptions.php       | 6 +++---
 .../Test/TestCase/Product/AddCompareProductsTest.xml        | 2 +-
 .../GroupedProduct/Test/Block/Catalog/Product/View.php      | 3 +--
 5 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php
index 5952f4690c1..dcd3b282aa7 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php
@@ -302,6 +302,7 @@ abstract class Grid extends Block
     {
         $this->waitLoader();
         $this->_rootElement->find($this->resetButton)->click();
+        $this->waitForElementVisible($this->loader);
         $this->waitLoader();
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Category/Edit/CategoryForm.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Category/Edit/CategoryForm.php
index 486ca5577dd..df04b06cb44 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Category/Edit/CategoryForm.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Category/Edit/CategoryForm.php
@@ -51,9 +51,9 @@ class CategoryForm extends FormTabs
             $store = $fixture->getStoreId();
             $storeSwitcherBlock = $this->browser->find($this->storeSwitcherBlock);
             $storeSwitcherBlock->find($this->dropdownBlock, Locator::SELECTOR_CSS, 'liselectstore')->setValue($store);
-            $element = $this->browser->find($this->confirmModal);
+            $modalElement = $this->browser->find($this->confirmModal);
             /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
-            $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+            $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $modalElement]);
             $modal->acceptAlert();
         }
 
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View/CustomOptions.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View/CustomOptions.php
index 7e4608bc008..9fcea9e3456 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View/CustomOptions.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View/CustomOptions.php
@@ -30,14 +30,14 @@ class CustomOptions extends Form
      *
      * @var string
      */
-    protected $optionElement = '#product-options-wrapper .field';
+    protected $optionElement = '#product-options-wrapper > * > .field';
 
     /**
      * Selector for title of option
      *
      * @var string
      */
-    protected $title = 'label';
+    protected $title = 'label > span:nth-child(1), legend > span:nth-child(1)';
 
     /**
      * Selector for required option
@@ -381,7 +381,7 @@ class CustomOptions extends Form
      */
     protected function parseOptionText($optionText)
     {
-        preg_match('`^(.*?)\+\$(\d.*?)$`', $optionText, $match);
+        preg_match('`^(.*?) \+ ?\$([\d\.,]*?)$`', $optionText, $match);
         $optionPrice = isset($match[2]) ? str_replace(',', '', $match[2]) : 0;
         $optionTitle = isset($match[1]) ? trim($match[1]) : $optionText;
 
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/AddCompareProductsTest.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/AddCompareProductsTest.xml
index 7e106eb611f..2aa04810e18 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/AddCompareProductsTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/AddCompareProductsTest.xml
@@ -21,7 +21,7 @@
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductComparePage" />
         </variation>
         <variation name="AddCompareProductsTestVariation3">
-            <data name="products" xsi:type="string">configurableProduct::default</data>
+            <data name="products" xsi:type="string">configurableProduct::configurable_with_qty_1</data>
             <data name="isCustomerLoggedIn" xsi:type="string">Yes</data>
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductCompareItemsLink" />
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductComparePage" />
diff --git a/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Block/Catalog/Product/View.php b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Block/Catalog/Product/View.php
index fd8184a473a..b17f829fac6 100644
--- a/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Block/Catalog/Product/View.php
+++ b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Block/Catalog/Product/View.php
@@ -81,8 +81,7 @@ class View extends ParentView
      */
     public function getOptions(FixtureInterface $product)
     {
-        $groupedOptions = $this->getGroupedProductBlock()->getOptions($product);
-        return ['grouped_options' => $groupedOptions] + parent::getOptions($product);
+        return ['grouped_options' => $this->getGroupedProductBlock()->getOptions($product)];
     }
 
     /**
-- 
GitLab


From 80a905f7ab88865ea3d78fdeab29db579bb7e326 Mon Sep 17 00:00:00 2001
From: Andriy Nasinnyk <anasinnyk@ebay.com>
Date: Thu, 22 Oct 2015 17:48:25 +0300
Subject: [PATCH 201/370] MAGETWO-44304: Product grid is broken on Storefront
 Category page if HTML files minification is enabled

---
 .../Framework/View/Test/Unit/Template/Html/MinifierTest.php     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Template/Html/MinifierTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Template/Html/MinifierTest.php
index a93962b3ae7..e598a93c243 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Template/Html/MinifierTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Template/Html/MinifierTest.php
@@ -117,7 +117,7 @@ class MinifierTest extends \PHPUnit_Framework_TestCase
 TEXT;
 
         $expectedContent = <<<TEXT
-<?php /** * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ ?><?php ?><html><head><title>Test title</title></head><body><a href="http://somelink.com/text.html">Text Link</a> <img src="test.png" alt="some text" /><?php echo \$block->someMethod(); ?> <div style="width: 800px" class="<?php echo \$block->getClass() ?>" /><script>
+<?php /** * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ ?> <?php ?> <html><head><title>Test title</title></head><body><a href="http://somelink.com/text.html">Text Link</a> <img src="test.png" alt="some text" /><?php echo \$block->someMethod(); ?> <div style="width: 800px" class="<?php echo \$block->getClass() ?>" /><script>
             //<![CDATA[
             var someVar = 123;
             testFunctionCall(function () {
-- 
GitLab


From 2cfa2640e14f20599bb37fafab3d287aeeda7a9f Mon Sep 17 00:00:00 2001
From: Olga Kopylova <okopylova@ebay.com>
Date: Thu, 22 Oct 2015 09:57:51 -0500
Subject: [PATCH 202/370] MAGETWO-44119: Module-specific styles are not
 available for EE modules while installing magento via composer

- skip module-based resolution of view files, if requested module is not registered (to avoid an exception)
---
 .../Magento/Framework/View/Design/Fallback/Rule/Module.php     | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/lib/internal/Magento/Framework/View/Design/Fallback/Rule/Module.php b/lib/internal/Magento/Framework/View/Design/Fallback/Rule/Module.php
index fe6e23dc46c..c62e3d306bb 100644
--- a/lib/internal/Magento/Framework/View/Design/Fallback/Rule/Module.php
+++ b/lib/internal/Magento/Framework/View/Design/Fallback/Rule/Module.php
@@ -59,6 +59,9 @@ class Module implements RuleInterface
             ComponentRegistrar::MODULE,
             $params['module_name']
         );
+        if (empty($params['module_dir'])) {
+            return [];
+        }
         return $this->rule->getPatternDirs($params);
     }
 }
-- 
GitLab


From fda77d0a85f959ae80acf4f48a8b74a80cb39e63 Mon Sep 17 00:00:00 2001
From: Mikalai_Shostka <mikalai_shostka@epam.com>
Date: Thu, 22 Oct 2015 18:07:30 +0300
Subject: [PATCH 203/370] Fix rename tab Image Management

---
 .../Magento/Catalog/Setup/UpgradeData.php     | 25 -------
 .../ProductVideo/Setup/UpgradeData.php        | 71 +++++++++++++++++++
 app/code/Magento/ProductVideo/etc/module.xml  |  2 +-
 3 files changed, 72 insertions(+), 26 deletions(-)
 create mode 100644 app/code/Magento/ProductVideo/Setup/UpgradeData.php

diff --git a/app/code/Magento/Catalog/Setup/UpgradeData.php b/app/code/Magento/Catalog/Setup/UpgradeData.php
index c5963538371..68680e8596c 100644
--- a/app/code/Magento/Catalog/Setup/UpgradeData.php
+++ b/app/code/Magento/Catalog/Setup/UpgradeData.php
@@ -40,31 +40,6 @@ class UpgradeData implements UpgradeDataInterface
     public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
     {
         $setup->startSetup();
-        if (version_compare($context->getVersion(), '2.0.1') < 0) {
-            /** @var \Magento\Catalog\Setup\CategorySetup $categorySetup */
-            $categorySetup = $this->categorySetupFactory->create(['setup' => $setup]);
-
-            $entityTypeId = $categorySetup->getEntityTypeId(\Magento\Catalog\Model\Product::ENTITY);
-            $attributeSetId = $categorySetup->getDefaultAttributeSetId($entityTypeId);
-
-            $attributeGroup = $categorySetup->getAttributeGroup(
-                $entityTypeId,
-                $attributeSetId,
-                'Images',
-                'attribute_group_name'
-            );
-            if (isset($attributeGroup['attribute_group_name']) && $attributeGroup['attribute_group_name'] == 'Images') {
-                // update General Group
-                $categorySetup->updateAttributeGroup(
-                    $entityTypeId,
-                    $attributeSetId,
-                    $attributeGroup['attribute_group_id'],
-                    'attribute_group_name',
-                    'Images and Videos'
-                );
-            }
-        }
-
         if ($context->getVersion()
             && version_compare($context->getVersion(), '2.0.1') < 0
         ) {
diff --git a/app/code/Magento/ProductVideo/Setup/UpgradeData.php b/app/code/Magento/ProductVideo/Setup/UpgradeData.php
new file mode 100644
index 00000000000..ed76fb19199
--- /dev/null
+++ b/app/code/Magento/ProductVideo/Setup/UpgradeData.php
@@ -0,0 +1,71 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\ProductVideo\Setup;
+
+use Magento\Catalog\Setup\CategorySetupFactory;
+use Magento\Framework\Setup\UpgradeDataInterface;
+use Magento\Framework\Setup\ModuleContextInterface;
+use Magento\Framework\Setup\ModuleDataSetupInterface;
+
+/**
+ * Upgrade Data script
+ * @codeCoverageIgnore
+ */
+class UpgradeData implements UpgradeDataInterface
+{
+    /**
+     * Category setup factory
+     *
+     * @var CategorySetupFactory
+     */
+    private $categorySetupFactory;
+
+    /**
+     * Init
+     *
+     * @param CategorySetupFactory $categorySetupFactory
+     */
+    public function __construct(CategorySetupFactory $categorySetupFactory)
+    {
+        $this->categorySetupFactory = $categorySetupFactory;
+    }
+
+    /**
+     * {@inheritdoc}
+     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
+     */
+    public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
+    {
+        $setup->startSetup();
+        if (version_compare($context->getVersion(), '2.0.0.2') < 0) {
+            /** @var \Magento\Catalog\Setup\CategorySetup $categorySetup */
+            $categorySetup = $this->categorySetupFactory->create(['setup' => $setup]);
+
+            $entityTypeId = $categorySetup->getEntityTypeId(\Magento\Catalog\Model\Product::ENTITY);
+            $attributeSetId = $categorySetup->getDefaultAttributeSetId($entityTypeId);
+
+            $attributeGroup = $categorySetup->getAttributeGroup(
+                $entityTypeId,
+                $attributeSetId,
+                'Image Management'
+            );
+            if (isset($attributeGroup['attribute_group_name']) && $attributeGroup['attribute_group_name'] == 'Image Management') {
+                // update General Group
+                $categorySetup->updateAttributeGroup(
+                    $entityTypeId,
+                    $attributeSetId,
+                    $attributeGroup['attribute_group_id'],
+                    'attribute_group_name',
+                    'Images and Videos'
+                );
+            }
+
+        }
+
+        $setup->endSetup();
+    }
+}
diff --git a/app/code/Magento/ProductVideo/etc/module.xml b/app/code/Magento/ProductVideo/etc/module.xml
index a6bc6bab40b..16107ae938e 100644
--- a/app/code/Magento/ProductVideo/etc/module.xml
+++ b/app/code/Magento/ProductVideo/etc/module.xml
@@ -6,7 +6,7 @@
 */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
-    <module name="Magento_ProductVideo" setup_version="2.0.0.1">
+    <module name="Magento_ProductVideo" setup_version="2.0.0.2">
         <sequence>
             <module name="Magento_Catalog"/>
             <module name="Magento_Backend"/>
-- 
GitLab


From d1ae1d967c2e88fec9df436fd98285dbd6e2e691 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Thu, 22 Oct 2015 10:08:59 -0500
Subject: [PATCH 204/370] MAGETWO-44154: Random PAT build failures due to
 400/503 HTTP response errors being thrown  - static test fix

---
 .../testsuite/Magento/Framework/Code/GeneratorTest.php        | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/dev/tests/integration/testsuite/Magento/Framework/Code/GeneratorTest.php b/dev/tests/integration/testsuite/Magento/Framework/Code/GeneratorTest.php
index 9bd4cb649bb..81fcb128903 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Code/GeneratorTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Code/GeneratorTest.php
@@ -95,7 +95,9 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
         // This test is only valid if the factory created the object if Autoloader did not pick it up automatically
         if (\Magento\Framework\Code\Generator::GENERATION_SUCCESS == $generatorResult) {
             $content = $this->_clearDocBlock(
-                file_get_contents($this->_ioObject->generateResultFileName(self::CLASS_NAME_WITH_NAMESPACE . 'Factory'))
+                file_get_contents(
+                    $this->_ioObject->generateResultFileName(self::CLASS_NAME_WITH_NAMESPACE . 'Factory')
+                )
             );
             $expectedContent = $this->_clearDocBlock(
                 file_get_contents(__DIR__ . '/_expected/SourceClassWithNamespaceFactory.php.sample')
-- 
GitLab


From 0001ee34ce4dc2d903484acbf0b1d8b4caa7b9df Mon Sep 17 00:00:00 2001
From: Ievgen Sentiabov <isentiabov@ebay.com>
Date: Thu, 22 Oct 2015 18:21:15 +0300
Subject: [PATCH 205/370] MAGETWO-44113: Creating Ratings in the Frontend (not
 available after Magento installation)

 - Changed cache tag
 - Added unit tests
---
 .../Magento/Review/Block/Product/Review.php   |  14 +-
 app/code/Magento/Review/Model/Rating.php      |   5 +-
 app/code/Magento/Review/Model/Review.php      |   5 +
 .../Test/Unit/Block/Product/ReviewTest.php    | 172 ++++++++++++++++++
 .../Review/Test/Unit/Model/RatingTest.php     |   4 +-
 5 files changed, 194 insertions(+), 6 deletions(-)
 create mode 100644 app/code/Magento/Review/Test/Unit/Block/Product/ReviewTest.php

diff --git a/app/code/Magento/Review/Block/Product/Review.php b/app/code/Magento/Review/Block/Product/Review.php
index b553291cfbf..02764dc5123 100644
--- a/app/code/Magento/Review/Block/Product/Review.php
+++ b/app/code/Magento/Review/Block/Product/Review.php
@@ -5,13 +5,15 @@
  */
 namespace Magento\Review\Block\Product;
 
+use Magento\Framework\DataObject\IdentityInterface;
+use Magento\Framework\View\Element\Template;
 
 /**
  * Product Review Tab
  *
  * @author     Magento Core Team <core@magentocommerce.com>
  */
-class Review extends \Magento\Framework\View\Element\Template
+class Review extends Template implements IdentityInterface
 {
     /**
      * Core registry
@@ -98,4 +100,14 @@ class Review extends \Magento\Framework\View\Element\Template
 
         return $collection->getSize();
     }
+
+    /**
+     * Return unique ID(s) for each object in system
+     *
+     * @return array
+     */
+    public function getIdentities()
+    {
+        return [\Magento\Review\Model\Review::CACHE_TAG];
+    }
 }
diff --git a/app/code/Magento/Review/Model/Rating.php b/app/code/Magento/Review/Model/Rating.php
index b209b680c82..f251cf838cc 100644
--- a/app/code/Magento/Review/Model/Rating.php
+++ b/app/code/Magento/Review/Model/Rating.php
@@ -6,7 +6,6 @@
 namespace Magento\Review\Model;
 
 use Magento\Framework\DataObject\IdentityInterface;
-use Magento\Store\Model\Store;
 
 /**
  * Rating model
@@ -172,7 +171,7 @@ class Rating extends \Magento\Framework\Model\AbstractModel implements IdentityI
      */
     public function getIdentities()
     {
-        // skip cache for all store
-        return [Store::CACHE_TAG];
+        // clear cache for all reviews
+        return [Review::CACHE_TAG];
     }
 }
diff --git a/app/code/Magento/Review/Model/Review.php b/app/code/Magento/Review/Model/Review.php
index a44da6d2f82..792babfba4e 100644
--- a/app/code/Magento/Review/Model/Review.php
+++ b/app/code/Magento/Review/Model/Review.php
@@ -31,6 +31,11 @@ class Review extends \Magento\Framework\Model\AbstractModel implements IdentityI
      */
     protected $_eventPrefix = 'review';
 
+    /**
+     * Cache tag
+     */
+    const CACHE_TAG = 'review_block';
+
     /**
      * Product entity review code
      */
diff --git a/app/code/Magento/Review/Test/Unit/Block/Product/ReviewTest.php b/app/code/Magento/Review/Test/Unit/Block/Product/ReviewTest.php
new file mode 100644
index 00000000000..8e0b4b31e97
--- /dev/null
+++ b/app/code/Magento/Review/Test/Unit/Block/Product/ReviewTest.php
@@ -0,0 +1,172 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Review\Test\Unit\Block\Product;
+
+use Magento\Framework\Registry;
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+use Magento\Framework\View\Element\Template\Context;
+use Magento\Catalog\Model\Product;
+use Magento\Review\Block\Product\Review as ReviewBlock;
+use Magento\Review\Model\ResourceModel\Review\Collection;
+use Magento\Review\Model\ResourceModel\Review\CollectionFactory;
+use Magento\Review\Model\Review;
+use Magento\Store\Model\Store;
+use Magento\Store\Model\StoreManager;
+
+/**
+ * Class ReviewTest
+ * @package Magento\Review\Test\Unit\Block\Product
+ */
+class ReviewTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Review\Block\Product\Review
+     */
+    private $block;
+
+    /**
+     * @var \Magento\Review\Model\ResourceModel\Review\Collection|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $collectionMock;
+
+    /**
+     * @var \Magento\Review\Model\ResourceModel\Review\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $collectionFactoryMock;
+
+    /**
+     * @var \Magento\Framework\Registry|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $registryMock;
+
+    /**
+     * @var \Magento\Catalog\Model\Product|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $productMock;
+
+    /**
+     * @var \Magento\Framework\View\Element\Template\Context|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $contextMock;
+
+    /**
+     * @va rMagento\Store\Model\Store|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $storeMock;
+
+    protected function setUp()
+    {
+        $this->initContextMock();
+        $this->initRegistryMock();
+        $this->initCollectionMocks();
+
+        $helper = new ObjectManager($this);
+        $this->block = $helper->getObject(ReviewBlock::class, [
+            'context' => $this->contextMock,
+            'registry' => $this->registryMock,
+            'collectionFactory' => $this->collectionFactoryMock,
+        ]);
+    }
+
+    /**
+     * @covers \Magento\Review\Block\Product\Review::getIdentities()
+     */
+    public function testGetIdentities()
+    {
+        static::assertEquals([Review::CACHE_TAG], $this->block->getIdentities());
+    }
+
+    /**
+     * Create mocks for collection and its factory
+     */
+    private function initCollectionMocks()
+    {
+        $this->collectionMock = $this->getMockBuilder(Collection::class)
+            ->disableOriginalConstructor()
+            ->setMethods(['addStoreFilter', 'addStatusFilter', 'addEntityFilter', 'getSize', '__wakeup'])
+            ->getMock();
+
+        $this->collectionMock->expects(static::any())
+            ->method('addStoreFilter')
+            ->willReturnSelf();
+
+        $this->collectionMock->expects(static::any())
+            ->method('addStatusFilter')
+            ->with(Review::STATUS_APPROVED)
+            ->willReturnSelf();
+
+        $this->collectionMock->expects(static::any())
+            ->method('addEntityFilter')
+            ->willReturnSelf();
+
+        $this->collectionFactoryMock = $this->getMockBuilder(CollectionFactory::class)
+            ->disableOriginalConstructor()
+            ->setMethods(['create', '__wakeup'])
+            ->getMock();
+
+        $this->collectionFactoryMock->expects(static::once())
+            ->method('create')
+            ->willReturn($this->collectionMock);
+    }
+
+    /**
+     * Create mock for registry object
+     */
+    private function initRegistryMock()
+    {
+        $this->initProductMock();
+        $this->registryMock = $this->getMockBuilder(Registry::class)
+            ->disableOriginalConstructor()
+            ->setMethods(['registry'])
+            ->getMock();
+
+        $this->registryMock->expects(static::once())
+            ->method('registry')
+            ->with('product')
+            ->willReturn($this->productMock);
+    }
+
+    /**
+     * Create mock object for catalog product
+     */
+    private function initProductMock()
+    {
+        $this->productMock = $this->getMockBuilder(Product::class)
+            ->disableOriginalConstructor()
+            ->setMethods(['getId'])
+            ->getMock();
+    }
+
+    /**
+     * Create mock object for context
+     */
+    private function initContextMock()
+    {
+        $this->storeMock = $this->getMockBuilder(Store::class)
+            ->disableOriginalConstructor()
+            ->setMethods(['getId', '__wakeup'])
+            ->getMock();
+
+        $storeManager = $this->getMockBuilder(StoreManager::class)
+            ->disableOriginalConstructor()
+            ->setMethods(['getStore', '__wakeup'])
+            ->getMock();
+
+        $storeManager->expects(static::once())
+            ->method('getStore')
+            ->willReturn($this->storeMock);
+
+        $this->contextMock = $this->getMockBuilder(Context::class)
+            ->disableOriginalConstructor()
+            ->setMethods(['getStoreManager'])
+            ->getMock();
+
+        $this->contextMock->expects(static::once())
+            ->method('getStoreManager')
+            ->willReturn($storeManager);
+    }
+}
diff --git a/app/code/Magento/Review/Test/Unit/Model/RatingTest.php b/app/code/Magento/Review/Test/Unit/Model/RatingTest.php
index 64bf2e99b7d..82db181bedf 100644
--- a/app/code/Magento/Review/Test/Unit/Model/RatingTest.php
+++ b/app/code/Magento/Review/Test/Unit/Model/RatingTest.php
@@ -6,7 +6,7 @@
 namespace Magento\Review\Test\Unit\Model;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
-use Magento\Store\Model\Store;
+use Magento\Review\Model\Review;
 use Magento\Review\Model\Rating;
 
 class RatingTest extends \PHPUnit_Framework_TestCase
@@ -31,6 +31,6 @@ class RatingTest extends \PHPUnit_Framework_TestCase
      */
     public function testGetIdentities()
     {
-        static::assertEquals([Store::CACHE_TAG], $this->rating->getIdentities());
+        static::assertEquals([Review::CACHE_TAG], $this->rating->getIdentities());
     }
 }
-- 
GitLab


From 0ffd2b0d1f9cadfefd5f52a4b6a5bc48b950f2ab Mon Sep 17 00:00:00 2001
From: Vitalii Zabaznov <vzabaznov@ebay.com>
Date: Thu, 22 Oct 2015 18:49:29 +0300
Subject: [PATCH 206/370] MAGETWO-42486:  [GITHUB] Adding product
 configurations shows wrong currency #1737

---
 .../Block/Adminhtml/Product/Edit/Tab/Super/Config/Matrix.php    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/Tab/Super/Config/Matrix.php b/app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/Tab/Super/Config/Matrix.php
index 9c7c67395a1..bf336cbf870 100644
--- a/app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/Tab/Super/Config/Matrix.php
+++ b/app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/Tab/Super/Config/Matrix.php
@@ -54,7 +54,6 @@ class Matrix extends \Magento\Backend\Block\Template
     /** @var null|array */
     private $productAttributes;
 
-
     /**
      * @var \Magento\Framework\Locale\CurrencyInterface
      */
@@ -68,6 +67,7 @@ class Matrix extends \Magento\Backend\Block\Template
      * @param \Magento\ConfigurableProduct\Model\Product\Type\VariationMatrix $variationMatrix
      * @param ProductRepositoryInterface $productRepository
      * @param \Magento\Catalog\Helper\Image $image
+     * @param \Magento\Framework\Locale\CurrencyInterface $localeCurrency
      * @param array $data
      */
     public function __construct(
-- 
GitLab


From 54a8a48d95244c7f6726ce8a8ec5a09aee5080dc Mon Sep 17 00:00:00 2001
From: Dmytro Voskoboinikov <dvoskoboinikov@ebay.com>
Date: Thu, 22 Oct 2015 19:30:18 +0300
Subject: [PATCH 207/370] MAGETWO-44416: Bugfixes PR preparation and processing

---
 .../testsuite/Magento/Bundle/Api/OrderItemRepositoryTest.php    | 2 +-
 .../testsuite/Magento/Catalog/Api/OrderItemRepositoryTest.php   | 2 +-
 .../Magento/ConfigurableProduct/Api/OrderItemRepositoryTest.php | 2 +-
 .../Magento/Downloadable/Api/OrderItemRepositoryTest.php        | 2 +-
 .../testsuite/Magento/Sales/Service/V1/CreditmemoListTest.php   | 2 +-
 .../testsuite/Magento/Sales/Service/V1/InvoiceListTest.php      | 2 +-
 .../testsuite/Magento/Sales/Service/V1/OrderItemGetListTest.php | 2 +-
 .../testsuite/Magento/Sales/Service/V1/OrderListTest.php        | 2 +-
 .../testsuite/Magento/Sales/Service/V1/ShipmentListTest.php     | 2 +-
 .../testsuite/Magento/Sales/Service/V1/TransactionTest.php      | 2 +-
 10 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/dev/tests/api-functional/testsuite/Magento/Bundle/Api/OrderItemRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Bundle/Api/OrderItemRepositoryTest.php
index 72005876cc5..5944edff812 100644
--- a/dev/tests/api-functional/testsuite/Magento/Bundle/Api/OrderItemRepositoryTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Bundle/Api/OrderItemRepositoryTest.php
@@ -76,7 +76,7 @@ class OrderItemRepositoryTest extends WebapiAbstract
             ]
         );
 
-        $requestData = ['criteria' => $searchCriteriaBuilder->create()->__toArray()];
+        $requestData = ['searchCriteria' => $searchCriteriaBuilder->create()->__toArray()];
 
         $serviceInfo = [
             'rest' => [
diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/OrderItemRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/OrderItemRepositoryTest.php
index db63fbb6084..613be6d5007 100644
--- a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/OrderItemRepositoryTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/OrderItemRepositoryTest.php
@@ -76,7 +76,7 @@ class OrderItemRepositoryTest extends WebapiAbstract
             ]
         );
 
-        $requestData = ['criteria' => $searchCriteriaBuilder->create()->__toArray()];
+        $requestData = ['searchCriteria' => $searchCriteriaBuilder->create()->__toArray()];
 
         $serviceInfo = [
             'rest' => [
diff --git a/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/OrderItemRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/OrderItemRepositoryTest.php
index 25cb0e8652b..318a2252888 100644
--- a/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/OrderItemRepositoryTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/OrderItemRepositoryTest.php
@@ -76,7 +76,7 @@ class OrderItemRepositoryTest extends WebapiAbstract
             ]
         );
 
-        $requestData = ['criteria' => $searchCriteriaBuilder->create()->__toArray()];
+        $requestData = ['searchCriteria' => $searchCriteriaBuilder->create()->__toArray()];
 
         $serviceInfo = [
             'rest' => [
diff --git a/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/OrderItemRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/OrderItemRepositoryTest.php
index 41a5c6a5069..e3da911ba3a 100644
--- a/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/OrderItemRepositoryTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/OrderItemRepositoryTest.php
@@ -76,7 +76,7 @@ class OrderItemRepositoryTest extends WebapiAbstract
             ]
         );
 
-        $requestData = ['criteria' => $searchCriteriaBuilder->create()->__toArray()];
+        $requestData = ['searchCriteria' => $searchCriteriaBuilder->create()->__toArray()];
 
         $serviceInfo = [
             'rest' => [
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoListTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoListTest.php
index d3216b9cf41..892f4ca944a 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoListTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoListTest.php
@@ -68,7 +68,7 @@ class CreditmemoListTest extends WebapiAbstract
         );
         $searchData = $searchCriteriaBuilder->create()->__toArray();
 
-        $requestData = ['criteria' => $searchData];
+        $requestData = ['searchCriteria' => $searchData];
         $serviceInfo = [
             'rest' => [
                 'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($requestData),
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/InvoiceListTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/InvoiceListTest.php
index b529af4d554..6b8aa48df12 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/InvoiceListTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/InvoiceListTest.php
@@ -53,7 +53,7 @@ class InvoiceListTest extends WebapiAbstract
         );
         $searchData = $searchCriteriaBuilder->create()->__toArray();
 
-        $requestData = ['criteria' => $searchData];
+        $requestData = ['searchCriteria' => $searchData];
         $serviceInfo = [
             'rest' => [
                 'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($requestData),
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetListTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetListTest.php
index 1cd2b7a3065..e91f747116d 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetListTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetListTest.php
@@ -48,7 +48,7 @@ class OrderItemGetListTest extends WebapiAbstract
             ]
         );
 
-        $requestData = ['criteria' => $searchCriteriaBuilder->create()->__toArray()];
+        $requestData = ['searchCriteria' => $searchCriteriaBuilder->create()->__toArray()];
 
         $serviceInfo = [
             'rest' => [
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderListTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderListTest.php
index 003ccfccf94..a6598376efb 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderListTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderListTest.php
@@ -54,7 +54,7 @@ class OrderListTest extends WebapiAbstract
         );
         $searchData = $searchCriteriaBuilder->create()->__toArray();
 
-        $requestData = ['criteria' => $searchData];
+        $requestData = ['searchCriteria' => $searchData];
         $serviceInfo = [
             'rest' => [
                 'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($requestData),
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentListTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentListTest.php
index a06f2266492..678edb386c7 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentListTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentListTest.php
@@ -46,7 +46,7 @@ class ShipmentListTest extends WebapiAbstract
         $searchCriteriaBuilder->addFilters([$filterBuilder->setField('shipment_status')->setValue(1)->create()]);
         $searchData = $searchCriteriaBuilder->create()->__toArray();
 
-        $requestData = ['criteria' => $searchData];
+        $requestData = ['searchCriteria' => $searchData];
         $serviceInfo = [
             'rest' => [
                 'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($requestData),
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/TransactionTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/TransactionTest.php
index 2081f0502ff..b0fb27eb254 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/TransactionTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/TransactionTest.php
@@ -118,7 +118,7 @@ class TransactionTest extends WebapiAbstract
         $searchCriteriaBuilder->addFilters($filters);
         $searchData = $searchCriteriaBuilder->create()->__toArray();
 
-        $requestData = ['criteria' => $searchData];
+        $requestData = ['searchCriteria' => $searchData];
 
         $serviceInfo = [
             'rest' => [
-- 
GitLab


From dc1d9f1f1f3bacd73e9abc5288df9b45521522c9 Mon Sep 17 00:00:00 2001
From: Maksym Aposov <maposov@ebay.com>
Date: Thu, 22 Oct 2015 21:41:19 +0300
Subject: [PATCH 208/370] MAGETWO-40789: Incorrectly calculated Regular price
 for simple product with Custom option of Percent type

---
 app/code/Magento/Catalog/Model/Product.php    | 21 ++++++---
 .../Catalog/Test/Unit/Model/ProductTest.php   | 21 ++++++++-
 .../Catalog/Model/Product/Type/PriceTest.php  | 44 ++++++++++++++++---
 3 files changed, 73 insertions(+), 13 deletions(-)

diff --git a/app/code/Magento/Catalog/Model/Product.php b/app/code/Magento/Catalog/Model/Product.php
index 58bdfe24915..63658e47ad0 100644
--- a/app/code/Magento/Catalog/Model/Product.php
+++ b/app/code/Magento/Catalog/Model/Product.php
@@ -117,12 +117,19 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements
      */
     protected $_errors = [];
 
+    /**
+     * Product option factory
+     *
+     * @var Product\OptionFactory
+     */
+    protected $optionFactory;
+
     /**
      * Product option
      *
      * @var Product\Option
      */
-    protected $_optionInstance;
+    protected $optionInstance;
 
     /**
      * @var array
@@ -337,7 +344,7 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements
      * @param Product\Link $productLink
      * @param Product\Configuration\Item\OptionFactory $itemOptionFactory
      * @param \Magento\CatalogInventory\Api\Data\StockItemInterfaceFactory $stockItemFactory
-     * @param Product\OptionFactory $catalogProductOption
+     * @param Product\OptionFactory $catalogProductOptionFactory
      * @param Product\Visibility $catalogProductVisibility
      * @param Product\Attribute\Source\Status $catalogProductStatus
      * @param Product\Media\Config $catalogProductMediaConfig
@@ -376,7 +383,7 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements
         Product\Link $productLink,
         \Magento\Catalog\Model\Product\Configuration\Item\OptionFactory $itemOptionFactory,
         \Magento\CatalogInventory\Api\Data\StockItemInterfaceFactory $stockItemFactory,
-        \Magento\Catalog\Model\Product\OptionFactory $catalogProductOption,
+        \Magento\Catalog\Model\Product\OptionFactory $catalogProductOptionFactory,
         \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility,
         \Magento\Catalog\Model\Product\Attribute\Source\Status $catalogProductStatus,
         \Magento\Catalog\Model\Product\Media\Config $catalogProductMediaConfig,
@@ -405,7 +412,7 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements
         $this->metadataService = $metadataService;
         $this->_itemOptionFactory = $itemOptionFactory;
         $this->_stockItemFactory = $stockItemFactory;
-        $this->_optionInstance = $catalogProductOption->create()->setProduct($this);
+        $this->optionFactory = $catalogProductOptionFactory;
         $this->_catalogProductVisibility = $catalogProductVisibility;
         $this->_catalogProductStatus = $catalogProductStatus;
         $this->_catalogProductMediaConfig = $catalogProductMediaConfig;
@@ -1889,7 +1896,11 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements
      */
     public function getOptionInstance()
     {
-        return $this->_optionInstance;
+        if (!isset($this->optionInstance)) {
+            $this->optionInstance = $this->optionFactory->create();
+            $this->optionInstance->setProduct($this);
+        }
+        return $this->optionInstance;
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ProductTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ProductTest.php
index c52c96470fd..e80bbd86826 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/ProductTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ProductTest.php
@@ -250,6 +250,15 @@ class ProductTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['setProduct', 'saveOptions', '__wakeup', '__sleep'])
             ->disableOriginalConstructor()->getMock();
 
+        $optionFactory = $this->getMock(
+            'Magento\Catalog\Model\Product\OptionFactory',
+            ['create'],
+            [],
+            '',
+            false
+        );
+        $optionFactory->expects($this->any())->method('create')->willReturn($this->optionInstanceMock);
+
         $this->resource = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Product')
             ->disableOriginalConstructor()
             ->getMock();
@@ -347,7 +356,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
                 'catalogProductType' => $this->productTypeInstanceMock,
                 'productFlatIndexerProcessor' => $this->productFlatProcessor,
                 'productPriceIndexerProcessor' => $this->productPriceProcessor,
-                'catalogProductOption' => $this->optionInstanceMock,
+                'catalogProductOptionFactory' => $optionFactory,
                 'storeManager' => $storeManager,
                 'resource' => $this->resource,
                 'registry' => $this->registry,
@@ -1241,6 +1250,14 @@ class ProductTest extends \PHPUnit_Framework_TestCase
         $optionInstanceMock = $this->getMockBuilder('Magento\Catalog\Model\Product\Option')
             ->disableOriginalConstructor()
             ->getMock();
+        $optionFactory = $this->getMock(
+            'Magento\Catalog\Model\Product\OptionFactory',
+            ['create'],
+            [],
+            '',
+            false
+        );
+        $optionFactory->expects($this->any())->method('create')->willReturn($optionInstanceMock);
         $joinProcessorMock = $this->getMockBuilder('Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface')
             ->disableOriginalConstructor()
             ->getMock();
@@ -1249,7 +1266,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
         $productModel = $this->objectManagerHelper->getObject(
             'Magento\Catalog\Model\Product',
             [
-                'catalogProductOption' => $optionInstanceMock,
+                'catalogProductOptionFactory' => $optionFactory,
                 'joinProcessor' => $joinProcessorMock
             ]
         );
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Type/PriceTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Type/PriceTest.php
index aac0f56cff8..cfdc01a16e4 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Type/PriceTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Type/PriceTest.php
@@ -5,6 +5,8 @@
  */
 namespace Magento\Catalog\Model\Product\Type;
 
+use Magento\Catalog\Model\Product;
+
 /**
  * @magentoDataFixture Magento/Catalog/_files/product_simple.php
  */
@@ -29,7 +31,7 @@ class PriceTest extends \PHPUnit_Framework_TestCase
 
     public function testGetFinalPrice()
     {
-        /** @var $product \Magento\Catalog\Model\Product */
+        /** @var $product Product */
         $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
             'Magento\Catalog\Model\Product'
         );
@@ -42,12 +44,14 @@ class PriceTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals(5.0, $this->_model->getFinalPrice(5, $product));
 
         // with options
-        $product->addCustomOption('option_ids', implode(',', array_keys($product->getOptions())));
+        $buyRequest = $this->prepareBuyRequest($product);
+        $product->getTypeInstance()->prepareForCart($buyRequest, $product);
 
-        foreach ($product->getOptions() as $id => $option) {
-            $product->addCustomOption("option_{$id}", $option->getValue());
-        }
-        $this->assertEquals(16.0, $this->_model->getFinalPrice(1, $product));
+        //product price + options price(10+1+2+3+3)
+        $this->assertEquals(19.0, $this->_model->getFinalPrice(1, $product));
+
+        //product tier price + options price(5+1+2+3+3)
+        $this->assertEquals(14.0, $this->_model->getFinalPrice(5, $product));
     }
 
     public function testGetFormatedPrice()
@@ -82,4 +86,32 @@ class PriceTest extends \PHPUnit_Framework_TestCase
     {
         $this->assertTrue($this->_model->isTierPriceFixed());
     }
+
+    /**
+     * Build buy request based on product custom options
+     *
+     * @param Product $product
+     * @return \Magento\Framework\DataObject
+     */
+    private function prepareBuyRequest(Product $product)
+    {
+        $options = [];
+        /** @var $option \Magento\Catalog\Model\Product\Option */
+        foreach ($product->getOptions() as $option) {
+            switch ($option->getGroupByType()) {
+                case \Magento\Catalog\Model\Product\Option::OPTION_GROUP_DATE:
+                    $value = ['year' => 2013, 'month' => 8, 'day' => 9, 'hour' => 13, 'minute' => 35];
+                    break;
+                case \Magento\Catalog\Model\Product\Option::OPTION_GROUP_SELECT:
+                    $value = key($option->getValues());
+                    break;
+                default:
+                    $value = 'test';
+                    break;
+            }
+            $options[$option->getId()] = $value;
+        }
+
+        return new \Magento\Framework\DataObject(['qty' => 1, 'options' => $options]);
+    }
 }
-- 
GitLab


From f6f26912fa2b83e4a3ef955d6fbe8b162cc92eae Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Thu, 22 Oct 2015 14:02:22 -0500
Subject: [PATCH 209/370] MAGETWO-43857: [github] cache types don't properly
 invalidate all the time #1844

---
 app/code/Magento/Theme/Model/Design/Backend/Theme.php | 9 +--------
 1 file changed, 1 insertion(+), 8 deletions(-)

diff --git a/app/code/Magento/Theme/Model/Design/Backend/Theme.php b/app/code/Magento/Theme/Model/Design/Backend/Theme.php
index cafa2703fd4..d58e9b38242 100644
--- a/app/code/Magento/Theme/Model/Design/Backend/Theme.php
+++ b/app/code/Magento/Theme/Model/Design/Backend/Theme.php
@@ -16,13 +16,6 @@ class Theme extends Value
      */
     protected $_design = null;
 
-    /**
-     * Path to config node with list of caches
-     *
-     * @var string
-     */
-    const XML_PATH_INVALID_CACHES = 'design/invalid_caches';
-
     /**
      * Initialize dependencies
      *
@@ -66,7 +59,7 @@ class Theme extends Value
     /**
      * {@inheritdoc}
      *
-     * {@inheritdoc}. In addition, it cleans all
+     * {@inheritdoc}. In addition, it cleans all Magento cache
      *
      * @return $this
      */
-- 
GitLab


From bc0488f964ebc68996caa6b64c143bb7b377f7a0 Mon Sep 17 00:00:00 2001
From: Dmitry Kologrivov <dmitry_kologrivov@epam.com>
Date: Thu, 22 Oct 2015 15:54:48 +0300
Subject: [PATCH 210/370] MAGETWO-44227: fix unit tests

---
 .../Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php     | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/ProductVideo/Test/Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php b/app/code/Magento/ProductVideo/Test/Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php
index e07d3144baa..8cd0300f98c 100644
--- a/app/code/Magento/ProductVideo/Test/Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php
+++ b/app/code/Magento/ProductVideo/Test/Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php
@@ -37,6 +37,8 @@ class NewVideoTest extends \PHPUnit_Framework_TestCase
      */
     protected $jsonEncoderMock;
 
+    protected $mediaHelper;
+
     /**
      * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
      * |\Magento\ProductVideo\Block\Adminhtml\Product\Edit\NewVideo
@@ -46,6 +48,7 @@ class NewVideoTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $this->contextMock = $this->getMock('\Magento\Backend\Block\Template\Context', [], [], '', false);
+        $this->mediaHelper = $this->getMock('\Magento\ProductVideo\Helper\Media', [], [], '', false);
         $this->mathRandom = $this->getMock('\Magento\Framework\Math\Random', [], [], '', false);
         $this->urlBuilder = $this->getMock('\Magento\Framework\UrlInterface', [], [], '', false);
         $this->contextMock->expects($this->any())->method('getMathRandom')->willReturn($this->mathRandom);
@@ -60,9 +63,11 @@ class NewVideoTest extends \PHPUnit_Framework_TestCase
             '\Magento\ProductVideo\Block\Adminhtml\Product\Edit\NewVideo',
             [
                 'context' => $this->contextMock,
+                'mediaHelper' => $this->mediaHelper,
+                'urlBuilder' => $this->urlBuilder,
+                'jsonEncoder' => $this->jsonEncoderMock,
                 'registry' => $this->registryMock,
                 'formFactory' => $this->formFactoryMock,
-                'jsonEncoder' => $this->jsonEncoderMock
             ]
         );
     }
-- 
GitLab


From 79651d58b901e556c7242fdde62459074aa51ab3 Mon Sep 17 00:00:00 2001
From: Dmitry Kologrivov <dmitry_kologrivov@epam.com>
Date: Thu, 22 Oct 2015 22:21:32 +0300
Subject: [PATCH 211/370] MA-44227: Add comment to property

---
 .../Test/Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php    | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/app/code/Magento/ProductVideo/Test/Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php b/app/code/Magento/ProductVideo/Test/Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php
index 8cd0300f98c..9da5b71dd4d 100644
--- a/app/code/Magento/ProductVideo/Test/Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php
+++ b/app/code/Magento/ProductVideo/Test/Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php
@@ -37,6 +37,9 @@ class NewVideoTest extends \PHPUnit_Framework_TestCase
      */
     protected $jsonEncoderMock;
 
+    /**
+     * @var \Magento\ProductVideo\Helper\Media|\PHPUnit_Framework_MockObject_MockObject
+     */
     protected $mediaHelper;
 
     /**
-- 
GitLab


From 68e9ceee422c3725e1666d550b8aad295364a5c2 Mon Sep 17 00:00:00 2001
From: "Partica, Cristian" <cpartica@ebay.com>
Date: Thu, 22 Oct 2015 14:34:40 -0500
Subject: [PATCH 212/370] MAGETWO-44415: Impossible edit tax rate from "New Tax
 Rule" page

- fixed the open command for the new js modal to openModal
---
 app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml b/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml
index e04ddfeeefe..22adf3c427e 100644
--- a/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml
+++ b/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml
@@ -88,7 +88,7 @@ require([
                         item.itemElement = that.prev();
                         $('#tax-rate-form')
                             .dialogRates({itemRate: item})
-                            .dialogRates('open');
+                            .dialogRates('openModal');
 
                     } else {
                         if (result.error_message)
-- 
GitLab


From 4adbd2b80e3100a783ab7ed2709cce130b938152 Mon Sep 17 00:00:00 2001
From: Maddy Chellathurai <mchellathura@ebay.com>
Date: Thu, 22 Oct 2015 15:41:44 -0500
Subject: [PATCH 213/370] MAGETWO-41701: [Github] Move ext- and lib- from
 require-dev in composer.json to require section

- adding check for php
---
 .../Magento/Test/Integrity/ComposerTest.php        | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php
index 215df89727a..a3b62afaf0c 100644
--- a/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php
+++ b/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php
@@ -288,12 +288,14 @@ class ComposerTest extends \PHPUnit_Framework_TestCase
      */
     private function assertPhpVersionInSync($name, $phpVersion)
     {
-        $this->assertEquals(
-            self::$rootJson['require']['php'],
-            $phpVersion,
-            "PHP version {$phpVersion} in component {$name} is inconsistent with version "
-            . self::$rootJson['require']['php'] . ' in root composer.json'
-        );
+        if (isset(self::$rootJson['require']['php'])) {
+            $this->assertEquals(
+                self::$rootJson['require']['php'],
+                $phpVersion,
+                "PHP version {$phpVersion} in component {$name} is inconsistent with version "
+                . self::$rootJson['require']['php'] . ' in root composer.json'
+            );
+        }
     }
 
     /**
-- 
GitLab


From 7ebf4b34ed903cc96a2a8175c8b59cddb72bdab6 Mon Sep 17 00:00:00 2001
From: Yu Tang <ytang1@ebay.com>
Date: Thu, 22 Oct 2015 16:10:23 -0500
Subject: [PATCH 214/370] MAGETWO-44316: Integration test
 Magento\Catalog\Model\ProductTest randomly fails

---
 .../Catalog/Controller/Adminhtml/Product/AttributeTest.php       | 1 +
 1 file changed, 1 insertion(+)

diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php
index 007c4939d78..664fdee2198 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php
@@ -7,6 +7,7 @@ namespace Magento\Catalog\Controller\Adminhtml\Product;
 
 /**
  * @magentoAppArea adminhtml
+ * @magentoDbIsolation enabled
  */
 class AttributeTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
-- 
GitLab


From 3fa8b517848d5e45b7abf09b9c39b25189f96a4d Mon Sep 17 00:00:00 2001
From: Hayder Sharhan <hsharhan@ebay.com>
Date: Thu, 22 Oct 2015 17:43:38 -0500
Subject: [PATCH 215/370] MAGETWO-44053: [GITHUB] Bug: i18n phrases with
 apostrophes (') in Knockout templates are untranslatable (and my fix) #1951

- Added fix to account for phrases with apostrophes in ko templates.
---
 app/code/Magento/Translation/Model/Js/DataProvider.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Translation/Model/Js/DataProvider.php b/app/code/Magento/Translation/Model/Js/DataProvider.php
index ee6d8b3f5df..a12859fe254 100644
--- a/app/code/Magento/Translation/Model/Js/DataProvider.php
+++ b/app/code/Magento/Translation/Model/Js/DataProvider.php
@@ -129,7 +129,7 @@ class DataProvider implements DataProviderInterface
             if ($result) {
                 if (isset($matches[2])) {
                     foreach ($matches[2] as $match) {
-                        $phrases[] = $match;
+                        $phrases[] = str_replace('\\\'', '\'', $match);
                     }
                 }
             }
-- 
GitLab


From d32d965874a18ee6e0e7a13cf40edc07c6f684e9 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Thu, 22 Oct 2015 18:27:37 -0500
Subject: [PATCH 216/370] =?UTF-8?q?MAGETWO-43435:=20[Github]=20=C2=ABi18n:?=
 =?UTF-8?q?collect-phrases=C2=BB=20command=20wrongly=20handles=20PHP=20str?=
 =?UTF-8?q?ing=20concatenation=20=20-=20style=20test=20fixes?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/TokenTest.php | 2 --
 1 file changed, 2 deletions(-)

diff --git a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/TokenTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/TokenTest.php
index 5622bcdc23d..c29edab1c44 100644
--- a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/TokenTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/TokenTest.php
@@ -130,6 +130,4 @@ class TokenTest extends \PHPUnit_Framework_TestCase
         $token = new \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token(',', ',');
         $this->assertFalse($token->isConcatenateOperator());
     }
-
-
 }
-- 
GitLab


From 8d1842a0ea6afef4f5db923a06b96f5bf4d9be41 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Thu, 22 Oct 2015 21:30:12 -0500
Subject: [PATCH 217/370] MAGETWO-44470: clear generated files in CLI framework
  - clear var/generation when command is for compilation

---
 .../Magento/Framework/Console/Cli.php         | 27 ++++++--
 .../Console/Command/DiCompileCommand.php      |  6 +-
 .../Command/DiCompileMultiTenantCommand.php   |  5 +-
 .../Setup/Console/CompilerPreparation.php     | 64 +++++++++++++++++++
 4 files changed, 95 insertions(+), 7 deletions(-)
 create mode 100644 setup/src/Magento/Setup/Console/CompilerPreparation.php

diff --git a/lib/internal/Magento/Framework/Console/Cli.php b/lib/internal/Magento/Framework/Console/Cli.php
index 786a658b7e9..8fb5e79d672 100644
--- a/lib/internal/Magento/Framework/Console/Cli.php
+++ b/lib/internal/Magento/Framework/Console/Cli.php
@@ -22,6 +22,27 @@ class Cli extends SymfonyApplication
      */
     const INPUT_KEY_BOOTSTRAP = 'bootstrap';
 
+    /** @var \Zend\ServiceManager\ServiceManager */
+    private $serviceManager;
+
+    /**
+     * @param string $name    The name of the application
+     * @param string $version The version of the application
+     */
+    public function __construct($name = 'UNKNOWN', $version = 'UNKNOWN')
+    {
+        $this->serviceManager = \Zend\Mvc\Application::init(require BP . '/setup/config/application.config.php')
+            ->getServiceManager();
+        /**
+         * Temporary workaround until the compiler is able to clear the generation directory. (MAGETWO-44493)
+         */
+        if (class_exists('Magento\Setup\Console\CompilerPreparation')) {
+            (new \Magento\Setup\Console\CompilerPreparation($this->serviceManager))->handleCompilerEnvironment();
+        }
+
+        parent::__construct($name, $version);
+    }
+
     /**
      * {@inheritdoc}
      */
@@ -45,14 +66,12 @@ class Cli extends SymfonyApplication
         $params[Bootstrap::PARAM_REQUIRE_MAINTENANCE] = null;
         $bootstrap = Bootstrap::create(BP, $params);
         $objectManager = $bootstrap->getObjectManager();
-        $serviceManager = \Zend\Mvc\Application::init(require BP . '/setup/config/application.config.php')
-            ->getServiceManager();
         /** @var \Magento\Setup\Model\ObjectManagerProvider $omProvider */
-        $omProvider = $serviceManager->get('Magento\Setup\Model\ObjectManagerProvider');
+        $omProvider = $this->serviceManager->get('Magento\Setup\Model\ObjectManagerProvider');
         $omProvider->setObjectManager($objectManager);
 
         if (class_exists('Magento\Setup\Console\CommandList')) {
-            $setupCommandList = new \Magento\Setup\Console\CommandList($serviceManager);
+            $setupCommandList = new \Magento\Setup\Console\CommandList($this->serviceManager);
             $setupCommands = $setupCommandList->getCommands();
         }
 
diff --git a/setup/src/Magento/Setup/Console/Command/DiCompileCommand.php b/setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
index b404778db16..8138a0db280 100644
--- a/setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
+++ b/setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
@@ -28,6 +28,9 @@ use Symfony\Component\Console\Output\OutputInterface;
  */
 class DiCompileCommand extends Command
 {
+    /** Command name */
+    const NAME = 'setup:di:compile';
+
     /** @var DeploymentConfig */
     private $deploymentConfig;
 
@@ -89,7 +92,7 @@ class DiCompileCommand extends Command
      */
     protected function configure()
     {
-        $this->setName('setup:di:compile')
+        $this->setName(self::NAME)
             ->setDescription(
                 'Generates DI configuration and all non-existing interceptors and factories'
             );
@@ -172,7 +175,6 @@ class DiCompileCommand extends Command
             $this->cleanupFilesystem(
                 [
                     DirectoryList::CACHE,
-                    DirectoryList::GENERATION,
                     DirectoryList::DI,
                 ]
             );
diff --git a/setup/src/Magento/Setup/Console/Command/DiCompileMultiTenantCommand.php b/setup/src/Magento/Setup/Console/Command/DiCompileMultiTenantCommand.php
index 33f8f763ede..ea56ed13dbd 100644
--- a/setup/src/Magento/Setup/Console/Command/DiCompileMultiTenantCommand.php
+++ b/setup/src/Magento/Setup/Console/Command/DiCompileMultiTenantCommand.php
@@ -56,6 +56,9 @@ class DiCompileMultiTenantCommand extends AbstractSetupCommand
     const SERIALIZER_VALUE_IGBINARY = 'igbinary';
     /**#@- */
 
+    /** Command name */
+    const NAME = 'setup:di:compile-multi-tenant';
+
     /**
      * Object Manager
      *
@@ -155,7 +158,7 @@ class DiCompileMultiTenantCommand extends AbstractSetupCommand
                 'Allows to exclude Paths from compilation (default is #[\\\\/]m1[\\\\/]#i)'
             ),
         ];
-        $this->setName('setup:di:compile-multi-tenant')
+        $this->setName(self::NAME)
             ->setDescription(
                 'Generates all non-existing proxies and factories, and pre-compile class definitions, '
                 . 'inheritance information and plugin definitions'
diff --git a/setup/src/Magento/Setup/Console/CompilerPreparation.php b/setup/src/Magento/Setup/Console/CompilerPreparation.php
new file mode 100644
index 00000000000..457b4f23b37
--- /dev/null
+++ b/setup/src/Magento/Setup/Console/CompilerPreparation.php
@@ -0,0 +1,64 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Setup\Console;
+
+
+use Magento\Framework\App\Bootstrap;
+use Magento\Framework\App\Filesystem\DirectoryList;
+use Magento\Framework\Filesystem\Driver\File;
+use Magento\Setup\Console\Command\DiCompileCommand;
+use Magento\Setup\Console\Command\DiCompileMultiTenantCommand;
+use Magento\Setup\Mvc\Bootstrap\InitParamListener;
+use Symfony\Component\Console\Input\ArgvInput;
+
+class CompilerPreparation
+{
+    /** @var \Zend\ServiceManager\ServiceManager */
+    private $serviceManager;
+
+    /**
+     * @param \Zend\ServiceManager\ServiceManager $serviceManager
+     */
+    public function __construct(\Zend\ServiceManager\ServiceManager $serviceManager)
+    {
+        $this->serviceManager = $serviceManager;
+    }
+
+    /**
+     * Determine whether a CLI command is for compilation, and if so, clear the directory
+     *
+     * @throws \Magento\Framework\Exception\FileSystemException
+     */
+    public function handleCompilerEnvironment()
+    {
+        $input = new ArgvInput();
+        $compilationCommands = [DiCompileCommand::NAME, DiCompileMultiTenantCommand::NAME];
+        $cmdName = $input->getFirstArgument();
+        $isHelpOption = $input->hasParameterOption('--help') || $input->hasParameterOption('-h');
+
+        if (!in_array($cmdName, $compilationCommands) || $isHelpOption) {
+            return;
+        }
+
+        $generationDir = ($cmdName === DiCompileMultiTenantCommand::NAME)
+            ? $input->getParameterOption(DiCompileMultiTenantCommand::INPUT_KEY_GENERATION)
+            : null;
+
+        if (!$generationDir) {
+            $mageInitParams = $this->serviceManager->get(InitParamListener::BOOTSTRAP_PARAM);
+            $mageDirs = isset($mageInitParams[Bootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS])
+                ? $mageInitParams[Bootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS]
+                : [];
+            $generationDir = (new DirectoryList(BP, $mageDirs))->getPath(DirectoryList::GENERATION);
+        }
+
+        $filesystemDriver = new File();
+        if ($filesystemDriver->isExists($generationDir)) {
+            $filesystemDriver->deleteDirectory($generationDir);
+        }
+    }
+}
-- 
GitLab


From 38bcb3c079b709ccce980ee69b3c9ac49ecb3df9 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Thu, 22 Oct 2015 23:03:18 -0500
Subject: [PATCH 218/370] MAGETWO-44470: clear generated files in CLI framework
  - add unit test coverage  - refactor CompilerPreparation

---
 .../Magento/Framework/Console/Cli.php         |   5 +-
 .../Setup/Console/CompilerPreparation.php     |  30 ++-
 .../Console/Command/DiCompileCommandTest.php  |   1 +
 .../DiCompileMultiTenantCommandTest.php       |  21 ++
 .../Unit/Console/CompilerPreparationTest.php  | 181 ++++++++++++++++++
 5 files changed, 228 insertions(+), 10 deletions(-)
 create mode 100644 setup/src/Magento/Setup/Test/Unit/Console/CompilerPreparationTest.php

diff --git a/lib/internal/Magento/Framework/Console/Cli.php b/lib/internal/Magento/Framework/Console/Cli.php
index 8fb5e79d672..56b792bf85b 100644
--- a/lib/internal/Magento/Framework/Console/Cli.php
+++ b/lib/internal/Magento/Framework/Console/Cli.php
@@ -6,9 +6,11 @@
 
 namespace Magento\Framework\Console;
 
+use Magento\Framework\Filesystem\Driver\File;
 use Symfony\Component\Console\Application as SymfonyApplication;
 use Magento\Framework\App\Bootstrap;
 use Magento\Framework\Shell\ComplexParameter;
+use Symfony\Component\Console\Input\ArgvInput;
 
 /**
  * Magento2 CLI Application. This is the hood for all command line tools supported by Magento.
@@ -37,7 +39,8 @@ class Cli extends SymfonyApplication
          * Temporary workaround until the compiler is able to clear the generation directory. (MAGETWO-44493)
          */
         if (class_exists('Magento\Setup\Console\CompilerPreparation')) {
-            (new \Magento\Setup\Console\CompilerPreparation($this->serviceManager))->handleCompilerEnvironment();
+            (new \Magento\Setup\Console\CompilerPreparation($this->serviceManager, new ArgvInput(), new File()))
+                ->handleCompilerEnvironment();
         }
 
         parent::__construct($name, $version);
diff --git a/setup/src/Magento/Setup/Console/CompilerPreparation.php b/setup/src/Magento/Setup/Console/CompilerPreparation.php
index 457b4f23b37..23e796bfcec 100644
--- a/setup/src/Magento/Setup/Console/CompilerPreparation.php
+++ b/setup/src/Magento/Setup/Console/CompilerPreparation.php
@@ -20,12 +20,26 @@ class CompilerPreparation
     /** @var \Zend\ServiceManager\ServiceManager */
     private $serviceManager;
 
+    /** @var ArgvInput */
+    private $input;
+
+    /** @var File */
+    private $filesystemDriver;
+
     /**
      * @param \Zend\ServiceManager\ServiceManager $serviceManager
+     * @param ArgvInput $input
+     * @param File $filesystemDriver
      */
-    public function __construct(\Zend\ServiceManager\ServiceManager $serviceManager)
+    public function __construct(
+        \Zend\ServiceManager\ServiceManager $serviceManager,
+        \Symfony\Component\Console\Input\ArgvInput $input,
+        \Magento\Framework\Filesystem\Driver\File $filesystemDriver
+    )
     {
-        $this->serviceManager = $serviceManager;
+        $this->serviceManager   = $serviceManager;
+        $this->input            = $input;
+        $this->filesystemDriver = $filesystemDriver;
     }
 
     /**
@@ -35,17 +49,16 @@ class CompilerPreparation
      */
     public function handleCompilerEnvironment()
     {
-        $input = new ArgvInput();
         $compilationCommands = [DiCompileCommand::NAME, DiCompileMultiTenantCommand::NAME];
-        $cmdName = $input->getFirstArgument();
-        $isHelpOption = $input->hasParameterOption('--help') || $input->hasParameterOption('-h');
+        $cmdName = $this->input->getFirstArgument();
+        $isHelpOption = $this->input->hasParameterOption('--help') || $this->input->hasParameterOption('-h');
 
         if (!in_array($cmdName, $compilationCommands) || $isHelpOption) {
             return;
         }
 
         $generationDir = ($cmdName === DiCompileMultiTenantCommand::NAME)
-            ? $input->getParameterOption(DiCompileMultiTenantCommand::INPUT_KEY_GENERATION)
+            ? $this->input->getParameterOption(DiCompileMultiTenantCommand::INPUT_KEY_GENERATION)
             : null;
 
         if (!$generationDir) {
@@ -56,9 +69,8 @@ class CompilerPreparation
             $generationDir = (new DirectoryList(BP, $mageDirs))->getPath(DirectoryList::GENERATION);
         }
 
-        $filesystemDriver = new File();
-        if ($filesystemDriver->isExists($generationDir)) {
-            $filesystemDriver->deleteDirectory($generationDir);
+        if ($this->filesystemDriver->isExists($generationDir)) {
+            $this->filesystemDriver->deleteDirectory($generationDir);
         }
     }
 }
diff --git a/setup/src/Magento/Setup/Test/Unit/Console/Command/DiCompileCommandTest.php b/setup/src/Magento/Setup/Test/Unit/Console/Command/DiCompileCommandTest.php
index 4230d3a67d8..303e4a80142 100644
--- a/setup/src/Magento/Setup/Test/Unit/Console/Command/DiCompileCommandTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Console/Command/DiCompileCommandTest.php
@@ -149,5 +149,6 @@ class DiCompileCommandTest extends \PHPUnit_Framework_TestCase
             'Generated code and dependency injection configuration successfully.',
             explode(PHP_EOL, $tester->getDisplay())
         );
+        $this->assertSame(DiCompileCommand::NAME, $this->command->getName());
     }
 }
diff --git a/setup/src/Magento/Setup/Test/Unit/Console/Command/DiCompileMultiTenantCommandTest.php b/setup/src/Magento/Setup/Test/Unit/Console/Command/DiCompileMultiTenantCommandTest.php
index 45edf5578c8..c8581808c66 100644
--- a/setup/src/Magento/Setup/Test/Unit/Console/Command/DiCompileMultiTenantCommandTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Console/Command/DiCompileMultiTenantCommandTest.php
@@ -6,11 +6,22 @@
 namespace Magento\Setup\Test\Unit\Console\Command;
 
 use Magento\Framework\Component\ComponentRegistrar;
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 use Magento\Setup\Console\Command\DiCompileMultiTenantCommand;
 use Symfony\Component\Console\Tester\CommandTester;
 
 class DiCompileMultiTenantCommandTest extends \PHPUnit_Framework_TestCase
 {
+    /** @var \Magento\Setup\Console\Command\DiCompileMultiTenantCommand */
+    private $model;
+
+    public function setUp()
+    {
+        $this->model = (new ObjectManager($this))->getObject(
+            '\Magento\Setup\Console\Command\DiCompileMultiTenantCommand'
+        );
+    }
+
     /**
      * @dataProvider validateDataProvider
      * @param array $option
@@ -83,4 +94,14 @@ class DiCompileMultiTenantCommandTest extends \PHPUnit_Framework_TestCase
             ],
         ];
     }
+
+    public function testConfigure()
+    {
+        $methodUnderTest = new \ReflectionMethod($this->model, 'configure');
+        $methodUnderTest->setAccessible(true);
+        $methodUnderTest->invoke($this->model);
+        $this->assertSame(DiCompileMultiTenantCommand::NAME, $this->model->getName());
+        $this->assertNotEmpty($this->model->getDescription());
+        $this->assertCount(6, $this->model->getDefinition()->getOptions());
+    }
 }
diff --git a/setup/src/Magento/Setup/Test/Unit/Console/CompilerPreparationTest.php b/setup/src/Magento/Setup/Test/Unit/Console/CompilerPreparationTest.php
new file mode 100644
index 00000000000..cc46c653e8b
--- /dev/null
+++ b/setup/src/Magento/Setup/Test/Unit/Console/CompilerPreparationTest.php
@@ -0,0 +1,181 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Setup\Test\Unit\Console;
+
+
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+use Magento\Setup\Console\Command\DiCompileCommand;
+use Magento\Setup\Console\Command\DiCompileMultiTenantCommand;
+use Magento\Setup\Mvc\Bootstrap\InitParamListener;
+use Symfony\Component\Console\Input\ArgvInput;
+
+class CompilerPreparationTest extends \PHPUnit_Framework_TestCase
+{
+    /** @var \Magento\Setup\Console\CompilerPreparation */
+    private $model;
+
+    /** @var \Zend\ServiceManager\ServiceManager | \PHPUnit_Framework_MockObject_MockObject */
+    private $serviceManagerMock;
+
+    /** @var \Symfony\Component\Console\Input\ArgvInput | \PHPUnit_Framework_MockObject_MockObject */
+    private $inputMock;
+
+    /** @var \Magento\Framework\Filesystem\Driver\File | \PHPUnit_Framework_MockObject_MockObject */
+    private $filesystemDriverMock;
+
+    public function setUp()
+    {
+        $this->serviceManagerMock = $this->getMockBuilder('\Zend\ServiceManager\ServiceManager')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->inputMock = $this->getMockBuilder('\Symfony\Component\Console\Input\ArgvInput')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->filesystemDriverMock = $this->getMockBuilder('\Magento\Framework\Filesystem\Driver\File')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->model = (new ObjectManager($this))->getObject(
+            '\Magento\Setup\Console\CompilerPreparation',
+            [
+                'serviceManager' => $this->serviceManagerMock,
+                'input' => $this->inputMock,
+                'filesystemDriver' => $this->filesystemDriverMock
+            ]
+        );
+    }
+
+    /**
+     * @dataProvider commandNameDataProvider
+     * @param $commandName
+     * @param $isCompileCommand
+     * @param $isHelpOption
+     * @param bool|null $dirExists
+     */
+    public function testClearGenerationDirWhenNeeded($commandName, $isCompileCommand, $isHelpOption, $dirExists = false)
+    {
+        $this->inputMock->expects($this->once())->method('getFirstArgument')->willReturn($commandName);
+        $this->inputMock->expects($this->atLeastOnce())
+            ->method('hasParameterOption')
+            ->with(
+                $this->logicalOr('--help', '-h')
+            )->willReturn($isHelpOption);
+        if ($isCompileCommand && !$isHelpOption) {
+            $this->filesystemDriverMock->expects($this->once())
+                ->method('isExists')
+                ->willReturn($dirExists);
+            $this->filesystemDriverMock->expects($this->exactly((int)$dirExists))->method('deleteDirectory');
+        } else {
+            $this->filesystemDriverMock->expects($this->never())->method('isExists');
+            $this->filesystemDriverMock->expects($this->never())->method('deleteDirectory');
+        }
+        $this->model->handleCompilerEnvironment();
+    }
+
+    public function commandNameDataProvider()
+    {
+        return [
+            'ST compiler, directory exists' => [
+                'commandName' => DiCompileCommand::NAME,
+                'isCompileCommand' => true,
+                'isHelpOption' => false,
+                'dirExists' => true
+            ],
+            'ST compiler, directory does not exist' => [
+                'commandName' => DiCompileCommand::NAME,
+                'isCompileCommand' => true,
+                'isHelpOption' => false,
+                'dirExists' => false
+            ],
+            'ST compiler, help option' => [
+                'commandName' => DiCompileCommand::NAME,
+                'isCompileCommand' => true,
+                'isHelpOption' => true,
+                'dirExists' => false
+            ],
+            'MT compiler, directory exists' => [
+                'commandName' => DiCompileMultiTenantCommand::NAME,
+                'isCompileCommand' => true,
+                'isHelpOption' => false,
+                'dirExists' => true
+            ],
+            'MT compiler, directory does not exist' => [
+                'commandName' => DiCompileMultiTenantCommand::NAME,
+                'isCompileCommand' => true,
+                'isHelpOption' => false,
+                'dirExists' => false
+            ],
+            'MT compiler, help option' => [
+                'commandName' => DiCompileMultiTenantCommand::NAME,
+                'isCompileCommand' => true,
+                'isHelpOption' => true,
+                'dirExists' => true
+            ],
+            'Other command' => [
+                'commandName' => 'not:a:compiler',
+                'isCompileCommand' => false,
+                'isHelpOption' => false,
+            ]
+        ];
+    }
+
+    public function testGenerationDirectoryFromInitParams()
+    {
+        $customGenerationDirectory = '/custom/generated/code/directory';
+        $mageInitParams = ['MAGE_DIRS' => ['generation' => ['path' => $customGenerationDirectory]]];
+
+        $this->inputMock->expects($this->once())
+            ->method('getFirstArgument')
+            ->willReturn(DiCompileMultiTenantCommand::NAME);
+
+        // Filesystem mock
+        $this->filesystemDriverMock->expects($this->once())->method('isExists')->willReturn(true);
+        $this->filesystemDriverMock->expects($this->once())
+            ->method('deleteDirectory')
+            ->with($customGenerationDirectory);
+
+        $this->serviceManagerMock->expects($this->once())
+            ->method('get')
+            ->with(InitParamListener::BOOTSTRAP_PARAM)
+            ->willReturn($mageInitParams);
+        $this->model->handleCompilerEnvironment();
+    }
+
+    /**
+     * @dataProvider compilerCommandDataProvider
+     */
+    public function testGenerationDirectoryFromCliOption($commandName)
+    {
+        $customGenerationDirectory = '/custom/generated/code/directory';
+        $useCliOption = $commandName === DiCompileMultiTenantCommand::NAME;
+
+        $this->inputMock->expects($this->once())
+            ->method('getFirstArgument')
+            ->willReturn($commandName);
+        $this->inputMock->expects($this->exactly((int)$useCliOption))
+            ->method('getParameterOption')
+            ->with(DiCompileMultiTenantCommand::INPUT_KEY_GENERATION)
+            ->willReturn($customGenerationDirectory);
+        // Filesystem mock
+        $directoryArgConstraint = $useCliOption
+            ? $this->equalTo($customGenerationDirectory)
+            : $this->logicalNot($this->equalTo($customGenerationDirectory));
+        $this->filesystemDriverMock->expects($this->once())->method('isExists')->willReturn(true);
+        $this->filesystemDriverMock->expects($this->once())
+            ->method('deleteDirectory')
+            ->with($directoryArgConstraint);
+
+        $this->model->handleCompilerEnvironment();
+    }
+
+    public function compilerCommandDataProvider()
+    {
+        return [
+            [DiCompileCommand::NAME],
+            [DiCompileMultiTenantCommand::NAME]
+        ];
+    }
+}
-- 
GitLab


From 7d565f2bf551b0cda09aa042ff8c2034adbd9b58 Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Fri, 23 Oct 2015 10:22:23 +0300
Subject: [PATCH 219/370] MAGETWO-44434: Some untranslatable fields in Magento
 backend

---
 app/code/Magento/Backend/i18n/en_US.csv                       | 2 +-
 app/code/Magento/Catalog/i18n/en_US.csv                       | 1 +
 app/code/Magento/Developer/i18n/en_US.csv                     | 4 ++++
 .../Unit/Model/Entity/Attribute/Frontend/DatetimeTest.php     | 2 +-
 4 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Backend/i18n/en_US.csv b/app/code/Magento/Backend/i18n/en_US.csv
index 98b2dd19f78..8552a7208cd 100644
--- a/app/code/Magento/Backend/i18n/en_US.csv
+++ b/app/code/Magento/Backend/i18n/en_US.csv
@@ -611,4 +611,4 @@ Options,Options
 "Top Search Terms","Top Search Terms"
 "Your Password","Your Password"
 "You saved the account.","You saved the account."
-
+"Current User Identity Verification","Current User Identity Verification"
diff --git a/app/code/Magento/Catalog/i18n/en_US.csv b/app/code/Magento/Catalog/i18n/en_US.csv
index 402e5915ce1..9dd3eddc752 100644
--- a/app/code/Magento/Catalog/i18n/en_US.csv
+++ b/app/code/Magento/Catalog/i18n/en_US.csv
@@ -650,3 +650,4 @@ Overview,Overview
 "Active To","Active To"
 "Page Layout","Page Layout"
 "Custom Layout Update","Custom Layout Update"
+"Name","Name"
diff --git a/app/code/Magento/Developer/i18n/en_US.csv b/app/code/Magento/Developer/i18n/en_US.csv
index 3a1804555a6..1cf1f795360 100644
--- a/app/code/Magento/Developer/i18n/en_US.csv
+++ b/app/code/Magento/Developer/i18n/en_US.csv
@@ -34,3 +34,7 @@
 "Sign Static Files","Sign Static Files"
 "Grid Settings","Grid Settings"
 "Asynchronous indexing","Asynchronous indexing"
+"Client side less compilation","Client side less compilation"
+"Server side less compilation","Server side less compilation"
+"Disable","Disable"
+"Enable","Enable"
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Frontend/DatetimeTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Frontend/DatetimeTest.php
index 4bb5a0fcabe..b8b44708697 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Frontend/DatetimeTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Frontend/DatetimeTest.php
@@ -71,7 +71,7 @@ class DatetimeTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @param mixed $labelText
-     * @param mixed $attributeCode
+     * @param string $attributeCode
      * @param string $expectedResult
      * @dataProvider getLabelDataProvider
      */
-- 
GitLab


From 6154e186e0faa0a2c382c61d8e3b764971bf4329 Mon Sep 17 00:00:00 2001
From: Ievgen Sentiabov <isentiabov@ebay.com>
Date: Fri, 23 Oct 2015 10:38:08 +0300
Subject: [PATCH 220/370] MAGETWO-44113: Creating Ratings in the Frontend (not
 available after Magento installation)

 - Changed constructor mocks
 - Refactored code related to code review
---
 .../Test/Unit/Block/Product/ReviewTest.php    | 61 ++++++++-----------
 1 file changed, 26 insertions(+), 35 deletions(-)

diff --git a/app/code/Magento/Review/Test/Unit/Block/Product/ReviewTest.php b/app/code/Magento/Review/Test/Unit/Block/Product/ReviewTest.php
index 8e0b4b31e97..0bc6dd49473 100644
--- a/app/code/Magento/Review/Test/Unit/Block/Product/ReviewTest.php
+++ b/app/code/Magento/Review/Test/Unit/Block/Product/ReviewTest.php
@@ -31,32 +31,32 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
     /**
      * @var \Magento\Review\Model\ResourceModel\Review\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
-    private $collectionMock;
+    private $collection;
 
     /**
      * @var \Magento\Review\Model\ResourceModel\Review\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
-    private $collectionFactoryMock;
+    private $collectionFactory;
 
     /**
      * @var \Magento\Framework\Registry|\PHPUnit_Framework_MockObject_MockObject
      */
-    private $registryMock;
+    private $registry;
 
     /**
      * @var \Magento\Catalog\Model\Product|\PHPUnit_Framework_MockObject_MockObject
      */
-    private $productMock;
+    private $product;
 
     /**
-     * @var \Magento\Framework\View\Element\Template\Context|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Store\Model\StoreManager|\PHPUnit_Framework_MockObject_MockObject
      */
-    private $contextMock;
+    private $storeManager;
 
     /**
-     * @va rMagento\Store\Model\Store|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Store\Model\Store|\PHPUnit_Framework_MockObject_MockObject
      */
-    private $storeMock;
+    private $store;
 
     protected function setUp()
     {
@@ -66,9 +66,9 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
 
         $helper = new ObjectManager($this);
         $this->block = $helper->getObject(ReviewBlock::class, [
-            'context' => $this->contextMock,
-            'registry' => $this->registryMock,
-            'collectionFactory' => $this->collectionFactoryMock,
+            'storeManager' => $this->storeManager,
+            'registry' => $this->registry,
+            'collectionFactory' => $this->collectionFactory,
         ]);
     }
 
@@ -85,32 +85,32 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
      */
     private function initCollectionMocks()
     {
-        $this->collectionMock = $this->getMockBuilder(Collection::class)
+        $this->collection = $this->getMockBuilder(Collection::class)
             ->disableOriginalConstructor()
             ->setMethods(['addStoreFilter', 'addStatusFilter', 'addEntityFilter', 'getSize', '__wakeup'])
             ->getMock();
 
-        $this->collectionMock->expects(static::any())
+        $this->collection->expects(static::any())
             ->method('addStoreFilter')
             ->willReturnSelf();
 
-        $this->collectionMock->expects(static::any())
+        $this->collection->expects(static::any())
             ->method('addStatusFilter')
             ->with(Review::STATUS_APPROVED)
             ->willReturnSelf();
 
-        $this->collectionMock->expects(static::any())
+        $this->collection->expects(static::any())
             ->method('addEntityFilter')
             ->willReturnSelf();
 
-        $this->collectionFactoryMock = $this->getMockBuilder(CollectionFactory::class)
+        $this->collectionFactory = $this->getMockBuilder(CollectionFactory::class)
             ->disableOriginalConstructor()
             ->setMethods(['create', '__wakeup'])
             ->getMock();
 
-        $this->collectionFactoryMock->expects(static::once())
+        $this->collectionFactory->expects(static::once())
             ->method('create')
-            ->willReturn($this->collectionMock);
+            ->willReturn($this->collection);
     }
 
     /**
@@ -119,15 +119,15 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
     private function initRegistryMock()
     {
         $this->initProductMock();
-        $this->registryMock = $this->getMockBuilder(Registry::class)
+        $this->registry = $this->getMockBuilder(Registry::class)
             ->disableOriginalConstructor()
             ->setMethods(['registry'])
             ->getMock();
 
-        $this->registryMock->expects(static::once())
+        $this->registry->expects(static::once())
             ->method('registry')
             ->with('product')
-            ->willReturn($this->productMock);
+            ->willReturn($this->product);
     }
 
     /**
@@ -135,7 +135,7 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
      */
     private function initProductMock()
     {
-        $this->productMock = $this->getMockBuilder(Product::class)
+        $this->product = $this->getMockBuilder(Product::class)
             ->disableOriginalConstructor()
             ->setMethods(['getId'])
             ->getMock();
@@ -146,27 +146,18 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
      */
     private function initContextMock()
     {
-        $this->storeMock = $this->getMockBuilder(Store::class)
+        $this->store = $this->getMockBuilder(Store::class)
             ->disableOriginalConstructor()
             ->setMethods(['getId', '__wakeup'])
             ->getMock();
 
-        $storeManager = $this->getMockBuilder(StoreManager::class)
+        $this->storeManager = $this->getMockBuilder(StoreManager::class)
             ->disableOriginalConstructor()
             ->setMethods(['getStore', '__wakeup'])
             ->getMock();
 
-        $storeManager->expects(static::once())
+        $this->storeManager->expects(static::any())
             ->method('getStore')
-            ->willReturn($this->storeMock);
-
-        $this->contextMock = $this->getMockBuilder(Context::class)
-            ->disableOriginalConstructor()
-            ->setMethods(['getStoreManager'])
-            ->getMock();
-
-        $this->contextMock->expects(static::once())
-            ->method('getStoreManager')
-            ->willReturn($storeManager);
+            ->willReturn($this->store);
     }
 }
-- 
GitLab


From 67c86ecf7f50a20f025b7602b0dc1fa6e7eb058a Mon Sep 17 00:00:00 2001
From: Dmytro Aponasenko <daponasenko@ebay.com>
Date: Fri, 23 Oct 2015 11:10:16 +0300
Subject: [PATCH 221/370] MTA-2723: Functional test maintenance. Part 2

---
 .../tests/app/Magento/Backend/Test/Block/Widget/Grid.php  | 1 -
 .../Customer/Test/Block/Adminhtml/CustomerGrid.php        | 4 ++--
 .../Sales/Test/Block/Adminhtml/CreditMemo/Grid.php        | 8 ++++----
 .../Magento/Sales/Test/Block/Adminhtml/Invoice/Grid.php   | 8 ++++----
 .../Magento/Sales/Test/Handler/OrderInjectable/Webapi.php | 1 +
 .../Shipping/Test/Block/Adminhtml/Shipment/Grid.php       | 8 ++++----
 .../Tax/Test/TestCase/ApplyTaxBasedOnVatIdTest.xml        | 2 +-
 .../app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php      | 3 ++-
 8 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php
index dcd3b282aa7..5952f4690c1 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php
@@ -302,7 +302,6 @@ abstract class Grid extends Block
     {
         $this->waitLoader();
         $this->_rootElement->find($this->resetButton)->click();
-        $this->waitForElementVisible($this->loader);
         $this->waitLoader();
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Adminhtml/CustomerGrid.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Adminhtml/CustomerGrid.php
index c82af6b00ed..93b3d1b7c16 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Adminhtml/CustomerGrid.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Adminhtml/CustomerGrid.php
@@ -39,10 +39,10 @@ class CustomerGrid extends DataGrid
             'input' => 'select',
         ],
         'entity_id_from' => [
-            'selector' => '[name="filters[entity_id][from]"]',
+            'selector' => '[name="entity_id[from]"]',
         ],
         'entity_id_to' => [
-            'selector' => '[name="filters[entity_id][to]"]',
+            'selector' => '[name="entity_id[to]"]',
         ],
     ];
 }
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/CreditMemo/Grid.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/CreditMemo/Grid.php
index 0dad1ed84c3..9138b869cad 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/CreditMemo/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/CreditMemo/Grid.php
@@ -25,16 +25,16 @@ class Grid extends \Magento\Ui\Test\Block\Adminhtml\DataGrid
      */
     protected $filters = [
         'id' => [
-            'selector' => 'input[name="filters[increment_id]"]',
+            'selector' => 'input[name="increment_id"]',
         ],
         'order_id' => [
-            'selector' => 'input[name="filters[order_increment_id]"]',
+            'selector' => 'input[name="order_increment_id"]',
         ],
         'grand_total_from' => [
-            'selector' => 'input[name="filters[base_grand_total][from]"]',
+            'selector' => 'input[name="base_grand_total[from]"]',
         ],
         'grand_total_to' => [
-            'selector' => 'input[name="filters[base_grand_total][to]"]',
+            'selector' => 'input[name="base_grand_total[to]"]',
         ],
     ];
 }
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Invoice/Grid.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Invoice/Grid.php
index 7c276134079..2a38e9d0d34 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Invoice/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Invoice/Grid.php
@@ -18,16 +18,16 @@ class Grid extends \Magento\Ui\Test\Block\Adminhtml\DataGrid
      */
     protected $filters = [
         'id' => [
-            'selector' => 'input[name="filters[increment_id]"]',
+            'selector' => 'input[name="increment_id"]',
         ],
         'order_id' => [
-            'selector' => 'input[name="filters[order_increment_id]"]',
+            'selector' => 'input[name="order_increment_id"]',
         ],
         'grand_total_from' => [
-            'selector' => 'input[name="filters[grand_total][from]"]',
+            'selector' => 'input[name="grand_total[from]"]',
         ],
         'grand_total_to' => [
-            'selector' => 'input[name="filters[grand_total][to]"]',
+            'selector' => 'input[name="grand_total[to]"]',
         ],
     ];
 
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Handler/OrderInjectable/Webapi.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Handler/OrderInjectable/Webapi.php
index a1e89784737..bdfbc3b5d15 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Handler/OrderInjectable/Webapi.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Handler/OrderInjectable/Webapi.php
@@ -31,6 +31,7 @@ class Webapi extends AbstractWebapi implements OrderInjectableInterface
         ],
         'country_id' => [
             'United States' => 'US',
+            'United Kingdom' => 'GB',
         ],
     ];
 
diff --git a/dev/tests/functional/tests/app/Magento/Shipping/Test/Block/Adminhtml/Shipment/Grid.php b/dev/tests/functional/tests/app/Magento/Shipping/Test/Block/Adminhtml/Shipment/Grid.php
index b7744342377..d094c186e31 100644
--- a/dev/tests/functional/tests/app/Magento/Shipping/Test/Block/Adminhtml/Shipment/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/Shipping/Test/Block/Adminhtml/Shipment/Grid.php
@@ -27,16 +27,16 @@ class Grid extends GridInterface
      */
     protected $filters = [
         'id' => [
-            'selector' => 'input[name="filters[increment_id]"]',
+            'selector' => 'input[name="increment_id"]',
         ],
         'order_id' => [
-            'selector' => 'input[name="filters[order_increment_id]"]',
+            'selector' => 'input[name="order_increment_id"]',
         ],
         'total_qty_from' => [
-            'selector' => 'input[name="filters[total_qty][from]"]',
+            'selector' => 'input[name="total_qty[from]"',
         ],
         'total_qty_to' => [
-            'selector' => 'input[name="filters[total_qty][to]"]',
+            'selector' => 'input[name="total_qty][to]"',
         ],
     ];
 }
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/ApplyTaxBasedOnVatIdTest.xml b/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/ApplyTaxBasedOnVatIdTest.xml
index c54201720c8..52dea03715a 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/ApplyTaxBasedOnVatIdTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/ApplyTaxBasedOnVatIdTest.xml
@@ -19,7 +19,7 @@
             <data name="customerGroup" xsi:type="string">valid_intra_union_group</data>
             <data name="cart/data/subtotal" xsi:type="string">10</data>
             <data name="cart/data/tax_amount" xsi:type="string">2</data>
-            <data name="cart/data/grand_total" xsi:type="string">12</data>
+            <data name="cart/data/grand_total" xsi:type="string">17</data>
             <data name="prices" xsi:type="array">
                 <item name="grandTotal" xsi:type="string">17</item>
             </data>
diff --git a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
index 05c53bc6296..13545de8f49 100644
--- a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
+++ b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
@@ -307,8 +307,9 @@ class DataGrid extends Grid
     /**
      * Sort grid by field.
      *
-     * @param $field
+     * @param string $field
      * @param string $sort
+     * @return void
      */
     public function sortGridByField($field, $sort = "desc")
     {
-- 
GitLab


From 341a3e39b25accbc99e8a57771c0eebab6752a77 Mon Sep 17 00:00:00 2001
From: Arkadii Chyzhov <achyzhov@ebay.com>
Date: Fri, 23 Oct 2015 11:25:36 +0300
Subject: [PATCH 222/370] MAGETWO-44049: [GITHUB] data-bind i18n expressions
 with JavaScript function calls are used in the core but untranslatable due to
 regular expression and architectural limitations #1905

- replaced data-bind "i18n" with "text" for variables, method invokes, expressions
- removed $t()  for variables and expressions
---
 .../Checkout/view/frontend/web/template/registration.html      | 2 +-
 .../Magento/Checkout/view/frontend/web/template/shipping.html  | 2 +-
 .../Magento/Cms/view/frontend/templates/default/home.phtml     | 3 +--
 3 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/app/code/Magento/Checkout/view/frontend/web/template/registration.html b/app/code/Magento/Checkout/view/frontend/web/template/registration.html
index 1cb610134a9..53c1248a210 100644
--- a/app/code/Magento/Checkout/view/frontend/web/template/registration.html
+++ b/app/code/Magento/Checkout/view/frontend/web/template/registration.html
@@ -13,6 +13,6 @@
     </form>
     <!-- /ko -->
     <!-- ko if: accountCreated -->
-    <p data-bind="i18n: $t('A letter with further instructions will be sent to your email.')"></p>
+    <p data-bind="i18n: 'A letter with further instructions will be sent to your email.'"></p>
     <!-- /ko -->
 </div>
diff --git a/app/code/Magento/Checkout/view/frontend/web/template/shipping.html b/app/code/Magento/Checkout/view/frontend/web/template/shipping.html
index 926c269ef07..91960304668 100644
--- a/app/code/Magento/Checkout/view/frontend/web/template/shipping.html
+++ b/app/code/Magento/Checkout/view/frontend/web/template/shipping.html
@@ -122,7 +122,7 @@
                         <tr class="row row-error">
                             <td class="col col-error" colspan="4">
                                 <div class="message error">
-                                    <div data-bind="i18n: method.error_message"></div>
+                                    <div data-bind="text: method.error_message"></div>
                                 </div>
                                 <span class="no-display">
                                     <input name="shipping_method" type="radio" data-bind="attr: {'value' : method.method_code, 'id': 's_method_' + method.method_code}"/>
diff --git a/app/code/Magento/Cms/view/frontend/templates/default/home.phtml b/app/code/Magento/Cms/view/frontend/templates/default/home.phtml
index 3ef8d5a1077..4fae6ce0900 100644
--- a/app/code/Magento/Cms/view/frontend/templates/default/home.phtml
+++ b/app/code/Magento/Cms/view/frontend/templates/default/home.phtml
@@ -4,5 +4,4 @@
  * See COPYING.txt for license details.
  */
 ?>
-There was no Home CMS page configured or found.
-git
\ No newline at end of file
+There was no Home CMS page configured or found.
\ No newline at end of file
-- 
GitLab


From 164bb996b919603fdcce54d2ccb4121d9dcc85e8 Mon Sep 17 00:00:00 2001
From: Anton Ohorodnyk <aohorodnyk@ebay.com>
Date: Fri, 23 Oct 2015 11:35:04 +0300
Subject: [PATCH 223/370] MAGETWO-44106: New created category should be anchor
 by default

 - Fixed integration tests
---
 .../testsuite/Magento/Catalog/Controller/CategoryTest.php   | 2 +-
 .../testsuite/Magento/Catalog/Model/CategoryTreeTest.php    | 2 +-
 .../Magento/Catalog/Model/Indexer/Category/ProductTest.php  | 6 +++---
 .../Magento/Catalog/Model/Layer/Filter/CategoryTest.php     | 2 +-
 4 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Controller/CategoryTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Controller/CategoryTest.php
index 15afc0d3e63..b3de66e5e90 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Controller/CategoryTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Controller/CategoryTest.php
@@ -25,7 +25,7 @@ class CategoryTest extends \Magento\TestFramework\TestCase\AbstractController
         return [
             'category without children' => [
                 'categoryId' => 5,
-                ['catalog_category_view_type_default', 'catalog_category_view_type_default_without_children'],
+                ['catalog_category_view_type_layered', 'catalog_category_view_type_layered_without_children'],
                 [
                     '%acategorypath-category-1-category-1-1-category-1-1-1%a',
                     '%acategory-category-1-1-1%a',
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/CategoryTreeTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/CategoryTreeTest.php
index 47a06f0b791..3b12d91a0fd 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/CategoryTreeTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/CategoryTreeTest.php
@@ -161,7 +161,7 @@ class CategoryTreeTest extends \PHPUnit_Framework_TestCase
     public function testGetAnchorsAbove()
     {
         $this->_model->load(4);
-        $this->assertEmpty($this->_model->getAnchorsAbove());
+        $this->assertContains(3, $this->_model->getAnchorsAbove());
         $this->_model->load(5);
         $this->assertContains(4, $this->_model->getAnchorsAbove());
     }
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Category/ProductTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Category/ProductTest.php
index ac6c6a79899..b7f3e22a82a 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Category/ProductTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Category/ProductTest.php
@@ -73,7 +73,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
                 $this->assertTrue((bool)$this->productResource->canBeShowInCategory($product, $categoryId));
             }
 
-            $this->assertFalse(
+            $this->assertTrue(
                 (bool)$this->productResource->canBeShowInCategory($product, $categoryThird->getParentId())
             );
         }
@@ -187,12 +187,12 @@ class ProductTest extends \PHPUnit_Framework_TestCase
         $productThird->setCategoryIds([$categorySixth->getId()]);
         $productThird->save();
 
-        $categories = [self::DEFAULT_ROOT_CATEGORY, $categorySixth->getId()];
+        $categories = [self::DEFAULT_ROOT_CATEGORY, $categorySixth->getId(), $categoryFifth->getId()];
         foreach ($categories as $categoryId) {
             $this->assertTrue((bool)$this->productResource->canBeShowInCategory($productThird, $categoryId));
         }
 
-        $categories = [$categoryFifth->getId(), $categorySecond->getId()];
+        $categories = [$categorySecond->getId()];
         foreach ($categories as $categoryId) {
             $this->assertFalse((bool)$this->productResource->canBeShowInCategory($productThird, $categoryId));
         }
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/CategoryTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/CategoryTest.php
index 40f61ec7a56..e9bd1c492e0 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/CategoryTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/CategoryTest.php
@@ -109,6 +109,6 @@ class CategoryTest extends \PHPUnit_Framework_TestCase
         $this->assertSame($modelApplied, $item->getFilter());
         $this->assertEquals('Category 1.1', $item->getLabel());
         $this->assertEquals(4, $item->getValue());
-        $this->assertEquals(1, $item->getCount());
+        $this->assertEquals(2, $item->getCount());
     }
 }
-- 
GitLab


From 02eca9b258199c91f71dfcd6dada61214a708dc7 Mon Sep 17 00:00:00 2001
From: Dmitry Kologrivov <dmitry_kologrivov@epam.com>
Date: Fri, 23 Oct 2015 11:42:20 +0300
Subject: [PATCH 224/370] PV-5: Change validating schema

---
 lib/internal/Magento/Framework/Config/Dom.php | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/lib/internal/Magento/Framework/Config/Dom.php b/lib/internal/Magento/Framework/Config/Dom.php
index 4f512fd7820..1576d3e5025 100644
--- a/lib/internal/Magento/Framework/Config/Dom.php
+++ b/lib/internal/Magento/Framework/Config/Dom.php
@@ -274,11 +274,7 @@ class Dom
         $schema = self::$urnResolver->getRealPath($schema);
         libxml_use_internal_errors(true);
         try {
-            if (file_exists($schema)) {
-                $result = $dom->schemaValidate($schema);
-            } else {
-                $result = $dom->schemaValidateSource($schema);
-            }
+            $result = $dom->schemaValidate($schema);
             $errors = [];
             if (!$result) {
                 $validationErrors = libxml_get_errors();
-- 
GitLab


From b0454bdf173403b3493d5feeb003880cd31422ca Mon Sep 17 00:00:00 2001
From: Anton Ohorodnyk <aohorodnyk@ebay.com>
Date: Fri, 23 Oct 2015 12:18:55 +0300
Subject: [PATCH 225/370] MAGETWO-44111: Setting "Apply Layered Navigation if
 Search Results are Less Than" doesn't work

---
 app/code/Magento/CatalogSearch/etc/adminhtml/system.xml | 5 -----
 app/code/Magento/CatalogSearch/etc/config.xml           | 1 -
 app/code/Magento/Search/etc/adminhtml/system.xml        | 5 -----
 3 files changed, 11 deletions(-)

diff --git a/app/code/Magento/CatalogSearch/etc/adminhtml/system.xml b/app/code/Magento/CatalogSearch/etc/adminhtml/system.xml
index 64c40be45f2..cef7804d7c3 100644
--- a/app/code/Magento/CatalogSearch/etc/adminhtml/system.xml
+++ b/app/code/Magento/CatalogSearch/etc/adminhtml/system.xml
@@ -27,11 +27,6 @@
                     <label>Maximum Query Length</label>
                     <validate>validate-digits</validate>
                 </field>
-                <field id="use_layered_navigation_count" translate="label comment" type="text" sortOrder="25" showInDefault="1" showInWebsite="1" showInStore="1">
-                    <label>Apply Layered Navigation if Search Results are Less Than</label>
-                    <validate>validate-digits</validate>
-                    <comment>Enter "0" to enable layered navigation for any number of results.</comment>
-                </field>
             </group>
         </section>
     </system>
diff --git a/app/code/Magento/CatalogSearch/etc/config.xml b/app/code/Magento/CatalogSearch/etc/config.xml
index 8ff9c9f527d..c4183bb5424 100644
--- a/app/code/Magento/CatalogSearch/etc/config.xml
+++ b/app/code/Magento/CatalogSearch/etc/config.xml
@@ -15,7 +15,6 @@
                 <engine>mysql</engine>
                 <min_query_length>1</min_query_length>
                 <max_query_length>128</max_query_length>
-                <use_layered_navigation_count>0</use_layered_navigation_count>
             </search>
         </catalog>
     </default>
diff --git a/app/code/Magento/Search/etc/adminhtml/system.xml b/app/code/Magento/Search/etc/adminhtml/system.xml
index 90d9943dd9f..d32c75cb1a3 100644
--- a/app/code/Magento/Search/etc/adminhtml/system.xml
+++ b/app/code/Magento/Search/etc/adminhtml/system.xml
@@ -18,11 +18,6 @@
                         <field id="engine">mysql</field>
                     </depends>
                 </field>
-                <field id="use_layered_navigation_count">
-                    <depends>
-                        <field id="engine">mysql</field>
-                    </depends>
-                </field>
             </group>
         </section>
     </system>
-- 
GitLab


From 930a2244c72bc383d18152f679d5485791e28ea7 Mon Sep 17 00:00:00 2001
From: Dmitry Kologrivov <dmitry_kologrivov@epam.com>
Date: Fri, 23 Oct 2015 12:35:05 +0300
Subject: [PATCH 226/370] MAGETWO-44227: fix integrity test for xsd schema

---
 .../Test/Integrity/Modular/ViewConfigFilesTest.php | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ViewConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ViewConfigFilesTest.php
index d65b3fa9d7c..5c248a1d970 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ViewConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ViewConfigFilesTest.php
@@ -13,17 +13,17 @@ class ViewConfigFilesTest extends \PHPUnit_Framework_TestCase
      */
     public function testViewConfigFile($file)
     {
-        /** @var \Magento\Framework\View\Xsd\Reader $reader */
-        $reader = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
-            'Magento\Framework\View\Xsd\Reader'
-        );
-        $mergeXsd = $reader->read();
         $domConfig = new \Magento\Framework\Config\Dom($file);
+        $urnResolver = new \Magento\Framework\Config\Dom\UrnResolver();
         $result = $domConfig->validate(
-            $mergeXsd,
+            $urnResolver->getRealPath('urn:magento:framework:Config/etc/view.xsd'),
             $errors
         );
-        $this->assertTrue($result, "Invalid XML-file: {$file}\n" . join("\n", $errors));
+        $message = "Invalid XML-file: {$file}\n";
+        foreach ($errors as $error) {
+            $message .= "{$error->message} Line: {$error->line}\n";
+        }
+        $this->assertTrue($result, $message);
     }
 
     /**
-- 
GitLab


From c5f066f0d8b2202b85f5baca00e63fb8f1b62aca Mon Sep 17 00:00:00 2001
From: Mikalai_Eutsikhieu <Mikalai_Eutsikhieu@epam.com>
Date: Fri, 23 Oct 2015 13:22:43 +0300
Subject: [PATCH 227/370] MAGETWO-44253: Added fix to read new link format

---
 .../view/adminhtml/web/js/get-video-information.js          | 4 ++--
 .../view/frontend/web/js/fotorama-add-video-events.js       | 6 +++---
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
index f926f8c5e61..06ed1098c8d 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
+++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
@@ -569,8 +569,8 @@ require([
                     type = 'youtube';
                 } else if (href.host.match(/vimeo\.com/)) {
                     type = 'vimeo';
-                    vimeoRegex = new RegExp(['https?:\\/\\/(?:www\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)',
-                        '?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|)(\\d+)(?:$|\\/|\\?)'
+                    vimeoRegex = new RegExp(['https?:\\/\\/(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)',
+                        '?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|video\\/|)(\\d+)(?:$|\\/|\\?)'
                     ].join(''));
                     id = href.href.match(vimeoRegex)[3];
                 }
diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
index c2795990c58..e9e10af2db3 100644
--- a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
+++ b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
@@ -68,8 +68,8 @@ define([
             type = 'youtube';
         } else if (href.host.match(/vimeo\.com/)) {
             type = 'vimeo';
-            vimeoRegex = new RegExp(['https?:\\/\\/(?:www\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)',
-                '?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|)(\\d+)(?:$|\\/|\\?)'
+            vimeoRegex = new RegExp(['https?:\\/\\/(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)',
+                '?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|video\\/|)(\\d+)(?:$|\\/|\\?)'
             ].join(''));
             id = href.href.match(vimeoRegex)[3];
         }
@@ -327,7 +327,7 @@ define([
                 scriptTag = document.getElementsByTagName('script')[0];
 
             element.async = true;
-            element.src = 'https://f.vimeocdn.com/js/froogaloop2.min.js';
+            element.src = 'https://secure-a.vimeocdn.com/js/froogaloop2.min.js';
             scriptTag.parentNode.insertBefore(element, scriptTag);
         },
 
-- 
GitLab


From 202bbcb43491193bd21eb03628eaf84c1365d831 Mon Sep 17 00:00:00 2001
From: Mikalai_Eutsikhieu <Mikalai_Eutsikhieu@epam.com>
Date: Fri, 23 Oct 2015 13:36:08 +0300
Subject: [PATCH 228/370] MAGETWO-44261: fixed style on mobile version

---
 .../Magento_ProductVideo/web/css/source/_module.less   | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less
index 454920e2199..f13d4143e5a 100644
--- a/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less
+++ b/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less
@@ -63,6 +63,16 @@
     }
 }
 
+@media only screen
+and (min-device-width : 320px)
+and (max-device-width : 780px)
+and (orientation : landscape) {
+    .product-video {
+        height: 100%;
+        width: 81%;
+    }
+}
+
 .fotorama__arr.hidden-video {
     z-index: -1;
 }
-- 
GitLab


From 7c787ff66d8636de219c241bac5340925296bca9 Mon Sep 17 00:00:00 2001
From: Valeriy Nayda <vnayda@ebay.com>
Date: Fri, 23 Oct 2015 13:51:16 +0300
Subject: [PATCH 229/370] MAGETWO-43973: [HHVM] Functional tests failed on
 start on HHVM build

---
 app/code/Magento/ConfigurableProduct/Helper/Data.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/ConfigurableProduct/Helper/Data.php b/app/code/Magento/ConfigurableProduct/Helper/Data.php
index 91dd7224242..8ab8a52a9ee 100644
--- a/app/code/Magento/ConfigurableProduct/Helper/Data.php
+++ b/app/code/Magento/ConfigurableProduct/Helper/Data.php
@@ -40,7 +40,7 @@ class Data
     {
         $images = $product->getMediaGalleryImages();
         if ($images instanceof \Magento\Framework\Data\Collection) {
-            foreach ($images as &$image) {
+            foreach ($images as $image) {
                 /** @var $image \Magento\Catalog\Model\Product\Image */
                 $image->setData(
                     'small_image_url',
-- 
GitLab


From f35e1efd923c4887d00d0658ff2a639af4e3da28 Mon Sep 17 00:00:00 2001
From: Ihor Melnychenko <imelnychenko@ebay.com>
Date: Fri, 23 Oct 2015 14:57:42 +0300
Subject: [PATCH 230/370] MAGETWO-44211: [IE10] Product template page is broken

---
 .../adminhtml/templates/catalog/category/checkboxes/tree.phtml | 2 --
 .../view/adminhtml/templates/catalog/category/tree.phtml       | 2 --
 .../adminhtml/templates/catalog/category/widget/tree.phtml     | 3 +--
 .../templates/catalog/product/attribute/set/main.phtml         | 2 --
 .../adminhtml/templates/catalog/category/widget/tree.phtml     | 2 --
 .../Widget/view/adminhtml/templates/instance/edit/layout.phtml | 2 --
 6 files changed, 1 insertion(+), 12 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/checkboxes/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/checkboxes/tree.phtml
index 15e6732c51b..25aaaea0ffe 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/checkboxes/tree.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/checkboxes/tree.phtml
@@ -10,9 +10,7 @@
 
 <?php $_divId = 'tree-div_' . time() ?>
 <div id="<?php /* @escapeNotVerified */ echo $_divId ?>" class="tree"></div>
-<!--[if IE]>
 <script id="ie-deferred-loader" defer="defer" src=""></script>
-<![endif]-->
 <script>
     require([
         'jquery',
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
index db9087984db..894a4d5bc63 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
@@ -35,9 +35,7 @@
             <div><?php /* @escapeNotVerified */ echo __('This operation can take a long time'); ?></div>
         </div>
     </div>
-    <!--[if IE]>
     <script id="ie-deferred-loader" defer="defer" src=""></script>
-    <![endif]-->
     <script>
         var tree;
         require([
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/widget/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/widget/tree.phtml
index 9e303fe921d..2549cd64c5c 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/widget/tree.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/widget/tree.phtml
@@ -10,9 +10,8 @@
 
 <?php $_divId = 'tree' . $block->getId() ?>
 <div id="<?php /* @escapeNotVerified */ echo $_divId ?>" class="tree"></div>
-<!--[if IE]>
 <script id="ie-deferred-loader" defer="defer" src=""></script>
-<![endif]-->
+<![]-->
 <script>
 require(['jquery', "prototype", "extjs/ext-tree-checkbox"], function(jQuery){
 
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml
index 06edcfbaa25..b7d8d49272b 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml
@@ -38,9 +38,7 @@
             <span class="title"><?php /* @escapeNotVerified */ echo __('Unassigned Attributes') ?></span>
         </div>
         <div id="tree-div2" class="attribute-set-tree"></div>
-        <!--[if IE]>
         <script id="ie-deferred-loader" defer="defer" src=""></script>
-        <![endif]-->
         <script>
             define("tree-panel",
                 [
diff --git a/app/code/Magento/Widget/view/adminhtml/templates/catalog/category/widget/tree.phtml b/app/code/Magento/Widget/view/adminhtml/templates/catalog/category/widget/tree.phtml
index e114d5ade56..135880f5f31 100644
--- a/app/code/Magento/Widget/view/adminhtml/templates/catalog/category/widget/tree.phtml
+++ b/app/code/Magento/Widget/view/adminhtml/templates/catalog/category/widget/tree.phtml
@@ -10,9 +10,7 @@
 
 <?php $_divId = 'tree' . $block->getId() ?>
 <div id="<?php /* @escapeNotVerified */ echo $_divId ?>" class="tree"></div>
-<!--[if IE]>
 <script id="ie-deferred-loader" defer="defer" src=""></script>
-<![endif]-->
 <script>
 require(['jquery', "prototype", "extjs/ext-tree-checkbox"], function(jQuery){
 
diff --git a/app/code/Magento/Widget/view/adminhtml/templates/instance/edit/layout.phtml b/app/code/Magento/Widget/view/adminhtml/templates/instance/edit/layout.phtml
index 94a3eb7145b..6831ca32a00 100644
--- a/app/code/Magento/Widget/view/adminhtml/templates/instance/edit/layout.phtml
+++ b/app/code/Magento/Widget/view/adminhtml/templates/instance/edit/layout.phtml
@@ -15,9 +15,7 @@
         <div class="actions"><?php echo $block->getAddLayoutButtonHtml() ?></div>
     </div>
 </fieldset>
-<!--[if IE]>
 <script id="ie-deferred-loader" defer="defer" src=""></script>
-<![endif]-->
 <script>
 require([
     'jquery',
-- 
GitLab


From 2e8446db60d2d089de95eae091ab9b8fbace1946 Mon Sep 17 00:00:00 2001
From: Maksym Aposov <maposov@ebay.com>
Date: Fri, 23 Oct 2015 15:01:29 +0300
Subject: [PATCH 231/370] MAGETWO-44516: Provide fix for Functional Tests MX

---
 .../Magento/Bundle/Test/Repository/BundleProduct/Price.xml  | 4 ++--
 .../Bundle/Test/TestCase/CreateBundleProductEntityTest.xml  | 2 +-
 .../Catalog/Test/Block/Product/View/CustomOptions.php       | 6 +++---
 .../Test/Block/Adminhtml/Product/ProductForm.xml            | 2 +-
 .../GroupedProduct/Test/Block/Catalog/Product/View.php      | 5 ++---
 5 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/Bundle/Test/Repository/BundleProduct/Price.xml b/dev/tests/functional/tests/app/Magento/Bundle/Test/Repository/BundleProduct/Price.xml
index db2317905be..4bd3a3f73db 100644
--- a/dev/tests/functional/tests/app/Magento/Bundle/Test/Repository/BundleProduct/Price.xml
+++ b/dev/tests/functional/tests/app/Magento/Bundle/Test/Repository/BundleProduct/Price.xml
@@ -56,8 +56,8 @@
         </dataset>
 
         <dataset name="fixed-100-custom-options">
-            <field name="price_from" xsi:type="string">244.00</field>
-            <field name="cart_price" xsi:type="string">244.00</field>
+            <field name="price_from" xsi:type="string">270.00</field>
+            <field name="cart_price" xsi:type="string">270.00</field>
         </dataset>
 
         <dataset name="fixed-110">
diff --git a/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/CreateBundleProductEntityTest.xml b/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/CreateBundleProductEntityTest.xml
index 530018bf81c..b18d964c212 100644
--- a/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/CreateBundleProductEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/CreateBundleProductEntityTest.xml
@@ -214,7 +214,7 @@
             <data name="product/data/sku_type" xsi:type="string">Dynamic</data>
             <data name="product/data/sku" xsi:type="string">sku_bundle_dynamic_%isolation%</data>
             <data name="product/data/price_type" xsi:type="string">Dynamic</data>
-            <data name="product/data/price/dataset" xsi:type="string">dynamic-32</data>
+            <data name="product/data/price/dataset" xsi:type="string">dynamic-40</data>
             <data name="product/data/bundle_selections/dataset" xsi:type="string">default_dynamic</data>
             <data name="product/data/bundle_selections/products" xsi:type="string">catalogProductSimple::product_100_dollar,catalogProductSimple::product_40_dollar</data>
             <data name="product/data/checkout_data/dataset" xsi:type="string">bundle_default</data>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View/CustomOptions.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View/CustomOptions.php
index 7e4608bc008..9fcea9e3456 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View/CustomOptions.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/View/CustomOptions.php
@@ -30,14 +30,14 @@ class CustomOptions extends Form
      *
      * @var string
      */
-    protected $optionElement = '#product-options-wrapper .field';
+    protected $optionElement = '#product-options-wrapper > * > .field';
 
     /**
      * Selector for title of option
      *
      * @var string
      */
-    protected $title = 'label';
+    protected $title = 'label > span:nth-child(1), legend > span:nth-child(1)';
 
     /**
      * Selector for required option
@@ -381,7 +381,7 @@ class CustomOptions extends Form
      */
     protected function parseOptionText($optionText)
     {
-        preg_match('`^(.*?)\+\$(\d.*?)$`', $optionText, $match);
+        preg_match('`^(.*?) \+ ?\$([\d\.,]*?)$`', $optionText, $match);
         $optionPrice = isset($match[2]) ? str_replace(',', '', $match[2]) : 0;
         $optionTitle = isset($match[1]) ? trim($match[1]) : $optionText;
 
diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Block/Adminhtml/Product/ProductForm.xml b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Block/Adminhtml/Product/ProductForm.xml
index 19245035879..57aef81a070 100644
--- a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Block/Adminhtml/Product/ProductForm.xml
+++ b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Block/Adminhtml/Product/ProductForm.xml
@@ -8,7 +8,7 @@
 <tabs>
     <downloadable_information>
         <class>\Magento\Downloadable\Test\Block\Adminhtml\Catalog\Product\Edit\Tab\Downloadable</class>
-        <selector>#product_info_tabs_downloadable_items</selector>
+        <selector>#product_info_tabs_product-details</selector>
         <strategy>css selector</strategy>
     </downloadable_information>
 </tabs>
diff --git a/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Block/Catalog/Product/View.php b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Block/Catalog/Product/View.php
index fd8184a473a..8d36b92575f 100644
--- a/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Block/Catalog/Product/View.php
+++ b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Block/Catalog/Product/View.php
@@ -20,7 +20,7 @@ class View extends ParentView
      *
      * @var string
      */
-    protected $groupedProductBlock = '.table-wrapper.grouped';
+    protected $groupedProductBlock = '[class="table-wrapper grouped"]';
 
     /**
      * This member holds the class name of the tier price block.
@@ -81,8 +81,7 @@ class View extends ParentView
      */
     public function getOptions(FixtureInterface $product)
     {
-        $groupedOptions = $this->getGroupedProductBlock()->getOptions($product);
-        return ['grouped_options' => $groupedOptions] + parent::getOptions($product);
+        return ['grouped_options' => $this->getGroupedProductBlock()->getOptions($product)];
     }
 
     /**
-- 
GitLab


From 5a9dea12544db321bcc34cb058373562b02e302a Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Fri, 23 Oct 2015 15:04:01 +0300
Subject: [PATCH 232/370] MAGETWO-44455: Email Templates - When new email
 template created, clicking Preview button, display empty page.

---
 .../Block/Adminhtml/Template/Preview.php      |  21 ++--
 .../Adminhtml/Email/Template/Preview.php      |   3 +-
 .../Adminhtml/Email/Template/PreviewTest.php  | 116 ++++++++++++++++++
 .../adminhtml_email_template_preview.xml      |  16 +++
 .../view/adminhtml/layout/systemPreview.xml   |  14 ---
 .../templates/template/preview.phtml          |   2 +
 6 files changed, 146 insertions(+), 26 deletions(-)
 create mode 100644 app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/PreviewTest.php
 create mode 100644 app/code/Magento/Email/view/adminhtml/layout/adminhtml_email_template_preview.xml
 delete mode 100644 app/code/Magento/Email/view/adminhtml/layout/systemPreview.xml

diff --git a/app/code/Magento/Email/Block/Adminhtml/Template/Preview.php b/app/code/Magento/Email/Block/Adminhtml/Template/Preview.php
index eb34ed100fd..d215d37d7df 100644
--- a/app/code/Magento/Email/Block/Adminhtml/Template/Preview.php
+++ b/app/code/Magento/Email/Block/Adminhtml/Template/Preview.php
@@ -23,6 +23,11 @@ class Preview extends \Magento\Backend\Block\Widget
      */
     protected $_emailFactory;
 
+    /**
+     * @var string
+     */
+    protected $profilerName = 'email_template_proccessing';
+
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Framework\Filter\Input\MaliciousCode $maliciousCode
@@ -48,16 +53,10 @@ class Preview extends \Magento\Backend\Block\Widget
     protected function _toHtml()
     {
         $storeId = $this->getAnyStoreView()->getId();
-
         /** @var $template \Magento\Email\Model\Template */
-        $template = $this->_emailFactory->create(
-            ['data' => [
-                'area' => \Magento\Framework\App\Area::AREA_FRONTEND,
-                'store' => $storeId
-            ]]
-        );
-        $id = (int) $this->getRequest()->getParam('id');
-        if ($id) {
+        $template = $this->_emailFactory->create();
+
+        if ($id = (int)$this->getRequest()->getParam('id')) {
             $template->load($id);
         } else {
             $template->setTemplateType($this->getRequest()->getParam('type'));
@@ -67,7 +66,7 @@ class Preview extends \Magento\Backend\Block\Widget
 
         $template->setTemplateText($this->_maliciousCode->filter($template->getTemplateText()));
 
-        \Magento\Framework\Profiler::start("email_template_proccessing");
+        \Magento\Framework\Profiler::start($this->profilerName);
 
         $template->emulateDesign($storeId);
         $templateProcessed = $this->_appState->emulateAreaCode(
@@ -80,7 +79,7 @@ class Preview extends \Magento\Backend\Block\Widget
             $templateProcessed = "<pre>" . htmlspecialchars($templateProcessed) . "</pre>";
         }
 
-        \Magento\Framework\Profiler::stop("email_template_proccessing");
+        \Magento\Framework\Profiler::stop($this->profilerName);
 
         return $templateProcessed;
     }
diff --git a/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Preview.php b/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Preview.php
index fceea747f03..c85cc7d4a6c 100644
--- a/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Preview.php
+++ b/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Preview.php
@@ -16,7 +16,8 @@ class Preview extends \Magento\Email\Controller\Adminhtml\Email\Template
     public function execute()
     {
         try {
-            $this->_view->loadLayout('systemPreview');
+            $this->_view->loadLayout();
+            $this->_view->getPage()->getConfig()->getTitle()->prepend(__('Email Preview'));
             $this->_view->renderLayout();
         } catch (\Exception $e) {
             $this->messageManager->addError(__('An error occurred. The email template can not be opened for preview.'));
diff --git a/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/PreviewTest.php b/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/PreviewTest.php
new file mode 100644
index 00000000000..3ea858e356b
--- /dev/null
+++ b/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/PreviewTest.php
@@ -0,0 +1,116 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Email\Test\Unit\Controller\Adminhtml\Email\Template;
+
+use Magento\Email\Controller\Adminhtml\Email\Template\Preview;
+use Magento\Framework\App\Action\Context;
+use Magento\Framework\App\RequestInterface;
+use Magento\Framework\App\View;
+use Magento\Framework\Registry;
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+use Magento\Framework\View\Config;
+use Magento\Framework\View\Page\Title;
+use Magento\Framework\View\Result\Page;
+
+/**
+ * Preview Test
+ */
+class PreviewTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var Preview
+     */
+    protected $object;
+
+    /**
+     * @var Context
+     */
+    protected $context;
+
+    /**
+     * @var Registry|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $coreRegistryMock;
+
+    /**
+     * @var View|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $viewMock;
+
+    /**
+     * @var RequestInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $requestMock;
+
+    /**
+     * @var Page|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $pageMock;
+
+    /**
+     * @var Config|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $pageConfigMock;
+
+    /**
+     * @var Title|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $pageTitleMock;
+
+    protected function setUp()
+    {
+        $objectManager = new ObjectManager($this);
+
+        $this->coreRegistryMock = $this->getMockBuilder('Magento\Framework\Registry')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->viewMock = $this->getMockBuilder('Magento\Framework\App\View')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->requestMock = $this->getMockBuilder('Magento\Framework\App\RequestInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->pageMock = $this->getMockBuilder('Magento\Framework\View\Result\Page')
+            ->disableOriginalConstructor()
+            ->setMethods(['getConfig'])
+            ->getMock();
+        $this->pageConfigMock = $this->getMockBuilder('Magento\Framework\View\Page\Config')
+            ->setMethods(['getTitle'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->pageTitleMock = $this->getMockBuilder('Magento\Framework\View\Page\Title')
+            ->setMethods(['prepend'])
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->context = $objectManager->getObject('Magento\Backend\App\Action\Context', [
+            'request' => $this->requestMock,
+            'view' => $this->viewMock
+        ]);
+        $this->object = $objectManager->getObject('Magento\Email\Controller\Adminhtml\Email\Template\Preview', [
+            'context' => $this->context,
+            'coreRegistry' => $this->coreRegistryMock,
+        ]);
+    }
+
+    public function testExecute()
+    {
+        $this->viewMock->expects($this->once())
+            ->method('getPage')
+            ->willReturn($this->pageMock);
+        $this->pageMock->expects($this->once())
+            ->method('getConfig')
+            ->willReturn($this->pageConfigMock);
+        $this->pageConfigMock->expects($this->once())
+            ->method('getTitle')
+            ->willReturn($this->pageTitleMock);
+        $this->pageTitleMock->expects($this->once())
+            ->method('prepend')
+            ->willReturnSelf();
+
+        $this->assertNull($this->object->execute());
+    }
+}
diff --git a/app/code/Magento/Email/view/adminhtml/layout/adminhtml_email_template_preview.xml b/app/code/Magento/Email/view/adminhtml/layout/adminhtml_email_template_preview.xml
new file mode 100644
index 00000000000..242cda682c5
--- /dev/null
+++ b/app/code/Magento/Email/view/adminhtml/layout/adminhtml_email_template_preview.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
+    <body>
+        <referenceContainer name="page.content">
+            <block name="preview.page.content" class="Magento\Framework\View\Element\Template" template="Magento_Email::template/preview.phtml">
+                <block class="Magento\Email\Block\Adminhtml\Template\Preview" name="content" as="content"/>
+            </block>
+        </referenceContainer>
+    </body>
+</page>
diff --git a/app/code/Magento/Email/view/adminhtml/layout/systemPreview.xml b/app/code/Magento/Email/view/adminhtml/layout/systemPreview.xml
deleted file mode 100644
index f58984cc6ed..00000000000
--- a/app/code/Magento/Email/view/adminhtml/layout/systemPreview.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0"?>
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
-    <container name="root">
-        <block class="Magento\Framework\View\Element\Template" name="page.block" template="Magento_Email::template/preview.phtml">
-            <block class="Magento\Email\Block\Adminhtml\Template\Preview" name="content" as="content"/>
-        </block>
-    </container>
-</layout>
diff --git a/app/code/Magento/Email/view/adminhtml/templates/template/preview.phtml b/app/code/Magento/Email/view/adminhtml/templates/template/preview.phtml
index d54075edcb6..c90ad268555 100644
--- a/app/code/Magento/Email/view/adminhtml/templates/template/preview.phtml
+++ b/app/code/Magento/Email/view/adminhtml/templates/template/preview.phtml
@@ -3,6 +3,8 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
+
+/* @var $block \Magento\Email\Block\Adminhtml\Template\Preview */
 ?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html lang="en">
-- 
GitLab


From e4bed144659abaacc1d8c53102363514e81ddf56 Mon Sep 17 00:00:00 2001
From: Andriy Nasinnyk <anasinnyk@ebay.com>
Date: Fri, 23 Oct 2015 15:03:23 +0300
Subject: [PATCH 233/370] MAGETWO-44461: Error on importing customer main file
 with custom attribute of dropdown type

---
 .../Magento/CustomerImportExport/Model/Import/Customer.php    | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/CustomerImportExport/Model/Import/Customer.php b/app/code/Magento/CustomerImportExport/Model/Import/Customer.php
index 6cf06f839c1..b56d03c1c75 100644
--- a/app/code/Magento/CustomerImportExport/Model/Import/Customer.php
+++ b/app/code/Magento/CustomerImportExport/Model/Import/Customer.php
@@ -381,7 +381,9 @@ class Customer extends AbstractCustomer
                 $attributeParameters = $this->_attributes[$attributeCode];
 
                 if ('select' == $attributeParameters['type']) {
-                    $value = $attributeParameters['options'][strtolower($value)];
+                    $value = isset($attributeParameters['options'][strtolower($value)])
+                        ? $attributeParameters['options'][strtolower($value)]
+                        : null;
                 } elseif ('datetime' == $attributeParameters['type']) {
                     $value = (new \DateTime())->setTimestamp(strtotime($value));
                     $value = $value->format(\Magento\Framework\Stdlib\DateTime::DATETIME_PHP_FORMAT);
-- 
GitLab


From a086aeb9bfae9b78bfbf21806dab6317f0c7bc21 Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Fri, 23 Oct 2015 15:17:01 +0300
Subject: [PATCH 234/370] MAGETWO-44434: Some untranslatable fields in Magento
 backend

---
 .../Entity/Attribute/Frontend/DatetimeTest.php    | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Frontend/DatetimeTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Frontend/DatetimeTest.php
index b8b44708697..6c1263ef01e 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Frontend/DatetimeTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Frontend/DatetimeTest.php
@@ -38,9 +38,7 @@ class DatetimeTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-
         $this->localeDateMock = $this->getMock('\Magento\Framework\Stdlib\DateTime\TimezoneInterface');
-
         $this->attributeMock = $this->getMock(
             '\Magento\Eav\Model\Entity\Attribute\AbstractAttribute',
             ['getAttributeCode', 'getFrontendLabel'],
@@ -58,11 +56,16 @@ class DatetimeTest extends \PHPUnit_Framework_TestCase
         $attributeValue = '11-11-2011';
         $date = new \DateTime($attributeValue);
         $object = new \Magento\Framework\DataObject(['datetime' => $attributeValue]);
-        $this->attributeMock->expects($this->any())->method('getAttributeCode')->will($this->returnValue('datetime'));
-        $this->attributeMock->expects($this->any())->method('getData')->with('frontend_input')
-            ->will($this->returnValue('text'));
 
-        $this->localeDateMock->expects($this->once())->method('formatDateTime')
+        $this->attributeMock->expects($this->any())
+            ->method('getAttributeCode')
+            ->willReturn('datetime');
+        $this->attributeMock->expects($this->any())
+            ->method('getData')
+            ->with('frontend_input')
+            ->willReturn('text');
+        $this->localeDateMock->expects($this->once())
+            ->method('formatDateTime')
             ->with($date, \IntlDateFormatter::MEDIUM, \IntlDateFormatter::NONE, null, null, null)
             ->willReturn($attributeValue);
 
-- 
GitLab


From 980ba761a054bb8abe0ec0c8fdcc5523965a6077 Mon Sep 17 00:00:00 2001
From: Olga Matviienko <omatviienko@ebay.com>
Date: Fri, 23 Oct 2015 15:34:51 +0300
Subject: [PATCH 235/370] MAGETWO-44362: Can't filter the products if
 responsive

---
 .../blank/Magento_LayeredNavigation/web/css/source/_module.less | 2 +-
 .../luma/Magento_LayeredNavigation/web/css/source/_module.less  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/design/frontend/Magento/blank/Magento_LayeredNavigation/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_LayeredNavigation/web/css/source/_module.less
index 131329b5343..c51aac33382 100644
--- a/app/design/frontend/Magento/blank/Magento_LayeredNavigation/web/css/source/_module.less
+++ b/app/design/frontend/Magento/blank/Magento_LayeredNavigation/web/css/source/_module.less
@@ -84,7 +84,7 @@
     .page-with-filter {
         .columns {
             .sidebar-main {
-                .vendor-prefix-order(0);
+                .lib-vendor-prefix-order(0);
             }
         }
     }
diff --git a/app/design/frontend/Magento/luma/Magento_LayeredNavigation/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_LayeredNavigation/web/css/source/_module.less
index ebb6144972d..17cadfeb19c 100644
--- a/app/design/frontend/Magento/luma/Magento_LayeredNavigation/web/css/source/_module.less
+++ b/app/design/frontend/Magento/luma/Magento_LayeredNavigation/web/css/source/_module.less
@@ -324,7 +324,7 @@
     .page-with-filter {
         .columns {
             .sidebar-main {
-                .vendor-prefix-order(0);
+                .lib-vendor-prefix-order(0);
             }
         }
     }
-- 
GitLab


From 6211bbc3c2c93263ffcf06df123a78ee15b364bf Mon Sep 17 00:00:00 2001
From: Viktor Tymchynskyi <vtymchynskyi@ebay.com>
Date: Fri, 23 Oct 2015 15:36:42 +0300
Subject: [PATCH 236/370] MAGETWO-44496: Paypal billing agreement order
 relation table is empty

---
 .../Paypal/Observer/AddBillingAgreementToSessionObserver.php    | 1 +
 .../Unit/Observer/AddBillingAgreementToSessionObserverTest.php  | 1 +
 .../Paypal/view/frontend/templates/billing/agreement/view.phtml | 2 +-
 3 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Paypal/Observer/AddBillingAgreementToSessionObserver.php b/app/code/Magento/Paypal/Observer/AddBillingAgreementToSessionObserver.php
index 8bd494207b6..2cc2425387b 100644
--- a/app/code/Magento/Paypal/Observer/AddBillingAgreementToSessionObserver.php
+++ b/app/code/Magento/Paypal/Observer/AddBillingAgreementToSessionObserver.php
@@ -53,6 +53,7 @@ class AddBillingAgreementToSessionObserver implements ObserverInterface
             if ($agreement->isValid()) {
                 $message = __('Created billing agreement #%1.', $agreement->getReferenceId());
                 $order->addRelatedObject($agreement);
+                $agreement->addOrderRelation($order);
                 $this->checkoutSession->setLastBillingAgreementReferenceId($agreement->getReferenceId());
                 $agreementCreated = true;
             } else {
diff --git a/app/code/Magento/Paypal/Test/Unit/Observer/AddBillingAgreementToSessionObserverTest.php b/app/code/Magento/Paypal/Test/Unit/Observer/AddBillingAgreementToSessionObserverTest.php
index 7feea45b45d..df0fc80c177 100644
--- a/app/code/Magento/Paypal/Test/Unit/Observer/AddBillingAgreementToSessionObserverTest.php
+++ b/app/code/Magento/Paypal/Test/Unit/Observer/AddBillingAgreementToSessionObserverTest.php
@@ -122,6 +122,7 @@ class AddBillingAgreementToSessionObserverTest extends \PHPUnit_Framework_TestCa
             )->will(
                 $this->returnValue('agreement reference id')
             );
+            $agreement->expects($this->once())->method('addOrderRelation')->with($order);
             $order->expects(new MethodInvokedAtIndex(0))->method('addRelatedObject')->with($agreement);
             $this->_checkoutSession->expects(
                 $this->once()
diff --git a/app/code/Magento/Paypal/view/frontend/templates/billing/agreement/view.phtml b/app/code/Magento/Paypal/view/frontend/templates/billing/agreement/view.phtml
index c026c3fca5e..835f442c0da 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/billing/agreement/view.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/billing/agreement/view.phtml
@@ -105,7 +105,7 @@ $relatedOrders = $block->getRelatedOrders();
                                     )); ?>
                                 </td>
                                 <td data-th="<?php echo $block->escapeHtml(__('Order Total')); ?>" class="col total">
-                                    <?php echo $block->escapeHtml($block->getOrderItemValue($order, 'order_total')); ?>
+                                    <?php /* @noEscape */ echo $block->getOrderItemValue($order, 'order_total'); ?>
                                 </td>
                                 <td data-th="<?php echo $block->escapeHtml(__('Order Status')); ?>" class="col status">
                                     <?php echo $block->escapeHtml($block->getOrderItemValue(
-- 
GitLab


From 06af7b97d858e9d52ac3ab78e3c9d9e32f1bf799 Mon Sep 17 00:00:00 2001
From: Mikalai_Eutsikhieu <Mikalai_Eutsikhieu@epam.com>
Date: Fri, 23 Oct 2015 15:39:12 +0300
Subject: [PATCH 237/370] Fixed base video issue for fotorama bug

---
 .../web/js/fotorama-add-video-events.js         | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
index e9e10af2db3..597b6bc8bba 100644
--- a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
+++ b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
@@ -11,6 +11,8 @@ define([
 ], function ($) {
     'use strict';
 
+    var allowBase = true; //global var is needed because fotorama always fully reloads events in case of fullscreen
+
     /**
      * @private
      */
@@ -309,13 +311,16 @@ define([
 
                 if (
                     videoItem.mediaType === this.VID && videoItem.isBase &&
-                    this.options.VideoSettings[0].playIfBase
+                    this.options.VideoSettings[0].playIfBase && allowBase
                 ) {
                     this.Base = true;
+                    allowBase = false;
                 }
             }
 
-            this._createCloseVideo($(this.element).data('fotorama'), this.Base);
+            if (!this.isFullscreen) {
+                this._createCloseVideo($(this.element).data('fotorama'), this.Base);
+            }
         },
 
         /**
@@ -523,9 +528,11 @@ define([
                             this.Base = false;
                         }
                     }, this), 50);
-                } else { //if not a vimeo - play it immediately
-                    $(this.element).data('fotorama').activeFrame.$stageFrame[0].click();
-                    this.Base = false;
+                } else { //if not a vimeo - play it immediately with a little lag in case for fotorama fullscreen
+                    setTimeout($.proxy(function(){
+                        $(this.element).data('fotorama').activeFrame.$stageFrame[0].click();
+                        this.Base = false;
+                    }, this), 50);
                 }
             }
         },
-- 
GitLab


From 343455e51468eaae46945ba4942d5f0f9408423d Mon Sep 17 00:00:00 2001
From: Mikalai_Eutsikhieu <Mikalai_Eutsikhieu@epam.com>
Date: Fri, 23 Oct 2015 15:40:48 +0300
Subject: [PATCH 238/370] Fixed static JS test

---
 .../view/frontend/web/js/fotorama-add-video-events.js           | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
index 597b6bc8bba..ff3466480e2 100644
--- a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
+++ b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
@@ -529,7 +529,7 @@ define([
                         }
                     }, this), 50);
                 } else { //if not a vimeo - play it immediately with a little lag in case for fotorama fullscreen
-                    setTimeout($.proxy(function(){
+                    setTimeout($.proxy(function () {
                         $(this.element).data('fotorama').activeFrame.$stageFrame[0].click();
                         this.Base = false;
                     }, this), 50);
-- 
GitLab


From f103439ad222041c662cda75ac58edc8ae6dc354 Mon Sep 17 00:00:00 2001
From: Mikalai_Eutsikhieu <Mikalai_Eutsikhieu@epam.com>
Date: Fri, 23 Oct 2015 15:41:37 +0300
Subject: [PATCH 239/370] Fixed codestyle

---
 .../view/frontend/web/js/fotorama-add-video-events.js          | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
index ff3466480e2..887f9104eb3 100644
--- a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
+++ b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
@@ -11,6 +11,9 @@ define([
 ], function ($) {
     'use strict';
 
+    /**
+     * @private
+     */
     var allowBase = true; //global var is needed because fotorama always fully reloads events in case of fullscreen
 
     /**
-- 
GitLab


From 072db47d0c2c036da488582956fbc51467d9d7ed Mon Sep 17 00:00:00 2001
From: Andriy Nasinnyk <anasinnyk@ebay.com>
Date: Fri, 23 Oct 2015 15:43:17 +0300
Subject: [PATCH 240/370] MAGETWO-44307: Unable to add Bundle product to Order
 from Recently Viewed block

---
 .../Block/Adminhtml/Order/Create/Sidebar.php  | 51 +++++++++++++++++++
 .../Magento/Bundle/Model/Product/Type.php     |  5 ++
 app/code/Magento/Bundle/etc/adminhtml/di.xml  |  3 ++
 3 files changed, 59 insertions(+)
 create mode 100644 app/code/Magento/Bundle/Block/Adminhtml/Order/Create/Sidebar.php

diff --git a/app/code/Magento/Bundle/Block/Adminhtml/Order/Create/Sidebar.php b/app/code/Magento/Bundle/Block/Adminhtml/Order/Create/Sidebar.php
new file mode 100644
index 00000000000..12a3d48d20c
--- /dev/null
+++ b/app/code/Magento/Bundle/Block/Adminhtml/Order/Create/Sidebar.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Bundle\Block\Adminhtml\Order\Create;
+
+class Sidebar
+{
+    /**
+     * Get item qty
+     *
+     * @param \Magento\Sales\Block\Adminhtml\Order\Create\Sidebar\AbstractSidebar $subject
+     * @param callable $proceed
+     * @param \Magento\Framework\DataObject $item
+     *
+     * @return string
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function aroundGetItemQty(
+        \Magento\Sales\Block\Adminhtml\Order\Create\Sidebar\AbstractSidebar $subject,
+        \Closure $proceed,
+        \Magento\Framework\DataObject $item
+    ) {
+        if ($item->getProduct()->getTypeId() == \Magento\Bundle\Model\Product\Type::TYPE_CODE) {
+            return '';
+        }
+        return $proceed($item);
+    }
+
+    /**
+     * Check whether product configuration is required before adding to order
+     *
+     * @param \Magento\Sales\Block\Adminhtml\Order\Create\Sidebar\AbstractSidebar $subject
+     * @param callable $proceed
+     * @param string $productType
+     *
+     * @return bool
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function aroundIsConfigurationRequired(
+        \Magento\Sales\Block\Adminhtml\Order\Create\Sidebar\AbstractSidebar $subject,
+        \Closure $proceed,
+        $productType
+    ) {
+        if ($productType == \Magento\Bundle\Model\Product\Type::TYPE_CODE) {
+            return true;
+        }
+        return $proceed($productType);
+    }
+}
diff --git a/app/code/Magento/Bundle/Model/Product/Type.php b/app/code/Magento/Bundle/Model/Product/Type.php
index 65742f76f26..2270f6cb149 100644
--- a/app/code/Magento/Bundle/Model/Product/Type.php
+++ b/app/code/Magento/Bundle/Model/Product/Type.php
@@ -19,6 +19,11 @@ use Magento\Framework\Pricing\PriceCurrencyInterface;
  */
 class Type extends \Magento\Catalog\Model\Product\Type\AbstractType
 {
+    /**
+     * Product type
+     */
+    const TYPE_CODE = 'bundle';
+
     /**
      * Product is composite
      *
diff --git a/app/code/Magento/Bundle/etc/adminhtml/di.xml b/app/code/Magento/Bundle/etc/adminhtml/di.xml
index 0270ff9164b..91970a4cdd9 100644
--- a/app/code/Magento/Bundle/etc/adminhtml/di.xml
+++ b/app/code/Magento/Bundle/etc/adminhtml/di.xml
@@ -9,6 +9,9 @@
     <type name="Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper">
         <plugin name="Bundle" type="Magento\Bundle\Controller\Adminhtml\Product\Initialization\Helper\Plugin\Bundle" sortOrder="60" />
     </type>
+    <type name="Magento\Sales\Block\Adminhtml\Order\Create\Sidebar\AbstractSidebar">
+        <plugin name="Bundle" type="Magento\Bundle\Block\Adminhtml\Order\Create\Sidebar" sortOrder="200"/>
+    </type>
     <type name="Magento\Catalog\Model\Product\CopyConstructor\Composite">
         <arguments>
             <argument name="constructors" xsi:type="array">
-- 
GitLab


From d7fb057e8d6a6f455e6b1b450252b23173216320 Mon Sep 17 00:00:00 2001
From: Andrii Kasian <akasian@magento.com>
Date: Fri, 23 Oct 2015 15:47:37 +0300
Subject: [PATCH 241/370] MAGETWO-39604: [GITHUB] Doesn't work sorting in the
 search list. #1432

---
 .../Magento/Catalog/Model/Layer/Search/CollectionFilter.php    | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/app/code/Magento/Catalog/Model/Layer/Search/CollectionFilter.php b/app/code/Magento/Catalog/Model/Layer/Search/CollectionFilter.php
index 958751ae02b..2ae363436b6 100644
--- a/app/code/Magento/Catalog/Model/Layer/Search/CollectionFilter.php
+++ b/app/code/Magento/Catalog/Model/Layer/Search/CollectionFilter.php
@@ -63,7 +63,6 @@ class CollectionFilter implements CollectionFilterInterface
             ->addTaxPercents()
             ->addStoreFilter()
             ->addUrlRewrite()
-            ->setVisibility($this->productVisibility->getVisibleInSearchIds())
-            ->setOrder('relevance', Select::SQL_DESC);
+            ->setVisibility($this->productVisibility->getVisibleInSearchIds());
     }
 }
-- 
GitLab


From 5ad2fd694901f1d0e0605cef559bc2c2fd28639f Mon Sep 17 00:00:00 2001
From: Oleksandr Dubovyk <odubovyk@ebay.com>
Date: Fri, 23 Oct 2015 15:51:54 +0300
Subject: [PATCH 242/370] MAGETWO-38963: Storefront "Layered Navigation" menu
 items' titles are overlapped by "Expand" button

---
 .../web/css/source/_module.less                        | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/app/design/frontend/Magento/blank/Magento_LayeredNavigation/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_LayeredNavigation/web/css/source/_module.less
index 8b3d0a38fe5..679f8c3db46 100644
--- a/app/design/frontend/Magento/blank/Magento_LayeredNavigation/web/css/source/_module.less
+++ b/app/design/frontend/Magento/blank/Magento_LayeredNavigation/web/css/source/_module.less
@@ -11,21 +11,25 @@
 
 .block.filter {
     margin-bottom: 40px;
-    .title {
+    .filter-title {
         margin-bottom: 20px;
         strong {
             font-size: 18px;
         }
     }
-    .subtitle {
+    .filter-subtitle {
         display: none;
     }
+    .filter-options-title {
+        word-break: break-all;
+    }
+
     .filter-options-content {
         .filter-count-label {
             &:extend(.abs-visually-hidden all);
         }
     }
-    .options {
+    .filter-options {
         margin: 0;
         > dt {
             .lib-heading(h4);
-- 
GitLab


From f30b5787123e16941ec7b8a5a3638f05e6a19d80 Mon Sep 17 00:00:00 2001
From: Oleksandr Dubovyk <odubovyk@ebay.com>
Date: Fri, 23 Oct 2015 15:53:51 +0300
Subject: [PATCH 243/370] MAGETWO-38963: Storefront "Layered Navigation" menu
 items' titles are overlapped by "Expand" button

---
 .../web/css/source/_module.less               | 115 +++++++++---------
 1 file changed, 59 insertions(+), 56 deletions(-)

diff --git a/app/design/frontend/Magento/blank/Magento_LayeredNavigation/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_LayeredNavigation/web/css/source/_module.less
index 679f8c3db46..b1c5b18a4d4 100644
--- a/app/design/frontend/Magento/blank/Magento_LayeredNavigation/web/css/source/_module.less
+++ b/app/design/frontend/Magento/blank/Magento_LayeredNavigation/web/css/source/_module.less
@@ -4,79 +4,82 @@
 //  */
 
 //
-//    Common
-//--------------------------------------
+//  Common
+//  _____________________________________________
 
 & when (@media-common = true) {
 
-.block.filter {
-    margin-bottom: 40px;
-    .filter-title {
-        margin-bottom: 20px;
-        strong {
-            font-size: 18px;
+    .block.filter {
+        margin-bottom: 40px;
+        .filter-title {
+            margin-bottom: 20px;
+            strong {
+                font-size: 18px;
+            }
         }
-    }
-    .filter-subtitle {
-        display: none;
-    }
-    .filter-options-title {
-        word-break: break-all;
-    }
 
-    .filter-options-content {
-        .filter-count-label {
-            &:extend(.abs-visually-hidden all);
+        .filter-subtitle {
+            display: none;
         }
-    }
-    .filter-options {
-        margin: 0;
-        > dt {
-            .lib-heading(h4);
-            margin: 0 0 10px;
+
+        .filter-options-title {
+            word-break: break-all;
         }
-        > dd {
-            margin: 0 0 25px;
 
-            .item {
-                margin-bottom: 3px;
+        .filter-options-content {
+            .filter-count-label {
+                &:extend(.abs-visually-hidden all);
             }
         }
-        .count {
-            .lib-css(color, @text__color__muted);
-            &:before {
-                content: '(';
+
+        .filter-options {
+            margin: 0;
+            > dt {
+                .lib-heading(h4);
+                margin: 0 0 10px;
+            }
+            > dd {
+                margin: 0 0 25px;
+
+                .item {
+                    margin-bottom: 3px;
+                }
             }
-            &:after {
-                content: ')';
+            .count {
+                .lib-css(color, @text__color__muted);
+                &:before {
+                    content: '(';
+                }
+                &:after {
+                    content: ')';
+                }
             }
         }
-    }
-    .items {
-        &:extend(.abs-reset-list all);
-    }
-    .filtered {
         .items {
-            margin: 15px 0;
+            &:extend(.abs-reset-list all);
         }
-        .item {
-            position: relative;
-            padding-left: 22px;
-            margin-bottom: 6px;
-            .label {
-                font-weight: @font-weight__bold;
+
+        .filtered {
+            .items {
+                margin: 15px 0;
             }
-            .action.remove {
-                &:extend(.abs-remove-button-for-blocks all);
-                position: absolute;
-                left: -6px;
-                top: 0;
+            .item {
+                margin-bottom: 6px;
+                padding-left: 22px;
+                position: relative;
+                .label {
+                    font-weight: @font-weight__bold;
+                }
+                .action.remove {
+                    &:extend(.abs-remove-button-for-blocks all);
+                    left: -6px;
+                    position: absolute;
+                    top: 0;
+                }
+            }
+            & + .actions {
+                margin-bottom: 35px;
             }
-        }
-        & + .actions {
-            margin-bottom: 35px;
         }
     }
 }
-
-}
-- 
GitLab


From a189658ce53fdad61cb9970c29ccb4d2ad208d90 Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Fri, 23 Oct 2015 16:16:07 +0300
Subject: [PATCH 244/370] MAGETWO-44455: Email Templates - When new email
 template created, clicking Preview button, display empty page.

---
 .../Block/Adminhtml/Template/PreviewTest.php  | 46 +++++++++----------
 1 file changed, 22 insertions(+), 24 deletions(-)

diff --git a/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/PreviewTest.php b/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/PreviewTest.php
index 599c1b81010..dbad5f98eaa 100644
--- a/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/PreviewTest.php
+++ b/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/PreviewTest.php
@@ -46,42 +46,38 @@ class PreviewTest extends \PHPUnit_Framework_TestCase
                 'revertDesign'
             ])
             ->disableOriginalConstructor()
-            ->getMock()
-        ;
+            ->getMock();
         $template->expects($this->once())
             ->method('getProcessedTemplate')
             ->with($this->equalTo([]))
-            ->will($this->returnValue(self::MALICIOUS_TEXT));
-        $designConfigData = [
-            'area' => \Magento\Framework\App\Area::AREA_FRONTEND,
-            'store' => $storeId
-        ];
+            ->willReturn(self::MALICIOUS_TEXT);
+        $designConfigData = [];
         $template->expects($this->atLeastOnce())
             ->method('getDesignConfig')
-            ->will($this->returnValue(new \Magento\Framework\DataObject(
+            ->willReturn(new \Magento\Framework\DataObject(
                 $designConfigData
-            )));
+            ));
         $emailFactory = $this->getMock('Magento\Email\Model\TemplateFactory', ['create'], [], '', false);
         $emailFactory->expects($this->once())
             ->method('create')
-            ->with($this->equalTo(['data' => $designConfigData]))
-            ->will($this->returnValue($template));
+            ->with([])
+            ->willReturn($template);
 
         $request = $this->getMock('Magento\Framework\App\RequestInterface');
-        $request->expects($this->any())->method('getParam')->will($this->returnValueMap($requestParamMap));
+        $request->expects($this->any())->method('getParam')->willReturnMap($requestParamMap);
         $eventManage = $this->getMock('Magento\Framework\Event\ManagerInterface');
         $scopeConfig = $this->getMock('Magento\Framework\App\Config\ScopeConfigInterface');
         $design = $this->getMock('Magento\Framework\View\DesignInterface');
         $store = $this->getMock('Magento\Store\Model\Store', ['getId', '__wakeup'], [], '', false);
-        $store->expects($this->any())->method('getId')->will($this->returnValue($storeId));
+        $store->expects($this->any())->method('getId')->willReturn($storeId);
         $storeManager = $this->getMockBuilder('\Magento\Store\Model\StoreManagerInterface')
             ->disableOriginalConstructor()
             ->getMock();
         $storeManager->expects($this->atLeastOnce())
             ->method('getDefaultStoreView')
-            ->will($this->returnValue($store));
-        $storeManager->expects($this->any())->method('getDefaultStoreView')->will($this->returnValue(null));
-        $storeManager->expects($this->any())->method('getStores')->will($this->returnValue([$store]));
+            ->willReturn($store);
+        $storeManager->expects($this->any())->method('getDefaultStoreView')->willReturn(null);
+        $storeManager->expects($this->any())->method('getStores')->willReturn([$store]);
         $appState = $this->getMockBuilder('Magento\Framework\App\State')
             ->setConstructorArgs([
                 $scopeConfig
@@ -94,12 +90,12 @@ class PreviewTest extends \PHPUnit_Framework_TestCase
             ['getRequest', 'getEventManager', 'getScopeConfig', 'getDesignPackage', 'getStoreManager', 'getAppState'],
             [], '', false
         );
-        $context->expects($this->any())->method('getRequest')->will($this->returnValue($request));
-        $context->expects($this->any())->method('getEventManager')->will($this->returnValue($eventManage));
-        $context->expects($this->any())->method('getScopeConfig')->will($this->returnValue($scopeConfig));
-        $context->expects($this->any())->method('getDesignPackage')->will($this->returnValue($design));
-        $context->expects($this->any())->method('getStoreManager')->will($this->returnValue($storeManager));
-        $context->expects($this->once())->method('getAppState')->will($this->returnValue($appState));
+        $context->expects($this->any())->method('getRequest')->willReturn($request);
+        $context->expects($this->any())->method('getEventManager')->willReturn($eventManage);
+        $context->expects($this->any())->method('getScopeConfig')->willReturn($scopeConfig);
+        $context->expects($this->any())->method('getDesignPackage')->willReturn($design);
+        $context->expects($this->any())->method('getStoreManager')->willReturn($storeManager);
+        $context->expects($this->once())->method('getAppState')->willReturn($appState);
 
         $maliciousCode = $this->getMock(
             'Magento\Framework\Filter\Input\MaliciousCode',
@@ -108,8 +104,10 @@ class PreviewTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $maliciousCode->expects($this->once())->method('filter')->with($this->equalTo($requestParamMap[1][2]))
-            ->will($this->returnValue(self::MALICIOUS_TEXT));
+        $maliciousCode->expects($this->once())
+            ->method('filter')
+            ->with($this->equalTo($requestParamMap[1][2]))
+            ->willReturn(self::MALICIOUS_TEXT);
 
         $preview = $this->objectManagerHelper->getObject(
             'Magento\Email\Block\Adminhtml\Template\Preview',
-- 
GitLab


From c1035419b1b42f3ae4753298078f60090c795b5b Mon Sep 17 00:00:00 2001
From: Dmytro Aponasenko <daponasenko@ebay.com>
Date: Fri, 23 Oct 2015 16:33:49 +0300
Subject: [PATCH 245/370] MTA-2723: Functional test maintenance. Part 2

---
 .../Test/Page/Adminhtml/CustomerIndexEdit.xml | 12 +++++-----
 .../Block/Adminhtml/Product/ProductForm.xml   |  2 +-
 .../Magento/Ui/Test/Block/Adminhtml/Modal.php | 24 +++++++++++++++++++
 3 files changed, 31 insertions(+), 7 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerIndexEdit.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerIndexEdit.xml
index 7dfacbc495c..d491bb75ab4 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerIndexEdit.xml
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerIndexEdit.xml
@@ -7,11 +7,11 @@
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
     <page name="CustomerIndexEdit" area="Adminhtml" mca="customer/index/edit" module="Magento_Customer">
-        <block name="titleBlock" class="Magento\Theme\Test\Block\Html\Title" locator=".page-title-wrapper .page-title" strategy="css selector"/>
-        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
-        <block name="pageActionsBlock" class="Magento\Customer\Test\Block\Adminhtml\Edit\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-        <block name="customerForm" class="Magento\Customer\Test\Block\Adminhtml\Edit\CustomerForm" locator="[id='page:main-container']" strategy="css selector"/>
-        <block name="configureProductBlock" class="Magento\Catalog\Test\Block\Adminhtml\Product\Composite\Configure" locator="//*[@role='dialog' and ./*[@id='product_composite_configure'] and contains(@style,'display: block')]" strategy="xpath"/>
-        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+        <block name="titleBlock" class="Magento\Theme\Test\Block\Html\Title" locator=".page-title-wrapper .page-title" strategy="css selector" />
+        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector" />
+        <block name="pageActionsBlock" class="Magento\Customer\Test\Block\Adminhtml\Edit\FormPageActions" locator=".page-main-actions" strategy="css selector" />
+        <block name="customerForm" class="Magento\Customer\Test\Block\Adminhtml\Edit\CustomerForm" locator="[id='page:main-container']" strategy="css selector" />
+        <block name="configureProductBlock" class="Magento\Catalog\Test\Block\Adminhtml\Product\Composite\Configure" locator="[data-role='modal']._show" strategy="css selector" />
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector" />
     </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Block/Adminhtml/Product/ProductForm.xml b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Block/Adminhtml/Product/ProductForm.xml
index 19245035879..57aef81a070 100644
--- a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Block/Adminhtml/Product/ProductForm.xml
+++ b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Block/Adminhtml/Product/ProductForm.xml
@@ -8,7 +8,7 @@
 <tabs>
     <downloadable_information>
         <class>\Magento\Downloadable\Test\Block\Adminhtml\Catalog\Product\Edit\Tab\Downloadable</class>
-        <selector>#product_info_tabs_downloadable_items</selector>
+        <selector>#product_info_tabs_product-details</selector>
         <strategy>css selector</strategy>
     </downloadable_information>
 </tabs>
diff --git a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php
index 96ed46ae296..4dbe091458f 100644
--- a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php
+++ b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php
@@ -41,6 +41,13 @@ class Modal extends Block
      */
     protected $inputFieldSelector = '[data-role="promptField"]';
 
+    /**
+     * Modal overlay selector.
+     *
+     * @var string
+     */
+    protected $modalOverlay = '.modals-overlay';
+
     /**
      * Press OK on an alert, confirm, prompt a dialog.
      *
@@ -49,6 +56,7 @@ class Modal extends Block
     public function acceptAlert()
     {
         $this->_rootElement->find($this->acceptButtonSelector)->click();
+        $this->waitModalWindowToDisappear();
     }
 
     /**
@@ -59,6 +67,7 @@ class Modal extends Block
     public function dismissAlert()
     {
         $this->_rootElement->find($this->dismissButtonSelector)->click();
+        $this->waitModalWindowToDisappear();
     }
 
     /**
@@ -69,6 +78,7 @@ class Modal extends Block
     public function closeAlert()
     {
         $this->_rootElement->find($this->closeButtonSelector)->click();
+        $this->waitModalWindowToDisappear();
     }
 
     /**
@@ -91,4 +101,18 @@ class Modal extends Block
     {
         $this->_rootElement->find($this->inputFieldSelector)->setValue($text);
     }
+
+    /**
+     * Wait until modal window will disapper.
+     *
+     * @return void
+     */
+    protected function waitModalWindowToDisappear()
+    {
+        $this->browser->waitUntil(
+            function () {
+                return $this->browser->find($this->modalOverlay)->isVisible() == false ? true : null;
+            }
+        );
+    }
 }
-- 
GitLab


From 218976f33a8f5535d1ddb35a8e684d4b9a58d8ca Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Fri, 23 Oct 2015 16:36:08 +0300
Subject: [PATCH 246/370] MAGETWO-44422: Inconsistent confirm modal window
 behavior

- Fix mini shopping cart
- Update modal and confirm widget (add event to modal and confirm callbacks )
---
 .../Checkout/view/frontend/web/js/sidebar.js     |  3 +++
 .../Magento/Ui/view/base/web/js/modal/confirm.js | 16 ++++++++--------
 .../Magento/Ui/view/base/web/js/modal/modal.js   |  4 ++--
 3 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js b/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js
index 34501bbeb10..f503e5be641 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js
@@ -53,6 +53,9 @@ define([
                     actions: {
                         confirm: function () {
                             self._removeItem($(event.currentTarget));
+                        },
+                        always: function (event) {
+                            event.stopImmediatePropagation();
                         }
                     }
                 });
diff --git a/app/code/Magento/Ui/view/base/web/js/modal/confirm.js b/app/code/Magento/Ui/view/base/web/js/modal/confirm.js
index 098cb866974..1a27b96413c 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/confirm.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/confirm.js
@@ -40,8 +40,8 @@ define([
                 /**
                  * Click handler.
                  */
-                click: function () {
-                    this.closeModal();
+                click: function (event) {
+                    this.closeModal(event);
                 }
             }, {
                 text: $.mage.__('OK'),
@@ -50,8 +50,8 @@ define([
                 /**
                  * Click handler.
                  */
-                click: function () {
-                    this.closeModal(true);
+                click: function (event) {
+                    this.closeModal(event, true);
                 }
             }]
         },
@@ -82,15 +82,15 @@ define([
         /**
          * Close modal window.
          */
-        closeModal: function (result) {
+        closeModal: function (event, result) {
             result = result || false;
 
             if (result) {
-                this.options.actions.confirm();
+                this.options.actions.confirm(event);
             } else {
-                this.options.actions.cancel();
+                this.options.actions.cancel(event);
             }
-            this.options.actions.always();
+            this.options.actions.always(event);
             this.element.bind('confirmclosed', _.bind(this._remove, this));
 
             return this._super();
diff --git a/app/code/Magento/Ui/view/base/web/js/modal/modal.js b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
index b6dd6da1651..23011d607cd 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/modal.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
@@ -78,8 +78,8 @@ define([
                 /**
                  * Default action on button click
                  */
-                click: function () {
-                    this.closeModal();
+                click: function (event) {
+                    this.closeModal(event);
                 }
             }]
         },
-- 
GitLab


From 7a0f58a0dfb50f233e90a6382b43b1e81df14612 Mon Sep 17 00:00:00 2001
From: Oleksii Kolesnyk <okolesnyk@ebay.com>
Date: Fri, 23 Oct 2015 16:37:11 +0300
Subject: [PATCH 247/370] MTA-2723: Functional test maintenance. Part 2

- get messages refactored
---
 .../app/Magento/Backend/Test/Block/Cache.php  |  4 +--
 .../Magento/Backend/Test/Block/Messages.php   | 35 ++++++++++++++-----
 ...AssertCacheIsRefreshableAndInvalidated.php |  2 +-
 .../AssertCacheManagementAction.php           |  2 +-
 .../Constraint/AssertCategorySaveMessage.php  |  2 +-
 .../AssertCategorySuccessDeleteMessage.php    |  2 +-
 .../AssertMassProductUpdateSuccessMessage.php |  2 +-
 .../AssertProductAttributeSaveMessage.php     |  8 +++--
 ...rtProductAttributeSuccessDeleteMessage.php |  5 +--
 .../AssertProductCompareSuccessAddMessage.php |  2 +-
 ...CompareSuccessRemoveAllProductsMessage.php |  2 +-
 ...sertProductCompareSuccessRemoveMessage.php |  2 +-
 .../AssertProductDuplicateMessage.php         |  1 -
 .../Constraint/AssertProductSaveMessage.php   |  1 -
 .../AssertProductSuccessDeleteMessage.php     |  2 +-
 ...ertProductTemplateSuccessDeleteMessage.php |  2 +-
 ...ssertProductTemplateSuccessSaveMessage.php |  2 +-
 ...SuperAttributeImpossibleDeleteMessages.php |  2 +-
 .../AssertCatalogPriceRuleNoticeMessage.php   |  2 +-
 ...rtCatalogPriceRuleSuccessDeleteMessage.php |  2 +-
 ...sertCatalogPriceRuleSuccessSaveMessage.php |  3 --
 .../AssertSearchTermSuccessDeleteMessage.php  |  4 ++-
 ...sertSearchTermSuccessMassDeleteMessage.php |  8 +++--
 .../AssertSearchTermSuccessSaveMessage.php    |  2 +-
 ...AssertAddedProductToCartSuccessMessage.php |  2 +-
 .../AssertTermSuccessDeleteMessage.php        |  2 +-
 .../AssertTermSuccessSaveMessage.php          |  2 +-
 .../AssertCmsBlockDeleteMessage.php           |  2 +-
 .../AssertCmsBlockSuccessSaveMessage.php      |  2 +-
 .../Constraint/AssertCmsPageDeleteMessage.php |  2 +-
 .../AssertCmsPageDuplicateErrorMessage.php    |  2 +-
 .../AssertCmsPageSuccessSaveMessage.php       |  2 +-
 ...AssertCurrencySymbolSuccessSaveMessage.php |  2 +-
 .../AssertChangePasswordFailMessage.php       |  2 +-
 ...ssertCustomerAddressSuccessSaveMessage.php |  2 +-
 ...rtCustomerBackendDuplicateErrorMessage.php |  2 +-
 .../AssertCustomerFailRegisterMessage.php     |  2 +-
 ...rtCustomerForgotPasswordSuccessMessage.php |  9 ++---
 .../AssertCustomerGroupAlreadyExists.php      |  2 +-
 ...ssertCustomerGroupSuccessDeleteMessage.php |  5 +--
 .../AssertCustomerGroupSuccessSaveMessage.php |  2 +-
 .../AssertCustomerInfoSuccessSavedMessage.php |  2 +-
 .../Constraint/AssertCustomerInvalidEmail.php |  2 +-
 ...AssertCustomerMassDeleteSuccessMessage.php |  2 +-
 .../AssertCustomerSuccessDeleteMessage.php    |  2 +-
 .../AssertCustomerSuccessRegisterMessage.php  |  2 +-
 .../AssertCustomerSuccessSaveMessage.php      |  2 +-
 .../AssertMassActionSuccessUpdateMessage.php  |  5 ++-
 .../AssertCurrencyRateSuccessSaveMessage.php  |  2 +-
 ...IntegrationNameDuplicationErrorMessage.php |  2 +-
 ...ertIntegrationSuccessActivationMessage.php |  2 +-
 .../AssertIntegrationSuccessDeleteMessage.php |  2 +-
 ...rtIntegrationSuccessReauthorizeMessage.php |  2 +-
 .../AssertIntegrationSuccessSaveMessage.php   |  2 +-
 ...ntegrationSuccessSaveMessageNotPresent.php |  2 +-
 .../AssertNewsletterSuccessCreateMessage.php  |  2 +-
 .../AbstractAssertInvoiceReportResult.php     |  2 +-
 .../AbstractAssertSalesReportResult.php       |  2 +-
 .../BestsellerProductsReportEntityTest.php    |  2 +-
 .../TestCase/SalesInvoiceReportEntityTest.php |  2 +-
 .../TestCase/SalesOrderReportEntityTest.php   |  2 +-
 .../TestCase/SalesRefundsReportEntityTest.php |  2 +-
 .../ViewedProductsReportEntityTest.php        |  2 +-
 ...ssertProductRatingSuccessDeleteMessage.php |  2 +-
 .../AssertProductRatingSuccessSaveMessage.php |  2 +-
 ...ProductReviewBackendSuccessSaveMessage.php |  2 +-
 ...ctReviewMassActionSuccessDeleteMessage.php |  2 +-
 ...tProductReviewMassActionSuccessMessage.php |  2 +-
 .../AssertReviewCreationSuccessMessage.php    |  2 +-
 .../AssertReviewSuccessSaveMessage.php        |  2 +-
 .../AssertInvoiceSuccessCreateMessage.php     |  2 +-
 ...ssertInvoiceWithShipmentSuccessMessage.php |  2 +-
 ...AssertOrderCancelMassActionFailMessage.php |  2 +-
 ...ertOrderCancelMassActionSuccessMessage.php |  2 +-
 .../AssertOrderCancelSuccessMessage.php       |  2 +-
 .../AssertOrderMassOnHoldSuccessMessage.php   |  2 +-
 .../AssertOrderOnHoldFailMessage.php          |  2 +-
 .../AssertOrderOnHoldSuccessMessage.php       |  2 +-
 .../AssertOrderReleaseFailMessage.php         |  2 +-
 .../AssertOrderReleaseSuccessMessage.php      |  2 +-
 .../AssertOrderStatusDuplicateStatus.php      |  2 +-
 .../AssertOrderStatusSuccessAssignMessage.php |  2 +-
 .../AssertOrderStatusSuccessCreateMessage.php |  2 +-
 ...ssertOrderStatusSuccessUnassignMessage.php |  2 +-
 .../AssertOrderSuccessCreateMessage.php       |  2 +-
 .../AssertRefundSuccessCreateMessage.php      |  2 +-
 ...ssertCartPriceRuleSuccessDeleteMessage.php |  2 +-
 .../AssertCartPriceRuleSuccessSaveMessage.php |  2 +-
 .../AssertShipmentSuccessCreateMessage.php    |  2 +-
 .../AssertSitemapFailFolderSaveMessage.php    |  2 +-
 .../AssertSitemapFailPathSaveMessage.php      |  2 +-
 .../AssertSitemapSuccessDeleteMessage.php     |  2 +-
 .../AssertSitemapSuccessGenerateMessage.php   |  2 +-
 ...tSitemapSuccessSaveAndGenerateMessages.php |  2 +-
 .../AssertSitemapSuccessSaveMessage.php       |  2 +-
 ...oreGroupSuccessDeleteAndBackupMessages.php |  2 +-
 .../AssertStoreGroupSuccessDeleteMessage.php  |  2 +-
 .../AssertStoreGroupSuccessSaveMessage.php    |  2 +-
 ...ertStoreSuccessDeleteAndBackupMessages.php |  2 +-
 .../AssertStoreSuccessDeleteMessage.php       |  2 +-
 .../AssertStoreSuccessSaveMessage.php         |  2 +-
 .../AssertWebsiteSuccessDeleteMessage.php     |  2 +-
 .../AssertWebsiteSuccessSaveMessage.php       |  2 +-
 .../AssertTaxRateSuccessDeleteMessage.php     |  2 +-
 .../AssertTaxRateSuccessSaveMessage.php       |  2 +-
 .../AssertTaxRuleSuccessDeleteMessage.php     |  2 +-
 .../AssertTaxRuleSuccessSaveMessage.php       |  2 +-
 .../AssertUrlRewriteDeletedMessage.php        |  2 +-
 .../AssertUrlRewriteSaveMessage.php           |  2 +-
 .../AssertAccessTokensErrorRevokeMessage.php  |  2 +-
 .../AssertImpossibleDeleteYourOwnAccount.php  |  2 +-
 .../AssertImpossibleDeleteYourOwnRole.php     |  2 +-
 .../AssertRoleSuccessDeleteMessage.php        |  2 +-
 .../AssertRoleSuccessSaveMessage.php          |  2 +-
 .../Constraint/AssertUserDuplicateMessage.php |  2 +-
 ...sertUserFailedLoginByPermissionMessage.php |  2 +-
 .../AssertUserFailedLoginMessage.php          |  2 +-
 .../AssertUserInvalidEmailHostnameMessage.php |  2 +-
 .../AssertUserInvalidEmailMessage.php         |  2 +-
 .../AssertUserSuccessDeleteMessage.php        |  2 +-
 .../AssertUserSuccessSaveMessage.php          |  2 +-
 ...sertCustomVariableSuccessDeleteMessage.php |  2 +-
 ...AssertCustomVariableSuccessSaveMessage.php |  2 +-
 .../AssertWidgetSuccessDeleteMessage.php      |  2 +-
 .../AssertWidgetSuccessSaveMessage.php        |  2 +-
 ...sertAddProductToWishlistSuccessMessage.php |  2 +-
 ...ertMoveProductToWishlistSuccessMessage.php |  2 +-
 .../Constraint/AssertWishlistShareMessage.php |  2 +-
 128 files changed, 169 insertions(+), 151 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Cache.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Cache.php
index be0e3f829e2..eac82f0b3dc 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Cache.php
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Cache.php
@@ -68,7 +68,7 @@ class Cache extends Block
      */
     public function isStorageCacheFlushed()
     {
-        return $this->getMessagesBlock()->getSuccessMessages() == $this->messagesText['cache_storage_flushed'];
+        return $this->getMessagesBlock()->getSuccessMessage() == $this->messagesText['cache_storage_flushed'];
     }
 
     /**
@@ -78,7 +78,7 @@ class Cache extends Block
      */
     public function isMagentoCacheFlushed()
     {
-        return $this->getMessagesBlock()->getSuccessMessages() == $this->messagesText['cache_magento_flushed'];
+        return $this->getMessagesBlock()->getSuccessMessage() == $this->messagesText['cache_magento_flushed'];
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Messages.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Messages.php
index 586f0d9205f..8cfce3edc4c 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Messages.php
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Messages.php
@@ -21,6 +21,13 @@ class Messages extends Block
      */
     protected $successMessage = '[data-ui-id$=message-success]';
 
+    /**
+     * Last success message selector.
+     *
+     * @var string
+     */
+    protected $lastSuccessMessage = '[data-ui-id$=message-success]:last-child';
+
     /**
      * Message link.
      *
@@ -62,7 +69,7 @@ class Messages extends Block
     /**
      * Get all success messages which are present on the page.
      *
-     * @return string|array
+     * @return array
      */
     public function getSuccessMessages()
     {
@@ -74,7 +81,19 @@ class Messages extends Block
             $messages[] = $element->getText();
         }
 
-        return count($messages) > 1 ? $messages : $messages[0];
+        return $messages;
+    }
+
+    /**
+     * Get last success message which is present on the page.
+     *
+     * @return string
+     */
+    public function getSuccessMessage()
+    {
+        $this->waitForElementVisible($this->successMessage);
+
+        return $this->_rootElement->find($this->lastSuccessMessage)->getText();
     }
 
     /**
@@ -96,11 +115,11 @@ class Messages extends Block
     }
 
     /**
-     * Get all error messages which are present on the page.
+     * Get all error message which is present on the page.
      *
      * @return string
      */
-    public function getErrorMessages()
+    public function getErrorMessage()
     {
         return $this->_rootElement
             ->find($this->errorMessage, Locator::SELECTOR_CSS)
@@ -108,13 +127,13 @@ class Messages extends Block
     }
 
     /**
-     * Click on link in the messages which are present on the page.
+     * Click on link in the message which is present on the page.
      *
      * @param string $messageType
      * @param string $linkText
      * @return void
      */
-    public function clickLinkInMessages($messageType, $linkText)
+    public function clickLinkInMessage($messageType, $linkText)
     {
         if ($this->isVisibleMessage($messageType)) {
             $this->_rootElement
@@ -162,7 +181,7 @@ class Messages extends Block
      *
      * @return string
      */
-    public function getNoticeMessages()
+    public function getNoticeMessage()
     {
         $this->waitForElementVisible($this->noticeMessage);
         return $this->_rootElement->find($this->noticeMessage)->getText();
@@ -173,7 +192,7 @@ class Messages extends Block
      *
      * @return string
      */
-    public function getWarningMessages()
+    public function getWarningMessage()
     {
         $this->waitForElementVisible($this->warningMessage);
         return $this->_rootElement->find($this->warningMessage)->getText();
diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertCacheIsRefreshableAndInvalidated.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertCacheIsRefreshableAndInvalidated.php
index 5492c69ef0b..76ab1d8b104 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertCacheIsRefreshableAndInvalidated.php
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertCacheIsRefreshableAndInvalidated.php
@@ -41,7 +41,7 @@ class AssertCacheIsRefreshableAndInvalidated extends AbstractConstraint
 
         \PHPUnit_Framework_Assert::assertEquals(
             sprintf(self::SUCCESS_MESSAGE, count($items)),
-            $adminCache->getMessagesBlock()->getSuccessMessages(),
+            $adminCache->getMessagesBlock()->getSuccessMessage(),
             'Cache is Invalid and refreshable.'
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertCacheManagementAction.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertCacheManagementAction.php
index 5ca1e4e677b..1be33c03244 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertCacheManagementAction.php
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertCacheManagementAction.php
@@ -25,7 +25,7 @@ class AssertCacheManagementAction extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             $successMessage,
-            $adminCache->getMessagesBlock()->getSuccessMessages(),
+            $adminCache->getMessagesBlock()->getSuccessMessage(),
             'Action is not successful.'
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertCategorySaveMessage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertCategorySaveMessage.php
index 454379830cd..c983a5afc6e 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertCategorySaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertCategorySaveMessage.php
@@ -28,7 +28,7 @@ class AssertCategorySaveMessage extends AbstractConstraint
      */
     public function processAssert(CatalogCategoryEdit $catalogCategoryEdit)
     {
-        $actualMessage = $catalogCategoryEdit->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $catalogCategoryEdit->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertCategorySuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertCategorySuccessDeleteMessage.php
index bb77a39089f..dbc9db52556 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertCategorySuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertCategorySuccessDeleteMessage.php
@@ -28,7 +28,7 @@ class AssertCategorySuccessDeleteMessage extends AbstractConstraint
      */
     public function processAssert(CatalogCategoryEdit $categoryEdit)
     {
-        $actualMessage = $categoryEdit->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $categoryEdit->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_DELETE_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertMassProductUpdateSuccessMessage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertMassProductUpdateSuccessMessage.php
index 4aa368dcf71..04639082d28 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertMassProductUpdateSuccessMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertMassProductUpdateSuccessMessage.php
@@ -30,7 +30,7 @@ class AssertMassProductUpdateSuccessMessage extends AbstractConstraint
     {
         $countProducts = count($products) ? count($products) : 1;
         $expectedMessage = sprintf(self::SUCCESS_MESSAGE, $countProducts);
-        $actualMessage = $productGrid->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $productGrid->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             $expectedMessage,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeSaveMessage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeSaveMessage.php
index 96b39d0d964..97dab27640a 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeSaveMessage.php
@@ -14,6 +14,9 @@ use Magento\Mtf\Constraint\AbstractConstraint;
  */
 class AssertProductAttributeSaveMessage extends AbstractConstraint
 {
+    /**
+     * Product attribute success save message.
+     */
     const SUCCESS_MESSAGE = 'You saved the product attribute.';
 
     /**
@@ -24,12 +27,13 @@ class AssertProductAttributeSaveMessage extends AbstractConstraint
      */
     public function processAssert(CatalogProductAttributeIndex $attributeIndex)
     {
+        $actualMessage = $attributeIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
-            $attributeIndex->getMessagesBlock()->getSuccessMessages(),
+            $actualMessage,
             'Wrong success message is displayed.'
             . "\nExpected: " . self::SUCCESS_MESSAGE
-            . "\nActual: " . $attributeIndex->getMessagesBlock()->getSuccessMessages()
+            . "\nActual: " . $actualMessage
         );
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeSuccessDeleteMessage.php
index e41e1b4ab6d..c950b22bff3 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeSuccessDeleteMessage.php
@@ -25,12 +25,13 @@ class AssertProductAttributeSuccessDeleteMessage extends AbstractConstraint
      */
     public function processAssert(CatalogProductAttributeIndex $attributeIndex)
     {
+        $actualMessage = $attributeIndex->getMessagesBlock()->getSuccessMessages();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
-            $attributeIndex->getMessagesBlock()->getSuccessMessages(),
+            $actualMessage,
             'Wrong success message is displayed.'
             . "\nExpected: " . self::SUCCESS_MESSAGE
-            . "\nActual: " . $attributeIndex->getMessagesBlock()->getSuccessMessages()
+            . "\nActual: " . $actualMessage
         );
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductCompareSuccessAddMessage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductCompareSuccessAddMessage.php
index 733c8b72659..20f0ee59b38 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductCompareSuccessAddMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductCompareSuccessAddMessage.php
@@ -31,7 +31,7 @@ class AssertProductCompareSuccessAddMessage extends AbstractConstraint
     public function processAssert(CatalogProductView $catalogProductView, FixtureInterface $product)
     {
         $successMessage = sprintf(self::SUCCESS_MESSAGE, $product->getName());
-        $actualMessage = $catalogProductView->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $catalogProductView->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             $successMessage,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductCompareSuccessRemoveAllProductsMessage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductCompareSuccessRemoveAllProductsMessage.php
index 9fe455b2f26..bd63bb17bb8 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductCompareSuccessRemoveAllProductsMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductCompareSuccessRemoveAllProductsMessage.php
@@ -24,7 +24,7 @@ class AssertProductCompareSuccessRemoveAllProductsMessage extends AbstractConstr
      */
     public function processAssert(CatalogProductView $catalogProductView)
     {
-        $actualMessage = $catalogProductView->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $catalogProductView->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductCompareSuccessRemoveMessage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductCompareSuccessRemoveMessage.php
index dfe1e7530b8..64fa8a851e7 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductCompareSuccessRemoveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductCompareSuccessRemoveMessage.php
@@ -28,7 +28,7 @@ class AssertProductCompareSuccessRemoveMessage extends AbstractConstraint
     public function processAssert(CatalogProductCompare $catalogProductCompare, FixtureInterface $product)
     {
         $successMessage = sprintf(self::SUCCESS_MESSAGE, $product->getName());
-        $actualMessage = $catalogProductCompare->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $catalogProductCompare->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals($successMessage, $actualMessage, 'Wrong success message is displayed.');
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductDuplicateMessage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductDuplicateMessage.php
index 4c79e9f1a32..1e034ca0052 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductDuplicateMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductDuplicateMessage.php
@@ -28,7 +28,6 @@ class AssertProductDuplicateMessage extends AbstractConstraint
     public function processAssert(CatalogProductEdit $productPage)
     {
         $actualMessages = $productPage->getMessagesBlock()->getSuccessMessages();
-        $actualMessages = is_array($actualMessages) ? $actualMessages : [$actualMessages];
         \PHPUnit_Framework_Assert::assertContains(
             self::DUPLICATE_MESSAGE,
             $actualMessages,
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductSaveMessage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductSaveMessage.php
index 21c5c2353c6..fa73d7abeba 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductSaveMessage.php
@@ -28,7 +28,6 @@ class AssertProductSaveMessage extends AbstractConstraint
     public function processAssert(CatalogProductEdit $productPage)
     {
         $actualMessages = $productPage->getMessagesBlock()->getSuccessMessages();
-        $actualMessages = is_array($actualMessages) ? $actualMessages : [$actualMessages];
         \PHPUnit_Framework_Assert::assertContains(
             self::SUCCESS_MESSAGE,
             $actualMessages,
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductSuccessDeleteMessage.php
index eb40dd8d445..17927acc9be 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductSuccessDeleteMessage.php
@@ -31,7 +31,7 @@ class AssertProductSuccessDeleteMessage extends AbstractConstraint
     {
         $products = is_array($product) ? $product : [$product];
         $deleteMessage = sprintf(self::SUCCESS_DELETE_MESSAGE, count($products));
-        $actualMessage = $productPage->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $productPage->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             $deleteMessage,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateSuccessDeleteMessage.php
index 43cff91896a..478d5c4964d 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateSuccessDeleteMessage.php
@@ -28,7 +28,7 @@ class AssertProductTemplateSuccessDeleteMessage extends AbstractConstraint
      */
     public function processAssert(CatalogProductSetIndex $productSetIndex)
     {
-        $actualMessage = $productSetIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $productSetIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_DELETE_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateSuccessSaveMessage.php
index 457cac5b708..57cedd0127e 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductTemplateSuccessSaveMessage.php
@@ -28,7 +28,7 @@ class AssertProductTemplateSuccessSaveMessage extends AbstractConstraint
      */
     public function processAssert(CatalogProductSetIndex $productSetIndex)
     {
-        $actualMessage = $productSetIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $productSetIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertUsedSuperAttributeImpossibleDeleteMessages.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertUsedSuperAttributeImpossibleDeleteMessages.php
index bfd1c1bd919..ce954986fa2 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertUsedSuperAttributeImpossibleDeleteMessages.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertUsedSuperAttributeImpossibleDeleteMessages.php
@@ -30,7 +30,7 @@ class AssertUsedSuperAttributeImpossibleDeleteMessages extends AbstractConstrain
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::ERROR_DELETE_MESSAGE,
-            $newPage->getMessagesBlock()->getErrorMessages(),
+            $newPage->getMessagesBlock()->getErrorMessage(),
             'Wrong impossible to delete message is not displayed.'
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleNoticeMessage.php b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleNoticeMessage.php
index 889735d7f2e..813711e273f 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleNoticeMessage.php
+++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleNoticeMessage.php
@@ -28,7 +28,7 @@ class AssertCatalogPriceRuleNoticeMessage extends AbstractConstraint
     public function processAssert(
         CatalogRuleIndex $pageCatalogRuleIndex
     ) {
-        $actualMessage = $pageCatalogRuleIndex->getMessagesBlock()->getNoticeMessages();
+        $actualMessage = $pageCatalogRuleIndex->getMessagesBlock()->getNoticeMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::NOTICE_MESSAGE_RULES . self::NOTICE_MESSAGE_APPLY,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleSuccessDeleteMessage.php
index f8531c5540c..9b0f07e848f 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleSuccessDeleteMessage.php
@@ -24,7 +24,7 @@ class AssertCatalogPriceRuleSuccessDeleteMessage extends AbstractConstraint
      */
     public function processAssert(CatalogRuleIndex $pageCatalogRuleIndex)
     {
-        $actualMessage = $pageCatalogRuleIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $pageCatalogRuleIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_DELETE_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleSuccessSaveMessage.php
index a1cdb0e31bd..23418a8638b 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Constraint/AssertCatalogPriceRuleSuccessSaveMessage.php
@@ -25,9 +25,6 @@ class AssertCatalogPriceRuleSuccessSaveMessage extends AbstractConstraint
     public function processAssert(CatalogRuleIndex $pageCatalogRuleIndex)
     {
         $actualMessages = $pageCatalogRuleIndex->getMessagesBlock()->getSuccessMessages();
-        if (!is_array($actualMessages)) {
-            $actualMessages = [$actualMessages];
-        }
         \PHPUnit_Framework_Assert::assertContains(
             self::SUCCESS_MESSAGE,
             $actualMessages,
diff --git a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Constraint/AssertSearchTermSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Constraint/AssertSearchTermSuccessDeleteMessage.php
index 0177e5d8860..8531933cebe 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Constraint/AssertSearchTermSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Constraint/AssertSearchTermSuccessDeleteMessage.php
@@ -32,11 +32,13 @@ class AssertSearchTermSuccessDeleteMessage extends AbstractConstraint
      */
     public function processAssert(CatalogSearchIndex $indexPage)
     {
-        $actualMessage = $indexPage->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $indexPage->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_DELETE_MESSAGE,
             $actualMessage,
             'Wrong success message is displayed.'
+            . "\nExpected: " . self::SUCCESS_DELETE_MESSAGE
+            . "\nActual: " . $actualMessage
         );
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Constraint/AssertSearchTermSuccessMassDeleteMessage.php b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Constraint/AssertSearchTermSuccessMassDeleteMessage.php
index 4a6a3623910..425c019d942 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Constraint/AssertSearchTermSuccessMassDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Constraint/AssertSearchTermSuccessMassDeleteMessage.php
@@ -28,12 +28,14 @@ class AssertSearchTermSuccessMassDeleteMessage extends AbstractConstraint
      */
     public function processAssert(array $searchTerms, CatalogSearchIndex $indexPage)
     {
-        $actualMessage = $indexPage->getMessagesBlock()->getSuccessMessages();
-        $successMessages = sprintf(self::SUCCESS_MESSAGE, count($searchTerms));
+        $actualMessage = $indexPage->getMessagesBlock()->getSuccessMessage();
+        $expectedMessage = sprintf(self::SUCCESS_MESSAGE, count($searchTerms));
         \PHPUnit_Framework_Assert::assertEquals(
-            $successMessages,
+            $expectedMessage,
             $actualMessage,
             'Wrong success message is displayed.'
+            . "\nExpected: " . $expectedMessage
+            . "\nActual: " . $actualMessage
         );
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Constraint/AssertSearchTermSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Constraint/AssertSearchTermSuccessSaveMessage.php
index d80a6eab3d8..7316f846b6c 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Constraint/AssertSearchTermSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Constraint/AssertSearchTermSuccessSaveMessage.php
@@ -28,7 +28,7 @@ class AssertSearchTermSuccessSaveMessage extends AbstractConstraint
      */
     public function processAssert(CatalogSearchIndex $indexPage)
     {
-        $actualMessage = $indexPage->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $indexPage->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertAddedProductToCartSuccessMessage.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertAddedProductToCartSuccessMessage.php
index af0f03c0247..80f275de861 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertAddedProductToCartSuccessMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Constraint/AssertAddedProductToCartSuccessMessage.php
@@ -32,7 +32,7 @@ class AssertAddedProductToCartSuccessMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             sprintf(self::SUCCESS_MESSAGE, $product->getName()),
-            $checkoutCart->getMessagesBlock()->getSuccessMessages()
+            $checkoutCart->getMessagesBlock()->getSuccessMessage()
         );
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Constraint/AssertTermSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Constraint/AssertTermSuccessDeleteMessage.php
index eb57e0ac471..f3b0e8cbae1 100644
--- a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Constraint/AssertTermSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Constraint/AssertTermSuccessDeleteMessage.php
@@ -30,7 +30,7 @@ class AssertTermSuccessDeleteMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_DELETE_MESSAGE,
-            $agreementIndex->getMessagesBlock()->getSuccessMessages(),
+            $agreementIndex->getMessagesBlock()->getSuccessMessage(),
             'Wrong success delete message is displayed.'
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Constraint/AssertTermSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Constraint/AssertTermSuccessSaveMessage.php
index ba715ffa968..c55619144c7 100644
--- a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Constraint/AssertTermSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Constraint/AssertTermSuccessSaveMessage.php
@@ -30,7 +30,7 @@ class AssertTermSuccessSaveMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_SAVE_MESSAGE,
-            $agreementIndex->getMessagesBlock()->getSuccessMessages(),
+            $agreementIndex->getMessagesBlock()->getSuccessMessage(),
             'Wrong success message is displayed.'
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Constraint/AssertCmsBlockDeleteMessage.php b/dev/tests/functional/tests/app/Magento/Cms/Test/Constraint/AssertCmsBlockDeleteMessage.php
index 965b7fe07cc..edd10f3fe50 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Constraint/AssertCmsBlockDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Constraint/AssertCmsBlockDeleteMessage.php
@@ -24,7 +24,7 @@ class AssertCmsBlockDeleteMessage extends AbstractConstraint
      */
     public function processAssert(CmsBlockIndex $cmsBlockIndex)
     {
-        $actualMessage = $cmsBlockIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $cmsBlockIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_DELETE_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Constraint/AssertCmsBlockSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/Cms/Test/Constraint/AssertCmsBlockSuccessSaveMessage.php
index 1c2696d6ed3..374c9b98527 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Constraint/AssertCmsBlockSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Constraint/AssertCmsBlockSuccessSaveMessage.php
@@ -24,7 +24,7 @@ class AssertCmsBlockSuccessSaveMessage extends AbstractConstraint
      */
     public function processAssert(CmsBlockIndex $cmsBlockIndex)
     {
-        $actualMessage = $cmsBlockIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $cmsBlockIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_SAVE_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Constraint/AssertCmsPageDeleteMessage.php b/dev/tests/functional/tests/app/Magento/Cms/Test/Constraint/AssertCmsPageDeleteMessage.php
index ff01fa41f99..7139477fb97 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Constraint/AssertCmsPageDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Constraint/AssertCmsPageDeleteMessage.php
@@ -24,7 +24,7 @@ class AssertCmsPageDeleteMessage extends AbstractConstraint
      */
     public function processAssert(CmsPageIndex $cmsIndex)
     {
-        $actualMessage = $cmsIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $cmsIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_DELETE_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Constraint/AssertCmsPageDuplicateErrorMessage.php b/dev/tests/functional/tests/app/Magento/Cms/Test/Constraint/AssertCmsPageDuplicateErrorMessage.php
index 97e5247f658..bd0af6ef0a3 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Constraint/AssertCmsPageDuplicateErrorMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Constraint/AssertCmsPageDuplicateErrorMessage.php
@@ -24,7 +24,7 @@ class AssertCmsPageDuplicateErrorMessage extends AbstractConstraint
      */
     public function processAssert(CmsPageIndex $cmsIndex)
     {
-        $message = $cmsIndex->getMessagesBlock()->getErrorMessages();
+        $message = $cmsIndex->getMessagesBlock()->getErrorMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::ERROR_SAVE_MESSAGE,
             $message,
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Constraint/AssertCmsPageSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/Cms/Test/Constraint/AssertCmsPageSuccessSaveMessage.php
index c57528db373..957ec384c43 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Constraint/AssertCmsPageSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Constraint/AssertCmsPageSuccessSaveMessage.php
@@ -24,7 +24,7 @@ class AssertCmsPageSuccessSaveMessage extends AbstractConstraint
      */
     public function processAssert(CmsPageIndex $cmsIndex)
     {
-        $actualMessage = $cmsIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $cmsIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_SAVE_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/CurrencySymbol/Test/Constraint/AssertCurrencySymbolSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/CurrencySymbol/Test/Constraint/AssertCurrencySymbolSuccessSaveMessage.php
index 912106f71bb..113e4774672 100644
--- a/dev/tests/functional/tests/app/Magento/CurrencySymbol/Test/Constraint/AssertCurrencySymbolSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/CurrencySymbol/Test/Constraint/AssertCurrencySymbolSuccessSaveMessage.php
@@ -25,7 +25,7 @@ class AssertCurrencySymbolSuccessSaveMessage extends AbstractConstraint
      */
     public function processAssert(SystemCurrencySymbolIndex $currencySymbolIndex)
     {
-        $actualMessage = $currencySymbolIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $currencySymbolIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_SAVE_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertChangePasswordFailMessage.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertChangePasswordFailMessage.php
index 48c58b1c316..cfe0d1f61cd 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertChangePasswordFailMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertChangePasswordFailMessage.php
@@ -30,7 +30,7 @@ class AssertChangePasswordFailMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::FAIL_MESSAGE,
-            $customerAccountEdit->getMessages()->getErrorMessages()
+            $customerAccountEdit->getMessages()->getErrorMessage()
         );
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerAddressSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerAddressSuccessSaveMessage.php
index 9dbf30c353e..195f0df3ca3 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerAddressSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerAddressSuccessSaveMessage.php
@@ -28,7 +28,7 @@ class AssertCustomerAddressSuccessSaveMessage extends AbstractConstraint
      */
     public function processAssert(CustomerAccountIndex $customerAccountIndex)
     {
-        $successMessage = $customerAccountIndex->getMessages()->getSuccessMessages();
+        $successMessage = $customerAccountIndex->getMessages()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $successMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerBackendDuplicateErrorMessage.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerBackendDuplicateErrorMessage.php
index 27394f8e074..f17dbafe7e2 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerBackendDuplicateErrorMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerBackendDuplicateErrorMessage.php
@@ -27,7 +27,7 @@ class AssertCustomerBackendDuplicateErrorMessage extends AbstractConstraint
      */
     public function processAssert(CustomerIndex $customerIndexPage)
     {
-        $actualMessage = $customerIndexPage->getMessagesBlock()->getErrorMessages();
+        $actualMessage = $customerIndexPage->getMessagesBlock()->getErrorMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::ERROR_SAVE_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerFailRegisterMessage.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerFailRegisterMessage.php
index 2cb983b4bbc..a37e68ed7f1 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerFailRegisterMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerFailRegisterMessage.php
@@ -22,7 +22,7 @@ class AssertCustomerFailRegisterMessage extends AbstractConstraint
      */
     public function processAssert(CustomerAccountCreate $registerPage)
     {
-        $errorMessage = $registerPage->getMessagesBlock()->getErrorMessages();
+        $errorMessage = $registerPage->getMessagesBlock()->getErrorMessage();
         \PHPUnit_Framework_Assert::assertNotEmpty(
             $errorMessage,
             'No error message is displayed.'
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerForgotPasswordSuccessMessage.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerForgotPasswordSuccessMessage.php
index 318b5e531a9..c06a121ff20 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerForgotPasswordSuccessMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerForgotPasswordSuccessMessage.php
@@ -29,14 +29,9 @@ class AssertCustomerForgotPasswordSuccessMessage extends AbstractConstraint
         CustomerAccountLogin $customerLogin,
         Customer $customer
     ) {
-        $message = sprintf(
-            self::SUCCESS_MESSAGE,
-            $customer->getEmail()
-        );
-
         \PHPUnit_Framework_Assert::assertEquals(
-            $message,
-            $customerLogin->getMessages()->getSuccessMessages(),
+            sprintf(self::SUCCESS_MESSAGE, $customer->getEmail()),
+            $customerLogin->getMessages()->getSuccessMessage(),
             'Wrong forgot password message is displayed.'
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerGroupAlreadyExists.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerGroupAlreadyExists.php
index 6796c9aa087..50982fc8a6a 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerGroupAlreadyExists.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerGroupAlreadyExists.php
@@ -24,7 +24,7 @@ class AssertCustomerGroupAlreadyExists extends AbstractConstraint
      */
     public function processAssert(CustomerGroupNew $customerGroupNew)
     {
-        $actualMessage = $customerGroupNew->getMessagesBlock()->getErrorMessages();
+        $actualMessage = $customerGroupNew->getMessagesBlock()->getErrorMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::ERROR_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerGroupSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerGroupSuccessDeleteMessage.php
index 81b3fc72b63..8173d3cde87 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerGroupSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerGroupSuccessDeleteMessage.php
@@ -24,12 +24,13 @@ class AssertCustomerGroupSuccessDeleteMessage extends AbstractConstraint
      */
     public function processAssert(CustomerGroupIndex $customerGroupIndex)
     {
+        $actualMessage = $customerGroupIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_DELETE_MESSAGE,
-            $customerGroupIndex->getMessagesBlock()->getSuccessMessages(),
+            $actualMessage,
             'Wrong message is displayed.'
             . "\nExpected: " . self::SUCCESS_DELETE_MESSAGE
-            . "\nActual: " . $customerGroupIndex->getMessagesBlock()->getSuccessMessages()
+            . "\nActual: " . $actualMessage
         );
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerGroupSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerGroupSuccessSaveMessage.php
index 9069acfce81..6ae95ea7f4d 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerGroupSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerGroupSuccessSaveMessage.php
@@ -24,7 +24,7 @@ class AssertCustomerGroupSuccessSaveMessage extends AbstractConstraint
      */
     public function processAssert(CustomerGroupIndex $customerGroupIndex)
     {
-        $actualMessage = $customerGroupIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $customerGroupIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerInfoSuccessSavedMessage.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerInfoSuccessSavedMessage.php
index 6396afca4ba..6a8d9c06ee2 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerInfoSuccessSavedMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerInfoSuccessSavedMessage.php
@@ -28,7 +28,7 @@ class AssertCustomerInfoSuccessSavedMessage extends AbstractConstraint
      */
     public function processAssert(CustomerAccountIndex $customerAccountIndex)
     {
-        $successMessage = $customerAccountIndex->getMessages()->getSuccessMessages();
+        $successMessage = $customerAccountIndex->getMessages()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $successMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerInvalidEmail.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerInvalidEmail.php
index 37ad42ad921..922310e227e 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerInvalidEmail.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerInvalidEmail.php
@@ -29,7 +29,7 @@ class AssertCustomerInvalidEmail extends AbstractConstraint
     public function processAssert(Customer $customer, CustomerIndexNew $pageCustomerIndexNew)
     {
         $expectMessage = str_replace('%email%', $customer->getEmail(), self::ERROR_EMAIL_MESSAGE);
-        $actualMessage = $pageCustomerIndexNew->getMessagesBlock()->getErrorMessages();
+        $actualMessage = $pageCustomerIndexNew->getMessagesBlock()->getErrorMessage();
 
         \PHPUnit_Framework_Assert::assertEquals(
             $expectMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerMassDeleteSuccessMessage.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerMassDeleteSuccessMessage.php
index c18c312e885..3ac60cd83f9 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerMassDeleteSuccessMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerMassDeleteSuccessMessage.php
@@ -31,7 +31,7 @@ class AssertCustomerMassDeleteSuccessMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             sprintf(self::SUCCESS_DELETE_MESSAGE, $customersQtyToDelete),
-            $customerIndexPage->getMessagesBlock()->getSuccessMessages(),
+            $customerIndexPage->getMessagesBlock()->getSuccessMessage(),
             'Wrong delete message is displayed.'
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerSuccessDeleteMessage.php
index 632ab54f8f3..36474ed8b9a 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerSuccessDeleteMessage.php
@@ -24,7 +24,7 @@ class AssertCustomerSuccessDeleteMessage extends AbstractConstraint
      */
     public function processAssert(CustomerIndex $customerIndexPage)
     {
-        $actualMessage = $customerIndexPage->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $customerIndexPage->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::DELETE_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerSuccessRegisterMessage.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerSuccessRegisterMessage.php
index bf70b980634..7d6cc8d2778 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerSuccessRegisterMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerSuccessRegisterMessage.php
@@ -24,7 +24,7 @@ class AssertCustomerSuccessRegisterMessage extends AbstractConstraint
      */
     public function processAssert(CustomerAccountCreate $registerPage)
     {
-        $actualMessage = $registerPage->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $registerPage->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerSuccessSaveMessage.php
index 47e8faddaf5..ca217f7a63e 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertCustomerSuccessSaveMessage.php
@@ -25,7 +25,7 @@ class AssertCustomerSuccessSaveMessage extends AbstractConstraint
      */
     public function processAssert(CustomerIndex $pageCustomerIndex)
     {
-        $actualMessage = $pageCustomerIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $pageCustomerIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertMassActionSuccessUpdateMessage.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertMassActionSuccessUpdateMessage.php
index 1d14f0995f6..8b3c727bd0e 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertMassActionSuccessUpdateMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Constraint/AssertMassActionSuccessUpdateMessage.php
@@ -35,9 +35,8 @@ class AssertMassActionSuccessUpdateMessage extends AbstractConstraint
     public function processAssert($customer, CustomerIndex $pageCustomerIndex)
     {
         $customers = is_array($customer) ? $customer : [$customer];
-        $customerCount = count($customers);
-        $actualMessage = $pageCustomerIndex->getMessagesBlock()->getSuccessMessages();
-        \PHPUnit_Framework_Assert::assertEquals(sprintf(self::UPDATE_MESSAGE, $customerCount), $actualMessage);
+        $actualMessage = $pageCustomerIndex->getMessagesBlock()->getSuccessMessage();
+        \PHPUnit_Framework_Assert::assertEquals(sprintf(self::UPDATE_MESSAGE, count($customers)), $actualMessage);
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Directory/Test/Constraint/AssertCurrencyRateSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/Directory/Test/Constraint/AssertCurrencyRateSuccessSaveMessage.php
index 3a9f7e82a39..2ce8cb0878d 100644
--- a/dev/tests/functional/tests/app/Magento/Directory/Test/Constraint/AssertCurrencyRateSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Directory/Test/Constraint/AssertCurrencyRateSuccessSaveMessage.php
@@ -24,7 +24,7 @@ class AssertCurrencyRateSuccessSaveMessage extends AbstractConstraint
      */
     public function processAssert(SystemCurrencyIndex $currencyIndexPage)
     {
-        $actualMessage = $currencyIndexPage->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $currencyIndexPage->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationNameDuplicationErrorMessage.php b/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationNameDuplicationErrorMessage.php
index 99613bf4623..c3d21a5f0a4 100644
--- a/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationNameDuplicationErrorMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationNameDuplicationErrorMessage.php
@@ -29,7 +29,7 @@ class AssertIntegrationNameDuplicationErrorMessage extends AbstractConstraint
         Integration $integration
     ) {
         $expectedMessage = sprintf(self::ERROR_DUPLICATE_INTEGRATION_NAME, $integration->getName());
-        $actualMessage = $integrationIndexPage->getMessagesBlock()->getErrorMessages();
+        $actualMessage = $integrationIndexPage->getMessagesBlock()->getErrorMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             $expectedMessage,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationSuccessActivationMessage.php b/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationSuccessActivationMessage.php
index ea11e6add5d..f4df100da94 100644
--- a/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationSuccessActivationMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationSuccessActivationMessage.php
@@ -30,7 +30,7 @@ class AssertIntegrationSuccessActivationMessage extends AbstractConstraint
         Integration $integration
     ) {
         $expectedMessage = sprintf(self::SUCCESS_ACTIVATION_MESSAGE, $integration->getName());
-        $actualMessage = $integrationIndexPage->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $integrationIndexPage->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             $expectedMessage,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationSuccessDeleteMessage.php
index 65bc5bb66af..8cefafe433d 100644
--- a/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationSuccessDeleteMessage.php
@@ -28,7 +28,7 @@ class AssertIntegrationSuccessDeleteMessage extends AbstractConstraint
     public function processAssert(IntegrationIndex $integrationIndexPage, Integration $integration)
     {
         $expectedMessage = sprintf(self::SUCCESS_DELETE_MESSAGE, $integration->getName());
-        $actualMessage = $integrationIndexPage->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $integrationIndexPage->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             $expectedMessage,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationSuccessReauthorizeMessage.php b/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationSuccessReauthorizeMessage.php
index 485acdb7c32..71960784c17 100644
--- a/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationSuccessReauthorizeMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationSuccessReauthorizeMessage.php
@@ -34,7 +34,7 @@ class AssertIntegrationSuccessReauthorizeMessage extends AbstractConstraint
     ) {
         \PHPUnit_Framework_Assert::assertEquals(
             sprintf(self::SUCCESS_REAUTHORIZE_MESSAGE, $integration->getName()),
-            $integrationIndexPage->getMessagesBlock()->getSuccessMessages(),
+            $integrationIndexPage->getMessagesBlock()->getSuccessMessage(),
             "Wrong success message is displayed."
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationSuccessSaveMessage.php
index 02563ed4cc2..ca55d860c72 100644
--- a/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationSuccessSaveMessage.php
@@ -35,7 +35,7 @@ class AssertIntegrationSuccessSaveMessage extends AbstractConstraint
             ? $initialIntegration->getName()
             : $integration->getName();
         $expectedMessage = sprintf(self::SUCCESS_SAVE_MESSAGE, $name);
-        $actualMessage = $integrationIndexPage->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $integrationIndexPage->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             $expectedMessage,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationSuccessSaveMessageNotPresent.php b/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationSuccessSaveMessageNotPresent.php
index ac23f602613..ab9f15ae7b9 100644
--- a/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationSuccessSaveMessageNotPresent.php
+++ b/dev/tests/functional/tests/app/Magento/Integration/Test/Constraint/AssertIntegrationSuccessSaveMessageNotPresent.php
@@ -26,7 +26,7 @@ class AssertIntegrationSuccessSaveMessageNotPresent extends AbstractConstraint
         $noSuccessMessage = false;
         if ($integrationIndex->getMessagesBlock()->isVisible()) {
             try {
-                $integrationIndex->getMessagesBlock()->getSuccessMessages();
+                $integrationIndex->getMessagesBlock()->getSuccessMessage();
             } catch (\PHPUnit_Extensions_Selenium2TestCase_WebDriverException $e) {
                 $noSuccessMessage = true;
             }
diff --git a/dev/tests/functional/tests/app/Magento/Newsletter/Test/Constraint/AssertNewsletterSuccessCreateMessage.php b/dev/tests/functional/tests/app/Magento/Newsletter/Test/Constraint/AssertNewsletterSuccessCreateMessage.php
index 0a71b2cc8ae..0a006d9cb5d 100644
--- a/dev/tests/functional/tests/app/Magento/Newsletter/Test/Constraint/AssertNewsletterSuccessCreateMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Newsletter/Test/Constraint/AssertNewsletterSuccessCreateMessage.php
@@ -29,7 +29,7 @@ class AssertNewsletterSuccessCreateMessage extends AbstractConstraint
      */
     public function processAssert(TemplateIndex $templateIndex)
     {
-        $actualMessage = $templateIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $templateIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AbstractAssertInvoiceReportResult.php b/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AbstractAssertInvoiceReportResult.php
index 0bf83c62bc8..c8efec8aec2 100644
--- a/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AbstractAssertInvoiceReportResult.php
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AbstractAssertInvoiceReportResult.php
@@ -55,7 +55,7 @@ abstract class AbstractAssertInvoiceReportResult extends AbstractConstraint
     protected function searchInInvoiceReportGrid(array $invoiceReport)
     {
         $this->salesInvoiceReport->open();
-        $this->salesInvoiceReport->getMessagesBlock()->clickLinkInMessages('notice', 'here');
+        $this->salesInvoiceReport->getMessagesBlock()->clickLinkInMessage('notice', 'here');
         $this->salesInvoiceReport->getFilterForm()->viewsReport($invoiceReport);
         $this->salesInvoiceReport->getActionBlock()->showReport();
     }
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AbstractAssertSalesReportResult.php b/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AbstractAssertSalesReportResult.php
index 16af632c450..d4f5bdda3b2 100644
--- a/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AbstractAssertSalesReportResult.php
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/Constraint/AbstractAssertSalesReportResult.php
@@ -39,7 +39,7 @@ abstract class AbstractAssertSalesReportResult extends AbstractConstraint
     protected function searchInSalesReportGrid(array $salesReport)
     {
         $this->salesReportPage->open();
-        $this->salesReportPage->getMessagesBlock()->clickLinkInMessages('notice', 'here');
+        $this->salesReportPage->getMessagesBlock()->clickLinkInMessage('notice', 'here');
         $this->salesReportPage->getFilterBlock()->viewsReport($salesReport);
         $this->salesReportPage->getActionBlock()->showReport();
     }
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/BestsellerProductsReportEntityTest.php b/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/BestsellerProductsReportEntityTest.php
index 1ad8d1b3356..dc532d027d5 100644
--- a/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/BestsellerProductsReportEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/BestsellerProductsReportEntityTest.php
@@ -64,7 +64,7 @@ class BestsellerProductsReportEntityTest extends Injectable
         // Preconditions
         $order->persist();
         $this->bestsellers->open();
-        $this->bestsellers->getMessagesBlock()->clickLinkInMessages('notice', 'here');
+        $this->bestsellers->getMessagesBlock()->clickLinkInMessage('notice', 'here');
 
         // Steps
         $this->bestsellers->getFilterBlock()->viewsReport($bestsellerReport);
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/SalesInvoiceReportEntityTest.php b/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/SalesInvoiceReportEntityTest.php
index 895f48a9eca..1bc9125d8c7 100644
--- a/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/SalesInvoiceReportEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/SalesInvoiceReportEntityTest.php
@@ -52,7 +52,7 @@ class SalesInvoiceReportEntityTest extends Injectable
     {
         // Preconditions
         $salesInvoiceReport->open();
-        $salesInvoiceReport->getMessagesBlock()->clickLinkInMessages('notice', 'here');
+        $salesInvoiceReport->getMessagesBlock()->clickLinkInMessage('notice', 'here');
         $salesInvoiceReport->getFilterForm()->viewsReport($invoiceReport);
         $salesInvoiceReport->getActionBlock()->showReport();
         $initialInvoiceResult = $salesInvoiceReport->getGridBlock()->getLastResult();
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/SalesOrderReportEntityTest.php b/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/SalesOrderReportEntityTest.php
index ec395cc8e3f..7dde2c26f72 100644
--- a/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/SalesOrderReportEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/SalesOrderReportEntityTest.php
@@ -69,7 +69,7 @@ class SalesOrderReportEntityTest extends Injectable
     {
         // Preconditions
         $this->salesReport->open();
-        $this->salesReport->getMessagesBlock()->clickLinkInMessages('notice', 'here');
+        $this->salesReport->getMessagesBlock()->clickLinkInMessage('notice', 'here');
         $this->salesReport->getFilterBlock()->viewsReport($salesReport);
         $this->salesReport->getActionBlock()->showReport();
         $initialSalesResult = $this->salesReport->getGridBlock()->getLastResult();
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/SalesRefundsReportEntityTest.php b/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/SalesRefundsReportEntityTest.php
index f174f4243cd..f41995615c7 100644
--- a/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/SalesRefundsReportEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/SalesRefundsReportEntityTest.php
@@ -68,7 +68,7 @@ class SalesRefundsReportEntityTest extends Injectable
     {
         // Preconditions
         $this->refundsReport->open();
-        $this->refundsReport->getMessagesBlock()->clickLinkInMessages('notice', 'here');
+        $this->refundsReport->getMessagesBlock()->clickLinkInMessage('notice', 'here');
         $this->refundsReport->getFilterBlock()->viewsReport($refundsReport);
         $this->refundsReport->getActionBlock()->showReport();
         $initialRefundsResult = $this->refundsReport->getGridBlock()->getLastResult();
diff --git a/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/ViewedProductsReportEntityTest.php b/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/ViewedProductsReportEntityTest.php
index 6a75582c9a7..93e38fd650b 100644
--- a/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/ViewedProductsReportEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Reports/Test/TestCase/ViewedProductsReportEntityTest.php
@@ -100,7 +100,7 @@ class ViewedProductsReportEntityTest extends Injectable
         $productsList = $this->prepareProducts($products);
         $this->openProducts($productsList, $total);
         $this->productReportView->open();
-        $this->productReportView->getMessagesBlock()->clickLinkInMessages('notice', 'here');
+        $this->productReportView->getMessagesBlock()->clickLinkInMessage('notice', 'here');
 
         // Steps
         $this->productReportView->getFilterBlock()->viewsReport($viewsReport);
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertProductRatingSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertProductRatingSuccessDeleteMessage.php
index 55975ed6c27..b8d61581e43 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertProductRatingSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertProductRatingSuccessDeleteMessage.php
@@ -24,7 +24,7 @@ class AssertProductRatingSuccessDeleteMessage extends AbstractConstraint
      */
     public function processAssert(RatingIndex $ratingIndex)
     {
-        $actualMessage = $ratingIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $ratingIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_DELETE_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertProductRatingSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertProductRatingSuccessSaveMessage.php
index c443e4be423..355f480d1ca 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertProductRatingSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertProductRatingSuccessSaveMessage.php
@@ -24,7 +24,7 @@ class AssertProductRatingSuccessSaveMessage extends AbstractConstraint
      */
     public function processAssert(RatingIndex $ratingIndex)
     {
-        $actualMessage = $ratingIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $ratingIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertProductReviewBackendSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertProductReviewBackendSuccessSaveMessage.php
index f4491856b53..851cd6baebf 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertProductReviewBackendSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertProductReviewBackendSuccessSaveMessage.php
@@ -30,7 +30,7 @@ class AssertProductReviewBackendSuccessSaveMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
-            $reviewIndex->getMessagesBlock()->getSuccessMessages(),
+            $reviewIndex->getMessagesBlock()->getSuccessMessage(),
             'Wrong success message is displayed.'
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertProductReviewMassActionSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertProductReviewMassActionSuccessDeleteMessage.php
index cf57f87ba42..7d7acd1c1b1 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertProductReviewMassActionSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertProductReviewMassActionSuccessDeleteMessage.php
@@ -38,7 +38,7 @@ class AssertProductReviewMassActionSuccessDeleteMessage extends AbstractConstrai
         $deleteMessage = sprintf(self::SUCCESS_DELETE_MESSAGE, count($reviews));
         \PHPUnit_Framework_Assert::assertEquals(
             $deleteMessage,
-            $reviewIndex->getMessagesBlock()->getSuccessMessages(),
+            $reviewIndex->getMessagesBlock()->getSuccessMessage(),
             'Wrong success message is displayed.'
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertProductReviewMassActionSuccessMessage.php b/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertProductReviewMassActionSuccessMessage.php
index af2b135f82f..8bed779b1ad 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertProductReviewMassActionSuccessMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertProductReviewMassActionSuccessMessage.php
@@ -34,7 +34,7 @@ class AssertProductReviewMassActionSuccessMessage extends AbstractConstraint
         $successMessage = sprintf(self::SUCCESS_MESSAGE, count($reviews));
         \PHPUnit_Framework_Assert::assertEquals(
             $successMessage,
-            $reviewIndex->getMessagesBlock()->getSuccessMessages(),
+            $reviewIndex->getMessagesBlock()->getSuccessMessage(),
             'Wrong success message is displayed.'
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertReviewCreationSuccessMessage.php b/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertReviewCreationSuccessMessage.php
index a5b7e25733f..c582f325845 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertReviewCreationSuccessMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertReviewCreationSuccessMessage.php
@@ -27,7 +27,7 @@ class AssertReviewCreationSuccessMessage extends AbstractConstraint
      */
     public function processAssert(CatalogProductView $catalogProductView)
     {
-        $actualMessage = $catalogProductView->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $catalogProductView->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertReviewSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertReviewSuccessSaveMessage.php
index 6804156e9d5..a8b1ebe0311 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertReviewSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertReviewSuccessSaveMessage.php
@@ -24,7 +24,7 @@ class AssertReviewSuccessSaveMessage extends AbstractConstraint
      */
     public function processAssert(ReviewIndex $reviewIndex)
     {
-        $actualMessage = $reviewIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $reviewIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertInvoiceSuccessCreateMessage.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertInvoiceSuccessCreateMessage.php
index ef323a47576..561694c682f 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertInvoiceSuccessCreateMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertInvoiceSuccessCreateMessage.php
@@ -29,7 +29,7 @@ class AssertInvoiceSuccessCreateMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_CREATE_MESSAGE,
-            $salesOrderView->getMessagesBlock()->getSuccessMessages()
+            $salesOrderView->getMessagesBlock()->getSuccessMessage()
         );
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertInvoiceWithShipmentSuccessMessage.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertInvoiceWithShipmentSuccessMessage.php
index 871f4f36160..47d1bd6e6de 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertInvoiceWithShipmentSuccessMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertInvoiceWithShipmentSuccessMessage.php
@@ -29,7 +29,7 @@ class AssertInvoiceWithShipmentSuccessMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
-            $salesOrderView->getMessagesBlock()->getSuccessMessages()
+            $salesOrderView->getMessagesBlock()->getSuccessMessage()
         );
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderCancelMassActionFailMessage.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderCancelMassActionFailMessage.php
index 45b0e38c917..da0c9e71bae 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderCancelMassActionFailMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderCancelMassActionFailMessage.php
@@ -30,7 +30,7 @@ class AssertOrderCancelMassActionFailMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::FAIL_CANCEL_MESSAGE,
-            $orderIndex->getMessagesBlock()->getErrorMessages()
+            $orderIndex->getMessagesBlock()->getErrorMessage()
         );
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderCancelMassActionSuccessMessage.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderCancelMassActionSuccessMessage.php
index 6aa1f29bcbd..30e2417ac69 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderCancelMassActionSuccessMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderCancelMassActionSuccessMessage.php
@@ -31,7 +31,7 @@ class AssertOrderCancelMassActionSuccessMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             sprintf(self::SUCCESS_CANCEL_MESSAGE, $ordersCount),
-            $orderIndex->getMessagesBlock()->getSuccessMessages()
+            $orderIndex->getMessagesBlock()->getSuccessMessage()
         );
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderCancelSuccessMessage.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderCancelSuccessMessage.php
index fe5bc74d63c..7672d729610 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderCancelSuccessMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderCancelSuccessMessage.php
@@ -29,7 +29,7 @@ class AssertOrderCancelSuccessMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_CANCEL_MESSAGE,
-            $salesOrderView->getMessagesBlock()->getSuccessMessages()
+            $salesOrderView->getMessagesBlock()->getSuccessMessage()
         );
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderMassOnHoldSuccessMessage.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderMassOnHoldSuccessMessage.php
index 1f1508c0c42..d3ae442b81e 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderMassOnHoldSuccessMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderMassOnHoldSuccessMessage.php
@@ -35,7 +35,7 @@ class AssertOrderMassOnHoldSuccessMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             sprintf(self::SUCCESS_ON_HOLD_MESSAGE, $ordersCount),
-            $orderIndex->getMessagesBlock()->getSuccessMessages()
+            $orderIndex->getMessagesBlock()->getSuccessMessage()
         );
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderOnHoldFailMessage.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderOnHoldFailMessage.php
index f86e9757adf..7a016fc7be8 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderOnHoldFailMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderOnHoldFailMessage.php
@@ -30,7 +30,7 @@ class AssertOrderOnHoldFailMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::FAIL_ON_HOLD_MESSAGE,
-            $orderIndex->getMessagesBlock()->getErrorMessages()
+            $orderIndex->getMessagesBlock()->getErrorMessage()
         );
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderOnHoldSuccessMessage.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderOnHoldSuccessMessage.php
index 38d9ff38c11..befab64fec1 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderOnHoldSuccessMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderOnHoldSuccessMessage.php
@@ -44,7 +44,7 @@ class AssertOrderOnHoldSuccessMessage extends AbstractConstraint
 
         \PHPUnit_Framework_Assert::assertEquals(
             $successOnHoldMessage,
-            $orderIndex->getMessagesBlock()->getSuccessMessages()
+            $orderIndex->getMessagesBlock()->getSuccessMessage()
         );
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderReleaseFailMessage.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderReleaseFailMessage.php
index 26b1fadf28e..ccd34d2cc74 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderReleaseFailMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderReleaseFailMessage.php
@@ -30,7 +30,7 @@ class AssertOrderReleaseFailMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::FAIL_RELEASE_MESSAGE,
-            $orderIndex->getMessagesBlock()->getErrorMessages()
+            $orderIndex->getMessagesBlock()->getErrorMessage()
         );
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderReleaseSuccessMessage.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderReleaseSuccessMessage.php
index 5ceebe7a11d..4de44d6b18a 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderReleaseSuccessMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderReleaseSuccessMessage.php
@@ -31,7 +31,7 @@ class AssertOrderReleaseSuccessMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             sprintf(self::SUCCESS_RELEASE_MESSAGE, $ordersCount),
-            $orderIndex->getMessagesBlock()->getSuccessMessages()
+            $orderIndex->getMessagesBlock()->getSuccessMessage()
         );
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderStatusDuplicateStatus.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderStatusDuplicateStatus.php
index 4ab58755f5e..eeed99ee0c8 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderStatusDuplicateStatus.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderStatusDuplicateStatus.php
@@ -25,7 +25,7 @@ class AssertOrderStatusDuplicateStatus extends AbstractConstraint
      */
     public function processAssert(OrderStatusNew $orderStatusNewPage)
     {
-        $actualMessage = $orderStatusNewPage->getMessagesBlock()->getErrorMessages();
+        $actualMessage = $orderStatusNewPage->getMessagesBlock()->getErrorMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::DUPLICATE_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderStatusSuccessAssignMessage.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderStatusSuccessAssignMessage.php
index b20839bba30..cd9c9249ac4 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderStatusSuccessAssignMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderStatusSuccessAssignMessage.php
@@ -30,7 +30,7 @@ class AssertOrderStatusSuccessAssignMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
-            $orderStatusIndexPage->getMessagesBlock()->getSuccessMessages()
+            $orderStatusIndexPage->getMessagesBlock()->getSuccessMessage()
         );
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderStatusSuccessCreateMessage.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderStatusSuccessCreateMessage.php
index 0e6e63eb9f1..f7f63595f92 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderStatusSuccessCreateMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderStatusSuccessCreateMessage.php
@@ -29,7 +29,7 @@ class AssertOrderStatusSuccessCreateMessage extends AbstractConstraint
      */
     public function processAssert(OrderStatusIndex $orderStatusIndexPage)
     {
-        $actualMessage = $orderStatusIndexPage->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $orderStatusIndexPage->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderStatusSuccessUnassignMessage.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderStatusSuccessUnassignMessage.php
index 1526b66c4a7..9ba8c02a704 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderStatusSuccessUnassignMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderStatusSuccessUnassignMessage.php
@@ -30,7 +30,7 @@ class AssertOrderStatusSuccessUnassignMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
-            $orderStatusIndexPage->getMessagesBlock()->getSuccessMessages()
+            $orderStatusIndexPage->getMessagesBlock()->getSuccessMessage()
         );
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderSuccessCreateMessage.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderSuccessCreateMessage.php
index 16315c537bf..cc24dcbabcb 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderSuccessCreateMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertOrderSuccessCreateMessage.php
@@ -33,7 +33,7 @@ class AssertOrderSuccessCreateMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
-            $salesOrderView->getMessagesBlock()->getSuccessMessages(),
+            $salesOrderView->getMessagesBlock()->getSuccessMessage(),
             'Wrong success message is displayed.'
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertRefundSuccessCreateMessage.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertRefundSuccessCreateMessage.php
index 9131c7e77eb..b425142c00a 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertRefundSuccessCreateMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertRefundSuccessCreateMessage.php
@@ -29,7 +29,7 @@ class AssertRefundSuccessCreateMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_CREATE_MESSAGE,
-            $salesOrderView->getMessagesBlock()->getSuccessMessages()
+            $salesOrderView->getMessagesBlock()->getSuccessMessage()
         );
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/Constraint/AssertCartPriceRuleSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/SalesRule/Test/Constraint/AssertCartPriceRuleSuccessDeleteMessage.php
index 2cf4cfb37d7..be22d6b72bb 100644
--- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/Constraint/AssertCartPriceRuleSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/Constraint/AssertCartPriceRuleSuccessDeleteMessage.php
@@ -28,7 +28,7 @@ class AssertCartPriceRuleSuccessDeleteMessage extends AbstractConstraint
      */
     public function processAssert(PromoQuoteIndex $promoQuoteIndex)
     {
-        $actualMessage = $promoQuoteIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $promoQuoteIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_DELETE_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/Constraint/AssertCartPriceRuleSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/SalesRule/Test/Constraint/AssertCartPriceRuleSuccessSaveMessage.php
index 6c0484f965e..278952390ad 100644
--- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/Constraint/AssertCartPriceRuleSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/Constraint/AssertCartPriceRuleSuccessSaveMessage.php
@@ -24,7 +24,7 @@ class AssertCartPriceRuleSuccessSaveMessage extends AbstractConstraint
      */
     public function processAssert(PromoQuoteIndex $promoQuoteIndex)
     {
-        $actualMessage = $promoQuoteIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $promoQuoteIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Shipping/Test/Constraint/AssertShipmentSuccessCreateMessage.php b/dev/tests/functional/tests/app/Magento/Shipping/Test/Constraint/AssertShipmentSuccessCreateMessage.php
index f2fcaf7697c..4c09a5d1ca7 100644
--- a/dev/tests/functional/tests/app/Magento/Shipping/Test/Constraint/AssertShipmentSuccessCreateMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Shipping/Test/Constraint/AssertShipmentSuccessCreateMessage.php
@@ -29,7 +29,7 @@ class AssertShipmentSuccessCreateMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
-            $salesOrderView->getMessagesBlock()->getSuccessMessages()
+            $salesOrderView->getMessagesBlock()->getSuccessMessage()
         );
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapFailFolderSaveMessage.php b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapFailFolderSaveMessage.php
index da7884f1f17..8f27a314d13 100644
--- a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapFailFolderSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapFailFolderSaveMessage.php
@@ -26,7 +26,7 @@ class AssertSitemapFailFolderSaveMessage extends AbstractConstraint
      */
     public function processAssert(SitemapIndex $sitemapPage, Sitemap $sitemap)
     {
-        $actualMessage = $sitemapPage->getMessagesBlock()->getErrorMessages();
+        $actualMessage = $sitemapPage->getMessagesBlock()->getErrorMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             sprintf(self::FAIL_FOLDER_MESSAGE, $sitemap->getSitemapPath()),
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapFailPathSaveMessage.php b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapFailPathSaveMessage.php
index 82217a2d958..8a188d6880e 100644
--- a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapFailPathSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapFailPathSaveMessage.php
@@ -26,7 +26,7 @@ class AssertSitemapFailPathSaveMessage extends AbstractConstraint
      */
     public function processAssert(SitemapIndex $sitemapPage, Sitemap $sitemap)
     {
-        $actualMessage = $sitemapPage->getMessagesBlock()->getErrorMessages();
+        $actualMessage = $sitemapPage->getMessagesBlock()->getErrorMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             sprintf(self::FAIL_PATH_MESSAGE, $sitemap->getSitemapFilename()),
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapSuccessDeleteMessage.php
index 0209c3f0a76..f02734b5394 100644
--- a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapSuccessDeleteMessage.php
@@ -24,7 +24,7 @@ class AssertSitemapSuccessDeleteMessage extends AbstractConstraint
      */
     public function processAssert(SitemapIndex $sitemapPage)
     {
-        $actualMessage = $sitemapPage->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $sitemapPage->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_DELETE_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapSuccessGenerateMessage.php b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapSuccessGenerateMessage.php
index 77e58ce48e1..b8178bf6b85 100644
--- a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapSuccessGenerateMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapSuccessGenerateMessage.php
@@ -32,7 +32,7 @@ class AssertSitemapSuccessGenerateMessage extends AbstractConstraint
         SitemapIndex $sitemapPage,
         Sitemap $sitemap
     ) {
-        $actualMessage = $sitemapPage->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $sitemapPage->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             sprintf(self::SUCCESS_GENERATE_MESSAGE, $sitemap->getSitemapFilename()),
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapSuccessSaveAndGenerateMessages.php b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapSuccessSaveAndGenerateMessages.php
index a2924af474a..95db429103c 100644
--- a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapSuccessSaveAndGenerateMessages.php
+++ b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapSuccessSaveAndGenerateMessages.php
@@ -28,7 +28,7 @@ class AssertSitemapSuccessSaveAndGenerateMessages extends AbstractConstraint
      */
     public function processAssert(SitemapIndex $sitemapIndex, Sitemap $sitemap)
     {
-        $actualMessages = $sitemapIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessages = $sitemapIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertTrue(
             in_array(self::SUCCESS_SAVE_MESSAGE, $actualMessages) &&
             in_array(sprintf(self::SUCCESS_GENERATE_MESSAGE, $sitemap->getSitemapFilename()), $actualMessages),
diff --git a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapSuccessSaveMessage.php
index e0e4efc8069..e25e8eec6bd 100644
--- a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapSuccessSaveMessage.php
@@ -24,7 +24,7 @@ class AssertSitemapSuccessSaveMessage extends AbstractConstraint
      */
     public function processAssert(SitemapIndex $sitemapPage)
     {
-        $actualMessage = $sitemapPage->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $sitemapPage->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreGroupSuccessDeleteAndBackupMessages.php b/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreGroupSuccessDeleteAndBackupMessages.php
index 7d101ed70c6..e51bc86359a 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreGroupSuccessDeleteAndBackupMessages.php
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreGroupSuccessDeleteAndBackupMessages.php
@@ -33,7 +33,7 @@ class AssertStoreGroupSuccessDeleteAndBackupMessages extends AbstractConstraint
      */
     public function processAssert(StoreIndex $storeIndex)
     {
-        $actualMessages = $storeIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessages = $storeIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertTrue(
             in_array(self::SUCCESS_BACKUP_MESSAGE, $actualMessages) &&
             in_array(self::SUCCESS_DELETE_MESSAGE, $actualMessages),
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreGroupSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreGroupSuccessDeleteMessage.php
index ea9be6f761b..d74e39c1435 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreGroupSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreGroupSuccessDeleteMessage.php
@@ -30,7 +30,7 @@ class AssertStoreGroupSuccessDeleteMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_DELETE_MESSAGE,
-            $storeIndex->getMessagesBlock()->getSuccessMessages(),
+            $storeIndex->getMessagesBlock()->getSuccessMessage(),
             'Wrong success delete message is displayed.'
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreGroupSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreGroupSuccessSaveMessage.php
index 5be639d9d92..f9d2aafc57a 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreGroupSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreGroupSuccessSaveMessage.php
@@ -30,7 +30,7 @@ class AssertStoreGroupSuccessSaveMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
-            $storeIndex->getMessagesBlock()->getSuccessMessages(),
+            $storeIndex->getMessagesBlock()->getSuccessMessage(),
             'Wrong success message is displayed.'
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreSuccessDeleteAndBackupMessages.php b/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreSuccessDeleteAndBackupMessages.php
index 30993d6f2fc..113b9a7af0a 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreSuccessDeleteAndBackupMessages.php
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreSuccessDeleteAndBackupMessages.php
@@ -33,7 +33,7 @@ class AssertStoreSuccessDeleteAndBackupMessages extends AbstractConstraint
      */
     public function processAssert(StoreIndex $storeIndex)
     {
-        $actualMessages = $storeIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessages = $storeIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertTrue(
             in_array(self::SUCCESS_BACKUP_MESSAGE, $actualMessages) &&
             in_array(self::SUCCESS_DELETE_MESSAGE, $actualMessages),
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreSuccessDeleteMessage.php
index 82dd5459f8b..957357f71e5 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreSuccessDeleteMessage.php
@@ -30,7 +30,7 @@ class AssertStoreSuccessDeleteMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_DELETE_MESSAGE,
-            $storeIndex->getMessagesBlock()->getSuccessMessages(),
+            $storeIndex->getMessagesBlock()->getSuccessMessage(),
             'Wrong success delete message is displayed.'
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreSuccessSaveMessage.php
index cf467e88cb5..ac66a3412b7 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreSuccessSaveMessage.php
@@ -30,7 +30,7 @@ class AssertStoreSuccessSaveMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
-            $storeIndex->getMessagesBlock()->getSuccessMessages(),
+            $storeIndex->getMessagesBlock()->getSuccessMessage(),
             'Wrong success message is displayed.'
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertWebsiteSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertWebsiteSuccessDeleteMessage.php
index 11d54478e8d..076d7daaa32 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertWebsiteSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertWebsiteSuccessDeleteMessage.php
@@ -30,7 +30,7 @@ class AssertWebsiteSuccessDeleteMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_DELETE_MESSAGE,
-            $storeIndex->getMessagesBlock()->getSuccessMessages(),
+            $storeIndex->getMessagesBlock()->getSuccessMessage(),
             'Wrong success delete message is displayed.'
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertWebsiteSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertWebsiteSuccessSaveMessage.php
index 2078e611262..60dde78e3eb 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertWebsiteSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertWebsiteSuccessSaveMessage.php
@@ -30,7 +30,7 @@ class AssertWebsiteSuccessSaveMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
-            $storeIndex->getMessagesBlock()->getSuccessMessages(),
+            $storeIndex->getMessagesBlock()->getSuccessMessage(),
             'Wrong success message is displayed.'
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Constraint/AssertTaxRateSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/Tax/Test/Constraint/AssertTaxRateSuccessDeleteMessage.php
index f956e5c82b9..f8ae7822c57 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/Constraint/AssertTaxRateSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Constraint/AssertTaxRateSuccessDeleteMessage.php
@@ -24,7 +24,7 @@ class AssertTaxRateSuccessDeleteMessage extends AbstractConstraint
      */
     public function processAssert(TaxRateIndex $taxRateIndex)
     {
-        $actualMessage = $taxRateIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $taxRateIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_DELETE_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Constraint/AssertTaxRateSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/Tax/Test/Constraint/AssertTaxRateSuccessSaveMessage.php
index 165e9a7aeb6..79a9b63ea94 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/Constraint/AssertTaxRateSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Constraint/AssertTaxRateSuccessSaveMessage.php
@@ -24,7 +24,7 @@ class AssertTaxRateSuccessSaveMessage extends AbstractConstraint
      */
     public function processAssert(TaxRateIndex $taxRateIndexPage)
     {
-        $actualMessage = $taxRateIndexPage->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $taxRateIndexPage->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Constraint/AssertTaxRuleSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/Tax/Test/Constraint/AssertTaxRuleSuccessDeleteMessage.php
index 44c3367d48e..5a7872a6373 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/Constraint/AssertTaxRuleSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Constraint/AssertTaxRuleSuccessDeleteMessage.php
@@ -24,7 +24,7 @@ class AssertTaxRuleSuccessDeleteMessage extends AbstractConstraint
      */
     public function processAssert(TaxRuleIndex $taxRuleIndex)
     {
-        $actualMessage = $taxRuleIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $taxRuleIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_DELETE_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Constraint/AssertTaxRuleSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/Tax/Test/Constraint/AssertTaxRuleSuccessSaveMessage.php
index 73e32f4f8b1..8234673ee1c 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/Constraint/AssertTaxRuleSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Constraint/AssertTaxRuleSuccessSaveMessage.php
@@ -28,7 +28,7 @@ class AssertTaxRuleSuccessSaveMessage extends AbstractConstraint
      */
     public function processAssert(TaxRuleIndex $taxRuleIndex)
     {
-        $actualMessage = $taxRuleIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $taxRuleIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Constraint/AssertUrlRewriteDeletedMessage.php b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Constraint/AssertUrlRewriteDeletedMessage.php
index ac453e2ebdc..c27afd627bf 100644
--- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Constraint/AssertUrlRewriteDeletedMessage.php
+++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Constraint/AssertUrlRewriteDeletedMessage.php
@@ -28,7 +28,7 @@ class AssertUrlRewriteDeletedMessage extends AbstractConstraint
      */
     public function processAssert(UrlRewriteIndex $index)
     {
-        $actualMessage = $index->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $index->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_DELETE_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Constraint/AssertUrlRewriteSaveMessage.php b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Constraint/AssertUrlRewriteSaveMessage.php
index 97d8c67ce5e..5d3e4a547d5 100644
--- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Constraint/AssertUrlRewriteSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Constraint/AssertUrlRewriteSaveMessage.php
@@ -25,7 +25,7 @@ class AssertUrlRewriteSaveMessage extends AbstractConstraint
      */
     public function processAssert(UrlRewriteIndex $index)
     {
-        $actualMessage = $index->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $index->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertAccessTokensErrorRevokeMessage.php b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertAccessTokensErrorRevokeMessage.php
index b8110526b39..58920c5edee 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertAccessTokensErrorRevokeMessage.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertAccessTokensErrorRevokeMessage.php
@@ -30,7 +30,7 @@ class AssertAccessTokensErrorRevokeMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::ERROR_MESSAGE,
-            $userEdit->getMessagesBlock()->getErrorMessages()
+            $userEdit->getMessagesBlock()->getErrorMessage()
         );
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertImpossibleDeleteYourOwnAccount.php b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertImpossibleDeleteYourOwnAccount.php
index 89169bcf80e..b66e275b479 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertImpossibleDeleteYourOwnAccount.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertImpossibleDeleteYourOwnAccount.php
@@ -24,7 +24,7 @@ class AssertImpossibleDeleteYourOwnAccount extends AbstractConstraint
      */
     public function processAssert(UserEdit $userEdit)
     {
-        $errorMessage = $userEdit->getMessagesBlock()->getErrorMessages();
+        $errorMessage = $userEdit->getMessagesBlock()->getErrorMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::ERROR_MESSAGE,
             $errorMessage,
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertImpossibleDeleteYourOwnRole.php b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertImpossibleDeleteYourOwnRole.php
index c469966dc94..06d525e2b4a 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertImpossibleDeleteYourOwnRole.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertImpossibleDeleteYourOwnRole.php
@@ -24,7 +24,7 @@ class AssertImpossibleDeleteYourOwnRole extends AbstractConstraint
      */
     public function processAssert(UserRoleEditRole $rolePage)
     {
-        $errorMessage = $rolePage->getMessagesBlock()->getErrorMessages();
+        $errorMessage = $rolePage->getMessagesBlock()->getErrorMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::ERROR_MESSAGE,
             $errorMessage,
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertRoleSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertRoleSuccessDeleteMessage.php
index 943acd3b521..8d828ceb237 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertRoleSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertRoleSuccessDeleteMessage.php
@@ -24,7 +24,7 @@ class AssertRoleSuccessDeleteMessage extends AbstractConstraint
      */
     public function processAssert(UserRoleIndex $rolePage)
     {
-        $successMessage = $rolePage->getMessagesBlock()->getSuccessMessages();
+        $successMessage = $rolePage->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_DELETE_MESSAGE,
             $successMessage,
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertRoleSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertRoleSuccessSaveMessage.php
index 4487b76954a..402234f7b48 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertRoleSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertRoleSuccessSaveMessage.php
@@ -24,7 +24,7 @@ class AssertRoleSuccessSaveMessage extends AbstractConstraint
      */
     public function processAssert(UserRoleIndex $rolePage)
     {
-        $successMessage = $rolePage->getMessagesBlock()->getSuccessMessages();
+        $successMessage = $rolePage->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $successMessage,
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserDuplicateMessage.php b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserDuplicateMessage.php
index 66e1d6b432a..99c6e89ad0a 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserDuplicateMessage.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserDuplicateMessage.php
@@ -24,7 +24,7 @@ class AssertUserDuplicateMessage extends AbstractConstraint
      */
     public function processAssert(UserEdit $userEdit)
     {
-        $failedMessage = $userEdit->getMessagesBlock()->getErrorMessages();
+        $failedMessage = $userEdit->getMessagesBlock()->getErrorMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::ERROR_MESSAGE,
             $failedMessage,
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserFailedLoginByPermissionMessage.php b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserFailedLoginByPermissionMessage.php
index db943e911a3..2454f53eb0f 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserFailedLoginByPermissionMessage.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserFailedLoginByPermissionMessage.php
@@ -32,7 +32,7 @@ class AssertUserFailedLoginByPermissionMessage extends AbstractConstraint
 
         \PHPUnit_Framework_Assert::assertEquals(
             self::FAILED_LOGIN_MESSAGE,
-            $adminAuth->getMessagesBlock()->getErrorMessages(),
+            $adminAuth->getMessagesBlock()->getErrorMessage(),
             'Message "' . self::FAILED_LOGIN_MESSAGE . '" is not visible.'
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserFailedLoginMessage.php b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserFailedLoginMessage.php
index e01aa9a9cd0..c57af1f5abb 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserFailedLoginMessage.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserFailedLoginMessage.php
@@ -34,7 +34,7 @@ class AssertUserFailedLoginMessage extends AbstractConstraint
 
         \PHPUnit_Framework_Assert::assertEquals(
             self::FAILED_LOGIN_MESSAGE,
-            $adminAuth->getMessagesBlock()->getErrorMessages(),
+            $adminAuth->getMessagesBlock()->getErrorMessage(),
             'Message "' . self::FAILED_LOGIN_MESSAGE . '" is not visible.'
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserInvalidEmailHostnameMessage.php b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserInvalidEmailHostnameMessage.php
index 74af3f80cd7..117857a23fc 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserInvalidEmailHostnameMessage.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserInvalidEmailHostnameMessage.php
@@ -33,7 +33,7 @@ class AssertUserInvalidEmailHostnameMessage extends AbstractConstraint
         $email = $user->getEmail();
         $hostname = substr($email, strpos($email, '@')+1);
         $expectedMessage = sprintf(self::ERROR_MESSAGE, $hostname, $email);
-        $actualMessage = $userEdit->getMessagesBlock()->getErrorMessages();
+        $actualMessage = $userEdit->getMessagesBlock()->getErrorMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             $expectedMessage,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserInvalidEmailMessage.php b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserInvalidEmailMessage.php
index 431b9f13c71..f9c878f6889 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserInvalidEmailMessage.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserInvalidEmailMessage.php
@@ -31,7 +31,7 @@ class AssertUserInvalidEmailMessage extends AbstractConstraint
     public function processAssert(UserEdit $userEdit, User $user)
     {
         $expectedMessage = sprintf(self::ERROR_MESSAGE, $user->getEmail());
-        $actualMessage = $userEdit->getMessagesBlock()->getErrorMessages();
+        $actualMessage = $userEdit->getMessagesBlock()->getErrorMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             $expectedMessage,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserSuccessDeleteMessage.php
index c6f7e9e6949..a6ba344c97f 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserSuccessDeleteMessage.php
@@ -28,7 +28,7 @@ class AssertUserSuccessDeleteMessage extends AbstractConstraint
      */
     public function processAssert(UserIndex $userIndex)
     {
-        $successMessage = $userIndex->getMessagesBlock()->getSuccessMessages();
+        $successMessage = $userIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $successMessage,
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserSuccessSaveMessage.php
index e8f4e5f5571..8cf031d5694 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Constraint/AssertUserSuccessSaveMessage.php
@@ -24,7 +24,7 @@ class AssertUserSuccessSaveMessage extends AbstractConstraint
      */
     public function processAssert(UserIndex $userIndex)
     {
-        $successMessage = $userIndex->getMessagesBlock()->getSuccessMessages();
+        $successMessage = $userIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $successMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Variable/Test/Constraint/AssertCustomVariableSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/Variable/Test/Constraint/AssertCustomVariableSuccessDeleteMessage.php
index 596577190ca..d4a73859e76 100644
--- a/dev/tests/functional/tests/app/Magento/Variable/Test/Constraint/AssertCustomVariableSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Variable/Test/Constraint/AssertCustomVariableSuccessDeleteMessage.php
@@ -24,7 +24,7 @@ class AssertCustomVariableSuccessDeleteMessage extends AbstractConstraint
      */
     public function processAssert(SystemVariableIndex $systemVariableIndexPage)
     {
-        $actualMessage = $systemVariableIndexPage->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $systemVariableIndexPage->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_DELETE_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Variable/Test/Constraint/AssertCustomVariableSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/Variable/Test/Constraint/AssertCustomVariableSuccessSaveMessage.php
index dd723c012ab..67117ed950b 100644
--- a/dev/tests/functional/tests/app/Magento/Variable/Test/Constraint/AssertCustomVariableSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Variable/Test/Constraint/AssertCustomVariableSuccessSaveMessage.php
@@ -24,7 +24,7 @@ class AssertCustomVariableSuccessSaveMessage extends AbstractConstraint
      */
     public function processAssert(SystemVariableIndex $systemVariableIndexPage)
     {
-        $actualMessage = $systemVariableIndexPage->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $systemVariableIndexPage->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_SAVE_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/Constraint/AssertWidgetSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/Widget/Test/Constraint/AssertWidgetSuccessDeleteMessage.php
index 57b6aa9da7a..687205faabf 100644
--- a/dev/tests/functional/tests/app/Magento/Widget/Test/Constraint/AssertWidgetSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Widget/Test/Constraint/AssertWidgetSuccessDeleteMessage.php
@@ -31,7 +31,7 @@ class AssertWidgetSuccessDeleteMessage extends AbstractConstraint
      */
     public function processAssert(WidgetInstanceIndex $widgetInstanceIndex)
     {
-        $actualMessage = $widgetInstanceIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $widgetInstanceIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::DELETE_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/Constraint/AssertWidgetSuccessSaveMessage.php b/dev/tests/functional/tests/app/Magento/Widget/Test/Constraint/AssertWidgetSuccessSaveMessage.php
index dae56dc5d3e..4ebfac7c9cf 100644
--- a/dev/tests/functional/tests/app/Magento/Widget/Test/Constraint/AssertWidgetSuccessSaveMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Widget/Test/Constraint/AssertWidgetSuccessSaveMessage.php
@@ -31,7 +31,7 @@ class AssertWidgetSuccessSaveMessage extends AbstractConstraint
      */
     public function processAssert(WidgetInstanceIndex $widgetInstanceIndex)
     {
-        $actualMessage = $widgetInstanceIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $widgetInstanceIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $actualMessage,
diff --git a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Constraint/AssertAddProductToWishlistSuccessMessage.php b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Constraint/AssertAddProductToWishlistSuccessMessage.php
index ead94063b60..3199d2a356a 100644
--- a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Constraint/AssertAddProductToWishlistSuccessMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Constraint/AssertAddProductToWishlistSuccessMessage.php
@@ -36,7 +36,7 @@ class AssertAddProductToWishlistSuccessMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             sprintf(self::SUCCESS_MESSAGE, $product->getName()),
-            $wishlistIndex->getMessagesBlock()->getSuccessMessages(),
+            $wishlistIndex->getMessagesBlock()->getSuccessMessage(),
             "Expected success message doesn't match actual."
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Constraint/AssertMoveProductToWishlistSuccessMessage.php b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Constraint/AssertMoveProductToWishlistSuccessMessage.php
index 88a588fe630..fe4fc287c83 100644
--- a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Constraint/AssertMoveProductToWishlistSuccessMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Constraint/AssertMoveProductToWishlistSuccessMessage.php
@@ -32,7 +32,7 @@ class AssertMoveProductToWishlistSuccessMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             sprintf(self::SUCCESS_MESSAGE, $product->getName()),
-            $wishlistIndex->getMessagesBlock()->getSuccessMessages(),
+            $wishlistIndex->getMessagesBlock()->getSuccessMessage(),
             "Expected success move to wish list message doesn't match actual."
         );
     }
diff --git a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Constraint/AssertWishlistShareMessage.php b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Constraint/AssertWishlistShareMessage.php
index 7013691e59c..5d7e9dc5f2b 100644
--- a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Constraint/AssertWishlistShareMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Constraint/AssertWishlistShareMessage.php
@@ -34,7 +34,7 @@ class AssertWishlistShareMessage extends AbstractConstraint
     {
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
-            $wishlistIndex->getMessagesBlock()->getSuccessMessages(),
+            $wishlistIndex->getMessagesBlock()->getSuccessMessage(),
             'Wrong success message is displayed.'
         );
     }
-- 
GitLab


From 1bfd17eecd6d56ff33dd39158b17f4d220a32341 Mon Sep 17 00:00:00 2001
From: Andriy Nasinnyk <anasinnyk@ebay.com>
Date: Fri, 23 Oct 2015 16:53:12 +0300
Subject: [PATCH 248/370] MAGETWO-44461: Error on importing customer main file
 with custom attribute of dropdown type

---
 app/code/Magento/CustomerImportExport/Model/Import/Customer.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/CustomerImportExport/Model/Import/Customer.php b/app/code/Magento/CustomerImportExport/Model/Import/Customer.php
index b56d03c1c75..a4e2a4a3745 100644
--- a/app/code/Magento/CustomerImportExport/Model/Import/Customer.php
+++ b/app/code/Magento/CustomerImportExport/Model/Import/Customer.php
@@ -383,7 +383,7 @@ class Customer extends AbstractCustomer
                 if ('select' == $attributeParameters['type']) {
                     $value = isset($attributeParameters['options'][strtolower($value)])
                         ? $attributeParameters['options'][strtolower($value)]
-                        : null;
+                        : 0;
                 } elseif ('datetime' == $attributeParameters['type']) {
                     $value = (new \DateTime())->setTimestamp(strtotime($value));
                     $value = $value->format(\Magento\Framework\Stdlib\DateTime::DATETIME_PHP_FORMAT);
-- 
GitLab


From 55c0a624f7f698dfc34af3cfe3255e9ff13b01e3 Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Fri, 23 Oct 2015 17:01:06 +0300
Subject: [PATCH 249/370] MAGETWO-44434: Some untranslatable fields in Magento
 backend

---
 .../Adminhtml/System/Account/SaveTest.php     | 238 +++++++++---------
 1 file changed, 118 insertions(+), 120 deletions(-)

diff --git a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/System/Account/SaveTest.php b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/System/Account/SaveTest.php
index 0262c212175..b36c9a59ab9 100644
--- a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/System/Account/SaveTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/System/Account/SaveTest.php
@@ -9,88 +9,105 @@ namespace Magento\Backend\Test\Unit\Controller\Adminhtml\System\Account;
 
 class SaveTest extends \PHPUnit_Framework_TestCase
 {
-    /** @var \Magento\Backend\Controller\Adminhtml\System\Account */
-    protected $_controller;
-
-    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\RequestInterface */
-    protected $_requestMock;
-
-    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\ResponseInterface */
-    protected $_responseMock;
-
-    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\ObjectManager\ObjectManager */
-    protected $_objectManagerMock;
-
-    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Message\ManagerInterface */
-    protected $_messagesMock;
-
-    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Backend\Helper\Data */
-    protected $_helperMock;
-
-    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Backend\Model\Auth\Session */
-    protected $_authSessionMock;
-
-    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\User\Model\User */
-    protected $_userMock;
-
-    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Validator\locale */
-    protected $_validatorMock;
-
-    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Backend\Model\Locale\Manager */
-    protected $_managerMock;
-
-    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\TranslateInterface */
-    protected $_translatorMock;
+    /**
+     * @var \Magento\Backend\Controller\Adminhtml\System\Account\Save
+     */
+    protected $controller;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\RequestInterface
+     */
+    protected $requestMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\ResponseInterface
+     */
+    protected $responseMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\ObjectManager\ObjectManager
+     */
+    protected $objectManagerMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Message\ManagerInterface
+     */
+    protected $messagesMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Backend\Helper\Data
+     */
+    protected $helperMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Backend\Model\Auth\Session
+     */
+    protected $authSessionMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\User\Model\User
+     */
+    protected $userMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Validator\locale
+     */
+    protected $validatorMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Backend\Model\Locale\Manager
+     */
+    protected $managerMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\TranslateInterface
+     */
+    protected $translatorMock;
 
     protected function setUp()
     {
-        $this->_requestMock = $this->getMockBuilder('Magento\Framework\App\Request\Http')
+        $frontControllerMock = $this->getMockBuilder('Magento\Framework\App\FrontController')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->requestMock = $this->getMockBuilder('Magento\Framework\App\Request\Http')
             ->disableOriginalConstructor()->setMethods(['getOriginalPathInfo'])
             ->getMock();
-        $this->_responseMock = $this->getMockBuilder('Magento\Framework\App\Response\Http')
+        $this->responseMock = $this->getMockBuilder('Magento\Framework\App\Response\Http')
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMock();
-        $this->_objectManagerMock = $this->getMockBuilder('Magento\Framework\ObjectManager\ObjectManager')
+        $this->objectManagerMock = $this->getMockBuilder('Magento\Framework\ObjectManager\ObjectManager')
             ->disableOriginalConstructor()
             ->setMethods(['get', 'create'])
             ->getMock();
-        $frontControllerMock = $this->getMockBuilder('Magento\Framework\App\FrontController')
-            ->disableOriginalConstructor()
-            ->getMock();
-
-        $this->_helperMock = $this->getMockBuilder('Magento\Backend\Helper\Data')
+        $this->helperMock = $this->getMockBuilder('Magento\Backend\Helper\Data')
             ->disableOriginalConstructor()
             ->setMethods(['getUrl'])
             ->getMock();
-        $this->_messagesMock = $this->getMockBuilder('Magento\Framework\Message\Manager')
+        $this->messagesMock = $this->getMockBuilder('Magento\Framework\Message\Manager')
             ->disableOriginalConstructor()
             ->setMethods(['addSuccess'])
             ->getMockForAbstractClass();
-
-        $this->_authSessionMock = $this->getMockBuilder('Magento\Backend\Model\Auth\Session')
+        $this->authSessionMock = $this->getMockBuilder('Magento\Backend\Model\Auth\Session')
             ->disableOriginalConstructor()
             ->setMethods(['getUser'])
             ->getMock();
-
-        $this->_userMock = $this->getMockBuilder('Magento\User\Model\User')
+        $this->userMock = $this->getMockBuilder('Magento\User\Model\User')
             ->disableOriginalConstructor()
             ->setMethods(
                 ['load', 'save', 'sendPasswordResetNotificationEmail', 'verifyIdentity', '__sleep', '__wakeup']
             )
             ->getMock();
-
-        $this->_validatorMock = $this->getMockBuilder('Magento\Framework\Validator\Locale')
+        $this->validatorMock = $this->getMockBuilder('Magento\Framework\Validator\Locale')
             ->disableOriginalConstructor()
             ->setMethods(['isValid'])
             ->getMock();
-
-        $this->_managerMock = $this->getMockBuilder('Magento\Backend\Model\Locale\Manager')
+        $this->managerMock = $this->getMockBuilder('Magento\Backend\Model\Locale\Manager')
             ->disableOriginalConstructor()
             ->setMethods(['switchBackendInterfaceLocale'])
             ->getMock();
-
-        $this->_translatorMock = $this->getMockBuilder('Magento\Framework\TranslateInterface')
+        $this->translatorMock = $this->getMockBuilder('Magento\Framework\TranslateInterface')
             ->disableOriginalConstructor()
             ->getMock();
 
@@ -107,19 +124,19 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             ->willReturn($resultRedirect);
 
         $contextMock = $this->getMock('Magento\Backend\App\Action\Context', [], [], '', false);
-        $contextMock->expects($this->any())->method('getRequest')->willReturn($this->_requestMock);
-        $contextMock->expects($this->any())->method('getResponse')->willReturn($this->_responseMock);
-        $contextMock->expects($this->any())->method('getObjectManager')->willReturn($this->_objectManagerMock);
+        $contextMock->expects($this->any())->method('getRequest')->willReturn($this->requestMock);
+        $contextMock->expects($this->any())->method('getResponse')->willReturn($this->responseMock);
+        $contextMock->expects($this->any())->method('getObjectManager')->willReturn($this->objectManagerMock);
         $contextMock->expects($this->any())->method('getFrontController')->willReturn($frontControllerMock);
-        $contextMock->expects($this->any())->method('getHelper')->willReturn($this->_helperMock);
-        $contextMock->expects($this->any())->method('getMessageManager')->willReturn($this->_messagesMock);
-        $contextMock->expects($this->any())->method('getTranslator')->willReturn($this->_translatorMock);
+        $contextMock->expects($this->any())->method('getHelper')->willReturn($this->helperMock);
+        $contextMock->expects($this->any())->method('getMessageManager')->willReturn($this->messagesMock);
+        $contextMock->expects($this->any())->method('getTranslator')->willReturn($this->translatorMock);
         $contextMock->expects($this->once())->method('getResultFactory')->willReturn($resultFactory);
 
         $args = ['context' => $contextMock];
 
         $testHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $this->_controller = $testHelper->getObject('Magento\Backend\Controller\Adminhtml\System\Account\Save', $args);
+        $this->controller = $testHelper->getObject('Magento\Backend\Controller\Adminhtml\System\Account\Save', $args);
     }
 
     public function testSaveAction()
@@ -138,67 +155,48 @@ class SaveTest extends \PHPUnit_Framework_TestCase
 
         $testedMessage = __('You saved the account.');
 
-        $this->_authSessionMock->expects($this->any())->method('getUser')->will($this->returnValue($this->_userMock));
-
-        $this->_userMock->expects($this->any())->method('load')->will($this->returnSelf());
-        $this->_validatorMock->expects(
-            $this->once()
-        )->method(
-            'isValid'
-        )->with(
-            $this->equalTo($requestParams['interface_locale'])
-        )->will(
-            $this->returnValue(true)
-        );
-        $this->_managerMock->expects($this->any())->method('switchBackendInterfaceLocale');
-
-        $this->_objectManagerMock->expects(
-            $this->at(0)
-        )->method(
-            'get'
-        )->with(
-            $this->equalTo('Magento\Backend\Model\Auth\Session')
-        )->will(
-            $this->returnValue($this->_authSessionMock)
-        );
-        $this->_objectManagerMock->expects(
-            $this->at(1)
-        )->method(
-            'create'
-        )->with(
-            $this->equalTo('Magento\User\Model\User')
-        )->will(
-            $this->returnValue($this->_userMock)
-        );
-        $this->_objectManagerMock->expects(
-            $this->at(2)
-        )->method(
-            'get'
-        )->with(
-            $this->equalTo('Magento\Framework\Validator\Locale')
-        )->will(
-            $this->returnValue($this->_validatorMock)
-        );
-        $this->_objectManagerMock->expects(
-            $this->at(3)
-        )->method(
-            'get'
-        )->with(
-            $this->equalTo('Magento\Backend\Model\Locale\Manager')
-        )->will(
-            $this->returnValue($this->_managerMock)
-        );
-
-        $this->_userMock->setUserId($userId);
-
-        $this->_userMock->expects($this->once())->method('save');
-        $this->_userMock->expects($this->once())->method('verifyIdentity')->will($this->returnValue(true));
-        $this->_userMock->expects($this->once())->method('sendPasswordResetNotificationEmail');
-
-        $this->_requestMock->setParams($requestParams);
-
-        $this->_messagesMock->expects($this->once())->method('addSuccess')->with($this->equalTo($testedMessage));
-
-        $this->_controller->execute();
+        $this->authSessionMock->expects($this->any())
+            ->method('getUser')
+            ->willReturn($this->userMock);
+        $this->userMock->expects($this->any())
+            ->method('load')
+            ->will($this->returnSelf());
+        $this->validatorMock->expects($this->once())
+            ->method('isValid')
+            ->with($this->equalTo($requestParams['interface_locale']))
+            ->willReturn(true);
+        $this->managerMock->expects($this->any())
+            ->method('switchBackendInterfaceLocale');
+        $this->objectManagerMock->expects($this->at(0))
+            ->method('get')
+            ->with($this->equalTo('Magento\Backend\Model\Auth\Session'))
+            ->willReturn($this->authSessionMock);
+        $this->objectManagerMock->expects($this->at(1))
+            ->method('create')
+            ->with($this->equalTo('Magento\User\Model\User'))
+            ->willReturn($this->userMock);
+        $this->objectManagerMock->expects($this->at(2))
+            ->method('get')
+            ->with($this->equalTo('Magento\Framework\Validator\Locale'))
+            ->willReturn($this->validatorMock);
+        $this->objectManagerMock->expects($this->at(3))
+            ->method('get')
+            ->with($this->equalTo('Magento\Backend\Model\Locale\Manager'))
+            ->willReturn($this->managerMock);
+        $this->userMock->expects($this->once())
+            ->method('save');
+        $this->userMock->expects($this->once())
+            ->method('verifyIdentity')
+            ->willReturn(true);
+        $this->userMock->expects($this->once())
+            ->method('sendPasswordResetNotificationEmail');
+        $this->messagesMock->expects($this->once())
+            ->method('addSuccess')
+            ->with($this->equalTo($testedMessage));
+
+        $this->userMock->setUserId($userId);
+        $this->requestMock->setParams($requestParams);
+
+        $this->controller->execute();
     }
 }
-- 
GitLab


From 732cc420d90c1be6d71dbba0288ff77942ca79a9 Mon Sep 17 00:00:00 2001
From: Maksym Aposov <maposov@ebay.com>
Date: Fri, 23 Oct 2015 17:03:26 +0300
Subject: [PATCH 250/370] MAGETWO-44516: Provide fix for Functional Tests MX

---
 .../Adminhtml/Product/Edit/Tab/Super/Config/Attribute.php     | 4 ++++
 .../Test/Constraint/AssertChildProductsInGrid.php             | 4 ++--
 .../Test/Constraint/AssertConfigurableProductPage.php         | 2 +-
 .../Test/TestCase/CreateConfigurableProductEntityTest.xml     | 2 ++
 4 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute.php
index be8653668f1..f8bd1fd052c 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute.php
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute.php
@@ -283,6 +283,10 @@ class Attribute extends Form
                 $this->getTemplateBlock()->waitLoader();
                 $optionContainer->find('[data-action=save]')->click();
             }
+            //Select option
+            if (!$optionContainer->find('[type="checkbox"]')->isSelected()) {
+                $optionContainer->find('[type="checkbox"]')->click();
+            }
         }
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertChildProductsInGrid.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertChildProductsInGrid.php
index 923e439e039..07dd93b51ee 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertChildProductsInGrid.php
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertChildProductsInGrid.php
@@ -31,14 +31,14 @@ class AssertChildProductsInGrid extends AbstractConstraint
     public function processAssert(CatalogProductIndex $productGrid, ConfigurableProduct $product)
     {
         $configurableAttributesData = $product->getConfigurableAttributesData();
-        $productType = $product->getProductHasWeight() === "Yes" ? 'Simple Product' : 'Virtual Product';
         $errors = [];
 
         $productGrid->open();
         foreach ($configurableAttributesData['matrix'] as $variation) {
             $filter = [
                 'name' => $variation['name'],
-                'type' => $productType,
+                'type' => (isset($variation['weight']) && (int)$variation['weight'] > 0)
+                    ? 'Simple Product' : 'Virtual Product',
                 'sku' => $variation['sku'],
                 'visibility' => self::NOT_VISIBLE_INDIVIDUALLY,
             ];
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertConfigurableProductPage.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertConfigurableProductPage.php
index 246f73bb739..f635ef7cc29 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertConfigurableProductPage.php
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Constraint/AssertConfigurableProductPage.php
@@ -47,7 +47,7 @@ class AssertConfigurableProductPage extends AssertProductPage
 
         if ($fixturePrice != $formPrice) {
             return "Displayed product price on product page(front-end) not equals passed from fixture. "
-            . "Actual: {$fixturePrice}, expected: {$formPrice}.";
+            . "Actual: {$formPrice}, expected: {$fixturePrice}.";
         }
         return null;
     }
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateConfigurableProductEntityTest.xml b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateConfigurableProductEntityTest.xml
index b7fdd48cd16..3fe6c3df507 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateConfigurableProductEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/TestCase/CreateConfigurableProductEntityTest.xml
@@ -40,6 +40,7 @@
             <data name="product/data/name" xsi:type="string">Configurable Product %isolation%</data>
             <data name="product/data/sku" xsi:type="string">configurable_sku_%isolation%</data>
             <data name="product/data/price/value" xsi:type="string">100</data>
+            <data name="product/data/price/dataset" xsi:type="string">default</data>
             <data name="product/data/short_description" xsi:type="string">Configurable short description</data>
             <data name="product/data/description" xsi:type="string">Configurable Product description %isolation%</data>
             <data name="product/data/weight" xsi:type="string">2</data>
@@ -84,6 +85,7 @@
             <data name="product/data/name" xsi:type="string">Configurable Product %isolation%</data>
             <data name="product/data/sku" xsi:type="string">configurable_sku_%isolation%</data>
             <data name="product/data/price/value" xsi:type="string">100</data>
+            <data name="product/data/price/dataset" xsi:type="string">default</data>
             <data name="product/data/short_description" xsi:type="string">Configurable short description</data>
             <data name="product/data/description" xsi:type="string">Configurable Product description %isolation%</data>
             <data name="product/data/weight" xsi:type="string">2</data>
-- 
GitLab


From d4a33b38b2829143af863cd3330ecb3578df5b66 Mon Sep 17 00:00:00 2001
From: Iryna Lagno <ilagno@ebay.com>
Date: Fri, 23 Oct 2015 17:21:27 +0300
Subject: [PATCH 251/370] MAGETWO-44453: Required address attribute is not
 require for checkout flow

---
 .../Checkout/view/frontend/web/js/view/billing-address.js    | 3 +++
 .../Magento/Checkout/view/frontend/web/js/view/shipping.js   | 5 ++++-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js b/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js
index b69365ebc0f..4c77250a872 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js
@@ -145,6 +145,9 @@ define(
                 } else {
                     this.source.set('params.invalid', false);
                     this.source.trigger(this.dataScopePrefix + '.data.validate');
+                    if (this.source.get('billingAddress.custom_attributes')) {
+                        this.source.trigger('billingAddress.custom_attributes.data.validate');
+                    };
 
                     if (!this.source.get('params.invalid')) {
                         var addressData = this.source.get(this.dataScopePrefix),
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js
index 562266434dd..e650f6269c9 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js
@@ -201,7 +201,7 @@ define(
                 }
             },
 
-            validateShippingInformation: function() {
+            validateShippingInformation: function () {
                 var shippingAddress,
                     addressData,
                     loginFormSelector = 'form[data-role=email-with-possible-login]',
@@ -224,6 +224,9 @@ define(
                 if (this.isFormInline) {
                     this.source.set('params.invalid', false);
                     this.source.trigger('shippingAddress.data.validate');
+                    if (this.source.get('shippingAddress.custom_attributes')) {
+                        this.source.trigger('shippingAddress.custom_attributes.data.validate');
+                    };
                     if (this.source.get('params.invalid')
                         || !quote.shippingMethod().method_code
                         || !quote.shippingMethod().carrier_code
-- 
GitLab


From d3c5d3715744c871e52f4e67bc83f0054053a689 Mon Sep 17 00:00:00 2001
From: Stanislav Idolov <sidolov@ebay.com>
Date: Fri, 23 Oct 2015 17:21:21 +0300
Subject: [PATCH 252/370] MAGETWO-39588: store_id value is not honored when
 creating simple product through API in multi-websites / multi-stores setup

---
 .../Catalog/Model/ProductRepository.php       |  7 +++-
 .../Model/Indexer/Fulltext/Plugin/Product.php | 34 +++++++++++++------
 app/code/Magento/CatalogSearch/etc/di.xml     |  2 +-
 3 files changed, 31 insertions(+), 12 deletions(-)

diff --git a/app/code/Magento/Catalog/Model/ProductRepository.php b/app/code/Magento/Catalog/Model/ProductRepository.php
index ccd62fb3d33..42923ef4310 100644
--- a/app/code/Magento/Catalog/Model/ProductRepository.php
+++ b/app/code/Magento/Catalog/Model/ProductRepository.php
@@ -286,7 +286,12 @@ class ProductRepository implements \Magento\Catalog\Api\ProductRepositoryInterfa
         if ($createNew) {
             $product = $this->productFactory->create();
             if ($this->storeManager->hasSingleStore()) {
-                $product->setWebsiteIds([$this->storeManager->getStore(true)->getWebsite()->getId()]);
+                $product->setWebsiteIds([$this->storeManager->getStore(true)->getWebsiteId()]);
+            } elseif (isset($productData['store_id'])
+                && !empty($productData['store_id'])
+                && $this->storeManager->getStore($productData['store_id'])
+            ) {
+                $product->setWebsiteIds([$this->storeManager->getStore($productData['store_id'])->getWebsiteId()]);
             }
         } else {
             unset($this->instances[$productData['sku']]);
diff --git a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Product.php b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Product.php
index 04c89e9ecf2..ad68fe08998 100644
--- a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Product.php
+++ b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Product.php
@@ -11,24 +11,38 @@ class Product extends AbstractPlugin
     /**
      * Reindex on product save
      *
-     * @param \Magento\Catalog\Model\Product $product
-     * @return \Magento\Catalog\Model\Product
+     * @param \Magento\Catalog\Model\ResourceModel\Product $productResource
+     * @param \Closure $proceed
+     * @param \Magento\Framework\Model\AbstractModel $product
+     * @return \Magento\Catalog\Model\ResourceModel\Product
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function afterSave(\Magento\Catalog\Model\Product $product)
-    {
+    public function aroundSave(
+        \Magento\Catalog\Model\ResourceModel\Product $productResource,
+        \Closure $proceed,
+        \Magento\Framework\Model\AbstractModel $product
+    ) {
+        $result = $proceed($product);
         $this->reindexRow($product->getId());
-        return $product;
+        return $result;
     }
 
     /**
      * Reindex on product delete
      *
-     * @param \Magento\Catalog\Model\Product $product
-     * @return \Magento\Catalog\Model\Product
+     * @param \Magento\Catalog\Model\ResourceModel\Product $productResource
+     * @param \Closure $proceed
+     * @param \Magento\Framework\Model\AbstractModel $product
+     * @return \Magento\Catalog\Model\ResourceModel\Product
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function afterDelete(\Magento\Catalog\Model\Product $product)
-    {
+    public function aroundDelete(
+        \Magento\Catalog\Model\ResourceModel\Product $productResource,
+        \Closure $proceed,
+        \Magento\Framework\Model\AbstractModel $product
+    ) {
+        $result = $proceed($product);
         $this->reindexRow($product->getId());
-        return $product;
+        return $result;
     }
 }
diff --git a/app/code/Magento/CatalogSearch/etc/di.xml b/app/code/Magento/CatalogSearch/etc/di.xml
index adc76b143fa..815f2b223f0 100644
--- a/app/code/Magento/CatalogSearch/etc/di.xml
+++ b/app/code/Magento/CatalogSearch/etc/di.xml
@@ -33,7 +33,7 @@
             </argument>
         </arguments>
     </type>
-    <type name="Magento\Catalog\Model\Product">
+    <type name="Magento\Catalog\Model\ResourceModel\Product">
         <plugin name="catalogsearchFulltextProduct" type="Magento\CatalogSearch\Model\Indexer\Fulltext\Plugin\Product"/>
     </type>
     <type name="Magento\Catalog\Model\Product\Action">
-- 
GitLab


From f5abd6a58a309e8b53b01f3989a330ea7284e328 Mon Sep 17 00:00:00 2001
From: Susan Wright <swright@ebay.com>
Date: Fri, 23 Oct 2015 07:34:18 -0700
Subject: [PATCH 253/370] MAGETWO-41425: Update toolkit in MagentoCE through
 the infra jmeter tool.

- Updated the performance toolkit benchmark file to the generated version.
---
 setup/performance-toolkit/benchmark.jmx | 10358 +++++++++++++++-------
 1 file changed, 7097 insertions(+), 3261 deletions(-)

diff --git a/setup/performance-toolkit/benchmark.jmx b/setup/performance-toolkit/benchmark.jmx
index 45bd1d57a1e..af73293f01a 100644
--- a/setup/performance-toolkit/benchmark.jmx
+++ b/setup/performance-toolkit/benchmark.jmx
@@ -7,50 +7,246 @@
 -->
 <jmeterTestPlan version="1.2" properties="2.8" jmeter="2.13 r1665067">
   <hashTree>
-    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Toolkit" enabled="true">
+    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Performance Toolkit" enabled="true">
       <stringProp name="TestPlan.comments"></stringProp>
       <boolProp name="TestPlan.functional_mode">false</boolProp>
       <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+      <stringProp name="TestPlan.user_define_classpath"></stringProp>
       <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
         <collectionProp name="Arguments.arguments">
-          <elementProp name="host" elementType="Argument">
-            <stringProp name="Argument.name">host</stringProp>
-            <stringProp name="Argument.value">${__P(host,localhost)}</stringProp>
+          <elementProp name="abandonedCartByGuest" elementType="Argument">
+            <stringProp name="Argument.name">abandonedCartByGuest</stringProp>
+            <stringProp name="Argument.value">${__P(abandonedCartByGuest,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="abandonedCartByCustomer" elementType="Argument">
+            <stringProp name="Argument.name">abandonedCartByCustomer</stringProp>
+            <stringProp name="Argument.value">${__P(abandonedCartByCustomer,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="admin_delay" elementType="Argument">
+            <stringProp name="Argument.name">admin_delay</stringProp>
+            <stringProp name="Argument.value">${__P(admin_delay,150)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="admin_enabled" elementType="Argument">
+            <stringProp name="Argument.name">admin_enabled</stringProp>
+            <stringProp name="Argument.value">${__P(admin_enabled,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="admin_password" elementType="Argument">
+            <stringProp name="Argument.name">admin_password</stringProp>
+            <stringProp name="Argument.value">${__P(admin_password,123123q)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="admin_path" elementType="Argument">
+            <stringProp name="Argument.name">admin_path</stringProp>
+            <stringProp name="Argument.value">${__P(admin_path,admin)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="admin_user" elementType="Argument">
+            <stringProp name="Argument.name">admin_user</stringProp>
+            <stringProp name="Argument.value">${__P(admin_user,admin)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminBrowseCustomersGridScenario1_ViewOddGridPages" elementType="Argument">
+            <stringProp name="Argument.name">adminBrowseCustomersGridScenario1_ViewOddGridPages</stringProp>
+            <stringProp name="Argument.value">${__P(adminBrowseCustomersGridScenario1_ViewOddGridPages,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminBrowseCustomersGridScenario2_ViewEvenGridPages" elementType="Argument">
+            <stringProp name="Argument.name">adminBrowseCustomersGridScenario2_ViewEvenGridPages</stringProp>
+            <stringProp name="Argument.value">${__P(adminBrowseCustomersGridScenario2_ViewEvenGridPages,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminBrowseCustomersGridScenario3_Filtering" elementType="Argument">
+            <stringProp name="Argument.name">adminBrowseCustomersGridScenario3_Filtering</stringProp>
+            <stringProp name="Argument.value">${__P(adminBrowseCustomersGridScenario3_Filtering,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminBrowseCustomersGridScenario4_Sorting" elementType="Argument">
+            <stringProp name="Argument.name">adminBrowseCustomersGridScenario4_Sorting</stringProp>
+            <stringProp name="Argument.value">${__P(adminBrowseCustomersGridScenario4_Sorting,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminBrowseCustomersGridScenario5_FilteringAndSorting" elementType="Argument">
+            <stringProp name="Argument.name">adminBrowseCustomersGridScenario5_FilteringAndSorting</stringProp>
+            <stringProp name="Argument.value">${__P(adminBrowseCustomersGridScenario5_FilteringAndSorting,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminBrowseOrdersGridScenario1_ViewOddGridPages" elementType="Argument">
+            <stringProp name="Argument.name">adminBrowseOrdersGridScenario1_ViewOddGridPages</stringProp>
+            <stringProp name="Argument.value">${__P(adminBrowseOrdersGridScenario1_ViewOddGridPages,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminBrowseOrdersGridScenario2_ViewEvenGridPages" elementType="Argument">
+            <stringProp name="Argument.name">adminBrowseOrdersGridScenario2_ViewEvenGridPages</stringProp>
+            <stringProp name="Argument.value">${__P(adminBrowseOrdersGridScenario2_ViewEvenGridPages,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminBrowseOrdersGridScenario3_Filtering" elementType="Argument">
+            <stringProp name="Argument.name">adminBrowseOrdersGridScenario3_Filtering</stringProp>
+            <stringProp name="Argument.value">${__P(adminBrowseOrdersGridScenario3_Filtering,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminBrowseOrdersGridScenario4_Sorting" elementType="Argument">
+            <stringProp name="Argument.name">adminBrowseOrdersGridScenario4_Sorting</stringProp>
+            <stringProp name="Argument.value">${__P(adminBrowseOrdersGridScenario4_Sorting,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminBrowseOrdersGridScenario5_FilteringAndSorting" elementType="Argument">
+            <stringProp name="Argument.name">adminBrowseOrdersGridScenario5_FilteringAndSorting</stringProp>
+            <stringProp name="Argument.value">${__P(adminBrowseOrdersGridScenario5_FilteringAndSorting,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminBrowseProductsGridScenario1_ViewOddGridPages" elementType="Argument">
+            <stringProp name="Argument.name">adminBrowseProductsGridScenario1_ViewOddGridPages</stringProp>
+            <stringProp name="Argument.value">${__P(adminBrowseProductsGridScenario1_ViewOddGridPages,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminBrowseProductsGridScenario2_ViewEvenGridPages" elementType="Argument">
+            <stringProp name="Argument.name">adminBrowseProductsGridScenario2_ViewEvenGridPages</stringProp>
+            <stringProp name="Argument.value">${__P(adminBrowseProductsGridScenario2_ViewEvenGridPages,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminBrowseProductsGridScenario3_Filtering" elementType="Argument">
+            <stringProp name="Argument.name">adminBrowseProductsGridScenario3_Filtering</stringProp>
+            <stringProp name="Argument.value">${__P(adminBrowseProductsGridScenario3_Filtering,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminBrowseProductsGridScenario4_Sorting" elementType="Argument">
+            <stringProp name="Argument.name">adminBrowseProductsGridScenario4_Sorting</stringProp>
+            <stringProp name="Argument.value">${__P(adminBrowseProductsGridScenario4_Sorting,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminBrowseProductsGridScenario5_FilteringAndSorting" elementType="Argument">
+            <stringProp name="Argument.name">adminBrowseProductsGridScenario5_FilteringAndSorting</stringProp>
+            <stringProp name="Argument.value">${__P(adminBrowseProductsGridScenario5_FilteringAndSorting,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminCreateOrder" elementType="Argument">
+            <stringProp name="Argument.name">adminCreateOrder</stringProp>
+            <stringProp name="Argument.value">${__P(adminCreateOrder,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminCreateProduct" elementType="Argument">
+            <stringProp name="Argument.name">adminCreateProduct</stringProp>
+            <stringProp name="Argument.value">${__P(adminCreateProduct,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminEditOrder" elementType="Argument">
+            <stringProp name="Argument.name">adminEditOrder</stringProp>
+            <stringProp name="Argument.value">${__P(adminEditOrder,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminEditProduct" elementType="Argument">
+            <stringProp name="Argument.name">adminEditProduct</stringProp>
+            <stringProp name="Argument.value">${__P(adminEditProduct,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminExportCustomers" elementType="Argument">
+            <stringProp name="Argument.name">adminExportCustomers</stringProp>
+            <stringProp name="Argument.value">${__P(adminExportCustomers,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminExportProducts" elementType="Argument">
+            <stringProp name="Argument.name">adminExportProducts</stringProp>
+            <stringProp name="Argument.value">${__P(adminExportProducts,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminImportCustomerBehavior" elementType="Argument">
+            <stringProp name="Argument.name">adminImportCustomerBehavior</stringProp>
+            <stringProp name="Argument.value">${__P(adminImportCustomerBehavior,)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminImportCustomerFilePath" elementType="Argument">
+            <stringProp name="Argument.name">adminImportCustomerFilePath</stringProp>
+            <stringProp name="Argument.value">${__P(adminImportCustomerFilePath,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminImportCustomers" elementType="Argument">
+            <stringProp name="Argument.name">adminImportCustomers</stringProp>
+            <stringProp name="Argument.value">${__P(adminImportCustomers,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminImportProductBehavior" elementType="Argument">
+            <stringProp name="Argument.name">adminImportProductBehavior</stringProp>
+            <stringProp name="Argument.value">${__P(adminImportProductBehavior,)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminImportProductFilePath" elementType="Argument">
+            <stringProp name="Argument.name">adminImportProductFilePath</stringProp>
+            <stringProp name="Argument.value">${__P(adminImportProductFilePath,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminImportProductFilePath-2" elementType="Argument">
+            <stringProp name="Argument.name">adminImportProductFilePath-2</stringProp>
+            <stringProp name="Argument.value">${__P(adminImportProductFilePath-2,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="adminImportProducts" elementType="Argument">
+            <stringProp name="Argument.name">adminImportProducts</stringProp>
+            <stringProp name="Argument.value">${__P(adminImportProducts,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="bamboo_build_number" elementType="Argument">
+            <stringProp name="Argument.name">bamboo_build_number</stringProp>
+            <stringProp name="Argument.value">${__P(bamboo_build_number,)}</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
           <elementProp name="base_path" elementType="Argument">
             <stringProp name="Argument.name">base_path</stringProp>
-            <stringProp name="Argument.value">${__P(base_path,/)}</stringProp>
+            <stringProp name="Argument.value">${__P(base_path,)}</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
-          <elementProp name="report_save_path" elementType="Argument">
-            <stringProp name="Argument.name">report_save_path</stringProp>
-            <stringProp name="Argument.value">${__P(report_save_path,./)}</stringProp>
+          <elementProp name="cache_indicator" elementType="Argument">
+            <stringProp name="Argument.name">cache_indicator</stringProp>
+            <stringProp name="Argument.value">${__P(cache_indicator,0)}</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
-          <elementProp name="ramp_period" elementType="Argument">
-            <stringProp name="Argument.name">ramp_period</stringProp>
-            <stringProp name="Argument.value">${__P(ramp_period,300)}</stringProp>
+          <elementProp name="catalogBrowsingByGuest" elementType="Argument">
+            <stringProp name="Argument.name">catalogBrowsingByGuest</stringProp>
+            <stringProp name="Argument.value">${__P(catalogBrowsingByGuest,0)}</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
-          <elementProp name="orders" elementType="Argument">
-            <stringProp name="Argument.name">orders</stringProp>
-            <stringProp name="Argument.value">${__P(orders,0)}</stringProp>
+          <elementProp name="catalogBrowsingByCustomer" elementType="Argument">
+            <stringProp name="Argument.name">catalogBrowsingByCustomer</stringProp>
+            <stringProp name="Argument.value">${__P(catalogBrowsingByCustomer,0)}</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
-          <elementProp name="users" elementType="Argument">
-            <stringProp name="Argument.name">users</stringProp>
-            <stringProp name="Argument.value">${__P(users,100)}</stringProp>
+          <elementProp name="checkoutByGuest" elementType="Argument">
+            <stringProp name="Argument.name">checkoutByGuest</stringProp>
+            <stringProp name="Argument.value">${__P(checkoutByGuest,0)}</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
-          <elementProp name="view_product_add_to_cart_percent" elementType="Argument">
-            <stringProp name="Argument.name">view_product_add_to_cart_percent</stringProp>
-            <stringProp name="Argument.value">${__P(view_product_add_to_cart_percent,62)}</stringProp>
+          <elementProp name="checkoutByCustomer" elementType="Argument">
+            <stringProp name="Argument.name">checkoutByCustomer</stringProp>
+            <stringProp name="Argument.value">${__P(checkoutByCustomer,0)}</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
-          <elementProp name="view_catalog_percent" elementType="Argument">
-            <stringProp name="Argument.name">view_catalog_percent</stringProp>
-            <stringProp name="Argument.value">${__P(view_catalog_percent,30)}</stringProp>
+          <elementProp name="customer_checkout_percent" elementType="Argument">
+            <stringProp name="Argument.name">customer_checkout_percent</stringProp>
+            <stringProp name="Argument.value">${__P(customer_checkout_percent,4)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="customer_limit" elementType="Argument">
+            <stringProp name="Argument.name">customer_limit</stringProp>
+            <stringProp name="Argument.value">${__P(customer_limit,20)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="customer_password" elementType="Argument">
+            <stringProp name="Argument.name">customer_password</stringProp>
+            <stringProp name="Argument.value">123123q</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="customers_page_size" elementType="Argument">
+            <stringProp name="Argument.name">customers_page_size</stringProp>
+            <stringProp name="Argument.value">${__P(customers_page_size,20)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="dashboard_enabled" elementType="Argument">
+            <stringProp name="Argument.name">dashboard_enabled</stringProp>
+            <stringProp name="Argument.value">${__P(dashboard_enabled,0)}</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
           <elementProp name="guest_checkout_percent" elementType="Argument">
@@ -58,9 +254,9 @@
             <stringProp name="Argument.value">${__P(guest_checkout_percent,4)}</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
-          <elementProp name="customer_checkout_percent" elementType="Argument">
-            <stringProp name="Argument.name">customer_checkout_percent</stringProp>
-            <stringProp name="Argument.value">${__P(customer_checkout_percent,4)}</stringProp>
+          <elementProp name="host" elementType="Argument">
+            <stringProp name="Argument.name">host</stringProp>
+            <stringProp name="Argument.value">${__P(host,)}</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
           <elementProp name="loops" elementType="Argument">
@@ -68,695 +264,643 @@
             <stringProp name="Argument.value">${__P(loops,1)}</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
-          <elementProp name="customer_password" elementType="Argument">
-            <stringProp name="Argument.name">customer_password</stringProp>
-            <stringProp name="Argument.value">123123q</stringProp>
+          <elementProp name="orders" elementType="Argument">
+            <stringProp name="Argument.name">orders</stringProp>
+            <stringProp name="Argument.value">${__P(orders,0)}</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
-          <elementProp name="url_suffix" elementType="Argument">
-            <stringProp name="Argument.name">url_suffix</stringProp>
-            <stringProp name="Argument.value">.html</stringProp>
+          <elementProp name="orders_page_size" elementType="Argument">
+            <stringProp name="Argument.name">orders_page_size</stringProp>
+            <stringProp name="Argument.value">${__P(orders_page_size,20)}</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
-          <elementProp name="admin_path" elementType="Argument">
-            <stringProp name="Argument.name">admin_path</stringProp>
-            <stringProp name="Argument.value">${__P(admin_path,admin)}</stringProp>
+          <elementProp name="products_page_size" elementType="Argument">
+            <stringProp name="Argument.name">products_page_size</stringProp>
+            <stringProp name="Argument.value">${__P(products_page_size,20)}</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
-          <elementProp name="admin-user" elementType="Argument">
-            <stringProp name="Argument.name">admin-user</stringProp>
-            <stringProp name="Argument.value">${__P(admin-user,admin)}</stringProp>
+          <elementProp name="ramp_period" elementType="Argument">
+            <stringProp name="Argument.name">ramp_period</stringProp>
+            <stringProp name="Argument.value">${__P(ramp_period,0)}</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
-          <elementProp name="admin-password" elementType="Argument">
-            <stringProp name="Argument.name">admin-password</stringProp>
-            <stringProp name="Argument.value">${__P(admin-password,123123q)}</stringProp>
+          <elementProp name="redis_host" elementType="Argument">
+            <stringProp name="Argument.name">redis_host</stringProp>
+            <stringProp name="Argument.value">${__P(redis_host,)}</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
-          <elementProp name="website_id" elementType="Argument">
-            <stringProp name="Argument.name">website_id</stringProp>
-            <stringProp name="Argument.value">1</stringProp>
+          <elementProp name="report_save_path" elementType="Argument">
+            <stringProp name="Argument.name">report_save_path</stringProp>
+            <stringProp name="Argument.value">${__P(report_save_path,./)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="response_time_file_name" elementType="Argument">
+            <stringProp name="Argument.name">response_time_file_name</stringProp>
+            <stringProp name="Argument.value">${__P(response_time_file_name,production.csv)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="scenario" elementType="Argument">
+            <stringProp name="Argument.name">scenario</stringProp>
+            <stringProp name="Argument.value">${__P(scenario,)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="setupAndTearDownThread" elementType="Argument">
+            <stringProp name="Argument.name">setupAndTearDownThread</stringProp>
+            <stringProp name="Argument.value">${__P(setupAndTearDownThread,1)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="sprint_identifier" elementType="Argument">
+            <stringProp name="Argument.name">sprint_identifier</stringProp>
+            <stringProp name="Argument.value">${__P(sprint_identifier,)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="start_time" elementType="Argument">
+            <stringProp name="Argument.name">start_time</stringProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="starting_index" elementType="Argument">
+            <stringProp name="Argument.name">starting_index</stringProp>
+            <stringProp name="Argument.value">${__P(starting_index,0)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+          <elementProp name="test_duration" elementType="Argument">
+            <stringProp name="Argument.name">test_duration</stringProp>
+            <stringProp name="Argument.value">${__P(test_duration,900)}</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
           <elementProp name="think_time_deviation" elementType="Argument">
             <stringProp name="Argument.name">think_time_deviation</stringProp>
-            <stringProp name="Argument.value">${__P(think_time_deviation, 1000)}</stringProp>
+            <stringProp name="Argument.value">${__P(think_time_deviation,1000)}</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
           <elementProp name="think_time_delay_offset" elementType="Argument">
             <stringProp name="Argument.name">think_time_delay_offset</stringProp>
-            <stringProp name="Argument.value">${__P(think_time_delay_offset, 2000)}</stringProp>
+            <stringProp name="Argument.value">${__P(think_time_delay_offset,2000)}</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
-        </collectionProp>
-      </elementProp>
-      <stringProp name="TestPlan.user_define_classpath"></stringProp>
-      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
-    </TestPlan>
-    <hashTree>
-      <ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="HTTP Request Defaults" enabled="true">
-        <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
-          <collectionProp name="Arguments.arguments"/>
-        </elementProp>
-        <stringProp name="HTTPSampler.domain">${host}</stringProp>
-        <stringProp name="HTTPSampler.port"></stringProp>
-        <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-        <stringProp name="HTTPSampler.response_timeout"></stringProp>
-        <stringProp name="HTTPSampler.protocol">http</stringProp>
-        <stringProp name="HTTPSampler.contentEncoding">utf-8</stringProp>
-        <stringProp name="HTTPSampler.path"></stringProp>
-        <stringProp name="HTTPSampler.implementation">HttpClient4</stringProp>
-        <stringProp name="HTTPSampler.concurrentPool">4</stringProp>
-      </ConfigTestElement>
-      <hashTree/>
-      <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
-        <collectionProp name="HeaderManager.headers">
-          <elementProp name="Accept-Language" elementType="Header">
-            <stringProp name="Header.name">Accept-Language</stringProp>
-            <stringProp name="Header.value">en-US,en;q=0.5</stringProp>
+          <elementProp name="url_suffix" elementType="Argument">
+            <stringProp name="Argument.name">url_suffix</stringProp>
+            <stringProp name="Argument.value">.html</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
-          <elementProp name="Accept" elementType="Header">
-            <stringProp name="Header.name">Accept</stringProp>
-            <stringProp name="Header.value">text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8</stringProp>
+          <elementProp name="users" elementType="Argument">
+            <stringProp name="Argument.name">users</stringProp>
+            <stringProp name="Argument.value">${__P(users,100)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
-          <elementProp name="User-Agent" elementType="Header">
-            <stringProp name="Header.name">User-Agent</stringProp>
-            <stringProp name="Header.value">Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0</stringProp>
+          <elementProp name="view_catalog_percent" elementType="Argument">
+            <stringProp name="Argument.name">view_catalog_percent</stringProp>
+            <stringProp name="Argument.value">${__P(view_catalog_percent,62)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
-          <elementProp name="Accept-Encoding" elementType="Header">
-            <stringProp name="Header.name">Accept-Encoding</stringProp>
-            <stringProp name="Header.value">gzip, deflate</stringProp>
+          <elementProp name="view_product_add_to_cart_percent" elementType="Argument">
+            <stringProp name="Argument.name">view_product_add_to_cart_percent</stringProp>
+            <stringProp name="Argument.value">${__P(view_product_add_to_cart_percent,30)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
-        </collectionProp>
-      </HeaderManager>
-      <hashTree/>
-      <CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie Manager" enabled="true">
-        <collectionProp name="CookieManager.cookies">
-          <elementProp name="product_list_limit" elementType="Cookie" testname="product_list_limit">
-            <stringProp name="Cookie.value">30</stringProp>
-            <stringProp name="Cookie.domain">${host}</stringProp>
-            <stringProp name="Cookie.path">/</stringProp>
-            <boolProp name="Cookie.secure">false</boolProp>
-            <longProp name="Cookie.expires">0</longProp>
-            <boolProp name="Cookie.path_specified">true</boolProp>
-            <boolProp name="Cookie.domain_specified">true</boolProp>
+          <elementProp name="website_id" elementType="Argument">
+            <stringProp name="Argument.name">website_id</stringProp>
+            <stringProp name="Argument.value">1</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
         </collectionProp>
-        <boolProp name="CookieManager.clearEachIteration">true</boolProp>
-      </CookieManager>
-      <hashTree/>
-      <SetupThreadGroup guiclass="SetupThreadGroupGui" testclass="SetupThreadGroup" testname="setUp Thread Group" enabled="true">
-        <stringProp name="ThreadGroup.on_sample_error">stoptest</stringProp>
-        <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
-          <boolProp name="LoopController.continue_forever">false</boolProp>
-          <stringProp name="LoopController.loops">1</stringProp>
+      </elementProp>
+    </TestPlan>
+    <hashTree>
+    <ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="HTTP Request Defaults" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain">${host}</stringProp>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol">http</stringProp>
+      <stringProp name="HTTPSampler.contentEncoding">utf-8</stringProp>
+      <stringProp name="HTTPSampler.path"/>
+      <stringProp name="HTTPSampler.implementation">Java</stringProp>
+      <stringProp name="HTTPSampler.concurrentPool">4</stringProp>
+    </ConfigTestElement>
+    <hashTree/>
+  
+    <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+      <collectionProp name="HeaderManager.headers">
+        <elementProp name="Accept-Language" elementType="Header">
+          <stringProp name="Header.name">Accept-Language</stringProp>
+          <stringProp name="Header.value">en-US,en;q=0.5</stringProp>
         </elementProp>
-        <stringProp name="ThreadGroup.num_threads">1</stringProp>
-        <stringProp name="ThreadGroup.ramp_time">1</stringProp>
-        <longProp name="ThreadGroup.start_time">1384333221000</longProp>
-        <longProp name="ThreadGroup.end_time">1384333221000</longProp>
-        <boolProp name="ThreadGroup.scheduler">false</boolProp>
-        <stringProp name="ThreadGroup.duration"></stringProp>
-        <stringProp name="ThreadGroup.delay"></stringProp>
-      </SetupThreadGroup>
-      <hashTree>
-        <CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie Manager" enabled="true">
-          <collectionProp name="CookieManager.cookies">
-            <elementProp name="product_list_limit" elementType="Cookie" testname="product_list_limit">
-              <stringProp name="Cookie.value">30</stringProp>
-              <stringProp name="Cookie.domain">${host}</stringProp>
-              <stringProp name="Cookie.path">/</stringProp>
-              <boolProp name="Cookie.secure">false</boolProp>
-              <longProp name="Cookie.expires">0</longProp>
-              <boolProp name="Cookie.path_specified">true</boolProp>
-              <boolProp name="Cookie.domain_specified">true</boolProp>
-            </elementProp>
-          </collectionProp>
-          <boolProp name="CookieManager.clearEachIteration">true</boolProp>
-        </CookieManager>
-        <hashTree/>
-        <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="BeanShell Sampler: Clear properties" enabled="true">
-          <stringProp name="BeanShellSampler.query">props.remove(&quot;category_url_key&quot;);
-props.remove(&quot;category_name&quot;);
-props.remove(&quot;simple_products_list&quot;);
-props.remove(&quot;configurable_products_list&quot;);
-props.remove(&quot;users&quot;);
-props.remove(&quot;customer_emails_list&quot;);</stringProp>
-          <stringProp name="BeanShellSampler.filename"></stringProp>
-          <stringProp name="BeanShellSampler.parameters"></stringProp>
-          <boolProp name="BeanShellSampler.resetInterpreter">false</boolProp>
-        </BeanShellSampler>
-        <hashTree/>
-        <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="BeanShell Sampler: validate user defined variables" enabled="true">
-          <stringProp name="BeanShellSampler.query">Boolean stopTestOnError (String error) {
+        <elementProp name="Accept" elementType="Header">
+          <stringProp name="Header.name">Accept</stringProp>
+          <stringProp name="Header.value">text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8</stringProp>
+        </elementProp>
+        <elementProp name="User-Agent" elementType="Header">
+          <stringProp name="Header.name">User-Agent</stringProp>
+          <stringProp name="Header.value">Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0</stringProp>
+        </elementProp>
+        <elementProp name="Accept-Encoding" elementType="Header">
+          <stringProp name="Header.name">Accept-Encoding</stringProp>
+          <stringProp name="Header.value">gzip, deflate</stringProp>
+        </elementProp>
+      </collectionProp>
+    </HeaderManager>
+    <hashTree/>
+  
+    <CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie Manager" enabled="true">
+      <collectionProp name="CookieManager.cookies">
+        <elementProp name="product_list_limit" elementType="Cookie" testname="product_list_limit">
+          <stringProp name="Cookie.value">30</stringProp>
+          <stringProp name="Cookie.domain">${host}</stringProp>
+          <stringProp name="Cookie.path">/</stringProp>
+          <boolProp name="Cookie.secure">false</boolProp>
+          <longProp name="Cookie.expires">0</longProp>
+          <boolProp name="Cookie.path_specified">true</boolProp>
+          <boolProp name="Cookie.domain_specified">true</boolProp>
+        </elementProp>
+      </collectionProp>
+      <boolProp name="CookieManager.clearEachIteration">true</boolProp>
+    </CookieManager>
+    <hashTree/>
+  
+    <SetupThreadGroup guiclass="SetupThreadGroupGui" testclass="SetupThreadGroup" testname="setUp Thread Group" enabled="true">
+      <stringProp name="ThreadGroup.on_sample_error">stoptest</stringProp>
+      <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
+        <boolProp name="LoopController.continue_forever">false</boolProp>
+        <stringProp name="LoopController.loops">1</stringProp>
+      </elementProp>
+      <stringProp name="ThreadGroup.num_threads">${setupAndTearDownThread}</stringProp>
+      <stringProp name="ThreadGroup.ramp_time">1</stringProp>
+      <longProp name="ThreadGroup.start_time">1384333221000</longProp>
+      <longProp name="ThreadGroup.end_time">1384333221000</longProp>
+      <boolProp name="ThreadGroup.scheduler">false</boolProp>
+      <stringProp name="ThreadGroup.duration"/>
+      <stringProp name="ThreadGroup.delay"/>
+    </SetupThreadGroup>
+    <hashTree>
+      <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="SetUp - BeanShell Sampler: Clear properties" enabled="true">
+        <stringProp name="BeanShellSampler.query">props.remove("category_url_key");
+props.remove("category_name");
+props.remove("simple_products_list");
+props.remove("configurable_products_list");
+props.remove("users");
+props.remove("customer_emails_list");
+
+/* This is only used when admin is enabled. */
+props.put("activeAdminThread", "");
+
+/* Set the environment - at this time '01' or '02' */
+String path = "${host}";
+String environment = path.substring(4, 6);
+props.put("environment", environment);</stringProp>
+        <stringProp name="BeanShellSampler.filename"/>
+        <stringProp name="BeanShellSampler.parameters"/>
+        <boolProp name="BeanShellSampler.resetInterpreter">false</boolProp>
+      </BeanShellSampler>
+      <hashTree/>
+      <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="SetUp - BeanShell Sampler: validate user defined variables" enabled="true">
+        <stringProp name="BeanShellSampler.query">Boolean stopTestOnError (String error) {
     log.error(error);
     System.out.println(error);
     SampleResult.setStopTest(true);
     return false;
 }
 
-if (&quot;${host}&quot; == &quot;1&quot;) {
-    return stopTestOnError(&quot;\&quot;host\&quot; parameter is not defined. Please define host parameter as: \&quot;-Jhost=example.com\&quot;&quot;);
+if ("${host}" == "1") {
+    return stopTestOnError("\"host\" parameter is not defined. Please define host parameter as: \"-Jhost=example.com\"");
 }
 
-if (${users} &lt; 10) {
-    return stopTestOnError(&quot;\&quot;users\&quot; parameter is invalid. Its value must be 10 or greater&quot;);
+String path = "${base_path}";
+String slash = "/";
+if (!slash.equals(path.substring(path.length() -1)) || !slash.equals(path.substring(0, 1))) {
+    return stopTestOnError("\"base_path\" parameter is invalid. It must start and end with \"/\"");
 }
+</stringProp>
+        <stringProp name="BeanShellSampler.filename"/>
+        <stringProp name="BeanShellSampler.parameters"/>
+        <boolProp name="BeanShellSampler.resetInterpreter">false</boolProp>
+      </BeanShellSampler>
+      <hashTree/>
+      <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="SetUp - Login" enabled="true">
+        <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+          <collectionProp name="Arguments.arguments"/>
+        </elementProp>
+        <stringProp name="HTTPSampler.domain"/>
+        <stringProp name="HTTPSampler.port"/>
+        <stringProp name="HTTPSampler.connect_timeout"/>
+        <stringProp name="HTTPSampler.response_timeout"/>
+        <stringProp name="HTTPSampler.protocol"/>
+        <stringProp name="HTTPSampler.contentEncoding"/>
+        <stringProp name="HTTPSampler.path">${base_path}${admin_path}</stringProp>
+        <stringProp name="HTTPSampler.method">GET</stringProp>
+        <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+        <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+        <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+        <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+        <boolProp name="HTTPSampler.monitor">false</boolProp>
+        <stringProp name="HTTPSampler.embedded_url_re"/>
+      </HTTPSamplerProxy>
+      <hashTree>
+        <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert login form shown" enabled="true">
+          <collectionProp name="Asserion.test_strings">
+            <stringProp name="-1397214398">Welcome</stringProp>
+            <stringProp name="-515240035">&lt;title&gt;Magento Admin&lt;/title&gt;</stringProp>
+          </collectionProp>
+          <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+          <boolProp name="Assertion.assume_success">false</boolProp>
+          <intProp name="Assertion.test_type">2</intProp>
+        </ResponseAssertion>
+        <hashTree/>
+        <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form key" enabled="true">
+          <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+          <stringProp name="RegexExtractor.refname">admin_form_key</stringProp>
+          <stringProp name="RegexExtractor.regex">&lt;input name="form_key" type="hidden" value="([^'"]+)" /&gt;</stringProp>
+          <stringProp name="RegexExtractor.template">$1$</stringProp>
+          <stringProp name="RegexExtractor.default"/>
+          <stringProp name="RegexExtractor.match_number">1</stringProp>
+        </RegexExtractor>
+        <hashTree/>
+        <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_key extracted" enabled="true">
+          <collectionProp name="Asserion.test_strings">
+            <stringProp name="2845929">^.+$</stringProp>
+          </collectionProp>
+          <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+          <boolProp name="Assertion.assume_success">false</boolProp>
+          <intProp name="Assertion.test_type">1</intProp>
+          <stringProp name="Assertion.scope">variable</stringProp>
+          <stringProp name="Scope.variable">admin_form_key</stringProp>
+        </ResponseAssertion>
+        <hashTree/>
+      </hashTree>
+      <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="SetUp - Login Submit Form" enabled="true">
+        <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+          <collectionProp name="Arguments.arguments">
+            <elementProp name="dummy" elementType="HTTPArgument">
+              <boolProp name="HTTPArgument.always_encode">false</boolProp>
+              <stringProp name="Argument.value"/>
+              <stringProp name="Argument.metadata">=</stringProp>
+              <boolProp name="HTTPArgument.use_equals">true</boolProp>
+              <stringProp name="Argument.name">dummy</stringProp>
+            </elementProp>
+            <elementProp name="form_key" elementType="HTTPArgument">
+              <boolProp name="HTTPArgument.always_encode">false</boolProp>
+              <stringProp name="Argument.value">${admin_form_key}</stringProp>
+              <stringProp name="Argument.metadata">=</stringProp>
+              <boolProp name="HTTPArgument.use_equals">true</boolProp>
+              <stringProp name="Argument.name">form_key</stringProp>
+            </elementProp>
+            <elementProp name="login[password]" elementType="HTTPArgument">
+              <boolProp name="HTTPArgument.always_encode">true</boolProp>
+              <stringProp name="Argument.value">${admin_password}</stringProp>
+              <stringProp name="Argument.metadata">=</stringProp>
+              <boolProp name="HTTPArgument.use_equals">true</boolProp>
+              <stringProp name="Argument.name">login[password]</stringProp>
+            </elementProp>
+            <elementProp name="login[username]" elementType="HTTPArgument">
+              <boolProp name="HTTPArgument.always_encode">true</boolProp>
+              <stringProp name="Argument.value">${admin_user}</stringProp>
+              <stringProp name="Argument.metadata">=</stringProp>
+              <boolProp name="HTTPArgument.use_equals">true</boolProp>
+              <stringProp name="Argument.name">login[username]</stringProp>
+            </elementProp>
+          </collectionProp>
+        </elementProp>
+        <stringProp name="HTTPSampler.domain"/>
+        <stringProp name="HTTPSampler.port"/>
+        <stringProp name="HTTPSampler.connect_timeout"/>
+        <stringProp name="HTTPSampler.response_timeout"/>
+        <stringProp name="HTTPSampler.protocol"/>
+        <stringProp name="HTTPSampler.contentEncoding"/>
+        <stringProp name="HTTPSampler.path">${base_path}${admin_path}/admin/dashboard/</stringProp>
+        <stringProp name="HTTPSampler.method">POST</stringProp>
+        <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+        <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+        <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+        <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+        <stringProp name="HTTPSampler.implementation">Java</stringProp>
+        <boolProp name="HTTPSampler.monitor">false</boolProp>
+        <stringProp name="HTTPSampler.embedded_url_re"/>
+        <stringProp name="TestPlan.comments">Implementation needs to be set to Java as per http://stackoverflow.com/questions/19636282/jmeter-error-in-redirect-url-for-get</stringProp>
+      </HTTPSamplerProxy>
+      <hashTree>
+    <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert logged-in" enabled="true">
+      <collectionProp name="Asserion.test_strings">
+        <stringProp name="1847038912">&lt;title&gt;Dashboard / Magento Admin&lt;/title&gt;</stringProp>
+      </collectionProp>
+      <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+      <boolProp name="Assertion.assume_success">false</boolProp>
+      <intProp name="Assertion.test_type">2</intProp>
+    </ResponseAssertion>
+    <hashTree/>
+  </hashTree>
+      <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="SetUp - HTTP Request: Admin - Enable All Cache Types" enabled="true">
+        <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+          <collectionProp name="Arguments.arguments">
+            <elementProp name="form_key" elementType="HTTPArgument">
+              <boolProp name="HTTPArgument.always_encode">true</boolProp>
+              <stringProp name="Argument.value">${admin_form_key}</stringProp>
+              <stringProp name="Argument.metadata">=</stringProp>
+              <boolProp name="HTTPArgument.use_equals">true</boolProp>
+              <stringProp name="Argument.name">form_key</stringProp>
+            </elementProp>
+            <elementProp name="massaction_prepare_key" elementType="HTTPArgument">
+              <boolProp name="HTTPArgument.always_encode">true</boolProp>
+              <stringProp name="Argument.value">types</stringProp>
+              <stringProp name="Argument.metadata">=</stringProp>
+              <boolProp name="HTTPArgument.use_equals">true</boolProp>
+              <stringProp name="Argument.name">massaction_prepare_key</stringProp>
+            </elementProp>
+            <elementProp name="types" elementType="HTTPArgument">
+              <boolProp name="HTTPArgument.always_encode">true</boolProp>
+              <stringProp name="Argument.value">config,layout,block_html,collections,db_ddl,eav,config_integration,full_page,translate,config_webservice,config_integration_api</stringProp>
+              <stringProp name="Argument.metadata">=</stringProp>
+              <boolProp name="HTTPArgument.use_equals">true</boolProp>
+              <stringProp name="Argument.name">types</stringProp>
+            </elementProp>
+          </collectionProp>
+        </elementProp>
+        <stringProp name="HTTPSampler.domain"/>
+        <stringProp name="HTTPSampler.port"/>
+        <stringProp name="HTTPSampler.connect_timeout"/>
+        <stringProp name="HTTPSampler.response_timeout"/>
+        <stringProp name="HTTPSampler.protocol"/>
+        <stringProp name="HTTPSampler.contentEncoding"/>
+        <stringProp name="HTTPSampler.path">${base_path}${admin_path}/admin/cache/massEnable</stringProp>
+        <stringProp name="HTTPSampler.method">POST</stringProp>
+        <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+        <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+        <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+        <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+        <boolProp name="HTTPSampler.monitor">false</boolProp>
+        <stringProp name="HTTPSampler.embedded_url_re"/>
+        <stringProp name="TestPlan.comments">Begin by enabling all cache types</stringProp>
+      </HTTPSamplerProxy>
+      <hashTree/>
+      <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="SetUp - HTTP Request: Admin - Refresh All Cache Types" enabled="true">
+        <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+          <collectionProp name="Arguments.arguments">
+            <elementProp name="form_key" elementType="HTTPArgument">
+              <boolProp name="HTTPArgument.always_encode">true</boolProp>
+              <stringProp name="Argument.value">${admin_form_key}</stringProp>
+              <stringProp name="Argument.metadata">=</stringProp>
+              <boolProp name="HTTPArgument.use_equals">true</boolProp>
+              <stringProp name="Argument.name">form_key</stringProp>
+            </elementProp>
+            <elementProp name="massaction_prepare_key" elementType="HTTPArgument">
+              <boolProp name="HTTPArgument.always_encode">true</boolProp>
+              <stringProp name="Argument.value">types</stringProp>
+              <stringProp name="Argument.metadata">=</stringProp>
+              <boolProp name="HTTPArgument.use_equals">true</boolProp>
+              <stringProp name="Argument.name">massaction_prepare_key</stringProp>
+            </elementProp>
+            <elementProp name="types" elementType="HTTPArgument">
+              <boolProp name="HTTPArgument.always_encode">true</boolProp>
+              <stringProp name="Argument.value">config,layout,block_html,collections,db_ddl,eav,config_integration,full_page,translate,config_webservice,config_integration_api</stringProp>
+              <stringProp name="Argument.metadata">=</stringProp>
+              <boolProp name="HTTPArgument.use_equals">true</boolProp>
+              <stringProp name="Argument.name">types</stringProp>
+            </elementProp>
+          </collectionProp>
+        </elementProp>
+        <stringProp name="HTTPSampler.domain"/>
+        <stringProp name="HTTPSampler.port"/>
+        <stringProp name="HTTPSampler.connect_timeout"/>
+        <stringProp name="HTTPSampler.response_timeout"/>
+        <stringProp name="HTTPSampler.protocol"/>
+        <stringProp name="HTTPSampler.contentEncoding"/>
+        <stringProp name="HTTPSampler.path">${base_path}${admin_path}/admin/cache/massRefresh</stringProp>
+        <stringProp name="HTTPSampler.method">POST</stringProp>
+        <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+        <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+        <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+        <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+        <boolProp name="HTTPSampler.monitor">false</boolProp>
+        <stringProp name="HTTPSampler.embedded_url_re"/>
+        <stringProp name="TestPlan.comments">Refresh all cache types</stringProp>
+      </HTTPSamplerProxy>
+      <hashTree/>
+      <IfController guiclass="IfControllerPanel" testclass="IfController" testname="If Controller: Disable cache type?" enabled="true">
+        <stringProp name="IfController.condition">"${cache_indicator}" == "1" || "${cache_indicator}" == "2"</stringProp>
+        <boolProp name="IfController.evaluateAll">false</boolProp>
+      </IfController>
+      <hashTree>
+        <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="SetUp - BeanShell Sampler: resolve cache types" enabled="true">
+          <stringProp name="BeanShellSampler.query">// Default to disable all cache types
+vars.put("cache_types", "config,layout,block_html,collections,db_ddl,eav,config_integration,full_page,translate,config_webservice,config_integration_api");
 
-String path = &quot;${base_path}&quot;;
-String slash = &quot;/&quot;;
-if (!slash.equals(path.substring(path.length() -1)) || !slash.equals(path.substring(0, 1))) {
-    return stopTestOnError(&quot;\&quot;base_path\&quot; parameter is invalid. It must start and end with \&quot;/\&quot;&quot;);
+if ("${cache_indicator}" == "1") {
+	// Only disable Full Page Cache
+	vars.put("cache_types", "full_page");
 }
 </stringProp>
-          <stringProp name="BeanShellSampler.filename"></stringProp>
-          <stringProp name="BeanShellSampler.parameters"></stringProp>
+          <stringProp name="BeanShellSampler.filename"/>
+          <stringProp name="BeanShellSampler.parameters"/>
           <boolProp name="BeanShellSampler.resetInterpreter">false</boolProp>
         </BeanShellSampler>
         <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP Request: Open main page (for category extract)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
-          </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol"></stringProp>
-          <stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-          <stringProp name="TestPlan.comments">Site - Get Category 1</stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor: Extarct first category url key" enabled="true">
-            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
-            <stringProp name="RegexExtractor.refname">category_url_key</stringProp>
-            <stringProp name="RegexExtractor.regex">&lt;a href=&quot;http://${host}${base_path}(index.php/)?([^&apos;&quot;]+)${url_suffix}&quot;  class=&quot;level-top&quot; &gt;</stringProp>
-            <stringProp name="RegexExtractor.template">$2$</stringProp>
-            <stringProp name="RegexExtractor.default"></stringProp>
-            <stringProp name="RegexExtractor.match_number">1</stringProp>
-            <stringProp name="Scope.variable">simple_product_1_url_key</stringProp>
-          </RegexExtractor>
-          <hashTree/>
-          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor: Extarct first category name" enabled="true">
-            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
-            <stringProp name="RegexExtractor.refname">category_name</stringProp>
-            <stringProp name="RegexExtractor.regex">&lt;a href=&quot;http://${host}${base_path}(index.php/)?${category_url_key}${url_suffix}&quot;  class=&quot;level-top&quot; &gt;&lt;span&gt;([^&apos;&quot;]+)&lt;/span&gt;</stringProp>
-            <stringProp name="RegexExtractor.template">$2$</stringProp>
-            <stringProp name="RegexExtractor.default"></stringProp>
-            <stringProp name="RegexExtractor.match_number">1</stringProp>
-            <stringProp name="Scope.variable">simple_product_1_url_key</stringProp>
-          </RegexExtractor>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Responce Assertion: Assert category url" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="484395188">^[a-z0-9-]+$</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">1</intProp>
-            <stringProp name="Assertion.scope">variable</stringProp>
-            <stringProp name="Scope.variable">category_url_key</stringProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Responce Assertion: Assert category name" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="2845929">^.+$</stringProp>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="SetUp - HTTP Request: Admin - Disable Specific Cache Types" enabled="true">
+          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="form_key" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">true</boolProp>
+                <stringProp name="Argument.value">${admin_form_key}</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">form_key</stringProp>
+              </elementProp>
+              <elementProp name="massaction_prepare_key" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">true</boolProp>
+                <stringProp name="Argument.value">types</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">massaction_prepare_key</stringProp>
+              </elementProp>
+              <elementProp name="types" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">true</boolProp>
+                <stringProp name="Argument.value">${cache_types}</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">types</stringProp>
+              </elementProp>
             </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">1</intProp>
-            <stringProp name="Assertion.scope">variable</stringProp>
-            <stringProp name="Scope.variable">category_name</stringProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="BeanShell Sampler: Collect category" enabled="true">
-          <stringProp name="BeanShellSampler.query">props.put(&quot;category_url_key&quot;, vars.get(&quot;category_url_key&quot;));
-props.put(&quot;category_name&quot;, vars.get(&quot;category_name&quot;));</stringProp>
-          <stringProp name="BeanShellSampler.filename"></stringProp>
-          <stringProp name="BeanShellSampler.parameters"></stringProp>
-          <boolProp name="BeanShellSampler.resetInterpreter">false</boolProp>
-        </BeanShellSampler>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP Request: Search simple products" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol"></stringProp>
-          <stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}catalogsearch/result/index/?limit=30&amp;q=Simple</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
+          <stringProp name="HTTPSampler.domain"/>
+          <stringProp name="HTTPSampler.port"/>
+          <stringProp name="HTTPSampler.connect_timeout"/>
+          <stringProp name="HTTPSampler.response_timeout"/>
+          <stringProp name="HTTPSampler.protocol"/>
+          <stringProp name="HTTPSampler.contentEncoding"/>
+          <stringProp name="HTTPSampler.path">${base_path}${admin_path}/admin/cache/massDisable</stringProp>
+          <stringProp name="HTTPSampler.method">POST</stringProp>
           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
           <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
           <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+          <boolProp name="HTTPSampler.BROWSER_COMPATIBLE_MULTIPART">true</boolProp>
           <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+          <stringProp name="HTTPSampler.embedded_url_re"/>
         </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Responce Assertion: Assert search result" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="-68828613">Search results for: &apos;Simple&apos;</stringProp>
-              <stringProp name="1647182604">&lt;div class=&quot;search results&quot;&gt;</stringProp>
+        <hashTree/>
+      </hashTree>
+      <IfController guiclass="IfControllerPanel" testclass="IfController" testname="If Controller - Cache Validation - All Enabled" enabled="true">
+        <stringProp name="IfController.condition">"${cache_indicator}" == "0"</stringProp>
+        <boolProp name="IfController.evaluateAll">false</boolProp>
+      </IfController>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="SetUp - HTTP Request - Cache Validation - All Enabled" enabled="true">
+          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="form_key" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value">${admin_form_key}</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">form_key</stringProp>
+                <stringProp name="Argument.desc">true</stringProp>
+              </elementProp>
             </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor: Extract product url keys" enabled="true">
-            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
-            <stringProp name="RegexExtractor.refname">simple_products_url_keys</stringProp>
-            <stringProp name="RegexExtractor.regex">&lt;a class=&quot;product-item-link&quot;\s*href=&quot;http://${host}${base_path}(index.php/)?([^&apos;&quot;]+)${url_suffix}&quot;&gt;</stringProp>
-            <stringProp name="RegexExtractor.template">$2$</stringProp>
-            <stringProp name="RegexExtractor.default"></stringProp>
-            <stringProp name="RegexExtractor.match_number">-1</stringProp>
-          </RegexExtractor>
-          <hashTree/>
-        </hashTree>
-        <ForeachController guiclass="ForeachControlPanel" testclass="ForeachController" testname="ForEach Controller: Simple products loop (search result)" enabled="true">
-          <stringProp name="ForeachController.inputVal">simple_products_url_keys</stringProp>
-          <stringProp name="ForeachController.returnVal">simple_products_url_key</stringProp>
-          <boolProp name="ForeachController.useSeparator">true</boolProp>
-        </ForeachController>
-        <hashTree>
-          <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP Request: Open Simple product" enabled="true">
-            <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-              <collectionProp name="Arguments.arguments"/>
-            </elementProp>
-            <stringProp name="HTTPSampler.domain"></stringProp>
-            <stringProp name="HTTPSampler.port"></stringProp>
-            <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-            <stringProp name="HTTPSampler.response_timeout"></stringProp>
-            <stringProp name="HTTPSampler.protocol">http</stringProp>
-            <stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
-            <stringProp name="HTTPSampler.path">${base_path}${simple_products_url_key}${url_suffix}</stringProp>
-            <stringProp name="HTTPSampler.method">GET</stringProp>
-            <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-            <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-            <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-            <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-            <boolProp name="HTTPSampler.monitor">false</boolProp>
-            <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-          </HTTPSamplerProxy>
-          <hashTree>
-            <XPathExtractor guiclass="XPathExtractorGui" testclass="XPathExtractor" testname="XPath Extractor: Extarct product id" enabled="true">
-              <stringProp name="XPathExtractor.default"></stringProp>
-              <stringProp name="XPathExtractor.refname">simple_product_id</stringProp>
-              <stringProp name="XPathExtractor.xpathQuery">.//input[@type=&quot;hidden&quot; and @name=&quot;product&quot;]/@value</stringProp>
-              <boolProp name="XPathExtractor.validate">false</boolProp>
-              <boolProp name="XPathExtractor.tolerant">true</boolProp>
-              <boolProp name="XPathExtractor.namespace">false</boolProp>
-            </XPathExtractor>
-            <hashTree/>
-            <XPathExtractor guiclass="XPathExtractorGui" testclass="XPathExtractor" testname="XPath Extractor: Extarct product title" enabled="true">
-              <stringProp name="XPathExtractor.default"></stringProp>
-              <stringProp name="XPathExtractor.refname">simple_product_title</stringProp>
-              <stringProp name="XPathExtractor.xpathQuery">.//*[@data-ui-id=&apos;page-title-wrapper&apos;]/text()</stringProp>
-              <boolProp name="XPathExtractor.validate">false</boolProp>
-              <boolProp name="XPathExtractor.tolerant">true</boolProp>
-              <boolProp name="XPathExtractor.namespace">false</boolProp>
-            </XPathExtractor>
-            <hashTree/>
-            <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Responce Assertion: Assert id" enabled="true">
-              <collectionProp name="Asserion.test_strings">
-                <stringProp name="89649215">^\d+$</stringProp>
-              </collectionProp>
-              <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-              <boolProp name="Assertion.assume_success">false</boolProp>
-              <intProp name="Assertion.test_type">1</intProp>
-              <stringProp name="Assertion.scope">variable</stringProp>
-              <stringProp name="Scope.variable">simple_product_id</stringProp>
-            </ResponseAssertion>
-            <hashTree/>
-            <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Responce Assertion: Assert title" enabled="true">
-              <collectionProp name="Asserion.test_strings">
-                <stringProp name="2845929">^.+$</stringProp>
-              </collectionProp>
-              <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-              <boolProp name="Assertion.assume_success">false</boolProp>
-              <intProp name="Assertion.test_type">1</intProp>
-              <stringProp name="Assertion.scope">variable</stringProp>
-              <stringProp name="Scope.variable">simple_product_title</stringProp>
-            </ResponseAssertion>
-            <hashTree/>
-            <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Responce Assertion: Assert url key" enabled="true">
-              <collectionProp name="Asserion.test_strings">
-                <stringProp name="484395188">^[a-z0-9-]+$</stringProp>
-              </collectionProp>
-              <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-              <boolProp name="Assertion.assume_success">false</boolProp>
-              <intProp name="Assertion.test_type">1</intProp>
-              <stringProp name="Assertion.scope">variable</stringProp>
-              <stringProp name="Scope.variable">simple_products_url_key</stringProp>
-            </ResponseAssertion>
-            <hashTree/>
-          </hashTree>
-          <CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="Counter" enabled="true">
-            <stringProp name="CounterConfig.start">1</stringProp>
-            <stringProp name="CounterConfig.end"></stringProp>
-            <stringProp name="CounterConfig.incr">1</stringProp>
-            <stringProp name="CounterConfig.name">simple_products_counter</stringProp>
-            <stringProp name="CounterConfig.format"></stringProp>
-            <boolProp name="CounterConfig.per_user">false</boolProp>
-          </CounterConfig>
-          <hashTree/>
-          <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="BeanShell Sampler: Collect simple product" enabled="true">
-            <stringProp name="BeanShellSampler.query">import java.util.ArrayList;
-import java.util.HashMap;
-
-// If it is first iteration of cycle then recreate productList
-if (1 == Integer.parseInt(vars.get(&quot;simple_products_counter&quot;))) {
-    productList = new ArrayList();
-    props.put(&quot;simple_products_list&quot;, productList);
-} else {
-    productList = props.get(&quot;simple_products_list&quot;);
-}
-
-// Create product map
-Map productMap = new HashMap();
-productMap.put(&quot;id&quot;, vars.get(&quot;simple_product_id&quot;));
-productMap.put(&quot;title&quot;, vars.get(&quot;simple_product_title&quot;));
-productMap.put(&quot;url_key&quot;, vars.get(&quot;simple_products_url_key&quot;));
-
-// Collect products map in products list
-productList.add(productMap);                        </stringProp>
-            <stringProp name="BeanShellSampler.filename"></stringProp>
-            <stringProp name="BeanShellSampler.parameters"></stringProp>
-            <boolProp name="BeanShellSampler.resetInterpreter">false</boolProp>
-          </BeanShellSampler>
-          <hashTree/>
-        </hashTree>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP Request: Search configurable products" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol"></stringProp>
-          <stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}catalogsearch/result/index/?limit=30&amp;q=Configurable</stringProp>
+          <stringProp name="HTTPSampler.domain"/>
+          <stringProp name="HTTPSampler.port"/>
+          <stringProp name="HTTPSampler.connect_timeout"/>
+          <stringProp name="HTTPSampler.response_timeout"/>
+          <stringProp name="HTTPSampler.protocol"/>
+          <stringProp name="HTTPSampler.contentEncoding"/>
+          <stringProp name="HTTPSampler.path">${base_path}${admin_path}/admin/cache/</stringProp>
           <stringProp name="HTTPSampler.method">GET</stringProp>
           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
           <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
           <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+          <boolProp name="HTTPSampler.BROWSER_COMPATIBLE_MULTIPART">true</boolProp>
           <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+          <stringProp name="HTTPSampler.embedded_url_re"/>
         </HTTPSamplerProxy>
         <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Responce Assertion: Assert search result" enabled="true">
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion - Cache Validation - All Enabled" enabled="true">
             <collectionProp name="Asserion.test_strings">
-              <stringProp name="-1354477292">Search results for: &apos;Configurable&apos;</stringProp>
-              <stringProp name="1647182604">&lt;div class=&quot;search results&quot;&gt;</stringProp>
+              <stringProp name="860336383">TRANSLATE(?s).+?&lt;span&gt;Enabled&lt;/span&gt;</stringProp>
+              <stringProp name="1466502763">CONFIG(?s).+?&lt;span&gt;Enabled&lt;/span&gt;</stringProp>
+              <stringProp name="-1659688004">LAYOUT_GENERAL_CACHE_TAG(?s).+?&lt;span&gt;Enabled&lt;/span&gt;</stringProp>
+              <stringProp name="-21423984">BLOCK_HTML(?s).+?&lt;span&gt;Enabled&lt;/span&gt;</stringProp>
+              <stringProp name="593884002">COLLECTION_DATA(?s).+?&lt;span&gt;Enabled&lt;/span&gt;</stringProp>
+              <stringProp name="-751452301">EAV(?s).+?&lt;span&gt;Enabled&lt;/span&gt;</stringProp>
+              <stringProp name="1611481748">FPC(?s).+?&lt;span&gt;Enabled&lt;/span&gt;</stringProp>
+              <stringProp name="846147458">DB_DDL(?s).+?&lt;span&gt;Enabled&lt;/span&gt;</stringProp>
+              <stringProp name="-534412103">INTEGRATION(?s).+?&lt;span&gt;Enabled&lt;/span&gt;</stringProp>
+              <stringProp name="-72935653">INTEGRATION_API_CONFIG(?s).+?&lt;span&gt;Enabled&lt;/span&gt;</stringProp>
+              <stringProp name="330643820">WEBSERVICE(?s).+?&lt;span&gt;Enabled&lt;/span&gt;</stringProp>
             </collectionProp>
             <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
             <boolProp name="Assertion.assume_success">false</boolProp>
             <intProp name="Assertion.test_type">2</intProp>
           </ResponseAssertion>
           <hashTree/>
-          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor: Extract product url keys" enabled="true">
-            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
-            <stringProp name="RegexExtractor.refname">configurable_products_url_keys</stringProp>
-            <stringProp name="RegexExtractor.regex">&lt;a class=&quot;product-item-link&quot;\s*href=&quot;http://${host}${base_path}(index.php/)?([^&apos;&quot;]+)${url_suffix}&quot;&gt;\s*Configurable</stringProp>
-            <stringProp name="RegexExtractor.template">$2$</stringProp>
-            <stringProp name="RegexExtractor.default"></stringProp>
-            <stringProp name="RegexExtractor.match_number">-1</stringProp>
-          </RegexExtractor>
-          <hashTree/>
-        </hashTree>
-        <ForeachController guiclass="ForeachControlPanel" testclass="ForeachController" testname="ForEach Controller: Configurable products loop (search result)" enabled="true">
-          <stringProp name="ForeachController.inputVal">configurable_products_url_keys</stringProp>
-          <stringProp name="ForeachController.returnVal">configurable_products_url_key</stringProp>
-          <boolProp name="ForeachController.useSeparator">true</boolProp>
-        </ForeachController>
-        <hashTree>
-          <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP Request: Open Configurable product" enabled="true">
-            <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-              <collectionProp name="Arguments.arguments"/>
-            </elementProp>
-            <stringProp name="HTTPSampler.domain"></stringProp>
-            <stringProp name="HTTPSampler.port"></stringProp>
-            <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-            <stringProp name="HTTPSampler.response_timeout"></stringProp>
-            <stringProp name="HTTPSampler.protocol">http</stringProp>
-            <stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
-            <stringProp name="HTTPSampler.path">${base_path}${configurable_products_url_key}${url_suffix}</stringProp>
-            <stringProp name="HTTPSampler.method">GET</stringProp>
-            <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-            <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-            <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-            <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-            <boolProp name="HTTPSampler.monitor">false</boolProp>
-            <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-          </HTTPSamplerProxy>
-          <hashTree>
-            <XPathExtractor guiclass="XPathExtractorGui" testclass="XPathExtractor" testname="XPath Extractor: Extarct product id" enabled="true">
-              <stringProp name="XPathExtractor.default"></stringProp>
-              <stringProp name="XPathExtractor.refname">configurable_product_id</stringProp>
-              <stringProp name="XPathExtractor.xpathQuery">.//input[@type=&quot;hidden&quot; and @name=&quot;product&quot;]/@value</stringProp>
-              <boolProp name="XPathExtractor.validate">false</boolProp>
-              <boolProp name="XPathExtractor.tolerant">true</boolProp>
-              <boolProp name="XPathExtractor.namespace">false</boolProp>
-            </XPathExtractor>
-            <hashTree/>
-            <XPathExtractor guiclass="XPathExtractorGui" testclass="XPathExtractor" testname="XPath Extractor: Extarct product title" enabled="true">
-              <stringProp name="XPathExtractor.default"></stringProp>
-              <stringProp name="XPathExtractor.refname">configurable_product_title</stringProp>
-              <stringProp name="XPathExtractor.xpathQuery">.//*[@data-ui-id=&apos;page-title-wrapper&apos;]/text()</stringProp>
-              <boolProp name="XPathExtractor.validate">false</boolProp>
-              <boolProp name="XPathExtractor.tolerant">true</boolProp>
-              <boolProp name="XPathExtractor.namespace">false</boolProp>
-            </XPathExtractor>
-            <hashTree/>
-            <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor: Extarct product attribute id" enabled="true">
-              <stringProp name="RegexExtractor.useHeaders">false</stringProp>
-              <stringProp name="RegexExtractor.refname">configurable_product_attribute_id</stringProp>
-              <stringProp name="RegexExtractor.regex">&quot;attributes&quot;:\{&quot;(\d+)&quot;</stringProp>
-              <stringProp name="RegexExtractor.template">$1$</stringProp>
-              <stringProp name="RegexExtractor.default"></stringProp>
-              <stringProp name="RegexExtractor.match_number">1</stringProp>
-            </RegexExtractor>
-            <hashTree/>
-            <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor: Extarct product attribute option id" enabled="true">
-              <stringProp name="RegexExtractor.useHeaders">false</stringProp>
-              <stringProp name="RegexExtractor.refname">configurable_product_attribute_option_id</stringProp>
-              <stringProp name="RegexExtractor.regex">&quot;options&quot;:\[\{&quot;id&quot;:&quot;(\d+)&quot;</stringProp>
-              <stringProp name="RegexExtractor.template">$1$</stringProp>
-              <stringProp name="RegexExtractor.default"></stringProp>
-              <stringProp name="RegexExtractor.match_number">1</stringProp>
-            </RegexExtractor>
-            <hashTree/>
-            <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Responce Assertion: Assert id" enabled="true">
-              <collectionProp name="Asserion.test_strings">
-                <stringProp name="89649215">^\d+$</stringProp>
-              </collectionProp>
-              <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-              <boolProp name="Assertion.assume_success">false</boolProp>
-              <intProp name="Assertion.test_type">1</intProp>
-              <stringProp name="Assertion.scope">variable</stringProp>
-              <stringProp name="Scope.variable">configurable_product_id</stringProp>
-            </ResponseAssertion>
-            <hashTree/>
-            <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Responce Assertion: Assert title" enabled="true">
-              <collectionProp name="Asserion.test_strings">
-                <stringProp name="2845929">^.+$</stringProp>
-              </collectionProp>
-              <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-              <boolProp name="Assertion.assume_success">false</boolProp>
-              <intProp name="Assertion.test_type">1</intProp>
-              <stringProp name="Assertion.scope">variable</stringProp>
-              <stringProp name="Scope.variable">configurable_product_title</stringProp>
-            </ResponseAssertion>
-            <hashTree/>
-            <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Responce Assertion: Assert url key" enabled="true">
-              <collectionProp name="Asserion.test_strings">
-                <stringProp name="484395188">^[a-z0-9-]+$</stringProp>
-              </collectionProp>
-              <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-              <boolProp name="Assertion.assume_success">false</boolProp>
-              <intProp name="Assertion.test_type">1</intProp>
-              <stringProp name="Assertion.scope">variable</stringProp>
-              <stringProp name="Scope.variable">configurable_products_url_key</stringProp>
-            </ResponseAssertion>
-            <hashTree/>
-            <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion: Assert attribute id" enabled="true">
-              <collectionProp name="Asserion.test_strings">
-                <stringProp name="89649215">^\d+$</stringProp>
-              </collectionProp>
-              <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-              <boolProp name="Assertion.assume_success">false</boolProp>
-              <intProp name="Assertion.test_type">1</intProp>
-              <stringProp name="Assertion.scope">variable</stringProp>
-              <stringProp name="Scope.variable">configurable_product_attribute_id</stringProp>
-            </ResponseAssertion>
-            <hashTree/>
-            <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion: Assert attribute option id" enabled="true">
-              <collectionProp name="Asserion.test_strings">
-                <stringProp name="89649215">^\d+$</stringProp>
-              </collectionProp>
-              <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-              <boolProp name="Assertion.assume_success">false</boolProp>
-              <intProp name="Assertion.test_type">1</intProp>
-              <stringProp name="Assertion.scope">variable</stringProp>
-              <stringProp name="Scope.variable">configurable_product_attribute_option_id</stringProp>
-            </ResponseAssertion>
-            <hashTree/>
-          </hashTree>
-          <CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="Counter" enabled="true">
-            <stringProp name="CounterConfig.start">1</stringProp>
-            <stringProp name="CounterConfig.end"></stringProp>
-            <stringProp name="CounterConfig.incr">1</stringProp>
-            <stringProp name="CounterConfig.name">configurable_products_counter</stringProp>
-            <stringProp name="CounterConfig.format"></stringProp>
-            <boolProp name="CounterConfig.per_user">false</boolProp>
-          </CounterConfig>
-          <hashTree/>
-          <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="BeanShell Sampler: Collect configurable product" enabled="true">
-            <stringProp name="BeanShellSampler.query">import java.util.ArrayList;
-import java.util.HashMap;
-
-// If it is first iteration of cycle then recreate productList
-if (1 == Integer.parseInt(vars.get(&quot;configurable_products_counter&quot;))) {
-    productList = new ArrayList();
-    props.put(&quot;configurable_products_list&quot;, productList);
-} else {
-    productList = props.get(&quot;configurable_products_list&quot;);
-}
-
-// Create product map
-Map productMap = new HashMap();
-productMap.put(&quot;id&quot;, vars.get(&quot;configurable_product_id&quot;));
-productMap.put(&quot;title&quot;, vars.get(&quot;configurable_product_title&quot;));
-productMap.put(&quot;url_key&quot;, vars.get(&quot;configurable_products_url_key&quot;));
-productMap.put(&quot;attribute_id&quot;, vars.get(&quot;configurable_product_attribute_id&quot;));
-productMap.put(&quot;attribute_option_id&quot;, vars.get(&quot;configurable_product_attribute_option_id&quot;));
-
-// Collect products map in products list
-productList.add(productMap);                 </stringProp>
-            <stringProp name="BeanShellSampler.filename"></stringProp>
-            <stringProp name="BeanShellSampler.parameters"></stringProp>
-            <boolProp name="BeanShellSampler.resetInterpreter">false</boolProp>
-          </BeanShellSampler>
-          <hashTree/>
         </hashTree>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Admin - Login" enabled="true">
+      </hashTree>
+      <IfController guiclass="IfControllerPanel" testclass="IfController" testname="If Controller - Cache Validation - Only FPC Disabled" enabled="true">
+        <stringProp name="IfController.condition">"${cache_indicator}" == "1"</stringProp>
+        <boolProp name="IfController.evaluateAll">false</boolProp>
+      </IfController>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="SetUp - HTTP Request - Cache Validation - Only FPC Disabled" enabled="true">
           <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
+            <collectionProp name="Arguments.arguments">
+              <elementProp name="form_key" elementType="HTTPArgument">
+                <boolProp name="HTTPArgument.always_encode">false</boolProp>
+                <stringProp name="Argument.value">${admin_form_key}</stringProp>
+                <stringProp name="Argument.metadata">=</stringProp>
+                <boolProp name="HTTPArgument.use_equals">true</boolProp>
+                <stringProp name="Argument.name">form_key</stringProp>
+                <stringProp name="Argument.desc">true</stringProp>
+              </elementProp>
+            </collectionProp>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}${admin_path}</stringProp>
+          <stringProp name="HTTPSampler.domain"/>
+          <stringProp name="HTTPSampler.port"/>
+          <stringProp name="HTTPSampler.connect_timeout"/>
+          <stringProp name="HTTPSampler.response_timeout"/>
+          <stringProp name="HTTPSampler.protocol"/>
+          <stringProp name="HTTPSampler.contentEncoding"/>
+          <stringProp name="HTTPSampler.path">${base_path}${admin_path}/admin/cache/</stringProp>
           <stringProp name="HTTPSampler.method">GET</stringProp>
           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
           <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
           <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+          <boolProp name="HTTPSampler.BROWSER_COMPATIBLE_MULTIPART">true</boolProp>
           <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+          <stringProp name="HTTPSampler.embedded_url_re"/>
         </HTTPSamplerProxy>
         <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert login form shown" enabled="true">
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion - Cache Validation - All Disabled" enabled="true">
             <collectionProp name="Asserion.test_strings">
-              <stringProp name="-1397214398">Welcome</stringProp>
-              <stringProp name="-515240035">&lt;title&gt;Magento Admin&lt;/title&gt;</stringProp>
+              <stringProp name="860336383">TRANSLATE(?s).+?&lt;span&gt;Enabled&lt;/span&gt;</stringProp>
+              <stringProp name="1466502763">CONFIG(?s).+?&lt;span&gt;Enabled&lt;/span&gt;</stringProp>
+              <stringProp name="-1659688004">LAYOUT_GENERAL_CACHE_TAG(?s).+?&lt;span&gt;Enabled&lt;/span&gt;</stringProp>
+              <stringProp name="-21423984">BLOCK_HTML(?s).+?&lt;span&gt;Enabled&lt;/span&gt;</stringProp>
+              <stringProp name="593884002">COLLECTION_DATA(?s).+?&lt;span&gt;Enabled&lt;/span&gt;</stringProp>
+              <stringProp name="-751452301">EAV(?s).+?&lt;span&gt;Enabled&lt;/span&gt;</stringProp>
+              <stringProp name="-2075232047">FPC(?s).+?&lt;span&gt;Disabled&lt;/span&gt;</stringProp>
+              <stringProp name="846147458">DB_DDL(?s).+?&lt;span&gt;Enabled&lt;/span&gt;</stringProp>
+              <stringProp name="-534412103">INTEGRATION(?s).+?&lt;span&gt;Enabled&lt;/span&gt;</stringProp>
+              <stringProp name="-72935653">INTEGRATION_API_CONFIG(?s).+?&lt;span&gt;Enabled&lt;/span&gt;</stringProp>
+              <stringProp name="330643820">WEBSERVICE(?s).+?&lt;span&gt;Enabled&lt;/span&gt;</stringProp>
             </collectionProp>
             <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
             <boolProp name="Assertion.assume_success">false</boolProp>
             <intProp name="Assertion.test_type">2</intProp>
           </ResponseAssertion>
           <hashTree/>
-          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form key" enabled="true">
-            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
-            <stringProp name="RegexExtractor.refname">admin_form_key</stringProp>
-            <stringProp name="RegexExtractor.regex">&lt;input name=&quot;form_key&quot; type=&quot;hidden&quot; value=&quot;([^&apos;&quot;]+)&quot; /&gt;</stringProp>
-            <stringProp name="RegexExtractor.template">$1$</stringProp>
-            <stringProp name="RegexExtractor.default"></stringProp>
-            <stringProp name="RegexExtractor.match_number">1</stringProp>
-          </RegexExtractor>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_key extracted" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="2845929">^.+$</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">1</intProp>
-            <stringProp name="Assertion.scope">variable</stringProp>
-            <stringProp name="Scope.variable">admin_form_key</stringProp>
-          </ResponseAssertion>
-          <hashTree/>
         </hashTree>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Admin - Login Submit Form" enabled="true">
+      </hashTree>
+      <IfController guiclass="IfControllerPanel" testclass="IfController" testname="If Controller - Cache Validation - All Disabled" enabled="true">
+        <stringProp name="IfController.condition">"${cache_indicator}" == "2"</stringProp>
+        <boolProp name="IfController.evaluateAll">false</boolProp>
+      </IfController>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="SetUp - HTTP Request - Cache Validation - All Disabled" enabled="true">
           <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
             <collectionProp name="Arguments.arguments">
-              <elementProp name="dummy" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">dummy</stringProp>
-              </elementProp>
               <elementProp name="form_key" elementType="HTTPArgument">
                 <boolProp name="HTTPArgument.always_encode">false</boolProp>
                 <stringProp name="Argument.value">${admin_form_key}</stringProp>
                 <stringProp name="Argument.metadata">=</stringProp>
                 <boolProp name="HTTPArgument.use_equals">true</boolProp>
                 <stringProp name="Argument.name">form_key</stringProp>
-              </elementProp>
-              <elementProp name="login[password]" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">true</boolProp>
-                <stringProp name="Argument.value">${admin-password}</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">login[password]</stringProp>
-              </elementProp>
-              <elementProp name="login[username]" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">true</boolProp>
-                <stringProp name="Argument.value">${admin-user}</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">login[username]</stringProp>
+                <stringProp name="Argument.desc">true</stringProp>
               </elementProp>
             </collectionProp>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}${admin_path}</stringProp>
-          <stringProp name="HTTPSampler.method">POST</stringProp>
+          <stringProp name="HTTPSampler.domain"/>
+          <stringProp name="HTTPSampler.port"/>
+          <stringProp name="HTTPSampler.connect_timeout"/>
+          <stringProp name="HTTPSampler.response_timeout"/>
+          <stringProp name="HTTPSampler.protocol"/>
+          <stringProp name="HTTPSampler.contentEncoding"/>
+          <stringProp name="HTTPSampler.path">${base_path}${admin_path}/admin/cache/</stringProp>
+          <stringProp name="HTTPSampler.method">GET</stringProp>
           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
           <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
           <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+          <boolProp name="HTTPSampler.BROWSER_COMPATIBLE_MULTIPART">true</boolProp>
           <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+          <stringProp name="HTTPSampler.embedded_url_re"/>
         </HTTPSamplerProxy>
         <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert logged-in" enabled="true">
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion - Cache Validation - All Disabled" enabled="true">
             <collectionProp name="Asserion.test_strings">
-              <stringProp name="1847038912">&lt;title&gt;Dashboard / Magento Admin&lt;/title&gt;</stringProp>
+              <stringProp name="409065414">TRANSLATE(?s).+?&lt;span&gt;Disabled&lt;/span&gt;</stringProp>
+              <stringProp name="2020354010">CONFIG(?s).+?&lt;span&gt;Disabled&lt;/span&gt;</stringProp>
+              <stringProp name="-402279255">LAYOUT_GENERAL_CACHE_TAG(?s).+?&lt;span&gt;Disabled&lt;/span&gt;</stringProp>
+              <stringProp name="-1155702187">BLOCK_HTML(?s).+?&lt;span&gt;Disabled&lt;/span&gt;</stringProp>
+              <stringProp name="738976195">COLLECTION_DATA(?s).+?&lt;span&gt;Disabled&lt;/span&gt;</stringProp>
+              <stringProp name="1983223762">EAV(?s).+?&lt;span&gt;Disabled&lt;/span&gt;</stringProp>
+              <stringProp name="-2075232047">FPC(?s).+?&lt;span&gt;Disabled&lt;/span&gt;</stringProp>
+              <stringProp name="-30791261">DB_DDL(?s).+?&lt;span&gt;Disabled&lt;/span&gt;</stringProp>
+              <stringProp name="121535308">INTEGRATION(?s).+?&lt;span&gt;Disabled&lt;/span&gt;</stringProp>
+              <stringProp name="1542403370">INTEGRATION_API_CONFIG(?s).+?&lt;span&gt;Disabled&lt;/span&gt;</stringProp>
+              <stringProp name="1168465145">WEBSERVICE(?s).+?&lt;span&gt;Disabled&lt;/span&gt;</stringProp>
             </collectionProp>
             <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
             <boolProp name="Assertion.assume_success">false</boolProp>
@@ -764,2814 +908,6506 @@ productList.add(productMap);                 </stringProp>
           </ResponseAssertion>
           <hashTree/>
         </hashTree>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Admin - Open Customer Grid" enabled="true">
+      </hashTree>
+      <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="SetUp - HTTP Request: Open main page (for category extract)" enabled="true">
+        <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+          <collectionProp name="Arguments.arguments"/>
+        </elementProp>
+        <stringProp name="HTTPSampler.domain"/>
+        <stringProp name="HTTPSampler.port"/>
+        <stringProp name="HTTPSampler.connect_timeout"/>
+        <stringProp name="HTTPSampler.response_timeout"/>
+        <stringProp name="HTTPSampler.protocol"/>
+        <stringProp name="HTTPSampler.contentEncoding"/>
+        <stringProp name="HTTPSampler.path">${base_path}</stringProp>
+        <stringProp name="HTTPSampler.method">GET</stringProp>
+        <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+        <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+        <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+        <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+        <boolProp name="HTTPSampler.monitor">false</boolProp>
+        <stringProp name="HTTPSampler.embedded_url_re"/>
+        <stringProp name="TestPlan.comments">Site - Get Category 1</stringProp>
+      </HTTPSamplerProxy>
+      <hashTree>
+        <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor: Extract first category url key" enabled="true">
+          <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+          <stringProp name="RegexExtractor.refname">category_url_key</stringProp>
+          <stringProp name="RegexExtractor.regex">&lt;a href="http://${host}${base_path}(index.php/)?([^'"]+)${url_suffix}"  class="level-top" &gt;</stringProp>
+          <stringProp name="RegexExtractor.template">$2$</stringProp>
+          <stringProp name="RegexExtractor.default"/>
+          <stringProp name="RegexExtractor.match_number">1</stringProp>
+          <stringProp name="Scope.variable">simple_product_1_url_key</stringProp>
+        </RegexExtractor>
+        <hashTree/>
+        <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor: Extract first category name" enabled="true">
+          <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+          <stringProp name="RegexExtractor.refname">category_name</stringProp>
+          <stringProp name="RegexExtractor.regex">&lt;a href="http://${host}${base_path}(index.php/)?${category_url_key}${url_suffix}"  class="level-top" &gt;&lt;span&gt;([^'"]+)&lt;/span&gt;</stringProp>
+          <stringProp name="RegexExtractor.template">$2$</stringProp>
+          <stringProp name="RegexExtractor.default"/>
+          <stringProp name="RegexExtractor.match_number">1</stringProp>
+          <stringProp name="Scope.variable">simple_product_1_url_key</stringProp>
+        </RegexExtractor>
+        <hashTree/>
+        <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion: Assert category url" enabled="true">
+          <collectionProp name="Asserion.test_strings">
+            <stringProp name="484395188">^[a-z0-9-]+$</stringProp>
+          </collectionProp>
+          <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+          <boolProp name="Assertion.assume_success">false</boolProp>
+          <intProp name="Assertion.test_type">1</intProp>
+          <stringProp name="Assertion.scope">variable</stringProp>
+          <stringProp name="Scope.variable">category_url_key</stringProp>
+        </ResponseAssertion>
+        <hashTree/>
+        <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion: Assert category name" enabled="true">
+          <collectionProp name="Asserion.test_strings">
+            <stringProp name="2845929">^.+$</stringProp>
+          </collectionProp>
+          <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+          <boolProp name="Assertion.assume_success">false</boolProp>
+          <intProp name="Assertion.test_type">1</intProp>
+          <stringProp name="Assertion.scope">variable</stringProp>
+          <stringProp name="Scope.variable">category_name</stringProp>
+        </ResponseAssertion>
+        <hashTree/>
+      </hashTree>
+      <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="SetUp - BeanShell Sampler: Collect category" enabled="true">
+        <stringProp name="BeanShellSampler.query">props.put("category_url_key", vars.get("category_url_key"));
+props.put("category_name", vars.get("category_name"));</stringProp>
+        <stringProp name="BeanShellSampler.filename"/>
+        <stringProp name="BeanShellSampler.parameters"/>
+        <boolProp name="BeanShellSampler.resetInterpreter">false</boolProp>
+      </BeanShellSampler>
+      <hashTree/>
+      <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="SetUp - HTTP Request: Search simple products" enabled="true">
+        <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+          <collectionProp name="Arguments.arguments"/>
+        </elementProp>
+        <stringProp name="HTTPSampler.domain"/>
+        <stringProp name="HTTPSampler.port"/>
+        <stringProp name="HTTPSampler.connect_timeout"/>
+        <stringProp name="HTTPSampler.response_timeout"/>
+        <stringProp name="HTTPSampler.protocol"/>
+        <stringProp name="HTTPSampler.contentEncoding"/>
+        <stringProp name="HTTPSampler.path">${base_path}catalogsearch/result/?limit=30&amp;q=Simple</stringProp>
+        <stringProp name="HTTPSampler.method">GET</stringProp>
+        <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+        <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+        <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+        <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+        <boolProp name="HTTPSampler.monitor">false</boolProp>
+        <stringProp name="HTTPSampler.embedded_url_re"/>
+      </HTTPSamplerProxy>
+      <hashTree>
+        <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion: Assert search result" enabled="true">
+          <collectionProp name="Asserion.test_strings">
+            <stringProp name="1297547762">(?i)Search results for: 'Simple'</stringProp>
+          </collectionProp>
+          <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+          <boolProp name="Assertion.assume_success">false</boolProp>
+          <intProp name="Assertion.test_type">2</intProp>
+        </ResponseAssertion>
+        <hashTree/>
+        <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor: Extract product url keys" enabled="true">
+          <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+          <stringProp name="RegexExtractor.refname">simple_products_url_keys</stringProp>
+          <stringProp name="RegexExtractor.regex">&lt;a class="product-item-link"(?s).+?href="http://${host}${base_path}(index.php/)?([^'"]+)${url_suffix}"&gt;(?s).+?Simple</stringProp>
+          <stringProp name="RegexExtractor.template">$2$</stringProp>
+          <stringProp name="RegexExtractor.default"/>
+          <stringProp name="RegexExtractor.match_number">-1</stringProp>
+        </RegexExtractor>
+        <hashTree/>
+      </hashTree>
+      <ForeachController guiclass="ForeachControlPanel" testclass="ForeachController" testname="ForEach Controller: Simple products loop (search result)" enabled="true">
+        <stringProp name="ForeachController.inputVal">simple_products_url_keys</stringProp>
+        <stringProp name="ForeachController.returnVal">simple_products_url_key</stringProp>
+        <boolProp name="ForeachController.useSeparator">true</boolProp>
+      </ForeachController>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="SetUp - HTTP Request: Open Simple product" enabled="true">
           <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
             <collectionProp name="Arguments.arguments"/>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}${admin_path}/customer/index/</stringProp>
+          <stringProp name="HTTPSampler.domain"/>
+          <stringProp name="HTTPSampler.port"/>
+          <stringProp name="HTTPSampler.connect_timeout"/>
+          <stringProp name="HTTPSampler.response_timeout"/>
+          <stringProp name="HTTPSampler.protocol"/>
+          <stringProp name="HTTPSampler.contentEncoding"/>
+          <stringProp name="HTTPSampler.path">${base_path}${simple_products_url_key}${url_suffix}</stringProp>
           <stringProp name="HTTPSampler.method">GET</stringProp>
           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
           <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
           <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
           <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+          <stringProp name="HTTPSampler.embedded_url_re"/>
         </HTTPSamplerProxy>
         <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert Customer Grid" enabled="true">
+          <XPathExtractor guiclass="XPathExtractorGui" testclass="XPathExtractor" testname="XPath Extractor: Extract product id" enabled="true">
+            <stringProp name="XPathExtractor.default"/>
+            <stringProp name="XPathExtractor.refname">simple_product_id</stringProp>
+            <stringProp name="XPathExtractor.xpathQuery">.//input[@type="hidden" and @name="product"]/@value</stringProp>
+            <boolProp name="XPathExtractor.validate">false</boolProp>
+            <boolProp name="XPathExtractor.tolerant">true</boolProp>
+            <boolProp name="XPathExtractor.namespace">false</boolProp>
+          </XPathExtractor>
+          <hashTree/>
+          <XPathExtractor guiclass="XPathExtractorGui" testclass="XPathExtractor" testname="XPath Extractor: Extract product title" enabled="true">
+            <stringProp name="XPathExtractor.default"/>
+            <stringProp name="XPathExtractor.refname">simple_product_title</stringProp>
+            <stringProp name="XPathExtractor.xpathQuery">.//*[@data-ui-id='page-title-wrapper']/text()</stringProp>
+            <boolProp name="XPathExtractor.validate">false</boolProp>
+            <boolProp name="XPathExtractor.tolerant">true</boolProp>
+            <boolProp name="XPathExtractor.namespace">false</boolProp>
+          </XPathExtractor>
+          <hashTree/>
+          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor: Extract uenc" enabled="true">
+            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+            <stringProp name="RegexExtractor.refname">simple_product_uenc</stringProp>
+            <stringProp name="RegexExtractor.regex">${base_path}checkout/cart/add/uenc/([^/]+)/product/</stringProp>
+            <stringProp name="RegexExtractor.template">$1$</stringProp>
+            <stringProp name="RegexExtractor.default"/>
+            <stringProp name="RegexExtractor.match_number">1</stringProp>
+            <stringProp name="Scope.variable">simple_product_1_url_key</stringProp>
+          </RegexExtractor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion: Assert id" enabled="true">
             <collectionProp name="Asserion.test_strings">
-              <stringProp name="-679437259">Customers</stringProp>
-              <stringProp name="495525733">&lt;title&gt;Customers / Customers / Magento Admin&lt;/title&gt;</stringProp>
+              <stringProp name="89649215">^\d+$</stringProp>
             </collectionProp>
             <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
             <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
+            <intProp name="Assertion.test_type">1</intProp>
+            <stringProp name="Assertion.scope">variable</stringProp>
+            <stringProp name="Scope.variable">simple_product_id</stringProp>
           </ResponseAssertion>
           <hashTree/>
-        </hashTree>
-        <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="Admin - Prepare Customers search Data" enabled="true">
-          <stringProp name="BeanShellSampler.query">import org.apache.jmeter.protocol.http.util.Base64Encoder;
-String searchData = &quot;customer_since[locale]=en_US&amp;website_id=1&quot;;
-vars.put(&quot;searchData&quot;, new String(Base64Encoder.encode(searchData)));</stringProp>
-          <stringProp name="BeanShellSampler.filename"></stringProp>
-          <stringProp name="BeanShellSampler.parameters"></stringProp>
-          <boolProp name="BeanShellSampler.resetInterpreter">false</boolProp>
-        </BeanShellSampler>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Admin - Search Customers" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="ajax" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">true</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">ajax</stringProp>
-              </elementProp>
-              <elementProp name="isAjax" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">true</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">isAjax</stringProp>
-              </elementProp>
-              <elementProp name="form_key" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">${admin_form_key}</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">form_key</stringProp>
-              </elementProp>
-              <elementProp name="internal_customer" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">internal_customer</stringProp>
-              </elementProp>
-            </collectionProp>
-          </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}${admin_path}/customer/index/grid/limit/${users}/filter/${searchData}</stringProp>
-          <stringProp name="HTTPSampler.method">POST</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion: Assert title" enabled="true">
             <collectionProp name="Asserion.test_strings">
-              <stringProp name="-1083053965">We couldn&apos;t find any records.</stringProp>
+              <stringProp name="2845929">^.+$</stringProp>
             </collectionProp>
             <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
             <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">6</intProp>
+            <intProp name="Assertion.test_type">1</intProp>
+            <stringProp name="Assertion.scope">variable</stringProp>
+            <stringProp name="Scope.variable">simple_product_title</stringProp>
           </ResponseAssertion>
           <hashTree/>
-          <XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="XPath Assertion" enabled="true">
-            <boolProp name="XPath.negate">false</boolProp>
-            <stringProp name="XPath.xpath">//table[@id=&apos;customerGrid_table&apos;]//tr[@data-role=&apos;row&apos;]</stringProp>
-            <boolProp name="XPath.validate">false</boolProp>
-            <boolProp name="XPath.whitespace">false</boolProp>
-            <boolProp name="XPath.tolerant">true</boolProp>
-            <boolProp name="XPath.namespace">false</boolProp>
-            <boolProp name="XPath.show_warnings">true</boolProp>
-            <boolProp name="XPath.report_errors">true</boolProp>
-          </XPathAssertion>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion: Assert url key" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="484395188">^[a-z0-9-]+$</stringProp>
+            </collectionProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">1</intProp>
+            <stringProp name="Assertion.scope">variable</stringProp>
+            <stringProp name="Scope.variable">simple_products_url_key</stringProp>
+          </ResponseAssertion>
           <hashTree/>
-          <XPathExtractor guiclass="XPathExtractorGui" testclass="XPathExtractor" testname="XPath Extractor" enabled="true">
-            <stringProp name="XPathExtractor.default"></stringProp>
-            <stringProp name="XPathExtractor.refname">customer_emails</stringProp>
-            <stringProp name="XPathExtractor.xpathQuery">//*[@id=&apos;customerGrid_table&apos;]//td[@data-column=&apos;email&apos;]/text()</stringProp>
-            <boolProp name="XPathExtractor.validate">false</boolProp>
-            <boolProp name="XPathExtractor.tolerant">true</boolProp>
-            <boolProp name="XPathExtractor.namespace">false</boolProp>
-            <boolProp name="XPathExtractor.show_warnings">true</boolProp>
-            <boolProp name="XPathExtractor.report_errors">true</boolProp>
-          </XPathExtractor>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion: Assert uenc" enabled="true">
+            <collectionProp name="Asserion.test_strings">
+              <stringProp name="824150030">^[\w\,]+$</stringProp>
+            </collectionProp>
+            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+            <boolProp name="Assertion.assume_success">false</boolProp>
+            <intProp name="Assertion.test_type">1</intProp>
+            <stringProp name="Assertion.scope">variable</stringProp>
+            <stringProp name="Scope.variable">simple_product_uenc</stringProp>
+          </ResponseAssertion>
           <hashTree/>
         </hashTree>
-        <ForeachController guiclass="ForeachControlPanel" testclass="ForeachController" testname="ForEach Controller: customer emails loop (search result)" enabled="true">
-          <stringProp name="ForeachController.inputVal">customer_emails</stringProp>
-          <stringProp name="ForeachController.returnVal">customer_email</stringProp>
-          <boolProp name="ForeachController.useSeparator">true</boolProp>
-        </ForeachController>
-        <hashTree>
-          <CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="Counter" enabled="true">
-            <stringProp name="CounterConfig.start">1</stringProp>
-            <stringProp name="CounterConfig.end"></stringProp>
-            <stringProp name="CounterConfig.incr">1</stringProp>
-            <stringProp name="CounterConfig.name">email_counter</stringProp>
-            <stringProp name="CounterConfig.format"></stringProp>
-            <boolProp name="CounterConfig.per_user">false</boolProp>
-          </CounterConfig>
-          <hashTree/>
-          <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="BeanShell Sampler: Collect customer emails" enabled="true">
-            <stringProp name="BeanShellSampler.query">import java.util.ArrayList;
+        <CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="Counter" enabled="true">
+          <stringProp name="CounterConfig.start">1</stringProp>
+          <stringProp name="CounterConfig.end"/>
+          <stringProp name="CounterConfig.incr">1</stringProp>
+          <stringProp name="CounterConfig.name">simple_products_counter</stringProp>
+          <stringProp name="CounterConfig.format"/>
+          <boolProp name="CounterConfig.per_user">false</boolProp>
+        </CounterConfig>
+        <hashTree/>
+        <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="SetUp - BeanShell Sampler: Collect simple product" enabled="true">
+          <stringProp name="BeanShellSampler.query">import java.util.ArrayList;
+import java.util.HashMap;
 
-// If it is first iteration of cycle then recreate emailsList
-if (1 == Integer.parseInt(vars.get(&quot;email_counter&quot;))) {
-    emailsList = new ArrayList();
-    props.put(&quot;customer_emails_list&quot;, emailsList);
+// If it is first iteration of cycle then recreate productList
+if (1 == Integer.parseInt(vars.get("simple_products_counter"))) {
+    productList = new ArrayList();
+    props.put("simple_products_list", productList);
 } else {
-    emailsList = props.get(&quot;customer_emails_list&quot;);
-}
-emailsList.add(vars.get(&quot;customer_email&quot;));</stringProp>
-            <stringProp name="BeanShellSampler.filename"></stringProp>
-            <stringProp name="BeanShellSampler.parameters"></stringProp>
-            <boolProp name="BeanShellSampler.resetInterpreter">false</boolProp>
-          </BeanShellSampler>
-          <hashTree/>
-        </hashTree>
-        <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="BeanShell Sampler: Validate properties and count users" enabled="true">
-          <stringProp name="BeanShellSampler.query">Boolean stopTestOnError (String error) {
-    log.error(error);
-    System.out.println(error);
-    SampleResult.setStopTest(true);
-    return false;
+    productList = props.get("simple_products_list");
 }
 
-if (props.get(&quot;simple_products_list&quot;) == null) {
-    return stopTestOnError(&quot;Cannot find simple products. Test stopped.&quot;);
-}
-if (props.get(&quot;configurable_products_list&quot;) == null) {
-    return stopTestOnError(&quot;Cannot find configurable products. Test stopped.&quot;);
-}
-if (props.get(&quot;customer_emails_list&quot;) == null) {
-    return stopTestOnError(&quot;Cannot find customer emails. Test stopped.&quot;);
-}
-int orders = Integer.parseInt(vars.get(&quot;orders&quot;));
+// Create product map
+Map productMap = new HashMap();
+productMap.put("id", vars.get("simple_product_id")); 
+productMap.put("title", vars.get("simple_product_title"));
+productMap.put("url_key", vars.get("simple_products_url_key"));
+productMap.put("uenc", vars.get("simple_product_uenc"));
 
-if (orders &gt; 0) {
-    int checkout_sum = Integer.parseInt(vars.get(&quot;guest_checkout_percent&quot;)) + Integer.parseInt(vars.get(&quot;customer_checkout_percent&quot;));
-    checkout_sum = checkout_sum &gt; 0 ? checkout_sum : 1;
-    int users = orders * (100 / checkout_sum);
-    props.put(&quot;users&quot;, users);
-} else {
-    props.put(&quot;users&quot;, Integer.parseInt(vars.get(&quot;users&quot;)));
-}
-</stringProp>
-          <stringProp name="BeanShellSampler.filename"></stringProp>
-          <stringProp name="BeanShellSampler.parameters"></stringProp>
+// Collect products map in products list
+productList.add(productMap);</stringProp>
+          <stringProp name="BeanShellSampler.filename"/>
+          <stringProp name="BeanShellSampler.parameters"/>
           <boolProp name="BeanShellSampler.resetInterpreter">false</boolProp>
         </BeanShellSampler>
         <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="WarmUp Add To Cart" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="product" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">1</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">product</stringProp>
-              </elementProp>
-              <elementProp name="related_product" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">related_product</stringProp>
-              </elementProp>
-              <elementProp name="qty" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">1</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">qty</stringProp>
-              </elementProp>
-            </collectionProp>
-          </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}checkout/cart/add</stringProp>
-          <stringProp name="HTTPSampler.method">POST</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree/>
       </hashTree>
-      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Category Product browsing" enabled="true">
-        <stringProp name="ThreadGroup.on_sample_error">startnextloop</stringProp>
-        <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
-          <boolProp name="LoopController.continue_forever">false</boolProp>
-          <stringProp name="LoopController.loops">${loops}</stringProp>
+      <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="SetUp - HTTP Request: Search configurable products" enabled="true">
+        <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+          <collectionProp name="Arguments.arguments"/>
         </elementProp>
-        <stringProp name="ThreadGroup.num_threads">${__javaScript(Math.round(props.get(&quot;users&quot;)*${view_catalog_percent}/100&gt;&gt;0))}</stringProp>
-        <stringProp name="ThreadGroup.ramp_time">${ramp_period}</stringProp>
-        <longProp name="ThreadGroup.start_time">1304708488000</longProp>
-        <longProp name="ThreadGroup.end_time">1304708488000</longProp>
-        <boolProp name="ThreadGroup.scheduler">false</boolProp>
-        <stringProp name="ThreadGroup.duration"></stringProp>
-        <stringProp name="ThreadGroup.delay"></stringProp>
-      </ThreadGroup>
+        <stringProp name="HTTPSampler.domain"/>
+        <stringProp name="HTTPSampler.port"/>
+        <stringProp name="HTTPSampler.connect_timeout"/>
+        <stringProp name="HTTPSampler.response_timeout"/>
+        <stringProp name="HTTPSampler.protocol"/>
+        <stringProp name="HTTPSampler.contentEncoding"/>
+        <stringProp name="HTTPSampler.path">${base_path}catalogsearch/result/?limit=30&amp;q=Configurable</stringProp>
+        <stringProp name="HTTPSampler.method">GET</stringProp>
+        <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+        <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+        <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+        <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+        <boolProp name="HTTPSampler.monitor">false</boolProp>
+        <stringProp name="HTTPSampler.embedded_url_re"/>
+      </HTTPSamplerProxy>
       <hashTree>
-        <CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie Manager" enabled="true">
-          <collectionProp name="CookieManager.cookies">
-            <elementProp name="product_list_limit" elementType="Cookie" testname="product_list_limit">
-              <stringProp name="Cookie.value">30</stringProp>
-              <stringProp name="Cookie.domain">${host}</stringProp>
-              <stringProp name="Cookie.path">/</stringProp>
-              <boolProp name="Cookie.secure">false</boolProp>
-              <longProp name="Cookie.expires">0</longProp>
-              <boolProp name="Cookie.path_specified">true</boolProp>
-              <boolProp name="Cookie.domain_specified">true</boolProp>
-            </elementProp>
+        <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion: Assert search result" enabled="true">
+          <collectionProp name="Asserion.test_strings">
+            <stringProp name="-1354477292">Search results for: 'Configurable'</stringProp>
+            <stringProp name="1647182604">&lt;div class="search results"&gt;</stringProp>
           </collectionProp>
-          <boolProp name="CookieManager.clearEachIteration">true</boolProp>
-        </CookieManager>
+          <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+          <boolProp name="Assertion.assume_success">false</boolProp>
+          <intProp name="Assertion.test_type">2</intProp>
+        </ResponseAssertion>
         <hashTree/>
-        <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="Get arguments(CatProdBrows)" enabled="true">
-          <stringProp name="TestPlan.comments">Passing arguments between threads</stringProp>
-          <stringProp name="BeanShellSampler.query">number = (int)(Math.random() * props.get(&quot;simple_products_list&quot;).size());
-simpleList = props.get(&quot;simple_products_list&quot;).get(number);
-vars.put(&quot;simple_product_1_url_key&quot;, simpleList.get(&quot;url_key&quot;));
-vars.put(&quot;simple_product_1_name&quot;, simpleList.get(&quot;title&quot;));
-
-do {
-    number1 = (int)(Math.random() * props.get(&quot;simple_products_list&quot;).size());
-} while(number == number1);
-simpleList = props.get(&quot;simple_products_list&quot;).get(number1);
-vars.put(&quot;simple_product_2_url_key&quot;, simpleList.get(&quot;url_key&quot;));
-vars.put(&quot;simple_product_2_name&quot;, simpleList.get(&quot;title&quot;));
-
-number = (int)(Math.random() * props.get(&quot;configurable_products_list&quot;).size());
-configurableList = props.get(&quot;configurable_products_list&quot;).get(number);
-vars.put(&quot;configurable_product_1_url_key&quot;, configurableList.get(&quot;url_key&quot;));
-vars.put(&quot;configurable_product_1_name&quot;, configurableList.get(&quot;title&quot;));
-
-vars.put(&quot;category_url_key&quot;, props.get(&quot;category_url_key&quot;));
-vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stringProp>
-          <stringProp name="BeanShellSampler.filename"></stringProp>
-          <stringProp name="BeanShellSampler.parameters"></stringProp>
-          <boolProp name="BeanShellSampler.resetInterpreter">true</boolProp>
-        </BeanShellSampler>
+        <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor: Extract product url keys" enabled="true">
+          <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+          <stringProp name="RegexExtractor.refname">configurable_products_url_keys</stringProp>
+          <stringProp name="RegexExtractor.regex">&lt;a class="product-item-link"(?s).+?href="http://${host}${base_path}(index.php/)?([^'"]+)${url_suffix}"&gt;(?s).+?Configurable</stringProp>
+          <stringProp name="RegexExtractor.template">$2$</stringProp>
+          <stringProp name="RegexExtractor.default"/>
+          <stringProp name="RegexExtractor.match_number">-1</stringProp>
+        </RegexExtractor>
         <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Open Home Page(CatProdBrows)" enabled="true">
+      </hashTree>
+      <ForeachController guiclass="ForeachControlPanel" testclass="ForeachController" testname="ForEach Controller: Configurable products loop (search result)" enabled="true">
+        <stringProp name="ForeachController.inputVal">configurable_products_url_keys</stringProp>
+        <stringProp name="ForeachController.returnVal">configurable_products_url_key</stringProp>
+        <boolProp name="ForeachController.useSeparator">true</boolProp>
+      </ForeachController>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="SetUp - HTTP Request: Open Configurable product" enabled="true">
           <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
             <collectionProp name="Arguments.arguments"/>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}</stringProp>
+          <stringProp name="HTTPSampler.domain"/>
+          <stringProp name="HTTPSampler.port"/>
+          <stringProp name="HTTPSampler.connect_timeout"/>
+          <stringProp name="HTTPSampler.response_timeout"/>
+          <stringProp name="HTTPSampler.protocol"/>
+          <stringProp name="HTTPSampler.contentEncoding"/>
+          <stringProp name="HTTPSampler.path">${base_path}${configurable_products_url_key}${url_suffix}</stringProp>
           <stringProp name="HTTPSampler.method">GET</stringProp>
           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
           <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
           <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
           <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+          <stringProp name="HTTPSampler.embedded_url_re"/>
         </HTTPSamplerProxy>
         <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="571386695">&lt;title&gt;Home page&lt;/title&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
+          <XPathExtractor guiclass="XPathExtractorGui" testclass="XPathExtractor" testname="XPath Extractor: Extract product id" enabled="true">
+            <stringProp name="XPathExtractor.default"/>
+            <stringProp name="XPathExtractor.refname">configurable_product_id</stringProp>
+            <stringProp name="XPathExtractor.xpathQuery">.//input[@type="hidden" and @name="product"]/@value</stringProp>
+            <boolProp name="XPathExtractor.validate">false</boolProp>
+            <boolProp name="XPathExtractor.tolerant">true</boolProp>
+            <boolProp name="XPathExtractor.namespace">false</boolProp>
+          </XPathExtractor>
           <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Open Category(CatProdBrows)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
-          </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}${category_url_key}${url_suffix}</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="1210004667">&lt;span class=&quot;base&quot; data-ui-id=&quot;page-title&quot;&gt;${category_name}&lt;/span&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">6</intProp>
-          </ResponseAssertion>
+          <XPathExtractor guiclass="XPathExtractorGui" testclass="XPathExtractor" testname="XPath Extractor: Extract product title" enabled="true">
+            <stringProp name="XPathExtractor.default"/>
+            <stringProp name="XPathExtractor.refname">configurable_product_title</stringProp>
+            <stringProp name="XPathExtractor.xpathQuery">.//*[@data-ui-id='page-title-wrapper']/text()</stringProp>
+            <boolProp name="XPathExtractor.validate">false</boolProp>
+            <boolProp name="XPathExtractor.tolerant">true</boolProp>
+            <boolProp name="XPathExtractor.namespace">false</boolProp>
+          </XPathExtractor>
           <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 1 View(CatProdBrows)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
-          </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}${simple_product_1_url_key}${url_suffix}</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="1254853024">&lt;title&gt;${simple_product_1_name}</stringProp>
-              <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
+          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor: Extract uenc" enabled="true">
+            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+            <stringProp name="RegexExtractor.refname">configurable_product_uenc</stringProp>
+            <stringProp name="RegexExtractor.regex">${base_path}checkout/cart/add/uenc/([^/]+)/product/</stringProp>
+            <stringProp name="RegexExtractor.template">$1$</stringProp>
+            <stringProp name="RegexExtractor.default"/>
+            <stringProp name="RegexExtractor.match_number">1</stringProp>
+            <stringProp name="Scope.variable">simple_product_1_url_key</stringProp>
+          </RegexExtractor>
           <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 2 View(CatProdBrows)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
-          </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}${simple_product_2_url_key}${url_suffix}</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor: Extract product attribute id" enabled="true">
+            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+            <stringProp name="RegexExtractor.refname">configurable_product_attribute_id</stringProp>
+            <stringProp name="RegexExtractor.regex">"spConfig": \{"attributes":\{"(\d+)"</stringProp>
+            <stringProp name="RegexExtractor.template">$1$</stringProp>
+            <stringProp name="RegexExtractor.default"/>
+            <stringProp name="RegexExtractor.match_number">1</stringProp>
+          </RegexExtractor>
+          <hashTree/>
+          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor: Extract product attribute option id" enabled="true">
+            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+            <stringProp name="RegexExtractor.refname">configurable_product_attribute_option_id</stringProp>
+            <stringProp name="RegexExtractor.regex">"options":\[\{"id":"(\d+)"</stringProp>
+            <stringProp name="RegexExtractor.template">$1$</stringProp>
+            <stringProp name="RegexExtractor.default"/>
+            <stringProp name="RegexExtractor.match_number">1</stringProp>
+          </RegexExtractor>
+          <hashTree/>
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion: Assert id" enabled="true">
             <collectionProp name="Asserion.test_strings">
-              <stringProp name="2142356705">&lt;title&gt;${simple_product_2_name}</stringProp>
-              <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
+              <stringProp name="89649215">^\d+$</stringProp>
             </collectionProp>
             <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
             <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
+            <intProp name="Assertion.test_type">1</intProp>
+            <stringProp name="Assertion.scope">variable</stringProp>
+            <stringProp name="Scope.variable">configurable_product_id</stringProp>
           </ResponseAssertion>
           <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Configurable Product 1 View(CatProdBrows)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
-          </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}${configurable_product_1_url_key}${url_suffix}</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion: Assert title" enabled="true">
             <collectionProp name="Asserion.test_strings">
-              <stringProp name="199922279">&lt;title&gt;${configurable_product_1_name}</stringProp>
-              <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
+              <stringProp name="2845929">^.+$</stringProp>
             </collectionProp>
             <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
             <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
+            <intProp name="Assertion.test_type">1</intProp>
+            <stringProp name="Assertion.scope">variable</stringProp>
+            <stringProp name="Scope.variable">configurable_product_title</stringProp>
           </ResponseAssertion>
           <hashTree/>
-        </hashTree>
-      </hashTree>
-      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Product browsing and adding items to the cart" enabled="true">
-        <stringProp name="ThreadGroup.on_sample_error">startnextloop</stringProp>
-        <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
-          <boolProp name="LoopController.continue_forever">false</boolProp>
-          <stringProp name="LoopController.loops">${loops}</stringProp>
-        </elementProp>
-        <stringProp name="ThreadGroup.num_threads">${__javaScript(Math.round(props.get(&quot;users&quot;)*${view_product_add_to_cart_percent}/100&gt;&gt;0))}</stringProp>
-        <stringProp name="ThreadGroup.ramp_time">${ramp_period}</stringProp>
-        <longProp name="ThreadGroup.start_time">1304708488000</longProp>
-        <longProp name="ThreadGroup.end_time">1304708488000</longProp>
-        <boolProp name="ThreadGroup.scheduler">false</boolProp>
-        <stringProp name="ThreadGroup.duration"></stringProp>
-        <stringProp name="ThreadGroup.delay"></stringProp>
-      </ThreadGroup>
-      <hashTree>
-        <CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie Manager" enabled="true">
-          <collectionProp name="CookieManager.cookies">
-            <elementProp name="product_list_limit" elementType="Cookie" testname="product_list_limit">
-              <stringProp name="Cookie.value">30</stringProp>
-              <stringProp name="Cookie.domain">${host}</stringProp>
-              <stringProp name="Cookie.path">/</stringProp>
-              <boolProp name="Cookie.secure">false</boolProp>
-              <longProp name="Cookie.expires">0</longProp>
-              <boolProp name="Cookie.path_specified">true</boolProp>
-              <boolProp name="Cookie.domain_specified">true</boolProp>
-            </elementProp>
-          </collectionProp>
-          <boolProp name="CookieManager.clearEachIteration">true</boolProp>
-        </CookieManager>
-        <hashTree/>
-        <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="Get arguments(BrowsAddToCart)" enabled="true">
-          <stringProp name="TestPlan.comments">Passing arguments between threads</stringProp>
-          <stringProp name="BeanShellSampler.query">number = (int)(Math.random() * props.get(&quot;simple_products_list&quot;).size());
-simpleList = props.get(&quot;simple_products_list&quot;).get(number);
-vars.put(&quot;simple_product_1_url_key&quot;, simpleList.get(&quot;url_key&quot;));
-vars.put(&quot;simple_product_1_name&quot;, simpleList.get(&quot;title&quot;));
-vars.put(&quot;simple_product_1_id&quot;, simpleList.get(&quot;id&quot;));
-
-do {
-    number1 = (int)(Math.random() * props.get(&quot;simple_products_list&quot;).size());
-} while(number == number1);
-simpleList = props.get(&quot;simple_products_list&quot;).get(number1);
-vars.put(&quot;simple_product_2_url_key&quot;, simpleList.get(&quot;url_key&quot;));
-vars.put(&quot;simple_product_2_name&quot;, simpleList.get(&quot;title&quot;));
-vars.put(&quot;simple_product_2_id&quot;, simpleList.get(&quot;id&quot;));
-
-number = (int)(Math.random() * props.get(&quot;configurable_products_list&quot;).size());
-configurableList = props.get(&quot;configurable_products_list&quot;).get(number);
-vars.put(&quot;configurable_product_1_url_key&quot;, configurableList.get(&quot;url_key&quot;));
-vars.put(&quot;configurable_product_1_name&quot;, configurableList.get(&quot;title&quot;));
-vars.put(&quot;configurable_product_1_id&quot;, configurableList.get(&quot;id&quot;));
-vars.put(&quot;configurable_attribute_id&quot;, configurableList.get(&quot;attribute_id&quot;));
-vars.put(&quot;configurable_option_id&quot;, configurableList.get(&quot;attribute_option_id&quot;));
-
-vars.put(&quot;category_url_key&quot;, props.get(&quot;category_url_key&quot;));
-vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stringProp>
-          <stringProp name="BeanShellSampler.filename"></stringProp>
-          <stringProp name="BeanShellSampler.parameters"></stringProp>
-          <boolProp name="BeanShellSampler.resetInterpreter">true</boolProp>
-        </BeanShellSampler>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Open Home Page(BrowsAddToCart)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
-          </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion: Assert url key" enabled="true">
             <collectionProp name="Asserion.test_strings">
-              <stringProp name="571386695">&lt;title&gt;Home page&lt;/title&gt;</stringProp>
+              <stringProp name="484395188">^[a-z0-9-]+$</stringProp>
             </collectionProp>
             <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
             <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
+            <intProp name="Assertion.test_type">1</intProp>
+            <stringProp name="Assertion.scope">variable</stringProp>
+            <stringProp name="Scope.variable">configurable_products_url_key</stringProp>
           </ResponseAssertion>
           <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Open Category(BrowsAddToCart)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
-          </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}${category_url_key}${url_suffix}</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion: Assert attribute id" enabled="true">
             <collectionProp name="Asserion.test_strings">
-              <stringProp name="1210004667">&lt;span class=&quot;base&quot; data-ui-id=&quot;page-title&quot;&gt;${category_name}&lt;/span&gt;</stringProp>
+              <stringProp name="89649215">^\d+$</stringProp>
             </collectionProp>
             <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
             <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">6</intProp>
+            <intProp name="Assertion.test_type">1</intProp>
+            <stringProp name="Assertion.scope">variable</stringProp>
+            <stringProp name="Scope.variable">configurable_product_attribute_id</stringProp>
           </ResponseAssertion>
           <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 1 View(BrowsAddToCart)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
-          </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}${simple_product_1_url_key}${url_suffix}</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion: Assert attribute option id" enabled="true">
             <collectionProp name="Asserion.test_strings">
-              <stringProp name="1254853024">&lt;title&gt;${simple_product_1_name}</stringProp>
-              <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
+              <stringProp name="89649215">^\d+$</stringProp>
             </collectionProp>
             <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
             <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
+            <intProp name="Assertion.test_type">1</intProp>
+            <stringProp name="Assertion.scope">variable</stringProp>
+            <stringProp name="Scope.variable">configurable_product_attribute_option_id</stringProp>
           </ResponseAssertion>
           <hashTree/>
-          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form action" enabled="true">
-            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
-            <stringProp name="RegexExtractor.refname">simple_product_1_form_action</stringProp>
-            <stringProp name="RegexExtractor.regex">&lt;form action=&quot;([^&apos;&quot;]+)&quot;\s*method=&quot;post&quot;\s*id=&quot;product_addtocart_form&quot;&gt;</stringProp>
-            <stringProp name="RegexExtractor.template">$1$</stringProp>
-            <stringProp name="RegexExtractor.default"></stringProp>
-            <stringProp name="RegexExtractor.match_number">1</stringProp>
-          </RegexExtractor>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_action extracted" enabled="true">
+          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion: Assert uenc" enabled="true">
             <collectionProp name="Asserion.test_strings">
-              <stringProp name="2845929">^.+$</stringProp>
+              <stringProp name="824150030">^[\w\,]+$</stringProp>
             </collectionProp>
             <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
             <boolProp name="Assertion.assume_success">false</boolProp>
             <intProp name="Assertion.test_type">1</intProp>
             <stringProp name="Assertion.scope">variable</stringProp>
-            <stringProp name="Scope.variable">simple_product_1_form_action</stringProp>
+            <stringProp name="Scope.variable">configurable_product_uenc</stringProp>
           </ResponseAssertion>
           <hashTree/>
         </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
+        <CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="Counter" enabled="true">
+          <stringProp name="CounterConfig.start">1</stringProp>
+          <stringProp name="CounterConfig.end"/>
+          <stringProp name="CounterConfig.incr">1</stringProp>
+          <stringProp name="CounterConfig.name">configurable_products_counter</stringProp>
+          <stringProp name="CounterConfig.format"/>
+          <boolProp name="CounterConfig.per_user">false</boolProp>
+        </CounterConfig>
         <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 1 Add To Cart(BrowsAddToCart)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="product" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">${simple_product_1_id}</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">product</stringProp>
-              </elementProp>
-              <elementProp name="related_product" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">related_product</stringProp>
-              </elementProp>
-              <elementProp name="qty" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">1</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">qty</stringProp>
-              </elementProp>
-              <elementProp name="isAjax" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">true</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">isAjax</stringProp>
-              </elementProp>
-              <elementProp name="ajax" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">true</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">ajax</stringProp>
-              </elementProp>
-            </collectionProp>
-          </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${simple_product_1_form_action}</stringProp>
-          <stringProp name="HTTPSampler.method">POST</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="210217247">You added ${simple_product_1_name} to your shopping cart.</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="518066445">&lt;div&gt;* This product is out of stock.&lt;/div&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">6</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
+        <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="SetUp - BeanShell Sampler: Collect configurable product" enabled="true">
+          <stringProp name="BeanShellSampler.query">import java.util.ArrayList;
+import java.util.HashMap;
+
+// If it is first iteration of cycle then recreate productList
+if (1 == Integer.parseInt(vars.get("configurable_products_counter"))) {
+    productList = new ArrayList();
+    props.put("configurable_products_list", productList);
+} else {
+    productList = props.get("configurable_products_list");
+}
+
+// Create product map
+Map productMap = new HashMap();
+productMap.put("id", vars.get("configurable_product_id"));
+productMap.put("title", vars.get("configurable_product_title"));
+productMap.put("url_key", vars.get("configurable_products_url_key"));
+productMap.put("uenc", vars.get("configurable_product_uenc"));
+productMap.put("attribute_id", vars.get("configurable_product_attribute_id"));
+productMap.put("attribute_option_id", vars.get("configurable_product_attribute_option_id"));
+
+// Collect products map in products list
+productList.add(productMap);                 </stringProp>
+          <stringProp name="BeanShellSampler.filename"/>
+          <stringProp name="BeanShellSampler.parameters"/>
+          <boolProp name="BeanShellSampler.resetInterpreter">false</boolProp>
+        </BeanShellSampler>
         <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 2 View(BrowsAddToCart)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
-          </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}${simple_product_2_url_key}${url_suffix}</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="2142356705">&lt;title&gt;${simple_product_2_name}</stringProp>
-              <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form action" enabled="true">
-            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
-            <stringProp name="RegexExtractor.refname">simple_product_2_form_action</stringProp>
-            <stringProp name="RegexExtractor.regex">&lt;form action=&quot;([^&apos;&quot;]+)&quot;\s*method=&quot;post&quot;\s*id=&quot;product_addtocart_form&quot;&gt;</stringProp>
-            <stringProp name="RegexExtractor.template">$1$</stringProp>
-            <stringProp name="RegexExtractor.default"></stringProp>
-            <stringProp name="RegexExtractor.match_number">1</stringProp>
-          </RegexExtractor>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_action extracted" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="2845929">^.+$</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">1</intProp>
-            <stringProp name="Assertion.scope">variable</stringProp>
-            <stringProp name="Scope.variable">simple_product_2_form_action</stringProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
+      </hashTree>
+      <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="SetUp - Open Customer Grid" enabled="true">
+        <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+          <collectionProp name="Arguments.arguments"/>
+        </elementProp>
+        <stringProp name="HTTPSampler.domain"/>
+        <stringProp name="HTTPSampler.port"/>
+        <stringProp name="HTTPSampler.connect_timeout"/>
+        <stringProp name="HTTPSampler.response_timeout"/>
+        <stringProp name="HTTPSampler.protocol"/>
+        <stringProp name="HTTPSampler.contentEncoding"/>
+        <stringProp name="HTTPSampler.path">${base_path}${admin_path}/customer/index/</stringProp>
+        <stringProp name="HTTPSampler.method">GET</stringProp>
+        <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+        <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+        <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+        <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+        <boolProp name="HTTPSampler.monitor">false</boolProp>
+        <stringProp name="HTTPSampler.embedded_url_re"/>
+      </HTTPSamplerProxy>
+      <hashTree>
+        <BeanShellPreProcessor guiclass="TestBeanGUI" testclass="BeanShellPreProcessor" testname="BeanShell PreProcessor" enabled="true">
+          <stringProp name="filename"/>
+          <stringProp name="parameters"/>
+          <boolProp name="resetInterpreter">true</boolProp>
+          <stringProp name="script">import org.apache.jmeter.protocol.http.control.CookieManager;
+import org.apache.jmeter.protocol.http.control.Cookie;
+CookieManager manager = sampler.getCookieManager();
+Cookie cookie = new Cookie("adminhtml",vars.get("COOKIE_adminhtml"),vars.get("host"),"/",false,0);
+manager.add(cookie); </stringProp>
+        </BeanShellPreProcessor>
         <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 2 Add To Cart(BrowsAddToCart)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="product" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">${simple_product_2_id}</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">product</stringProp>
-              </elementProp>
-              <elementProp name="related_product" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">related_product</stringProp>
-              </elementProp>
-              <elementProp name="qty" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">1</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">qty</stringProp>
-              </elementProp>
-              <elementProp name="isAjax" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">true</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">isAjax</stringProp>
-              </elementProp>
-              <elementProp name="ajax" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">true</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">ajax</stringProp>
-              </elementProp>
-            </collectionProp>
-          </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${simple_product_2_form_action}</stringProp>
-          <stringProp name="HTTPSampler.method">POST</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="221533374">You added ${simple_product_2_name} to your shopping cart.</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="518066445">&lt;div&gt;* This product is out of stock.&lt;/div&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">6</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
+        <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert Customer Grid" enabled="true">
+          <collectionProp name="Asserion.test_strings">
+            <stringProp name="-679437259">Customers</stringProp>
+            <stringProp name="495525733">&lt;title&gt;Customers / Customers / Magento Admin&lt;/title&gt;</stringProp>
+          </collectionProp>
+          <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+          <boolProp name="Assertion.assume_success">false</boolProp>
+          <intProp name="Assertion.test_type">2</intProp>
+        </ResponseAssertion>
         <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Configurable Product 1 View(BrowsAddToCart)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
+      </hashTree>
+      
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="SetUp - Search Customers" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="namespace" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">customer_listing</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">namespace</stringProp>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}${configurable_product_1_url_key}${url_suffix}</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="199922279">&lt;title&gt;${configurable_product_1_name}</stringProp>
-              <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form action" enabled="true">
-            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
-            <stringProp name="RegexExtractor.refname">configurable_product_form_action</stringProp>
-            <stringProp name="RegexExtractor.regex">&lt;form action=&quot;([^&apos;&quot;]+)&quot;\s*method=&quot;post&quot;\s*id=&quot;product_addtocart_form&quot;&gt;</stringProp>
-            <stringProp name="RegexExtractor.template">$1$</stringProp>
-            <stringProp name="RegexExtractor.default"></stringProp>
-            <stringProp name="RegexExtractor.match_number">1</stringProp>
-          </RegexExtractor>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_action extracted" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="2845929">^.+$</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">1</intProp>
-            <stringProp name="Assertion.scope">variable</stringProp>
-            <stringProp name="Scope.variable">configurable_product_form_action</stringProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Configurable Product 1 Add To Cart(BrowsAddToCart)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="product" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">${configurable_product_1_id}</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">product</stringProp>
-              </elementProp>
-              <elementProp name="related_product" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">related_product</stringProp>
-              </elementProp>
-              <elementProp name="qty" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">1</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">qty</stringProp>
-              </elementProp>
-              <elementProp name="super_attribute[${configurable_attribute_id}]" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">${configurable_option_id}</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">super_attribute[${configurable_attribute_id}]</stringProp>
-              </elementProp>
-              <elementProp name="isAjax" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">true</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">isAjax</stringProp>
-              </elementProp>
-              <elementProp name="ajax" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">true</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">ajax</stringProp>
-              </elementProp>
-            </collectionProp>
+          <elementProp name="search" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value"/>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">search</stringProp>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${configurable_product_form_action}</stringProp>
-          <stringProp name="HTTPSampler.method">POST</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="-1346272328">You added ${configurable_product_1_name} to your shopping cart.</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="-815931116">&lt;div&gt;* We don&apos;t have as many &amp;quot;${configurable_product_1_name}&amp;quot; as you requested.&lt;/div&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">6</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-      </hashTree>
-      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Guest Checkout" enabled="true">
-        <stringProp name="ThreadGroup.on_sample_error">startnextloop</stringProp>
-        <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
-          <boolProp name="LoopController.continue_forever">false</boolProp>
-          <stringProp name="LoopController.loops">${loops}</stringProp>
-        </elementProp>
-        <stringProp name="ThreadGroup.num_threads">${__javaScript(Math.round(props.get(&quot;users&quot;)*${guest_checkout_percent}/100&gt;&gt;0))}</stringProp>
-        <stringProp name="ThreadGroup.ramp_time">${ramp_period}</stringProp>
-        <longProp name="ThreadGroup.start_time">1304708488000</longProp>
-        <longProp name="ThreadGroup.end_time">1304708488000</longProp>
-        <boolProp name="ThreadGroup.scheduler">false</boolProp>
-        <stringProp name="ThreadGroup.duration"></stringProp>
-        <stringProp name="ThreadGroup.delay"></stringProp>
-      </ThreadGroup>
+          <elementProp name="filters[placeholder]" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">customer_since[locale]=en_US&amp;website_id=1</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">filters[placeholder]</stringProp>
+          </elementProp>
+          <elementProp name="paging[pageSize]" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">${customers_page_size}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">paging[pageSize]</stringProp>
+          </elementProp>
+          <elementProp name="paging[current]" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">1</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">paging[current]</stringProp>
+          </elementProp>
+          <elementProp name="sorting[field]" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">entity_id</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sorting[field]</stringProp>
+          </elementProp>
+          <elementProp name="sorting[direction]" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">asc</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sorting[direction]</stringProp>
+          </elementProp>
+          <elementProp name="isAjax" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">true</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">isAjax</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}${admin_path}/mui/index/render/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert total records is not 0" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="827137952">\"totalRecords\":0</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">20</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract customer emails" enabled="true">
+        <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+        <stringProp name="RegexExtractor.refname">customer_emails</stringProp>
+        <stringProp name="RegexExtractor.regex">\"email\":\"([^"]+)</stringProp>
+        <stringProp name="RegexExtractor.template">$1$</stringProp>
+        <stringProp name="RegexExtractor.default"/>
+        <stringProp name="RegexExtractor.match_number">-1</stringProp>
+      </RegexExtractor>
+      <hashTree/>
+      <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract customer ids" enabled="true">
+        <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+        <stringProp name="RegexExtractor.refname">customer_ids</stringProp>
+        <stringProp name="RegexExtractor.regex">\"entity_id\":\"([^"]+)</stringProp>
+        <stringProp name="RegexExtractor.template">$1$</stringProp>
+        <stringProp name="RegexExtractor.default"/>
+        <stringProp name="RegexExtractor.match_number">-1</stringProp>
+      </RegexExtractor>
+      <hashTree/>
+    </hashTree>
+  <ForeachController guiclass="ForeachControlPanel" testclass="ForeachController" testname="ForEach Controller: customer emails loop (search result)" enabled="true">
+        <stringProp name="ForeachController.inputVal">customer_emails</stringProp>
+        <stringProp name="ForeachController.returnVal">customer_email</stringProp>
+        <boolProp name="ForeachController.useSeparator">true</boolProp>
+      </ForeachController>
       <hashTree>
-        <CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie Manager" enabled="true">
-          <collectionProp name="CookieManager.cookies">
-            <elementProp name="product_list_limit" elementType="Cookie" testname="product_list_limit">
-              <stringProp name="Cookie.value">30</stringProp>
-              <stringProp name="Cookie.domain">${host}</stringProp>
-              <stringProp name="Cookie.path">/</stringProp>
-              <boolProp name="Cookie.secure">false</boolProp>
-              <longProp name="Cookie.expires">0</longProp>
-              <boolProp name="Cookie.path_specified">true</boolProp>
-              <boolProp name="Cookie.domain_specified">true</boolProp>
-            </elementProp>
-          </collectionProp>
-          <boolProp name="CookieManager.clearEachIteration">true</boolProp>
-        </CookieManager>
+        <CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="Counter" enabled="true">
+          <stringProp name="CounterConfig.start">1</stringProp>
+          <stringProp name="CounterConfig.end"/>
+          <stringProp name="CounterConfig.incr">1</stringProp>
+          <stringProp name="CounterConfig.name">email_counter</stringProp>
+          <stringProp name="CounterConfig.format"/>
+          <boolProp name="CounterConfig.per_user">false</boolProp>
+        </CounterConfig>
         <hashTree/>
-        <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="Get arguments(GuestChkt)" enabled="true">
-          <stringProp name="TestPlan.comments">Passing arguments between threads</stringProp>
-          <stringProp name="BeanShellSampler.query">number = (int)(Math.random() * props.get(&quot;simple_products_list&quot;).size());
-simpleList = props.get(&quot;simple_products_list&quot;).get(number);
-vars.put(&quot;simple_product_1_url_key&quot;, simpleList.get(&quot;url_key&quot;));
-vars.put(&quot;simple_product_1_name&quot;, simpleList.get(&quot;title&quot;));
-vars.put(&quot;simple_product_1_id&quot;, simpleList.get(&quot;id&quot;));
+        <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="SetUp - BeanShell Sampler: Collect customer emails" enabled="true">
+          <stringProp name="BeanShellSampler.query">import java.util.ArrayList;
 
-do {
-    number1 = (int)(Math.random() * props.get(&quot;simple_products_list&quot;).size());
-} while(number == number1);
-simpleList = props.get(&quot;simple_products_list&quot;).get(number1);
-vars.put(&quot;simple_product_2_url_key&quot;, simpleList.get(&quot;url_key&quot;));
-vars.put(&quot;simple_product_2_name&quot;, simpleList.get(&quot;title&quot;));
-vars.put(&quot;simple_product_2_id&quot;, simpleList.get(&quot;id&quot;));
-
-number = (int)(Math.random() * props.get(&quot;configurable_products_list&quot;).size());
-configurableList = props.get(&quot;configurable_products_list&quot;).get(number);
-vars.put(&quot;configurable_product_1_url_key&quot;, configurableList.get(&quot;url_key&quot;));
-vars.put(&quot;configurable_product_1_name&quot;, configurableList.get(&quot;title&quot;));
-vars.put(&quot;configurable_product_1_id&quot;, configurableList.get(&quot;id&quot;));
-vars.put(&quot;configurable_attribute_id&quot;, configurableList.get(&quot;attribute_id&quot;));
-vars.put(&quot;configurable_option_id&quot;, configurableList.get(&quot;attribute_option_id&quot;));
-
-vars.put(&quot;category_url_key&quot;, props.get(&quot;category_url_key&quot;));
-vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));</stringProp>
-          <stringProp name="BeanShellSampler.filename"></stringProp>
-          <stringProp name="BeanShellSampler.parameters"></stringProp>
-          <boolProp name="BeanShellSampler.resetInterpreter">true</boolProp>
+// If it is first iteration of cycle then recreate emailsList
+if (1 == Integer.parseInt(vars.get("email_counter"))) {
+    emailsList = new ArrayList();
+    props.put("customer_emails_list", emailsList);
+} else {
+    emailsList = props.get("customer_emails_list");
+}
+emailsList.add(vars.get("customer_email"));</stringProp>
+          <stringProp name="BeanShellSampler.filename"/>
+          <stringProp name="BeanShellSampler.parameters"/>
+          <boolProp name="BeanShellSampler.resetInterpreter">false</boolProp>
         </BeanShellSampler>
         <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Open Home Page(GuestChkt)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
-          </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="571386695">&lt;title&gt;Home page&lt;/title&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
+      </hashTree>
+      <ForeachController guiclass="ForeachControlPanel" testclass="ForeachController" testname="ForEach Controller: customer ids loop (search result)" enabled="true">
+        <stringProp name="ForeachController.inputVal">customer_ids</stringProp>
+        <stringProp name="ForeachController.returnVal">customer_id</stringProp>
+        <boolProp name="ForeachController.useSeparator">true</boolProp>
+      </ForeachController>
+      <hashTree>
+        <CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="Counter" enabled="true">
+          <stringProp name="CounterConfig.start">1</stringProp>
+          <stringProp name="CounterConfig.end"/>
+          <stringProp name="CounterConfig.incr">1</stringProp>
+          <stringProp name="CounterConfig.name">id_counter</stringProp>
+          <stringProp name="CounterConfig.format"/>
+          <boolProp name="CounterConfig.per_user">false</boolProp>
+        </CounterConfig>
         <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Open Category(GuestChkt)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
-          </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}${category_url_key}${url_suffix}</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="1210004667">&lt;span class=&quot;base&quot; data-ui-id=&quot;page-title&quot;&gt;${category_name}&lt;/span&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">6</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
+        <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="SetUp - BeanShell Sampler: Collect customer ids" enabled="true">
+          <stringProp name="BeanShellSampler.query">import java.util.ArrayList;
+
+// If it is first iteration of cycle then recreate idsList
+if (1 == Integer.parseInt(vars.get("id_counter"))) {
+    idsList = new ArrayList();
+    props.put("customer_ids_list", idsList);
+} else {
+    idsList = props.get("customer_ids_list");
+}
+idsList.add(vars.get("customer_id"));</stringProp>
+          <stringProp name="BeanShellSampler.filename"/>
+          <stringProp name="BeanShellSampler.parameters"/>
+          <boolProp name="BeanShellSampler.resetInterpreter">false</boolProp>
+        </BeanShellSampler>
         <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 1 View(GuestChkt)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
-          </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}${simple_product_1_url_key}${url_suffix}</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="1254853024">&lt;title&gt;${simple_product_1_name}</stringProp>
-              <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form action" enabled="true">
-            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
-            <stringProp name="RegexExtractor.refname">simple_product_1_form_action</stringProp>
-            <stringProp name="RegexExtractor.regex">&lt;form action=&quot;([^&apos;&quot;]+)&quot;\s*method=&quot;post&quot;\s*id=&quot;product_addtocart_form&quot;&gt;</stringProp>
-            <stringProp name="RegexExtractor.template">$1$</stringProp>
-            <stringProp name="RegexExtractor.default"></stringProp>
-            <stringProp name="RegexExtractor.match_number">1</stringProp>
-          </RegexExtractor>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_action extracted" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="2845929">^.+$</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">1</intProp>
-            <stringProp name="Assertion.scope">variable</stringProp>
-            <stringProp name="Scope.variable">simple_product_1_form_action</stringProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
+      </hashTree>
+      <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="SetUp - BeanShell Sampler: Validate properties and count users" enabled="true">
+        <stringProp name="BeanShellSampler.query">Boolean stopTestOnError (String error) {
+    log.error(error);
+    System.out.println(error);
+    SampleResult.setStopTest(true);
+    return false;
+}
+
+if (props.get("simple_products_list") == null) {
+    return stopTestOnError("Cannot find simple products. Test stopped.");
+}
+if (props.get("configurable_products_list") == null) {
+    return stopTestOnError("Cannot find configurable products. Test stopped.");
+}
+if (props.get("customer_emails_list") == null) {
+    return stopTestOnError("Cannot find customer emails. Test stopped.");
+}
+int orders = Integer.parseInt(vars.get("orders"));
+
+
+if (orders &gt; 0) {
+    int checkout_sum = Integer.parseInt(vars.get("guest_checkout_percent")) + Integer.parseInt(vars.get("customer_checkout_percent"));
+    checkout_sum = checkout_sum &gt; 0 ? checkout_sum : 1;
+    int users = orders * (100 / checkout_sum);
+    props.put("users", users);
+} else {
+    props.put("users", Integer.parseInt(vars.get("users")));
+}
+</stringProp>
+        <stringProp name="BeanShellSampler.filename"/>
+        <stringProp name="BeanShellSampler.parameters"/>
+        <boolProp name="BeanShellSampler.resetInterpreter">false</boolProp>
+      </BeanShellSampler>
+      <hashTree/>
+      <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="SetUp - WarmUp Add To Cart" enabled="true">
+        <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+          <collectionProp name="Arguments.arguments">
+            <elementProp name="product" elementType="HTTPArgument">
+              <boolProp name="HTTPArgument.always_encode">false</boolProp>
+              <stringProp name="Argument.value">1</stringProp>
+              <stringProp name="Argument.metadata">=</stringProp>
+              <boolProp name="HTTPArgument.use_equals">true</boolProp>
+              <stringProp name="Argument.name">product</stringProp>
+            </elementProp>
+            <elementProp name="related_product" elementType="HTTPArgument">
+              <boolProp name="HTTPArgument.always_encode">false</boolProp>
+              <stringProp name="Argument.value"/>
+              <stringProp name="Argument.metadata">=</stringProp>
+              <boolProp name="HTTPArgument.use_equals">true</boolProp>
+              <stringProp name="Argument.name">related_product</stringProp>
+            </elementProp>
+            <elementProp name="qty" elementType="HTTPArgument">
+              <boolProp name="HTTPArgument.always_encode">false</boolProp>
+              <stringProp name="Argument.value">1</stringProp>
+              <stringProp name="Argument.metadata">=</stringProp>
+              <boolProp name="HTTPArgument.use_equals">true</boolProp>
+              <stringProp name="Argument.name">qty</stringProp>
+            </elementProp>
+            <elementProp name="form_key" elementType="HTTPArgument">
+              <boolProp name="HTTPArgument.always_encode">false</boolProp>
+              <stringProp name="Argument.value">${form_key}</stringProp>
+              <stringProp name="Argument.metadata">=</stringProp>
+              <boolProp name="HTTPArgument.use_equals">true</boolProp>
+              <stringProp name="Argument.name">form_key</stringProp>
+            </elementProp>
+          </collectionProp>
+        </elementProp>
+        <stringProp name="HTTPSampler.domain"/>
+        <stringProp name="HTTPSampler.port"/>
+        <stringProp name="HTTPSampler.connect_timeout"/>
+        <stringProp name="HTTPSampler.response_timeout"/>
+        <stringProp name="HTTPSampler.protocol"/>
+        <stringProp name="HTTPSampler.contentEncoding"/>
+        <stringProp name="HTTPSampler.path">${base_path}checkout/cart/add</stringProp>
+        <stringProp name="HTTPSampler.method">POST</stringProp>
+        <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+        <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+        <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+        <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+        <boolProp name="HTTPSampler.monitor">false</boolProp>
+        <stringProp name="HTTPSampler.embedded_url_re"/>
+      </HTTPSamplerProxy>
+      <hashTree/>
+    </hashTree>
+  
+    <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Catalog Browsing By Guest" enabled="true">
+      <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+      <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
+        <boolProp name="LoopController.continue_forever">false</boolProp>
+        <stringProp name="LoopController.loops">${loops}</stringProp>
+      </elementProp>
+      <stringProp name="ThreadGroup.num_threads">${__javaScript(Math.round(props.get("users")*${view_catalog_percent}/100&gt;&gt;0))}</stringProp>
+      <stringProp name="ThreadGroup.ramp_time">${ramp_period}</stringProp>
+      <longProp name="ThreadGroup.start_time">1437409133000</longProp>
+      <longProp name="ThreadGroup.end_time">1437409133000</longProp>
+      <boolProp name="ThreadGroup.scheduler">false</boolProp>
+      <stringProp name="ThreadGroup.duration"/>
+      <stringProp name="ThreadGroup.delay"/>
+    </ThreadGroup>
+    <hashTree>
+    <RandomVariableConfig guiclass="TestBeanGUI" testclass="RandomVariableConfig" testname="Random Variable 1" enabled="true">
+      <stringProp name="variableName">rv1</stringProp>
+      <stringProp name="outputFormat">'.'</stringProp>
+      <stringProp name="minimumValue">1</stringProp>
+      <stringProp name="maximumValue">999999</stringProp>
+      <stringProp name="randomSeed">1</stringProp>
+      <boolProp name="perThread">true</boolProp>
+    </RandomVariableConfig>
+    <hashTree/>
+  
+    <RandomVariableConfig guiclass="TestBeanGUI" testclass="RandomVariableConfig" testname="Random Variable 2" enabled="true">
+      <stringProp name="variableName">rv2</stringProp>
+      <stringProp name="outputFormat">'.'</stringProp>
+      <stringProp name="minimumValue">1</stringProp>
+      <stringProp name="maximumValue">999999</stringProp>
+      <stringProp name="randomSeed">2</stringProp>
+      <boolProp name="perThread">true</boolProp>
+    </RandomVariableConfig>
+    <hashTree/>
+  
+    <RandomVariableConfig guiclass="TestBeanGUI" testclass="RandomVariableConfig" testname="Random Variable 3" enabled="true">
+      <stringProp name="variableName">rv3</stringProp>
+      <stringProp name="outputFormat">'.'</stringProp>
+      <stringProp name="minimumValue">1</stringProp>
+      <stringProp name="maximumValue">999999</stringProp>
+      <stringProp name="randomSeed">3</stringProp>
+      <boolProp name="perThread">true</boolProp>
+    </RandomVariableConfig>
+    <hashTree/>
+  
+    <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="Get arguments${__property(activeAdminThread)}(CatProdBrows)" enabled="true">
+      <stringProp name="TestPlan.comments">Passing arguments between threads</stringProp>
+      <stringProp name="BeanShellSampler.query">number = (int)(${rv1} * props.get("simple_products_list").size());
+simpleList = props.get("simple_products_list").get(number);
+vars.put("simple_product_1_url_key", simpleList.get("url_key"));
+vars.put("simple_product_1_name", simpleList.get("title"));
+vars.put("simple_product_1_id", simpleList.get("id"));
+
+number1 = (int)(${rv2} * props.get("simple_products_list").size());
+simpleList = props.get("simple_products_list").get(number1);
+vars.put("simple_product_2_url_key", simpleList.get("url_key"));
+vars.put("simple_product_2_name", simpleList.get("title"));
+vars.put("simple_product_2_id", simpleList.get("id"));
+
+number = (int)(${rv3} * props.get("configurable_products_list").size());
+configurableList = props.get("configurable_products_list").get(number);
+vars.put("configurable_product_1_url_key", configurableList.get("url_key"));
+vars.put("configurable_product_1_name", configurableList.get("title"));
+vars.put("configurable_product_1_id", configurableList.get("id"));
+
+vars.put("category_url_key", props.get("category_url_key"));
+vars.put("category_name", props.get("category_name"));
+vars.put("testLabel", "CatProdBrows");</stringProp>
+      <stringProp name="BeanShellSampler.filename"/>
+      <stringProp name="BeanShellSampler.parameters"/>
+      <boolProp name="BeanShellSampler.resetInterpreter">true</boolProp>
+    </BeanShellSampler>
+    <hashTree/>
+  
+      <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Open Home Page${__property(activeAdminThread)}(${testLabel})" enabled="true">
+        <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+          <collectionProp name="Arguments.arguments"/>
+        </elementProp>
+        <stringProp name="HTTPSampler.domain"/>
+        <stringProp name="HTTPSampler.port"/>
+        <stringProp name="HTTPSampler.connect_timeout"/>
+        <stringProp name="HTTPSampler.response_timeout"/>
+        <stringProp name="HTTPSampler.protocol"/>
+        <stringProp name="HTTPSampler.contentEncoding"/>
+        <stringProp name="HTTPSampler.path">${base_path}</stringProp>
+        <stringProp name="HTTPSampler.method">GET</stringProp>
+        <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+        <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+        <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+        <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+        <boolProp name="HTTPSampler.monitor">false</boolProp>
+        <stringProp name="HTTPSampler.embedded_url_re"/>
+      </HTTPSamplerProxy>
+      <hashTree>
+        <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+          <collectionProp name="Asserion.test_strings">
+            <stringProp name="571386695">&lt;title&gt;Home page&lt;/title&gt;</stringProp>
+          </collectionProp>
+          <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+          <boolProp name="Assertion.assume_success">false</boolProp>
+          <intProp name="Assertion.test_type">2</intProp>
+        </ResponseAssertion>
         <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 1 Add To Cart(GuestChkt)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="product" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">${simple_product_1_id}</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">product</stringProp>
-              </elementProp>
-              <elementProp name="related_product" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">related_product</stringProp>
-              </elementProp>
-              <elementProp name="qty" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">1</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">qty</stringProp>
-              </elementProp>
-              <elementProp name="isAjax" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">true</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">isAjax</stringProp>
-              </elementProp>
-              <elementProp name="ajax" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">true</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">ajax</stringProp>
-              </elementProp>
-            </collectionProp>
+      </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer All Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value"/>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${simple_product_1_form_action}</stringProp>
-          <stringProp name="HTTPSampler.method">POST</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="210217247">You added ${simple_product_1_name} to your shopping cart.</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="518066445">&lt;div&gt;* This product is out of stock.&lt;/div&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">6</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-2001627678">\"messages\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Open Category${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}${category_url_key}${url_suffix}</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="1210004667">&lt;span class="base" data-ui-id="page-title"&gt;${category_name}&lt;/span&gt;</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">6</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor: Extract category id" enabled="true">
+        <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+        <stringProp name="RegexExtractor.refname">category_id</stringProp>
+        <stringProp name="RegexExtractor.regex">&lt;li class="item category([^'"]+)"&gt;\s*&lt;strong&gt;${category_name}&lt;/strong&gt;\s*&lt;/li&gt;</stringProp>
+        <stringProp name="RegexExtractor.template">$1$</stringProp>
+        <stringProp name="RegexExtractor.default"/>
+        <stringProp name="RegexExtractor.match_number">1</stringProp>
+        <stringProp name="Scope.variable">simple_product_1_url_key</stringProp>
+      </RegexExtractor>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion: Assert category id" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="1191417111">^[0-9]+$</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">1</intProp>
+        <stringProp name="Assertion.scope">variable</stringProp>
+        <stringProp name="Scope.variable">category_id</stringProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 1 View${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}${simple_product_1_url_key}${url_suffix}</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="1254853024">&lt;title&gt;${simple_product_1_name}</stringProp>
+          <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Ajax Review Simple Product 1(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}review/product/listAjax/id/${simple_product_1_id}/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="49586">200</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 2 View${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}${simple_product_2_url_key}${url_suffix}</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="2142356705">&lt;title&gt;${simple_product_2_name}</stringProp>
+          <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Ajax Review Simple Product 2(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}review/product/listAjax/id/${simple_product_2_id}/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="49586">200</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Configurable Product 1 View${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}${configurable_product_1_url_key}${url_suffix}</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="199922279">&lt;title&gt;${configurable_product_1_name}</stringProp>
+          <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Ajax Review Configurable Product 1(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}review/product/listAjax/id/${configurable_product_1_id}/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="49586">200</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  </hashTree>
+  
+    <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Abandoned Cart By Guest" enabled="true">
+      <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+      <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
+        <boolProp name="LoopController.continue_forever">false</boolProp>
+        <stringProp name="LoopController.loops">${loops}</stringProp>
+      </elementProp>
+      <stringProp name="ThreadGroup.num_threads">${__javaScript(Math.round(props.get("users")*${view_product_add_to_cart_percent}/100&gt;&gt;0))}</stringProp>
+      <stringProp name="ThreadGroup.ramp_time">${ramp_period}</stringProp>
+      <longProp name="ThreadGroup.start_time">1437411475000</longProp>
+      <longProp name="ThreadGroup.end_time">1437411475000</longProp>
+      <boolProp name="ThreadGroup.scheduler">false</boolProp>
+      <stringProp name="ThreadGroup.duration"/>
+      <stringProp name="ThreadGroup.delay"/>
+    </ThreadGroup>
+    <hashTree>
+    <RandomVariableConfig guiclass="TestBeanGUI" testclass="RandomVariableConfig" testname="Random Variable 1" enabled="true">
+      <stringProp name="variableName">rv1</stringProp>
+      <stringProp name="outputFormat">'.'</stringProp>
+      <stringProp name="minimumValue">1</stringProp>
+      <stringProp name="maximumValue">999999</stringProp>
+      <stringProp name="randomSeed">1</stringProp>
+      <boolProp name="perThread">true</boolProp>
+    </RandomVariableConfig>
+    <hashTree/>
+  
+    <RandomVariableConfig guiclass="TestBeanGUI" testclass="RandomVariableConfig" testname="Random Variable 2" enabled="true">
+      <stringProp name="variableName">rv2</stringProp>
+      <stringProp name="outputFormat">'.'</stringProp>
+      <stringProp name="minimumValue">1</stringProp>
+      <stringProp name="maximumValue">999999</stringProp>
+      <stringProp name="randomSeed">2</stringProp>
+      <boolProp name="perThread">true</boolProp>
+    </RandomVariableConfig>
+    <hashTree/>
+  
+    <RandomVariableConfig guiclass="TestBeanGUI" testclass="RandomVariableConfig" testname="Random Variable 3" enabled="true">
+      <stringProp name="variableName">rv3</stringProp>
+      <stringProp name="outputFormat">'.'</stringProp>
+      <stringProp name="minimumValue">1</stringProp>
+      <stringProp name="maximumValue">999999</stringProp>
+      <stringProp name="randomSeed">3</stringProp>
+      <boolProp name="perThread">true</boolProp>
+    </RandomVariableConfig>
+    <hashTree/>
+  
+    <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="Get arguments${__property(activeAdminThread)}(BrowsAddToCart)" enabled="true">
+      <stringProp name="TestPlan.comments">Passing arguments between threads</stringProp>
+      <stringProp name="BeanShellSampler.query">number = (int)(${rv1} * props.get("simple_products_list").size());
+simpleList = props.get("simple_products_list").get(number);
+vars.put("simple_product_1_url_key", simpleList.get("url_key"));
+vars.put("simple_product_1_name", simpleList.get("title"));
+vars.put("simple_product_1_id", simpleList.get("id"));
+vars.put("simple_product_1_uenc", simpleList.get("uenc"));
+
+number1 = (int)(${rv2} * props.get("simple_products_list").size());
+simpleList = props.get("simple_products_list").get(number1);
+vars.put("simple_product_2_url_key", simpleList.get("url_key"));
+vars.put("simple_product_2_name", simpleList.get("title"));
+vars.put("simple_product_2_id", simpleList.get("id"));
+vars.put("simple_product_2_uenc", simpleList.get("uenc"));
+
+number = (int)(${rv3} * props.get("configurable_products_list").size());
+configurableList = props.get("configurable_products_list").get(number);
+vars.put("configurable_product_1_url_key", configurableList.get("url_key"));
+vars.put("configurable_product_1_name", configurableList.get("title"));
+vars.put("configurable_product_1_id", configurableList.get("id"));
+vars.put("configurable_attribute_id", configurableList.get("attribute_id"));
+vars.put("configurable_option_id", configurableList.get("attribute_option_id"));
+vars.put("configurable_product_1_uenc", simpleList.get("uenc"));
+
+vars.put("category_url_key", props.get("category_url_key"));
+vars.put("category_name", props.get("category_name"));
+vars.put("testLabel", "BrowsAddToCart");
+vars.put("loadType", "Guest");</stringProp>
+      <stringProp name="BeanShellSampler.filename"/>
+      <stringProp name="BeanShellSampler.parameters"/>
+      <boolProp name="BeanShellSampler.resetInterpreter">true</boolProp>
+    </BeanShellSampler>
+    <hashTree/>
+  
+      <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Open Home Page${__property(activeAdminThread)}(${testLabel})" enabled="true">
+        <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+          <collectionProp name="Arguments.arguments"/>
+        </elementProp>
+        <stringProp name="HTTPSampler.domain"/>
+        <stringProp name="HTTPSampler.port"/>
+        <stringProp name="HTTPSampler.connect_timeout"/>
+        <stringProp name="HTTPSampler.response_timeout"/>
+        <stringProp name="HTTPSampler.protocol"/>
+        <stringProp name="HTTPSampler.contentEncoding"/>
+        <stringProp name="HTTPSampler.path">${base_path}</stringProp>
+        <stringProp name="HTTPSampler.method">GET</stringProp>
+        <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+        <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+        <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+        <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+        <boolProp name="HTTPSampler.monitor">false</boolProp>
+        <stringProp name="HTTPSampler.embedded_url_re"/>
+      </HTTPSamplerProxy>
+      <hashTree>
+        <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+          <collectionProp name="Asserion.test_strings">
+            <stringProp name="571386695">&lt;title&gt;Home page&lt;/title&gt;</stringProp>
+          </collectionProp>
+          <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+          <boolProp name="Assertion.assume_success">false</boolProp>
+          <intProp name="Assertion.test_type">2</intProp>
+        </ResponseAssertion>
         <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 2 View(GuestChkt)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
+      </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer All Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value"/>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}${simple_product_2_url_key}${url_suffix}</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="2142356705">&lt;title&gt;${simple_product_2_name}</stringProp>
-              <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form action" enabled="true">
-            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
-            <stringProp name="RegexExtractor.refname">simple_product_2_form_action</stringProp>
-            <stringProp name="RegexExtractor.regex">&lt;form action=&quot;([^&apos;&quot;]+)&quot;\s*method=&quot;post&quot;\s*id=&quot;product_addtocart_form&quot;&gt;</stringProp>
-            <stringProp name="RegexExtractor.template">$1$</stringProp>
-            <stringProp name="RegexExtractor.default"></stringProp>
-            <stringProp name="RegexExtractor.match_number">1</stringProp>
-          </RegexExtractor>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_action extracted" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="2845929">^.+$</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">1</intProp>
-            <stringProp name="Assertion.scope">variable</stringProp>
-            <stringProp name="Scope.variable">simple_product_2_form_action</stringProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-2001627678">\"messages\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Ajax Load Login Form${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="blocks" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">["customer_form_login"]</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">blocks</stringProp>
+          </elementProp>
+          <elementProp name="handles" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">["default","customer_account_login"]</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">handles</stringProp>
+          </elementProp>
+          <elementProp name="originalRequest" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">{"route":"customer","controller":"account","action":"login","uri":"/customer/account/login/"}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">originalRequest</stringProp>
+          </elementProp>
+          <elementProp name="ajax" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">true</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">ajax</stringProp>
+          </elementProp>
+          <elementProp name="isAjax" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">true</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">isAjax</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}page_cache/block/render/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="940598773">"customer_form_login"</stringProp>
+          <stringProp name="1951684663">Registered Customers</stringProp>
+          <stringProp name="474011748">form_key</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form key" enabled="true">
+        <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+        <stringProp name="RegexExtractor.refname">form_key</stringProp>
+        <stringProp name="RegexExtractor.regex">&lt;input name=\\"form_key\\" type=\\"hidden\\" value=\\"([^'"]+)\\" \\/&gt;</stringProp>
+        <stringProp name="RegexExtractor.template">$1$</stringProp>
+        <stringProp name="RegexExtractor.default"/>
+        <stringProp name="RegexExtractor.match_number">1</stringProp>
+      </RegexExtractor>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_key extracted" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="2845929">^.+$</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">1</intProp>
+        <stringProp name="Assertion.scope">variable</stringProp>
+        <stringProp name="Scope.variable">form_key</stringProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Open Category${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}${category_url_key}${url_suffix}</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="1210004667">&lt;span class="base" data-ui-id="page-title"&gt;${category_name}&lt;/span&gt;</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">6</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor: Extract category id" enabled="true">
+        <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+        <stringProp name="RegexExtractor.refname">category_id</stringProp>
+        <stringProp name="RegexExtractor.regex">&lt;li class="item category([^'"]+)"&gt;\s*&lt;strong&gt;${category_name}&lt;/strong&gt;\s*&lt;/li&gt;</stringProp>
+        <stringProp name="RegexExtractor.template">$1$</stringProp>
+        <stringProp name="RegexExtractor.default"/>
+        <stringProp name="RegexExtractor.match_number">1</stringProp>
+        <stringProp name="Scope.variable">simple_product_1_url_key</stringProp>
+      </RegexExtractor>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion: Assert category id" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="1191417111">^[0-9]+$</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">1</intProp>
+        <stringProp name="Assertion.scope">variable</stringProp>
+        <stringProp name="Scope.variable">category_id</stringProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 1 View${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}${simple_product_1_url_key}${url_suffix}</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="1254853024">&lt;title&gt;${simple_product_1_name}</stringProp>
+          <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Ajax Review Simple Product 1(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}review/product/listAjax/id/${simple_product_1_id}/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="49586">200</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 1 Add To Cart${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="product" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${simple_product_1_id}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">product</stringProp>
+          </elementProp>
+          <elementProp name="related_product" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value"/>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">related_product</stringProp>
+          </elementProp>
+          <elementProp name="qty" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">1</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">qty</stringProp>
+          </elementProp>
+          <elementProp name="form_key" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${form_key}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">form_key</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}checkout/cart/add/uenc/${simple_product_1_uenc}/product/${simple_product_1_id}/</stringProp>
+      <stringProp name="HTTPSampler.method">POST</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+
+    <hashTree>
+    <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+      <collectionProp name="HeaderManager.headers">
+        <elementProp name="" elementType="Header">
+          <stringProp name="Header.name">X-Requested-With</stringProp>
+          <stringProp name="Header.value">XMLHttpRequest</stringProp>
+        </elementProp>
+      </collectionProp>
+    </HeaderManager>
+    <hashTree/>
+  </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Load ${loadType}${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">cart,banner,messages</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">true</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+    <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+      <collectionProp name="HeaderManager.headers">
+        <elementProp name="" elementType="Header">
+          <stringProp name="Header.name">X-Requested-With</stringProp>
+          <stringProp name="Header.value">XMLHttpRequest</stringProp>
+        </elementProp>
+      </collectionProp>
+    </HeaderManager>
+    <hashTree/>
+  
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="210217247">You added ${simple_product_1_name} to your shopping cart.</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="2057973164">This product is out of stock.</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">6</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-350323027">\"summary_count\":1</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 2 View${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}${simple_product_2_url_key}${url_suffix}</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="2142356705">&lt;title&gt;${simple_product_2_name}</stringProp>
+          <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Ajax Review Simple Product 2(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}review/product/listAjax/id/${simple_product_2_id}/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="49586">200</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 2 Add To Cart${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="product" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${simple_product_2_id}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">product</stringProp>
+          </elementProp>
+          <elementProp name="related_product" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value"/>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">related_product</stringProp>
+          </elementProp>
+          <elementProp name="qty" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">1</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">qty</stringProp>
+          </elementProp>
+          <elementProp name="form_key" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${form_key}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">form_key</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}checkout/cart/add/uenc/${simple_product_2_uenc}/product/${simple_product_2_id}/</stringProp>
+      <stringProp name="HTTPSampler.method">POST</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+    <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+      <collectionProp name="HeaderManager.headers">
+        <elementProp name="" elementType="Header">
+          <stringProp name="Header.name">X-Requested-With</stringProp>
+          <stringProp name="Header.value">XMLHttpRequest</stringProp>
+        </elementProp>
+      </collectionProp>
+    </HeaderManager>
+    <hashTree/>
+  </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Load ${loadType}2${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">cart,banner,messages</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+            <stringProp name="Argument.desc">true</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">true</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+            <stringProp name="Argument.desc">true</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+            <stringProp name="Argument.desc">true</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+    <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+      <collectionProp name="HeaderManager.headers">
+        <elementProp name="" elementType="Header">
+          <stringProp name="Header.name">X-Requested-With</stringProp>
+          <stringProp name="Header.value">XMLHttpRequest</stringProp>
+        </elementProp>
+      </collectionProp>
+    </HeaderManager>
+    <hashTree/>
+  
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="221533374">You added ${simple_product_2_name} to your shopping cart.</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="2057973164">This product is out of stock.</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">6</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-350323026">\"summary_count\":2</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Configurable Product 1 View${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}${configurable_product_1_url_key}${url_suffix}</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="199922279">&lt;title&gt;${configurable_product_1_name}</stringProp>
+          <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Ajax Review Configurable Product 1(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}review/product/listAjax/id/${configurable_product_1_id}/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="49586">200</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Configurable Product 1 Add To Cart${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="product" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${configurable_product_1_id}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">product</stringProp>
+          </elementProp>
+          <elementProp name="related_product" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value"/>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">related_product</stringProp>
+          </elementProp>
+          <elementProp name="qty" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">1</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">qty</stringProp>
+          </elementProp>
+          <elementProp name="super_attribute[${configurable_attribute_id}]" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${configurable_option_id}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">super_attribute[${configurable_attribute_id}]</stringProp>
+          </elementProp>
+          <elementProp name="form_key" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${form_key}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">form_key</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}checkout/cart/add/uenc/${configurable_product_1_uenc}/product/${configurable_product_1_id}/</stringProp>
+      <stringProp name="HTTPSampler.method">POST</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+    <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+      <collectionProp name="HeaderManager.headers">
+        <elementProp name="" elementType="Header">
+          <stringProp name="Header.name">X-Requested-With</stringProp>
+          <stringProp name="Header.value">XMLHttpRequest</stringProp>
+        </elementProp>
+      </collectionProp>
+    </HeaderManager>
+    <hashTree/>
+  </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Load ${loadType}3${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">cart,banner,messages</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+            <stringProp name="Argument.desc">true</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">true</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+            <stringProp name="Argument.desc">true</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+            <stringProp name="Argument.desc">true</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+    <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+      <collectionProp name="HeaderManager.headers">
+        <elementProp name="" elementType="Header">
+          <stringProp name="Header.name">X-Requested-With</stringProp>
+          <stringProp name="Header.value">XMLHttpRequest</stringProp>
+        </elementProp>
+      </collectionProp>
+    </HeaderManager>
+    <hashTree/>
+  
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1346272328">You added ${configurable_product_1_name} to your shopping cart.</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-108122347">We don't have as many &amp;quot;${configurable_product_1_name}&amp;quot; as you requested.</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">6</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-350323025">\"summary_count\":3</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  </hashTree>
+  
+    <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Checkout By Guest" enabled="true">
+      <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+      <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
+        <boolProp name="LoopController.continue_forever">false</boolProp>
+        <stringProp name="LoopController.loops">${loops}</stringProp>
+      </elementProp>
+      <stringProp name="ThreadGroup.num_threads">${__javaScript(Math.round(props.get("users")*${guest_checkout_percent}/100&gt;&gt;0))}</stringProp>
+      <stringProp name="ThreadGroup.ramp_time">${ramp_period}</stringProp>
+      <longProp name="ThreadGroup.start_time">1437409133000</longProp>
+      <longProp name="ThreadGroup.end_time">1437409133000</longProp>
+      <boolProp name="ThreadGroup.scheduler">false</boolProp>
+      <stringProp name="ThreadGroup.duration"/>
+      <stringProp name="ThreadGroup.delay"/>
+    </ThreadGroup>
+    <hashTree>
+    <RandomVariableConfig guiclass="TestBeanGUI" testclass="RandomVariableConfig" testname="Random Variable 1" enabled="true">
+      <stringProp name="variableName">rv1</stringProp>
+      <stringProp name="outputFormat">'.'</stringProp>
+      <stringProp name="minimumValue">1</stringProp>
+      <stringProp name="maximumValue">999999</stringProp>
+      <stringProp name="randomSeed">1</stringProp>
+      <boolProp name="perThread">true</boolProp>
+    </RandomVariableConfig>
+    <hashTree/>
+  
+    <RandomVariableConfig guiclass="TestBeanGUI" testclass="RandomVariableConfig" testname="Random Variable 2" enabled="true">
+      <stringProp name="variableName">rv2</stringProp>
+      <stringProp name="outputFormat">'.'</stringProp>
+      <stringProp name="minimumValue">1</stringProp>
+      <stringProp name="maximumValue">999999</stringProp>
+      <stringProp name="randomSeed">2</stringProp>
+      <boolProp name="perThread">true</boolProp>
+    </RandomVariableConfig>
+    <hashTree/>
+  
+    <RandomVariableConfig guiclass="TestBeanGUI" testclass="RandomVariableConfig" testname="Random Variable 3" enabled="true">
+      <stringProp name="variableName">rv3</stringProp>
+      <stringProp name="outputFormat">'.'</stringProp>
+      <stringProp name="minimumValue">1</stringProp>
+      <stringProp name="maximumValue">999999</stringProp>
+      <stringProp name="randomSeed">3</stringProp>
+      <boolProp name="perThread">true</boolProp>
+    </RandomVariableConfig>
+    <hashTree/>
+  
+    <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="Get arguments${__property(activeAdminThread)}(GuestChkt)" enabled="true">
+      <stringProp name="TestPlan.comments">Passing arguments between threads</stringProp>
+      <stringProp name="BeanShellSampler.query">number = (int)(${rv1} * props.get("simple_products_list").size());
+simpleList = props.get("simple_products_list").get(number);
+vars.put("simple_product_1_url_key", simpleList.get("url_key"));
+vars.put("simple_product_1_name", simpleList.get("title"));
+vars.put("simple_product_1_id", simpleList.get("id"));
+vars.put("simple_product_1_uenc", simpleList.get("uenc"));
+
+number1 = (int)(${rv2} * props.get("simple_products_list").size());
+simpleList = props.get("simple_products_list").get(number1);
+vars.put("simple_product_2_url_key", simpleList.get("url_key"));
+vars.put("simple_product_2_name", simpleList.get("title"));
+vars.put("simple_product_2_id", simpleList.get("id"));
+vars.put("simple_product_2_uenc", simpleList.get("uenc"));
+
+number = (int)(${rv3} * props.get("configurable_products_list").size());
+configurableList = props.get("configurable_products_list").get(number);
+vars.put("configurable_product_1_url_key", configurableList.get("url_key"));
+vars.put("configurable_product_1_name", configurableList.get("title"));
+vars.put("configurable_product_1_id", configurableList.get("id"));
+vars.put("configurable_attribute_id", configurableList.get("attribute_id"));
+vars.put("configurable_option_id", configurableList.get("attribute_option_id"));
+vars.put("configurable_product_1_uenc", simpleList.get("uenc"));
+
+vars.put("category_url_key", props.get("category_url_key"));
+vars.put("category_name", props.get("category_name"));
+vars.put("testLabel", "GuestChkt");
+vars.put("loadType", "Guest");</stringProp>
+      <stringProp name="BeanShellSampler.filename"/>
+      <stringProp name="BeanShellSampler.parameters"/>
+      <boolProp name="BeanShellSampler.resetInterpreter">true</boolProp>
+    </BeanShellSampler>
+    <hashTree/>
+  
+      <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Open Home Page${__property(activeAdminThread)}(${testLabel})" enabled="true">
+        <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+          <collectionProp name="Arguments.arguments"/>
+        </elementProp>
+        <stringProp name="HTTPSampler.domain"/>
+        <stringProp name="HTTPSampler.port"/>
+        <stringProp name="HTTPSampler.connect_timeout"/>
+        <stringProp name="HTTPSampler.response_timeout"/>
+        <stringProp name="HTTPSampler.protocol"/>
+        <stringProp name="HTTPSampler.contentEncoding"/>
+        <stringProp name="HTTPSampler.path">${base_path}</stringProp>
+        <stringProp name="HTTPSampler.method">GET</stringProp>
+        <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+        <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+        <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+        <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+        <boolProp name="HTTPSampler.monitor">false</boolProp>
+        <stringProp name="HTTPSampler.embedded_url_re"/>
+      </HTTPSamplerProxy>
+      <hashTree>
+        <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+          <collectionProp name="Asserion.test_strings">
+            <stringProp name="571386695">&lt;title&gt;Home page&lt;/title&gt;</stringProp>
+          </collectionProp>
+          <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+          <boolProp name="Assertion.assume_success">false</boolProp>
+          <intProp name="Assertion.test_type">2</intProp>
+        </ResponseAssertion>
         <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 2 Add To Cart(GuestChkt)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="product" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">${simple_product_2_id}</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">product</stringProp>
-              </elementProp>
-              <elementProp name="related_product" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">related_product</stringProp>
-              </elementProp>
-              <elementProp name="qty" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">1</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">qty</stringProp>
-              </elementProp>
-              <elementProp name="isAjax" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">true</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">isAjax</stringProp>
-              </elementProp>
-              <elementProp name="ajax" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">true</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">ajax</stringProp>
-              </elementProp>
-            </collectionProp>
+      </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer All Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value"/>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-2001627678">\"messages\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Ajax Load Login Form${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="blocks" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">["customer_form_login"]</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">blocks</stringProp>
+          </elementProp>
+          <elementProp name="handles" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">["default","customer_account_login"]</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">handles</stringProp>
+          </elementProp>
+          <elementProp name="originalRequest" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">{"route":"customer","controller":"account","action":"login","uri":"/customer/account/login/"}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">originalRequest</stringProp>
+          </elementProp>
+          <elementProp name="ajax" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">true</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">ajax</stringProp>
+          </elementProp>
+          <elementProp name="isAjax" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">true</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">isAjax</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}page_cache/block/render/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="940598773">"customer_form_login"</stringProp>
+          <stringProp name="1951684663">Registered Customers</stringProp>
+          <stringProp name="474011748">form_key</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form key" enabled="true">
+        <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+        <stringProp name="RegexExtractor.refname">form_key</stringProp>
+        <stringProp name="RegexExtractor.regex">&lt;input name=\\"form_key\\" type=\\"hidden\\" value=\\"([^'"]+)\\" \\/&gt;</stringProp>
+        <stringProp name="RegexExtractor.template">$1$</stringProp>
+        <stringProp name="RegexExtractor.default"/>
+        <stringProp name="RegexExtractor.match_number">1</stringProp>
+      </RegexExtractor>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_key extracted" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="2845929">^.+$</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">1</intProp>
+        <stringProp name="Assertion.scope">variable</stringProp>
+        <stringProp name="Scope.variable">form_key</stringProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Open Category${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}${category_url_key}${url_suffix}</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="1210004667">&lt;span class="base" data-ui-id="page-title"&gt;${category_name}&lt;/span&gt;</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">6</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor: Extract category id" enabled="true">
+        <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+        <stringProp name="RegexExtractor.refname">category_id</stringProp>
+        <stringProp name="RegexExtractor.regex">&lt;li class="item category([^'"]+)"&gt;\s*&lt;strong&gt;${category_name}&lt;/strong&gt;\s*&lt;/li&gt;</stringProp>
+        <stringProp name="RegexExtractor.template">$1$</stringProp>
+        <stringProp name="RegexExtractor.default"/>
+        <stringProp name="RegexExtractor.match_number">1</stringProp>
+        <stringProp name="Scope.variable">simple_product_1_url_key</stringProp>
+      </RegexExtractor>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion: Assert category id" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="1191417111">^[0-9]+$</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">1</intProp>
+        <stringProp name="Assertion.scope">variable</stringProp>
+        <stringProp name="Scope.variable">category_id</stringProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 1 View${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}${simple_product_1_url_key}${url_suffix}</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="1254853024">&lt;title&gt;${simple_product_1_name}</stringProp>
+          <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Ajax Review Simple Product 1(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}review/product/listAjax/id/${simple_product_1_id}/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="49586">200</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 1 Add To Cart${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="product" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${simple_product_1_id}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">product</stringProp>
+          </elementProp>
+          <elementProp name="related_product" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value"/>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">related_product</stringProp>
+          </elementProp>
+          <elementProp name="qty" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">1</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">qty</stringProp>
+          </elementProp>
+          <elementProp name="form_key" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${form_key}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">form_key</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}checkout/cart/add/uenc/${simple_product_1_uenc}/product/${simple_product_1_id}/</stringProp>
+      <stringProp name="HTTPSampler.method">POST</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+
+    <hashTree>
+    <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+      <collectionProp name="HeaderManager.headers">
+        <elementProp name="" elementType="Header">
+          <stringProp name="Header.name">X-Requested-With</stringProp>
+          <stringProp name="Header.value">XMLHttpRequest</stringProp>
+        </elementProp>
+      </collectionProp>
+    </HeaderManager>
+    <hashTree/>
+  </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Load ${loadType}${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">cart,banner,messages</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">true</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+    <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+      <collectionProp name="HeaderManager.headers">
+        <elementProp name="" elementType="Header">
+          <stringProp name="Header.name">X-Requested-With</stringProp>
+          <stringProp name="Header.value">XMLHttpRequest</stringProp>
+        </elementProp>
+      </collectionProp>
+    </HeaderManager>
+    <hashTree/>
+  
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="210217247">You added ${simple_product_1_name} to your shopping cart.</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="2057973164">This product is out of stock.</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">6</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-350323027">\"summary_count\":1</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 2 View${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}${simple_product_2_url_key}${url_suffix}</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="2142356705">&lt;title&gt;${simple_product_2_name}</stringProp>
+          <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Ajax Review Simple Product 2(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}review/product/listAjax/id/${simple_product_2_id}/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="49586">200</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 2 Add To Cart${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="product" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${simple_product_2_id}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">product</stringProp>
+          </elementProp>
+          <elementProp name="related_product" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value"/>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">related_product</stringProp>
+          </elementProp>
+          <elementProp name="qty" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">1</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">qty</stringProp>
+          </elementProp>
+          <elementProp name="form_key" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${form_key}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">form_key</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}checkout/cart/add/uenc/${simple_product_2_uenc}/product/${simple_product_2_id}/</stringProp>
+      <stringProp name="HTTPSampler.method">POST</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+    <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+      <collectionProp name="HeaderManager.headers">
+        <elementProp name="" elementType="Header">
+          <stringProp name="Header.name">X-Requested-With</stringProp>
+          <stringProp name="Header.value">XMLHttpRequest</stringProp>
+        </elementProp>
+      </collectionProp>
+    </HeaderManager>
+    <hashTree/>
+  </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Load ${loadType}2${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">cart,banner,messages</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+            <stringProp name="Argument.desc">true</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">true</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+            <stringProp name="Argument.desc">true</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+            <stringProp name="Argument.desc">true</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+    <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+      <collectionProp name="HeaderManager.headers">
+        <elementProp name="" elementType="Header">
+          <stringProp name="Header.name">X-Requested-With</stringProp>
+          <stringProp name="Header.value">XMLHttpRequest</stringProp>
+        </elementProp>
+      </collectionProp>
+    </HeaderManager>
+    <hashTree/>
+  
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="221533374">You added ${simple_product_2_name} to your shopping cart.</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="2057973164">This product is out of stock.</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">6</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-350323026">\"summary_count\":2</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Configurable Product 1 View${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}${configurable_product_1_url_key}${url_suffix}</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="199922279">&lt;title&gt;${configurable_product_1_name}</stringProp>
+          <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Ajax Review Configurable Product 1(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}review/product/listAjax/id/${configurable_product_1_id}/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="49586">200</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Configurable Product 1 Add To Cart${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="product" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${configurable_product_1_id}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">product</stringProp>
+          </elementProp>
+          <elementProp name="related_product" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value"/>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">related_product</stringProp>
+          </elementProp>
+          <elementProp name="qty" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">1</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">qty</stringProp>
+          </elementProp>
+          <elementProp name="super_attribute[${configurable_attribute_id}]" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${configurable_option_id}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">super_attribute[${configurable_attribute_id}]</stringProp>
+          </elementProp>
+          <elementProp name="form_key" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${form_key}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">form_key</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}checkout/cart/add/uenc/${configurable_product_1_uenc}/product/${configurable_product_1_id}/</stringProp>
+      <stringProp name="HTTPSampler.method">POST</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+    <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+      <collectionProp name="HeaderManager.headers">
+        <elementProp name="" elementType="Header">
+          <stringProp name="Header.name">X-Requested-With</stringProp>
+          <stringProp name="Header.value">XMLHttpRequest</stringProp>
+        </elementProp>
+      </collectionProp>
+    </HeaderManager>
+    <hashTree/>
+  </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Load ${loadType}3${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">cart,banner,messages</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+            <stringProp name="Argument.desc">true</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">true</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+            <stringProp name="Argument.desc">true</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+            <stringProp name="Argument.desc">true</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+    <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+      <collectionProp name="HeaderManager.headers">
+        <elementProp name="" elementType="Header">
+          <stringProp name="Header.name">X-Requested-With</stringProp>
+          <stringProp name="Header.value">XMLHttpRequest</stringProp>
+        </elementProp>
+      </collectionProp>
+    </HeaderManager>
+    <hashTree/>
+  
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1346272328">You added ${configurable_product_1_name} to your shopping cart.</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-108122347">We don't have as many &amp;quot;${configurable_product_1_name}&amp;quot; as you requested.</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">6</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-350323025">\"summary_count\":3</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Checkout start${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}checkout/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1403911775">&lt;title&gt;Checkout&lt;/title&gt;</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-179817969">&lt;title&gt;Shopping Cart&lt;/title&gt;</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">6</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract Cart Id" enabled="true">
+        <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+        <stringProp name="RegexExtractor.refname">cart_id</stringProp>
+        <stringProp name="RegexExtractor.regex">"quoteData":{"entity_id":"([^'"]+)",</stringProp>
+        <stringProp name="RegexExtractor.template">$1$</stringProp>
+        <stringProp name="RegexExtractor.default"/>
+        <stringProp name="RegexExtractor.match_number">1</stringProp>
+      </RegexExtractor>
+      <hashTree/>
+      <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form key" enabled="true">
+        <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+        <stringProp name="RegexExtractor.refname">form_key</stringProp>
+        <stringProp name="RegexExtractor.regex">&lt;input name="form_key" type="hidden" value="([^'"]+)" /&gt;</stringProp>
+        <stringProp name="RegexExtractor.template">$1$</stringProp>
+        <stringProp name="RegexExtractor.default"/>
+        <stringProp name="RegexExtractor.match_number">1</stringProp>
+      </RegexExtractor>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert Cart Id extracted" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="2845929">^.+$</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">1</intProp>
+        <stringProp name="Assertion.scope">variable</stringProp>
+        <stringProp name="Scope.variable">cart_id</stringProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_key extracted" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="2845929">^.+$</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">1</intProp>
+        <stringProp name="Assertion.scope">variable</stringProp>
+        <stringProp name="Scope.variable">form_key</stringProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Checkout Estimate Shipping Methods ${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">{"address":{"country_id":"US"}}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}/rest/default/V1/guest-carts/${cart_id}/estimate-shipping-methods</stringProp>
+      <stringProp name="HTTPSampler.method">POST</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+        <collectionProp name="HeaderManager.headers">
+          <elementProp name="" elementType="Header">
+            <stringProp name="Header.name">Referer</stringProp>
+            <stringProp name="Header.value">${base_path}checkout/onepage/</stringProp>
+          </elementProp>
+          <elementProp name="Content-Type" elementType="Header">
+            <stringProp name="Header.name">Content-Type</stringProp>
+            <stringProp name="Header.value">application/json; charset=UTF-8</stringProp>
+          </elementProp>
+          <elementProp name="X-Requested-With" elementType="Header">
+            <stringProp name="Header.name">X-Requested-With</stringProp>
+            <stringProp name="Header.value">XMLHttpRequest</stringProp>
+          </elementProp>
+          <elementProp name="Accept" elementType="Header">
+            <stringProp name="Header.name">Accept</stringProp>
+            <stringProp name="Header.value">application/json</stringProp>
+          </elementProp>
+        </collectionProp>
+      </HeaderManager>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert success" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1224567411">"available":true</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Checkout Email Available ${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">{"customerEmail":"test@example.com"}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}rest/default/V1/customers/isEmailAvailable</stringProp>
+      <stringProp name="HTTPSampler.method">POST</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+        <collectionProp name="HeaderManager.headers">
+          <elementProp name="" elementType="Header">
+            <stringProp name="Header.name">Referer</stringProp>
+            <stringProp name="Header.value">${base_path}checkout/onepage/</stringProp>
+          </elementProp>
+          <elementProp name="Content-Type" elementType="Header">
+            <stringProp name="Header.name">Content-Type</stringProp>
+            <stringProp name="Header.value">application/json; charset=UTF-8</stringProp>
+          </elementProp>
+          <elementProp name="X-Requested-With" elementType="Header">
+            <stringProp name="Header.name">X-Requested-With</stringProp>
+            <stringProp name="Header.value">XMLHttpRequest</stringProp>
+          </elementProp>
+          <elementProp name="Accept" elementType="Header">
+            <stringProp name="Header.name">Accept</stringProp>
+            <stringProp name="Header.value">application/json</stringProp>
+          </elementProp>
+        </collectionProp>
+      </HeaderManager>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="3569038">true</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">8</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Checkout Estimate Shipping Methods ${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">{"address":{"country_id":"US","postcode":"95630"}}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}/rest/default/V1/guest-carts/${cart_id}/estimate-shipping-methods</stringProp>
+      <stringProp name="HTTPSampler.method">POST</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+        <collectionProp name="HeaderManager.headers">
+          <elementProp name="" elementType="Header">
+            <stringProp name="Header.name">Referer</stringProp>
+            <stringProp name="Header.value">${base_path}checkout/onepage/</stringProp>
+          </elementProp>
+          <elementProp name="Content-Type" elementType="Header">
+            <stringProp name="Header.name">Content-Type</stringProp>
+            <stringProp name="Header.value">application/json; charset=UTF-8</stringProp>
+          </elementProp>
+          <elementProp name="X-Requested-With" elementType="Header">
+            <stringProp name="Header.name">X-Requested-With</stringProp>
+            <stringProp name="Header.value">XMLHttpRequest</stringProp>
+          </elementProp>
+          <elementProp name="Accept" elementType="Header">
+            <stringProp name="Header.name">Accept</stringProp>
+            <stringProp name="Header.value">application/json</stringProp>
+          </elementProp>
+        </collectionProp>
+      </HeaderManager>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert success" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1224567411">"available":true</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Checkout Billing/Shipping Information ${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">{"addressInformation":{"shipping_address":{"countryId":"US","regionId":"12","regionCode":"CA","region":"California","street":["10441 Jefferson Blvd ste 200"],"company":"","telephone":"3109450345","fax":"","postcode":"90232","city":"Culver City","firstname":"Name","lastname":"Lastname"},"shipping_method_code":"flatrate","shipping_carrier_code":"flatrate"}}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}rest/default/V1/carts/${cart_id}/shipping-information</stringProp>
+      <stringProp name="HTTPSampler.method">POST</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+        <collectionProp name="HeaderManager.headers">
+          <elementProp name="" elementType="Header">
+            <stringProp name="Header.name">Referer</stringProp>
+            <stringProp name="Header.value">${base_path}checkout/onepage/</stringProp>
+          </elementProp>
+          <elementProp name="Content-Type" elementType="Header">
+            <stringProp name="Header.name">Content-Type</stringProp>
+            <stringProp name="Header.value">application/json; charset=UTF-8</stringProp>
+          </elementProp>
+          <elementProp name="X-Requested-With" elementType="Header">
+            <stringProp name="Header.name">X-Requested-With</stringProp>
+            <stringProp name="Header.value">XMLHttpRequest</stringProp>
+          </elementProp>
+          <elementProp name="Accept" elementType="Header">
+            <stringProp name="Header.name">Accept</stringProp>
+            <stringProp name="Header.value">application/json</stringProp>
+          </elementProp>
+        </collectionProp>
+      </HeaderManager>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert success" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1494218646">{"payment_methods":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">true</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Checkout Payment Info/Place Order ${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">{"cartId":"${cart_id}","email":"test@example.com","paymentMethod":{"method":"checkmo","po_number":null,"additional_data":null},"billingAddress":{"countryId":"US","regionId":"12","regionCode":"CA","region":"California","street":["10441 Jefferson Blvd ste 200"],"company":"","telephone":"3109450345","fax":"","postcode":"90232","city":"Culver City","firstname":"Name","lastname":"Lastname"}}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}/rest/default/V1/guest-carts/${cart_id}/payment-information</stringProp>
+      <stringProp name="HTTPSampler.method">POST</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+        <collectionProp name="HeaderManager.headers">
+          <elementProp name="" elementType="Header">
+            <stringProp name="Header.name">Referer</stringProp>
+            <stringProp name="Header.value">${base_path}checkout/onepage/</stringProp>
+          </elementProp>
+          <elementProp name="Content-Type" elementType="Header">
+            <stringProp name="Header.name">Content-Type</stringProp>
+            <stringProp name="Header.value">application/json; charset=UTF-8</stringProp>
+          </elementProp>
+          <elementProp name="X-Requested-With" elementType="Header">
+            <stringProp name="Header.name">X-Requested-With</stringProp>
+            <stringProp name="Header.value">XMLHttpRequest</stringProp>
+          </elementProp>
+          <elementProp name="Accept" elementType="Header">
+            <stringProp name="Header.name">Accept</stringProp>
+            <stringProp name="Header.value">application/json</stringProp>
+          </elementProp>
+        </collectionProp>
+      </HeaderManager>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert success" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-297987887">"[0-9]+"</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <com.atlantbh.jmeter.plugins.jsonutils.jsonpathextractor.JSONPathExtractor guiclass="com.atlantbh.jmeter.plugins.jsonutils.jsonpathextractor.gui.JSONPathExtractorGui" testclass="com.atlantbh.jmeter.plugins.jsonutils.jsonpathextractor.JSONPathExtractor" testname="Extract cart id" enabled="true">
+        <stringProp name="VAR">order_id</stringProp>
+        <stringProp name="JSONPATH">$</stringProp>
+        <stringProp name="DEFAULT"/>
+        <stringProp name="VARIABLE"/>
+        <stringProp name="SUBJECT">BODY</stringProp>
+      </com.atlantbh.jmeter.plugins.jsonutils.jsonpathextractor.JSONPathExtractor>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="89649215">^\d+$</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">1</intProp>
+        <stringProp name="Assertion.scope">variable</stringProp>
+        <stringProp name="Scope.variable">order_id</stringProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Checkout success${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}checkout/onepage/success/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert success" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="494863233">Thank you for your purchase!</stringProp>
+          <stringProp name="1635682758">Your order # is</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  </hashTree>
+  
+    <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Checkout By Customer" enabled="true">
+      <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+      <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
+        <boolProp name="LoopController.continue_forever">false</boolProp>
+        <stringProp name="LoopController.loops">${loops}</stringProp>
+      </elementProp>
+      <stringProp name="ThreadGroup.num_threads">${__javaScript(Math.round(props.get("users")*${customer_checkout_percent}/100&gt;&gt;0))}</stringProp>
+      <stringProp name="ThreadGroup.ramp_time">${ramp_period}</stringProp>
+      <longProp name="ThreadGroup.start_time">1437177203000</longProp>
+      <longProp name="ThreadGroup.end_time">1437177203000</longProp>
+      <boolProp name="ThreadGroup.scheduler">false</boolProp>
+      <stringProp name="ThreadGroup.duration"/>
+      <stringProp name="ThreadGroup.delay"/>
+    </ThreadGroup>
+    <hashTree>
+    <RandomVariableConfig guiclass="TestBeanGUI" testclass="RandomVariableConfig" testname="Random Variable 1" enabled="true">
+      <stringProp name="variableName">rv1</stringProp>
+      <stringProp name="outputFormat">'.'</stringProp>
+      <stringProp name="minimumValue">1</stringProp>
+      <stringProp name="maximumValue">999999</stringProp>
+      <stringProp name="randomSeed">1</stringProp>
+      <boolProp name="perThread">true</boolProp>
+    </RandomVariableConfig>
+    <hashTree/>
+  
+    <RandomVariableConfig guiclass="TestBeanGUI" testclass="RandomVariableConfig" testname="Random Variable 2" enabled="true">
+      <stringProp name="variableName">rv2</stringProp>
+      <stringProp name="outputFormat">'.'</stringProp>
+      <stringProp name="minimumValue">1</stringProp>
+      <stringProp name="maximumValue">999999</stringProp>
+      <stringProp name="randomSeed">2</stringProp>
+      <boolProp name="perThread">true</boolProp>
+    </RandomVariableConfig>
+    <hashTree/>
+  
+    <RandomVariableConfig guiclass="TestBeanGUI" testclass="RandomVariableConfig" testname="Random Variable 3" enabled="true">
+      <stringProp name="variableName">rv3</stringProp>
+      <stringProp name="outputFormat">'.'</stringProp>
+      <stringProp name="minimumValue">1</stringProp>
+      <stringProp name="maximumValue">999999</stringProp>
+      <stringProp name="randomSeed">3</stringProp>
+      <boolProp name="perThread">true</boolProp>
+    </RandomVariableConfig>
+    <hashTree/>
+  
+    <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="Get arguments${__property(activeAdminThread)}(CustomerChkt)" enabled="true">
+      <stringProp name="TestPlan.comments">Passing arguments between threads</stringProp>
+      <stringProp name="BeanShellSampler.query">import org.apache.jmeter.samplers.SampleResult;
+
+number = (int)(${rv1} * props.get("simple_products_list").size());
+simpleList = props.get("simple_products_list").get(number);
+vars.put("simple_product_1_url_key", simpleList.get("url_key"));
+vars.put("simple_product_1_name", simpleList.get("title"));
+vars.put("simple_product_1_id", simpleList.get("id"));
+vars.put("simple_product_1_uenc", simpleList.get("uenc"));
+
+number1 = (int)(${rv2} * props.get("simple_products_list").size());
+simpleList = props.get("simple_products_list").get(number1);
+vars.put("simple_product_2_url_key", simpleList.get("url_key"));
+vars.put("simple_product_2_name", simpleList.get("title"));
+vars.put("simple_product_2_id", simpleList.get("id"));
+vars.put("simple_product_2_uenc", simpleList.get("uenc"));
+
+number = (int)(${rv3} * props.get("configurable_products_list").size());
+configurableList = props.get("configurable_products_list").get(number);
+vars.put("configurable_product_1_url_key", configurableList.get("url_key"));
+vars.put("configurable_product_1_name", configurableList.get("title"));
+vars.put("configurable_product_1_id", configurableList.get("id"));
+vars.put("configurable_attribute_id", configurableList.get("attribute_id"));
+vars.put("configurable_option_id", configurableList.get("attribute_option_id"));
+vars.put("configurable_product_1_uenc", simpleList.get("uenc"));
+
+vars.put("category_url_key", props.get("category_url_key"));
+vars.put("category_name", props.get("category_name"));
+
+emails_index = 0;
+if (!props.containsKey("customer_emails_index")) {
+	props.put("customer_emails_index", emails_index);
+}
+
+try {
+	emails_index = props.get("customer_emails_index");
+	emails_list = props.get("customer_emails_list");
+	if (emails_index == emails_list.size()) {
+		emails_index=0;
+	}
+	vars.put("customer_email", emails_list.get(emails_index));
+	props.put("customer_emails_index", ++emails_index);
+}
+catch (java.lang.Exception e) {
+	   log.error("Caught Exception in 'Customer Checkout' thread.");
+        log.info("Using default email address - user_1@example.com");
+        vars.put("customer_email", "user_1@example.com");
+}
+vars.put("testLabel", "CustomerChkt");
+vars.put("loadType", "Customer");</stringProp>
+      <stringProp name="BeanShellSampler.filename"/>
+      <stringProp name="BeanShellSampler.parameters"/>
+      <boolProp name="BeanShellSampler.resetInterpreter">true</boolProp>
+    </BeanShellSampler>
+    <hashTree/>
+  
+      <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Open Home Page${__property(activeAdminThread)}(${testLabel})" enabled="true">
+        <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+          <collectionProp name="Arguments.arguments"/>
+        </elementProp>
+        <stringProp name="HTTPSampler.domain"/>
+        <stringProp name="HTTPSampler.port"/>
+        <stringProp name="HTTPSampler.connect_timeout"/>
+        <stringProp name="HTTPSampler.response_timeout"/>
+        <stringProp name="HTTPSampler.protocol"/>
+        <stringProp name="HTTPSampler.contentEncoding"/>
+        <stringProp name="HTTPSampler.path">${base_path}</stringProp>
+        <stringProp name="HTTPSampler.method">GET</stringProp>
+        <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+        <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+        <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+        <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+        <boolProp name="HTTPSampler.monitor">false</boolProp>
+        <stringProp name="HTTPSampler.embedded_url_re"/>
+      </HTTPSamplerProxy>
+      <hashTree>
+        <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+          <collectionProp name="Asserion.test_strings">
+            <stringProp name="571386695">&lt;title&gt;Home page&lt;/title&gt;</stringProp>
+          </collectionProp>
+          <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+          <boolProp name="Assertion.assume_success">false</boolProp>
+          <intProp name="Assertion.test_type">2</intProp>
+        </ResponseAssertion>
+        <hashTree/>
+      </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer All Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value"/>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-2001627678">\"messages\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Open Login Page${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/account/login/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="637394530">&lt;title&gt;Customer Login&lt;/title&gt;</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Ajax Load Login Form${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="blocks" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">["customer_form_login"]</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">blocks</stringProp>
+          </elementProp>
+          <elementProp name="handles" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">["default","customer_account_login"]</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">handles</stringProp>
+          </elementProp>
+          <elementProp name="originalRequest" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">{"route":"customer","controller":"account","action":"login","uri":"/customer/account/login/"}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">originalRequest</stringProp>
+          </elementProp>
+          <elementProp name="ajax" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">true</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">ajax</stringProp>
+          </elementProp>
+          <elementProp name="isAjax" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">true</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">isAjax</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}page_cache/block/render/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="940598773">"customer_form_login"</stringProp>
+          <stringProp name="1951684663">Registered Customers</stringProp>
+          <stringProp name="474011748">form_key</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form key" enabled="true">
+        <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+        <stringProp name="RegexExtractor.refname">form_key</stringProp>
+        <stringProp name="RegexExtractor.regex">&lt;input name=\\"form_key\\" type=\\"hidden\\" value=\\"([^'"]+)\\" \\/&gt;</stringProp>
+        <stringProp name="RegexExtractor.template">$1$</stringProp>
+        <stringProp name="RegexExtractor.default"/>
+        <stringProp name="RegexExtractor.match_number">1</stringProp>
+      </RegexExtractor>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_key extracted" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="2845929">^.+$</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">1</intProp>
+        <stringProp name="Assertion.scope">variable</stringProp>
+        <stringProp name="Scope.variable">form_key</stringProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Login${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="form_key" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">${form_key}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">form_key</stringProp>
+          </elementProp>
+          <elementProp name="login[username]" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">${customer_email}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">login[username]</stringProp>
+          </elementProp>
+          <elementProp name="login[password]" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">${customer_password}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">login[password]</stringProp>
+          </elementProp>
+          <elementProp name="send" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value"/>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">send</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/account/loginPost/</stringProp>
+      <stringProp name="HTTPSampler.method">POST</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="1312950388">&lt;title&gt;My Account&lt;/title&gt;</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Open Category${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}${category_url_key}${url_suffix}</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="1210004667">&lt;span class="base" data-ui-id="page-title"&gt;${category_name}&lt;/span&gt;</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">6</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Regular Expression Extractor: Extract category id" enabled="true">
+        <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+        <stringProp name="RegexExtractor.refname">category_id</stringProp>
+        <stringProp name="RegexExtractor.regex">&lt;li class="item category([^'"]+)"&gt;\s*&lt;strong&gt;${category_name}&lt;/strong&gt;\s*&lt;/li&gt;</stringProp>
+        <stringProp name="RegexExtractor.template">$1$</stringProp>
+        <stringProp name="RegexExtractor.default"/>
+        <stringProp name="RegexExtractor.match_number">1</stringProp>
+        <stringProp name="Scope.variable">simple_product_1_url_key</stringProp>
+      </RegexExtractor>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion: Assert category id" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="1191417111">^[0-9]+$</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">1</intProp>
+        <stringProp name="Assertion.scope">variable</stringProp>
+        <stringProp name="Scope.variable">category_id</stringProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 1 View${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}${simple_product_1_url_key}${url_suffix}</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="1254853024">&lt;title&gt;${simple_product_1_name}</stringProp>
+          <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Ajax Review Simple Product 1(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}review/product/listAjax/id/${simple_product_1_id}/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="49586">200</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 1 Add To Cart${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="product" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${simple_product_1_id}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">product</stringProp>
+          </elementProp>
+          <elementProp name="related_product" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value"/>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">related_product</stringProp>
+          </elementProp>
+          <elementProp name="qty" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">1</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">qty</stringProp>
+          </elementProp>
+          <elementProp name="form_key" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${form_key}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">form_key</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}checkout/cart/add/uenc/${simple_product_1_uenc}/product/${simple_product_1_id}/</stringProp>
+      <stringProp name="HTTPSampler.method">POST</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+
+    <hashTree>
+    <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+      <collectionProp name="HeaderManager.headers">
+        <elementProp name="" elementType="Header">
+          <stringProp name="Header.name">X-Requested-With</stringProp>
+          <stringProp name="Header.value">XMLHttpRequest</stringProp>
+        </elementProp>
+      </collectionProp>
+    </HeaderManager>
+    <hashTree/>
+  </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Load ${loadType}${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">cart,banner,messages</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">true</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+    <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+      <collectionProp name="HeaderManager.headers">
+        <elementProp name="" elementType="Header">
+          <stringProp name="Header.name">X-Requested-With</stringProp>
+          <stringProp name="Header.value">XMLHttpRequest</stringProp>
+        </elementProp>
+      </collectionProp>
+    </HeaderManager>
+    <hashTree/>
+  
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="210217247">You added ${simple_product_1_name} to your shopping cart.</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="2057973164">This product is out of stock.</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">6</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-350323027">\"summary_count\":1</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 2 View${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}${simple_product_2_url_key}${url_suffix}</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="2142356705">&lt;title&gt;${simple_product_2_name}</stringProp>
+          <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Ajax Review Simple Product 2(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}review/product/listAjax/id/${simple_product_2_id}/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="49586">200</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 2 Add To Cart${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="product" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${simple_product_2_id}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">product</stringProp>
+          </elementProp>
+          <elementProp name="related_product" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value"/>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">related_product</stringProp>
+          </elementProp>
+          <elementProp name="qty" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">1</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">qty</stringProp>
+          </elementProp>
+          <elementProp name="form_key" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${form_key}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">form_key</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}checkout/cart/add/uenc/${simple_product_2_uenc}/product/${simple_product_2_id}/</stringProp>
+      <stringProp name="HTTPSampler.method">POST</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+    <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+      <collectionProp name="HeaderManager.headers">
+        <elementProp name="" elementType="Header">
+          <stringProp name="Header.name">X-Requested-With</stringProp>
+          <stringProp name="Header.value">XMLHttpRequest</stringProp>
+        </elementProp>
+      </collectionProp>
+    </HeaderManager>
+    <hashTree/>
+  </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Load ${loadType}2${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">cart,banner,messages</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+            <stringProp name="Argument.desc">true</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">true</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+            <stringProp name="Argument.desc">true</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+            <stringProp name="Argument.desc">true</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+    <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+      <collectionProp name="HeaderManager.headers">
+        <elementProp name="" elementType="Header">
+          <stringProp name="Header.name">X-Requested-With</stringProp>
+          <stringProp name="Header.value">XMLHttpRequest</stringProp>
+        </elementProp>
+      </collectionProp>
+    </HeaderManager>
+    <hashTree/>
+  
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="221533374">You added ${simple_product_2_name} to your shopping cart.</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="2057973164">This product is out of stock.</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">6</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-350323026">\"summary_count\":2</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Configurable Product 1 View${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}${configurable_product_1_url_key}${url_suffix}</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="199922279">&lt;title&gt;${configurable_product_1_name}</stringProp>
+          <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Ajax Review Configurable Product 1(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}review/product/listAjax/id/${configurable_product_1_id}/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="49586">200</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Configurable Product 1 Add To Cart${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="product" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${configurable_product_1_id}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">product</stringProp>
+          </elementProp>
+          <elementProp name="related_product" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value"/>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">related_product</stringProp>
+          </elementProp>
+          <elementProp name="qty" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">1</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">qty</stringProp>
+          </elementProp>
+          <elementProp name="super_attribute[${configurable_attribute_id}]" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${configurable_option_id}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">super_attribute[${configurable_attribute_id}]</stringProp>
+          </elementProp>
+          <elementProp name="form_key" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${form_key}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">form_key</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}checkout/cart/add/uenc/${configurable_product_1_uenc}/product/${configurable_product_1_id}/</stringProp>
+      <stringProp name="HTTPSampler.method">POST</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+    <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+      <collectionProp name="HeaderManager.headers">
+        <elementProp name="" elementType="Header">
+          <stringProp name="Header.name">X-Requested-With</stringProp>
+          <stringProp name="Header.value">XMLHttpRequest</stringProp>
+        </elementProp>
+      </collectionProp>
+    </HeaderManager>
+    <hashTree/>
+  </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Load ${loadType}3${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">cart,banner,messages</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
+            <stringProp name="Argument.desc">true</stringProp>
+          </elementProp>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">true</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+            <stringProp name="Argument.desc">true</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+            <stringProp name="Argument.desc">true</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+    <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+      <collectionProp name="HeaderManager.headers">
+        <elementProp name="" elementType="Header">
+          <stringProp name="Header.name">X-Requested-With</stringProp>
+          <stringProp name="Header.value">XMLHttpRequest</stringProp>
+        </elementProp>
+      </collectionProp>
+    </HeaderManager>
+    <hashTree/>
+  
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1346272328">You added ${configurable_product_1_name} to your shopping cart.</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-108122347">We don't have as many &amp;quot;${configurable_product_1_name}&amp;quot; as you requested.</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">6</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-350323025">\"summary_count\":3</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Checkout start${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}checkout/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1403911775">&lt;title&gt;Checkout&lt;/title&gt;</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-179817969">&lt;title&gt;Shopping Cart&lt;/title&gt;</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">6</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract Cart Id" enabled="true">
+        <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+        <stringProp name="RegexExtractor.refname">cart_id</stringProp>
+        <stringProp name="RegexExtractor.regex">"quoteData":{"entity_id":"([^'"]+)",</stringProp>
+        <stringProp name="RegexExtractor.template">$1$</stringProp>
+        <stringProp name="RegexExtractor.default"/>
+        <stringProp name="RegexExtractor.match_number">1</stringProp>
+      </RegexExtractor>
+      <hashTree/>
+      <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form key" enabled="true">
+        <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+        <stringProp name="RegexExtractor.refname">form_key</stringProp>
+        <stringProp name="RegexExtractor.regex">&lt;input name="form_key" type="hidden" value="([^'"]+)" /&gt;</stringProp>
+        <stringProp name="RegexExtractor.template">$1$</stringProp>
+        <stringProp name="RegexExtractor.default"/>
+        <stringProp name="RegexExtractor.match_number">1</stringProp>
+      </RegexExtractor>
+      <hashTree/>
+      <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract Address Id" enabled="true">
+        <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+        <stringProp name="RegexExtractor.refname">address_id</stringProp>
+        <stringProp name="RegexExtractor.regex">"default_billing":"([^'"]+)",</stringProp>
+        <stringProp name="RegexExtractor.template">$1$</stringProp>
+        <stringProp name="RegexExtractor.default"/>
+        <stringProp name="RegexExtractor.match_number">1</stringProp>
+      </RegexExtractor>
+      <hashTree/>
+      <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract Customer Id" enabled="true">
+        <stringProp name="RegexExtractor.useHeaders">false</stringProp>
+        <stringProp name="RegexExtractor.refname">customer_id</stringProp>
+        <stringProp name="RegexExtractor.regex">"customer_id":([^'",]+),</stringProp>
+        <stringProp name="RegexExtractor.template">$1$</stringProp>
+        <stringProp name="RegexExtractor.default"/>
+        <stringProp name="RegexExtractor.match_number">1</stringProp>
+      </RegexExtractor>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert Cart Id extracted" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="2845929">^.+$</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">1</intProp>
+        <stringProp name="Assertion.scope">variable</stringProp>
+        <stringProp name="Scope.variable">cart_id</stringProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_key extracted" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="2845929">^.+$</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">1</intProp>
+        <stringProp name="Assertion.scope">variable</stringProp>
+        <stringProp name="Scope.variable">form_key</stringProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert Address Id extracted" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="576002869">[0-9]+$</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">1</intProp>
+        <stringProp name="Assertion.scope">variable</stringProp>
+        <stringProp name="Scope.variable">address_id</stringProp>
+      </ResponseAssertion>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert Customer Id extracted" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="576002869">[0-9]+$</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">1</intProp>
+        <stringProp name="Assertion.scope">variable</stringProp>
+        <stringProp name="Scope.variable">customer_id</stringProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${simple_product_2_form_action}</stringProp>
-          <stringProp name="HTTPSampler.method">POST</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="221533374">You added ${simple_product_2_name} to your shopping cart.</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="518066445">&lt;div&gt;* This product is out of stock.&lt;/div&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">6</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Configurable Product 1 View(GuestChkt)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}${configurable_product_1_url_key}${url_suffix}</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="199922279">&lt;title&gt;${configurable_product_1_name}</stringProp>
-              <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form action" enabled="true">
-            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
-            <stringProp name="RegexExtractor.refname">configurable_product_form_action</stringProp>
-            <stringProp name="RegexExtractor.regex">&lt;form action=&quot;([^&apos;&quot;]+)&quot;\s*method=&quot;post&quot;\s*id=&quot;product_addtocart_form&quot;&gt;</stringProp>
-            <stringProp name="RegexExtractor.template">$1$</stringProp>
-            <stringProp name="RegexExtractor.default"></stringProp>
-            <stringProp name="RegexExtractor.match_number">1</stringProp>
-          </RegexExtractor>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_action extracted" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="2845929">^.+$</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">1</intProp>
-            <stringProp name="Assertion.scope">variable</stringProp>
-            <stringProp name="Scope.variable">configurable_product_form_action</stringProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Configurable Product 1 Add To Cart(GuestChkt)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="product" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">${configurable_product_1_id}</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">product</stringProp>
-              </elementProp>
-              <elementProp name="related_product" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">related_product</stringProp>
-              </elementProp>
-              <elementProp name="qty" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">1</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">qty</stringProp>
-              </elementProp>
-              <elementProp name="super_attribute[${configurable_attribute_id}]" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">${configurable_option_id}</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">super_attribute[${configurable_attribute_id}]</stringProp>
-              </elementProp>
-              <elementProp name="isAjax" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">true</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">isAjax</stringProp>
-              </elementProp>
-              <elementProp name="ajax" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">true</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">ajax</stringProp>
-              </elementProp>
-            </collectionProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${configurable_product_form_action}</stringProp>
-          <stringProp name="HTTPSampler.method">POST</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="-1346272328">You added ${configurable_product_1_name} to your shopping cart.</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="-815931116">&lt;div&gt;* We don&apos;t have as many &amp;quot;${configurable_product_1_name}&amp;quot; as you requested.&lt;/div&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">6</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Checkout start(GuestChkt)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Checkout Billing/Shipping Information${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">{"addressInformation":{"shipping_address":{"customerAddressId":"${address_id}","countryId":"US","regionId":5,"regionCode":"AR","region":"Arkansas","customerId":"${customer_id}","street":["123 Freedom Blvd. #123"],"telephone":"022-333-4455","postcode":"123123","city":"Fayetteville","firstname":"Anthony","lastname":"Nealy"},"shipping_method_code":"flatrate","shipping_carrier_code":"flatrate"}}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}checkout/index/</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="-1403911775">&lt;title&gt;Checkout&lt;/title&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="-179817969">&lt;title&gt;Shopping Cart&lt;/title&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">6</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract Cart Id" enabled="true">
-            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
-            <stringProp name="RegexExtractor.refname">cart_id</stringProp>
-            <stringProp name="RegexExtractor.regex">&quot;quoteData&quot;:{&quot;entity_id&quot;:&quot;([^&apos;&quot;]+)&quot;,</stringProp>
-            <stringProp name="RegexExtractor.template">$1$</stringProp>
-            <stringProp name="RegexExtractor.default"></stringProp>
-            <stringProp name="RegexExtractor.match_number">1</stringProp>
-          </RegexExtractor>
-          <hashTree/>
-          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form key" enabled="true">
-            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
-            <stringProp name="RegexExtractor.refname">form_key</stringProp>
-            <stringProp name="RegexExtractor.regex">&lt;input name=&quot;form_key&quot; type=&quot;hidden&quot; value=&quot;([^&apos;&quot;]+)&quot; /&gt;</stringProp>
-            <stringProp name="RegexExtractor.template">$1$</stringProp>
-            <stringProp name="RegexExtractor.default"></stringProp>
-            <stringProp name="RegexExtractor.match_number">1</stringProp>
-          </RegexExtractor>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert Cart Id extracted" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="2845929">^.+$</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">1</intProp>
-            <stringProp name="Assertion.scope">variable</stringProp>
-            <stringProp name="Scope.variable">cart_id</stringProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_key extracted" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="2845929">^.+$</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">1</intProp>
-            <stringProp name="Assertion.scope">variable</stringProp>
-            <stringProp name="Scope.variable">form_key</stringProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Checkout shipping information" enabled="true">
-          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">{&quot;addressInformation&quot;:{&quot;shipping_address&quot;:{&quot;countryId&quot;:&quot;US&quot;,&quot;regionId&quot;:&quot;12&quot;,&quot;regionCode&quot;:&quot;CA&quot;,&quot;region&quot;&#xd;
-:&quot;California&quot;,&quot;street&quot;:[&quot;10441 Jefferson Blvd&quot;,&quot;ste 200&quot;],&quot;company&quot;:&quot;&quot;,&quot;telephone&quot;:&quot;1-310-945-0345&quot;,&quot;fax&quot;&#xd;
-:&quot;&quot;,&quot;postcode&quot;:&quot;90232&quot;,&quot;city&quot;:&quot;Culver City&quot;,&quot;firstname&quot;:&quot;Firstname&quot;,&quot;lastname&quot;:&quot;Lastname&quot;,&quot;saveInAddressBook&quot;&#xd;
-:false},&quot;shipping_method_code&quot;:&quot;flatrate&quot;,&quot;shipping_carrier_code&quot;:&quot;flatrate&quot;}}</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-              </elementProp>
-            </collectionProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}/rest/default/V1/carts/mine/shipping-information</stringProp>
+      <stringProp name="HTTPSampler.method">POST</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+        <collectionProp name="HeaderManager.headers">
+          <elementProp name="" elementType="Header">
+            <stringProp name="Header.name">Referer</stringProp>
+            <stringProp name="Header.value">${host}${base_path}checkout/onepage</stringProp>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}rest/default/V1/carts/${cart_id}/shipping-information</stringProp>
-          <stringProp name="HTTPSampler.method">POST</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
-            <collectionProp name="HeaderManager.headers">
-              <elementProp name="" elementType="Header">
-                <stringProp name="Header.name">Referer</stringProp>
-                <stringProp name="Header.value">http://mage2.com/checkout/index/</stringProp>
-              </elementProp>
-              <elementProp name="Content-Type" elementType="Header">
-                <stringProp name="Header.name">Content-Type</stringProp>
-                <stringProp name="Header.value">application/json; charset=UTF-8</stringProp>
-              </elementProp>
-              <elementProp name="X-Requested-With" elementType="Header">
-                <stringProp name="Header.name">X-Requested-With</stringProp>
-                <stringProp name="Header.value">XMLHttpRequest</stringProp>
-              </elementProp>
-              <elementProp name="Accept" elementType="Header">
-                <stringProp name="Header.name">Accept</stringProp>
-                <stringProp name="Header.value">application/json</stringProp>
-              </elementProp>
-            </collectionProp>
-          </HeaderManager>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert success" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="-1494218646">{&quot;payment_methods&quot;:</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Checkout payment information" enabled="true">
-          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">{&quot;cartId&quot;:&quot;${cart_id}&quot;,&quot;email&quot;:&quot;user@example.com&quot;,&quot;paymentMethod&quot;:{&quot;method&quot;:&quot;checkmo&quot;,&quot;po_number&quot;:null,&quot;cc_owner&quot;:null,&quot;cc_number&quot;:null,&quot;cc_type&quot;:null,&quot;cc_exp_year&quot;:null,&quot;cc_exp_month&quot;:null,&quot;additional_data&quot;:null},&quot;billingAddress&quot;:{&quot;countryId&quot;&#xd;
-:&quot;US&quot;,&quot;regionId&quot;:&quot;12&quot;,&quot;regionCode&quot;:&quot;CA&quot;,&quot;region&quot;:&quot;California&quot;,&quot;street&quot;:[&quot;10441 Jefferson Blvd&quot;,&quot;ste 200&quot;&#xd;
-],&quot;company&quot;:&quot;&quot;,&quot;telephone&quot;:&quot;1-310-945-0345&quot;,&quot;fax&quot;:&quot;&quot;,&quot;postcode&quot;:&quot;90232&quot;,&quot;city&quot;:&quot;Culver City&quot;,&quot;firstname&quot;&#xd;
-:&quot;Firstname&quot;,&quot;lastname&quot;:&quot;Lastname&quot;,&quot;saveInAddressBook&quot;:false}}</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-              </elementProp>
-            </collectionProp>
+          <elementProp name="Content-Type" elementType="Header">
+            <stringProp name="Header.name">Content-Type</stringProp>
+            <stringProp name="Header.value">application/json; charset=UTF-8</stringProp>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}rest/default/V1/guest-carts/${cart_id}/payment-information</stringProp>
-          <stringProp name="HTTPSampler.method">POST</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
-            <collectionProp name="HeaderManager.headers">
-              <elementProp name="" elementType="Header">
-                <stringProp name="Header.name">Referer</stringProp>
-                <stringProp name="Header.value">http://mage2.com/checkout/index/</stringProp>
-              </elementProp>
-              <elementProp name="" elementType="Header">
-                <stringProp name="Header.name">Content-Type</stringProp>
-                <stringProp name="Header.value">application/json; charset=UTF-8 </stringProp>
-              </elementProp>
-              <elementProp name="" elementType="Header">
-                <stringProp name="Header.name">Accept</stringProp>
-                <stringProp name="Header.value">application/json</stringProp>
-              </elementProp>
-              <elementProp name="" elementType="Header">
-                <stringProp name="Header.name">X-Requested-With</stringProp>
-                <stringProp name="Header.value">XMLHttpRequest</stringProp>
-              </elementProp>
-            </collectionProp>
-          </HeaderManager>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert success" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="-1412623327">^&quot;\d+&quot;$</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">1</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Checkout success(GuestChkt)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
+          <elementProp name="X-Requested-With" elementType="Header">
+            <stringProp name="Header.name">X-Requested-With</stringProp>
+            <stringProp name="Header.value">XMLHttpRequest</stringProp>
+          </elementProp>
+          <elementProp name="Accept" elementType="Header">
+            <stringProp name="Header.name">Accept</stringProp>
+            <stringProp name="Header.value">application/json</stringProp>
+          </elementProp>
+        </collectionProp>
+      </HeaderManager>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert success" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-740937264">{"payment_methods"</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}checkout/onepage/success/</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert success" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="494863233">Thank you for your purchase!</stringProp>
-              <stringProp name="1635682758">Your order # is</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-      </hashTree>
-      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Customer Checkout" enabled="true">
-        <stringProp name="ThreadGroup.on_sample_error">startnextloop</stringProp>
-        <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
-          <boolProp name="LoopController.continue_forever">false</boolProp>
-          <stringProp name="LoopController.loops">${loops}</stringProp>
-        </elementProp>
-        <stringProp name="ThreadGroup.num_threads">${__javaScript(Math.round(props.get(&quot;users&quot;)*${customer_checkout_percent}/100&gt;&gt;0))}</stringProp>
-        <stringProp name="ThreadGroup.ramp_time">${ramp_period}</stringProp>
-        <longProp name="ThreadGroup.start_time">1304708488000</longProp>
-        <longProp name="ThreadGroup.end_time">1304708488000</longProp>
-        <boolProp name="ThreadGroup.scheduler">false</boolProp>
-        <stringProp name="ThreadGroup.duration"></stringProp>
-        <stringProp name="ThreadGroup.delay"></stringProp>
-      </ThreadGroup>
-      <hashTree>
-        <CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie Manager" enabled="true">
-          <collectionProp name="CookieManager.cookies">
-            <elementProp name="product_list_limit" elementType="Cookie" testname="product_list_limit">
-              <stringProp name="Cookie.value">30</stringProp>
-              <stringProp name="Cookie.domain">${host}</stringProp>
-              <stringProp name="Cookie.path">/</stringProp>
-              <boolProp name="Cookie.secure">false</boolProp>
-              <longProp name="Cookie.expires">0</longProp>
-              <boolProp name="Cookie.path_specified">true</boolProp>
-              <boolProp name="Cookie.domain_specified">true</boolProp>
-            </elementProp>
-          </collectionProp>
-          <boolProp name="CookieManager.clearEachIteration">true</boolProp>
-        </CookieManager>
-        <hashTree/>
-        <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="Get arguments(CustomerChkt)" enabled="true">
-          <stringProp name="TestPlan.comments">Passing arguments between threads</stringProp>
-          <stringProp name="BeanShellSampler.query">import org.apache.jmeter.samplers.SampleResult;
-
-number = (int)(Math.random() * props.get(&quot;simple_products_list&quot;).size());
-simpleList = props.get(&quot;simple_products_list&quot;).get(number);
-vars.put(&quot;simple_product_1_url_key&quot;, simpleList.get(&quot;url_key&quot;));
-vars.put(&quot;simple_product_1_name&quot;, simpleList.get(&quot;title&quot;));
-vars.put(&quot;simple_product_1_id&quot;, simpleList.get(&quot;id&quot;));
-
-do {
-    number1 = (int)(Math.random() * props.get(&quot;simple_products_list&quot;).size());
-} while(number == number1);
-simpleList = props.get(&quot;simple_products_list&quot;).get(number1);
-vars.put(&quot;simple_product_2_url_key&quot;, simpleList.get(&quot;url_key&quot;));
-vars.put(&quot;simple_product_2_name&quot;, simpleList.get(&quot;title&quot;));
-vars.put(&quot;simple_product_2_id&quot;, simpleList.get(&quot;id&quot;));
-
-number = (int)(Math.random() * props.get(&quot;configurable_products_list&quot;).size());
-configurableList = props.get(&quot;configurable_products_list&quot;).get(number);
-vars.put(&quot;configurable_product_1_url_key&quot;, configurableList.get(&quot;url_key&quot;));
-vars.put(&quot;configurable_product_1_name&quot;, configurableList.get(&quot;title&quot;));
-vars.put(&quot;configurable_product_1_id&quot;, configurableList.get(&quot;id&quot;));
-vars.put(&quot;configurable_attribute_id&quot;, configurableList.get(&quot;attribute_id&quot;));
-vars.put(&quot;configurable_option_id&quot;, configurableList.get(&quot;attribute_option_id&quot;));
-
-vars.put(&quot;category_url_key&quot;, props.get(&quot;category_url_key&quot;));
-vars.put(&quot;category_name&quot;, props.get(&quot;category_name&quot;));
-
-emailsCount = props.get(&quot;customer_emails_list&quot;).size();
-print(emailsCount);
-if (emailsCount &lt; 1) {
-    log.error(&quot;You have to increase customers qty for running &apos;Customer Checkout&apos; thread.&quot;);
-    System.out.println(&quot;You have to increase customers qty for running &apos;Customer Checkout&apos; thread.&quot;);
-    SampleResult.setStopTest(true);
-} else {
-    emails = props.get(&quot;customer_emails_list&quot;);
-    email = emails.get(emailsCount - 1);
-    emails.remove(email);
-    props.put(&quot;customer_emails_list&quot;, emails);
-    vars.put(&quot;customer_email&quot;, email);
-}</stringProp>
-          <stringProp name="BeanShellSampler.filename"></stringProp>
-          <stringProp name="BeanShellSampler.parameters"></stringProp>
-          <boolProp name="BeanShellSampler.resetInterpreter">true</boolProp>
-        </BeanShellSampler>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Open Home Page(CustomerChkt)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">true</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="571386695">&lt;title&gt;Home page&lt;/title&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Open Category(CustomerChkt)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}${category_url_key}${url_suffix}</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="1210004667">&lt;span class=&quot;base&quot; data-ui-id=&quot;page-title&quot;&gt;${category_name}&lt;/span&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">6</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 1 View(CustomerChkt)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Checkout Payment Info/Place Order${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">{"cartId":"${cart_id}","paymentMethod":{"method":"checkmo","po_number":null,"additional_data":null},"billingAddress":{"customerAddressId":"${address_id}","countryId":"US","regionId":5,"regionCode":"AR","region":"Arkansas","customerId":"${customer_id}","street":["123 Freedom Blvd. #123"],"telephone":"022-333-4455","postcode":"123123","city":"Fayetteville","firstname":"Anthony","lastname":"Nealy"}}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}${simple_product_1_url_key}${url_suffix}</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="1254853024">&lt;title&gt;${simple_product_1_name}</stringProp>
-              <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form action" enabled="true">
-            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
-            <stringProp name="RegexExtractor.refname">simple_product_1_form_action</stringProp>
-            <stringProp name="RegexExtractor.regex">&lt;form action=&quot;([^&apos;&quot;]+)&quot;\s*method=&quot;post&quot;\s*id=&quot;product_addtocart_form&quot;&gt;</stringProp>
-            <stringProp name="RegexExtractor.template">$1$</stringProp>
-            <stringProp name="RegexExtractor.default"></stringProp>
-            <stringProp name="RegexExtractor.match_number">1</stringProp>
-          </RegexExtractor>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_action extracted" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="2845929">^.+$</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">1</intProp>
-            <stringProp name="Assertion.scope">variable</stringProp>
-            <stringProp name="Scope.variable">simple_product_1_form_action</stringProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 1 Add To Cart(CustomerChkt)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="product" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">${simple_product_1_id}</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">product</stringProp>
-              </elementProp>
-              <elementProp name="related_product" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">related_product</stringProp>
-              </elementProp>
-              <elementProp name="qty" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">1</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">qty</stringProp>
-              </elementProp>
-              <elementProp name="isAjax" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">true</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">isAjax</stringProp>
-              </elementProp>
-              <elementProp name="ajax" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">true</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">ajax</stringProp>
-              </elementProp>
-            </collectionProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}rest/default/V1/carts/mine/payment-information</stringProp>
+      <stringProp name="HTTPSampler.method">POST</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+        <collectionProp name="HeaderManager.headers">
+          <elementProp name="" elementType="Header">
+            <stringProp name="Header.name">Referer</stringProp>
+            <stringProp name="Header.value">${host}${base_path}checkout/onepage</stringProp>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${simple_product_1_form_action}</stringProp>
-          <stringProp name="HTTPSampler.method">POST</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="210217247">You added ${simple_product_1_name} to your shopping cart.</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="518066445">&lt;div&gt;* This product is out of stock.&lt;/div&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">6</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 2 View(CustomerChkt)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
+          <elementProp name="" elementType="Header">
+            <stringProp name="Header.name">Content-Type</stringProp>
+            <stringProp name="Header.value">application/json; charset=UTF-8 </stringProp>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}${simple_product_2_url_key}${url_suffix}</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="2142356705">&lt;title&gt;${simple_product_2_name}</stringProp>
-              <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form action" enabled="true">
-            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
-            <stringProp name="RegexExtractor.refname">simple_product_2_form_action</stringProp>
-            <stringProp name="RegexExtractor.regex">&lt;form action=&quot;([^&apos;&quot;]+)&quot;\s*method=&quot;post&quot;\s*id=&quot;product_addtocart_form&quot;&gt;</stringProp>
-            <stringProp name="RegexExtractor.template">$1$</stringProp>
-            <stringProp name="RegexExtractor.default"></stringProp>
-            <stringProp name="RegexExtractor.match_number">1</stringProp>
-          </RegexExtractor>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_action extracted" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="2845929">^.+$</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">1</intProp>
-            <stringProp name="Assertion.scope">variable</stringProp>
-            <stringProp name="Scope.variable">simple_product_2_form_action</stringProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Simple Product 2 Add To Cart(CustomerChkt)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="product" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">${simple_product_2_id}</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">product</stringProp>
-              </elementProp>
-              <elementProp name="related_product" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value"></stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">related_product</stringProp>
-              </elementProp>
-              <elementProp name="qty" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">1</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">qty</stringProp>
-              </elementProp>
-              <elementProp name="isAjax" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">true</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">isAjax</stringProp>
-              </elementProp>
-              <elementProp name="ajax" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">true</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">ajax</stringProp>
-              </elementProp>
-            </collectionProp>
+          <elementProp name="" elementType="Header">
+            <stringProp name="Header.name">Accept</stringProp>
+            <stringProp name="Header.value">application/json</stringProp>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${simple_product_2_form_action}</stringProp>
-          <stringProp name="HTTPSampler.method">POST</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="221533374">You added ${simple_product_2_name} to your shopping cart.</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="518066445">&lt;div&gt;* This product is out of stock.&lt;/div&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">6</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Configurable Product 1 View(CustomerChkt)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
+          <elementProp name="" elementType="Header">
+            <stringProp name="Header.name">X-Requested-With</stringProp>
+            <stringProp name="Header.value">XMLHttpRequest</stringProp>
+          </elementProp>
+        </collectionProp>
+      </HeaderManager>
+      <hashTree/>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert order number" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-297987887">"[0-9]+"</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
+      <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
+      <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
+    </GaussianRandomTimer>
+    <hashTree/>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Checkout success${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments"/>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}checkout/onepage/success/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert success" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="494863233">Thank you for your purchase!</stringProp>
+          <stringProp name="-1590086334">Your order number is</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  
+    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Customer Section Load${__property(activeAdminThread)}(${testLabel})" enabled="true">
+      <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
+        <collectionProp name="Arguments.arguments">
+          <elementProp name="sections" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">sections</stringProp>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}${configurable_product_1_url_key}${url_suffix}</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="199922279">&lt;title&gt;${configurable_product_1_name}</stringProp>
-              <stringProp name="-1787050162">&lt;span&gt;In stock&lt;/span&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form action" enabled="true">
-            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
-            <stringProp name="RegexExtractor.refname">configurable_product_form_action</stringProp>
-            <stringProp name="RegexExtractor.regex">&lt;form action=&quot;([^&apos;&quot;]+)&quot;\s*method=&quot;post&quot;\s*id=&quot;product_addtocart_form&quot;&gt;</stringProp>
-            <stringProp name="RegexExtractor.template">$1$</stringProp>
-            <stringProp name="RegexExtractor.default"></stringProp>
-            <stringProp name="RegexExtractor.match_number">1</stringProp>
-          </RegexExtractor>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_action extracted" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="2845929">^.+$</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">1</intProp>
-            <stringProp name="Assertion.scope">variable</stringProp>
-            <stringProp name="Scope.variable">configurable_product_form_action</stringProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Configurable Product 1 Add To Cart(CustomerChkt)" enabled="true">
+          <elementProp name="update_section_id" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">true</boolProp>
+            <stringProp name="Argument.value">false</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">update_section_id</stringProp>
+          </elementProp>
+          <elementProp name="_" elementType="HTTPArgument">
+            <boolProp name="HTTPArgument.always_encode">false</boolProp>
+            <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
+            <stringProp name="Argument.metadata">=</stringProp>
+            <boolProp name="HTTPArgument.use_equals">true</boolProp>
+            <stringProp name="Argument.name">_</stringProp>
+          </elementProp>
+        </collectionProp>
+      </elementProp>
+      <stringProp name="HTTPSampler.domain"/>
+      <stringProp name="HTTPSampler.port"/>
+      <stringProp name="HTTPSampler.connect_timeout"/>
+      <stringProp name="HTTPSampler.response_timeout"/>
+      <stringProp name="HTTPSampler.protocol"/>
+      <stringProp name="HTTPSampler.contentEncoding"/>
+      <stringProp name="HTTPSampler.path">${base_path}customer/section/load/</stringProp>
+      <stringProp name="HTTPSampler.method">GET</stringProp>
+      <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+      <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+      <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+      <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+      <boolProp name="HTTPSampler.monitor">false</boolProp>
+      <stringProp name="HTTPSampler.embedded_url_re"/>
+    </HTTPSamplerProxy>
+    <hashTree>
+      <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
+        <collectionProp name="Asserion.test_strings">
+          <stringProp name="-1898134910">\"banner\":</stringProp>
+        </collectionProp>
+        <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+        <boolProp name="Assertion.assume_success">false</boolProp>
+        <intProp name="Assertion.test_type">2</intProp>
+      </ResponseAssertion>
+      <hashTree/>
+    </hashTree>
+  </hashTree>
+  
+    <PostThreadGroup guiclass="PostThreadGroupGui" testclass="PostThreadGroup" testname="tearDown Thread Group" enabled="true">
+      <stringProp name="ThreadGroup.on_sample_error">stoptest</stringProp>
+      <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
+        <boolProp name="LoopController.continue_forever">false</boolProp>
+        <stringProp name="LoopController.loops">1</stringProp>
+      </elementProp>
+      <stringProp name="ThreadGroup.num_threads">1</stringProp>
+      <stringProp name="ThreadGroup.ramp_time">1</stringProp>
+      <longProp name="ThreadGroup.start_time">1395324075000</longProp>
+      <longProp name="ThreadGroup.end_time">1395324075000</longProp>
+      <boolProp name="ThreadGroup.scheduler">false</boolProp>
+      <stringProp name="ThreadGroup.duration"/>
+      <stringProp name="ThreadGroup.delay"/>
+    </PostThreadGroup>
+    <hashTree>
+      <IfController guiclass="IfControllerPanel" testclass="IfController" testname="If Controller: Dashboard enabled?" enabled="true">
+        <stringProp name="IfController.condition">"${dashboard_enabled}" == "1"</stringProp>
+        <boolProp name="IfController.evaluateAll">false</boolProp>
+      </IfController>
+      <hashTree>
+        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Trigger End Event" enabled="true">
           <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
             <collectionProp name="Arguments.arguments">
-              <elementProp name="product" elementType="HTTPArgument">
+              <elementProp name="environment" elementType="HTTPArgument">
                 <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">${configurable_product_1_id}</stringProp>
+                <stringProp name="Argument.value">${__property(environment)}</stringProp>
                 <stringProp name="Argument.metadata">=</stringProp>
                 <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">product</stringProp>
+                <stringProp name="Argument.name">environment</stringProp>
               </elementProp>
-              <elementProp name="related_product" elementType="HTTPArgument">
+              <elementProp name="startTime" elementType="HTTPArgument">
                 <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value"></stringProp>
+                <stringProp name="Argument.value">${start_time}</stringProp>
                 <stringProp name="Argument.metadata">=</stringProp>
                 <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">related_product</stringProp>
+                <stringProp name="Argument.name">startTime</stringProp>
               </elementProp>
-              <elementProp name="qty" elementType="HTTPArgument">
+              <elementProp name="endTime" elementType="HTTPArgument">
                 <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">1</stringProp>
+                <stringProp name="Argument.value">${__time(yyyy-MM-dd'T'HH:mm:ss.SSSZ)}</stringProp>
                 <stringProp name="Argument.metadata">=</stringProp>
                 <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">qty</stringProp>
+                <stringProp name="Argument.name">endTime</stringProp>
               </elementProp>
-              <elementProp name="super_attribute[${configurable_attribute_id}]" elementType="HTTPArgument">
+              <elementProp name="stats_server" elementType="HTTPArgument">
                 <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">${configurable_option_id}</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">super_attribute[${configurable_attribute_id}]</stringProp>
-              </elementProp>
-              <elementProp name="isAjax" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">true</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">isAjax</stringProp>
-              </elementProp>
-              <elementProp name="ajax" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">true</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">ajax</stringProp>
-              </elementProp>
-            </collectionProp>
-          </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${configurable_product_form_action}</stringProp>
-          <stringProp name="HTTPSampler.method">POST</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="-1346272328">You added ${configurable_product_1_name} to your shopping cart.</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="-815931116">&lt;div&gt;* We don&apos;t have as many &amp;quot;${configurable_product_1_name}&amp;quot; as you requested.&lt;/div&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">6</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Checkout start(CustomerChkt)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
-          </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}checkout/index/</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="-1403911775">&lt;title&gt;Checkout&lt;/title&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="-179817969">&lt;title&gt;Shopping Cart&lt;/title&gt;</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">6</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract Cart Id" enabled="true">
-            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
-            <stringProp name="RegexExtractor.refname">cart_id</stringProp>
-            <stringProp name="RegexExtractor.regex">&quot;quoteData&quot;:{&quot;entity_id&quot;:&quot;([^&apos;&quot;]+)&quot;,</stringProp>
-            <stringProp name="RegexExtractor.template">$1$</stringProp>
-            <stringProp name="RegexExtractor.default"></stringProp>
-            <stringProp name="RegexExtractor.match_number">1</stringProp>
-          </RegexExtractor>
-          <hashTree/>
-          <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract form key" enabled="true">
-            <stringProp name="RegexExtractor.useHeaders">false</stringProp>
-            <stringProp name="RegexExtractor.refname">form_key</stringProp>
-            <stringProp name="RegexExtractor.regex">&lt;input name=&quot;form_key&quot; type=&quot;hidden&quot; value=&quot;([^&apos;&quot;]+)&quot; /&gt;</stringProp>
-            <stringProp name="RegexExtractor.template">$1$</stringProp>
-            <stringProp name="RegexExtractor.default"></stringProp>
-            <stringProp name="RegexExtractor.match_number">1</stringProp>
-          </RegexExtractor>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert Cart Id extracted" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="2845929">^.+$</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">1</intProp>
-            <stringProp name="Assertion.scope">variable</stringProp>
-            <stringProp name="Scope.variable">cart_id</stringProp>
-          </ResponseAssertion>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert form_key extracted" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="2845929">^.+$</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">1</intProp>
-            <stringProp name="Assertion.scope">variable</stringProp>
-            <stringProp name="Scope.variable">form_key</stringProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Login(CustomerChkt)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="context" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">true</boolProp>
-                <stringProp name="Argument.name">context</stringProp>
-                <stringProp name="Argument.value">checkout</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-              </elementProp>
-              <elementProp name="login[username]" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">true</boolProp>
-                <stringProp name="Argument.value">${customer_email}</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">login[username]</stringProp>
-              </elementProp>
-              <elementProp name="login[password]" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">true</boolProp>
-                <stringProp name="Argument.value">${customer_password}</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-                <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">login[password]</stringProp>
-              </elementProp>
-              <elementProp name="form_key" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">true</boolProp>
-                <stringProp name="Argument.value">${form_key}</stringProp>
+                <stringProp name="Argument.value">${redis_host}</stringProp>
                 <stringProp name="Argument.metadata">=</stringProp>
                 <boolProp name="HTTPArgument.use_equals">true</boolProp>
-                <stringProp name="Argument.name">form_key</stringProp>
-              </elementProp>
-            </collectionProp>
-          </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}customer/account/loginPost/</stringProp>
-          <stringProp name="HTTPSampler.method">POST</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree/>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Checkout shipping information" enabled="true">
-          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">{&quot;addressInformation&quot;:{&quot;shipping_address&quot;:{&quot;countryId&quot;:&quot;US&quot;,&quot;regionId&quot;:&quot;12&quot;,&quot;regionCode&quot;:&quot;CA&quot;,&quot;region&quot;&#xd;
-:&quot;California&quot;,&quot;street&quot;:[&quot;10441 Jefferson Blvd&quot;,&quot;ste 200&quot;],&quot;company&quot;:&quot;&quot;,&quot;telephone&quot;:&quot;1-310-945-0345&quot;,&quot;fax&quot;&#xd;
-:&quot;&quot;,&quot;postcode&quot;:&quot;90232&quot;,&quot;city&quot;:&quot;Culver City&quot;,&quot;firstname&quot;:&quot;Firstname&quot;,&quot;lastname&quot;:&quot;Lastname&quot;,&quot;saveInAddressBook&quot;&#xd;
-:false},&quot;shipping_method_code&quot;:&quot;flatrate&quot;,&quot;shipping_carrier_code&quot;:&quot;flatrate&quot;}}</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
-              </elementProp>
-            </collectionProp>
-          </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}rest/default/V1/carts/mine/shipping-information</stringProp>
-          <stringProp name="HTTPSampler.method">POST</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
-            <collectionProp name="HeaderManager.headers">
-              <elementProp name="" elementType="Header">
-                <stringProp name="Header.name">Referer</stringProp>
-                <stringProp name="Header.value">http://mage2.com/checkout/index/</stringProp>
-              </elementProp>
-              <elementProp name="Content-Type" elementType="Header">
-                <stringProp name="Header.name">Content-Type</stringProp>
-                <stringProp name="Header.value">application/json; charset=UTF-8</stringProp>
-              </elementProp>
-              <elementProp name="X-Requested-With" elementType="Header">
-                <stringProp name="Header.name">X-Requested-With</stringProp>
-                <stringProp name="Header.value">XMLHttpRequest</stringProp>
-              </elementProp>
-              <elementProp name="Accept" elementType="Header">
-                <stringProp name="Header.name">Accept</stringProp>
-                <stringProp name="Header.value">application/json</stringProp>
-              </elementProp>
-            </collectionProp>
-          </HeaderManager>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert success" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="-1494218646">{&quot;payment_methods&quot;:</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
-        <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Checkout payment information" enabled="true">
-          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
-            <collectionProp name="Arguments.arguments">
-              <elementProp name="" elementType="HTTPArgument">
-                <boolProp name="HTTPArgument.always_encode">false</boolProp>
-                <stringProp name="Argument.value">{&quot;cartId&quot;:&quot;${cart_id}&quot;,&quot;paymentMethod&quot;:{&quot;method&quot;:&quot;checkmo&quot;,&quot;po_number&quot;:null,&quot;cc_owner&quot;:null,&quot;cc_number&quot;:null&#xd;
-,&quot;cc_type&quot;:null,&quot;cc_exp_year&quot;:null,&quot;cc_exp_month&quot;:null,&quot;additional_data&quot;:null},&quot;billingAddress&quot;:{&quot;countryId&quot;&#xd;
-:&quot;US&quot;,&quot;regionId&quot;:&quot;12&quot;,&quot;regionCode&quot;:&quot;CA&quot;,&quot;region&quot;:&quot;California&quot;,&quot;street&quot;:[&quot;10441 Jefferson Blvd&quot;,&quot;ste 200&quot;&#xd;
-],&quot;company&quot;:&quot;&quot;,&quot;telephone&quot;:&quot;1-310-945-0345&quot;,&quot;fax&quot;:&quot;&quot;,&quot;postcode&quot;:&quot;90232&quot;,&quot;city&quot;:&quot;Culver City&quot;,&quot;firstname&quot;&#xd;
-:&quot;Firstname&quot;,&quot;lastname&quot;:&quot;Lastname&quot;,&quot;saveInAddressBook&quot;:false}}</stringProp>
-                <stringProp name="Argument.metadata">=</stringProp>
+                <stringProp name="Argument.name">stats_server</stringProp>
               </elementProp>
             </collectionProp>
           </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}rest/default/V1/carts/mine/payment-information</stringProp>
+          <stringProp name="HTTPSampler.domain"/>
+          <stringProp name="HTTPSampler.port"/>
+          <stringProp name="HTTPSampler.connect_timeout"/>
+          <stringProp name="HTTPSampler.response_timeout"/>
+          <stringProp name="HTTPSampler.protocol"/>
+          <stringProp name="HTTPSampler.contentEncoding"/>
+          <stringProp name="HTTPSampler.path">${base_path}DeploymentEvent.php</stringProp>
           <stringProp name="HTTPSampler.method">POST</stringProp>
           <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
           <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
           <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
           <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
           <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+          <stringProp name="HTTPSampler.embedded_url_re"/>
         </HTTPSamplerProxy>
-        <hashTree>
-          <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
-            <collectionProp name="HeaderManager.headers">
-              <elementProp name="" elementType="Header">
-                <stringProp name="Header.name">Referer</stringProp>
-                <stringProp name="Header.value">http://mage2.com/checkout/index/</stringProp>
-              </elementProp>
-              <elementProp name="" elementType="Header">
-                <stringProp name="Header.name">Content-Type</stringProp>
-                <stringProp name="Header.value">application/json; charset=UTF-8 </stringProp>
-              </elementProp>
-              <elementProp name="" elementType="Header">
-                <stringProp name="Header.name">Accept</stringProp>
-                <stringProp name="Header.value">application/json</stringProp>
-              </elementProp>
-              <elementProp name="" elementType="Header">
-                <stringProp name="Header.name">X-Requested-With</stringProp>
-                <stringProp name="Header.value">XMLHttpRequest</stringProp>
-              </elementProp>
-            </collectionProp>
-          </HeaderManager>
-          <hashTree/>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert success" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="-1412623327">^&quot;\d+&quot;$</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">1</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-        <GaussianRandomTimer guiclass="GaussianRandomTimerGui" testclass="GaussianRandomTimer" testname="Random Timer" enabled="true">
-          <stringProp name="ConstantTimer.delay">${think_time_delay_offset}</stringProp>
-          <stringProp name="RandomTimer.range">${think_time_deviation}</stringProp>
-        </GaussianRandomTimer>
         <hashTree/>
-        <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Checkout success(CustomerChkt)" enabled="true">
-          <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
-            <collectionProp name="Arguments.arguments"/>
-          </elementProp>
-          <stringProp name="HTTPSampler.domain"></stringProp>
-          <stringProp name="HTTPSampler.port"></stringProp>
-          <stringProp name="HTTPSampler.connect_timeout"></stringProp>
-          <stringProp name="HTTPSampler.response_timeout"></stringProp>
-          <stringProp name="HTTPSampler.protocol">http</stringProp>
-          <stringProp name="HTTPSampler.contentEncoding"></stringProp>
-          <stringProp name="HTTPSampler.path">${base_path}checkout/onepage/success/</stringProp>
-          <stringProp name="HTTPSampler.method">GET</stringProp>
-          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
-          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
-          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
-          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
-          <boolProp name="HTTPSampler.monitor">false</boolProp>
-          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
-        </HTTPSamplerProxy>
-        <hashTree>
-          <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert success" enabled="true">
-            <collectionProp name="Asserion.test_strings">
-              <stringProp name="494863233">Thank you for your purchase!</stringProp>
-              <stringProp name="-1590086334">Your order number is</stringProp>
-            </collectionProp>
-            <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
-            <boolProp name="Assertion.assume_success">false</boolProp>
-            <intProp name="Assertion.test_type">2</intProp>
-          </ResponseAssertion>
-          <hashTree/>
-        </hashTree>
-      </hashTree>
-      <PostThreadGroup guiclass="PostThreadGroupGui" testclass="PostThreadGroup" testname="tearDown Thread Group" enabled="true">
-        <stringProp name="ThreadGroup.on_sample_error">stoptest</stringProp>
-        <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
-          <boolProp name="LoopController.continue_forever">false</boolProp>
-          <stringProp name="LoopController.loops">1</stringProp>
-        </elementProp>
-        <stringProp name="ThreadGroup.num_threads">1</stringProp>
-        <stringProp name="ThreadGroup.ramp_time">1</stringProp>
-        <longProp name="ThreadGroup.start_time">1395324075000</longProp>
-        <longProp name="ThreadGroup.end_time">1395324075000</longProp>
-        <boolProp name="ThreadGroup.scheduler">false</boolProp>
-        <stringProp name="ThreadGroup.duration"></stringProp>
-        <stringProp name="ThreadGroup.delay"></stringProp>
-      </PostThreadGroup>
-      <hashTree>
-        <CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie Manager" enabled="true">
-          <collectionProp name="CookieManager.cookies">
-            <elementProp name="product_list_limit" elementType="Cookie" testname="product_list_limit">
-              <stringProp name="Cookie.value">30</stringProp>
-              <stringProp name="Cookie.domain">${host}</stringProp>
-              <stringProp name="Cookie.path">/</stringProp>
-              <boolProp name="Cookie.secure">false</boolProp>
-              <longProp name="Cookie.expires">0</longProp>
-              <boolProp name="Cookie.path_specified">true</boolProp>
-              <boolProp name="Cookie.domain_specified">true</boolProp>
-            </elementProp>
+        <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert curl call was successful" enabled="true">
+          <collectionProp name="Asserion.test_strings">
+            <stringProp name="185669135">Errors:</stringProp>
           </collectionProp>
-          <boolProp name="CookieManager.clearEachIteration">true</boolProp>
-        </CookieManager>
-        <hashTree/>
-        <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="BeanShell Sampler: Clear properties" enabled="true">
-          <stringProp name="BeanShellSampler.query">props.remove(&quot;category_url_key&quot;);
-props.remove(&quot;category_name&quot;);
-props.remove(&quot;simple_products_list&quot;);
-props.remove(&quot;configurable_products_list&quot;);
-props.remove(&quot;users&quot;);
-props.remove(&quot;customer_emails_list&quot;);</stringProp>
-          <stringProp name="BeanShellSampler.filename"></stringProp>
-          <stringProp name="BeanShellSampler.parameters"></stringProp>
-          <boolProp name="BeanShellSampler.resetInterpreter">false</boolProp>
-        </BeanShellSampler>
+          <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+          <boolProp name="Assertion.assume_success">false</boolProp>
+          <intProp name="Assertion.test_type">6</intProp>
+        </ResponseAssertion>
         <hashTree/>
       </hashTree>
-      <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true">
-        <boolProp name="ResultCollector.error_logging">false</boolProp>
-        <objProp>
-          <name>saveConfig</name>
-          <value class="SampleSaveConfiguration">
-            <time>true</time>
-            <latency>true</latency>
-            <timestamp>true</timestamp>
-            <success>true</success>
-            <label>true</label>
-            <code>true</code>
-            <message>true</message>
-            <threadName>true</threadName>
-            <dataType>true</dataType>
-            <encoding>false</encoding>
-            <assertions>true</assertions>
-            <subresults>true</subresults>
-            <responseData>false</responseData>
-            <samplerData>false</samplerData>
-            <xml>false</xml>
-            <fieldNames>false</fieldNames>
-            <responseHeaders>false</responseHeaders>
-            <requestHeaders>false</requestHeaders>
-            <responseDataOnError>false</responseDataOnError>
-            <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
-            <assertionsResultsToSave>0</assertionsResultsToSave>
-            <bytes>true</bytes>
-            <hostname>true</hostname>
-            <threadCounts>true</threadCounts>
-            <sampleCount>true</sampleCount>
-          </value>
-        </objProp>
-        <stringProp name="filename">${report_save_path}/view-results-tree.log</stringProp>
-      </ResultCollector>
-      <hashTree/>
-      <ResultCollector guiclass="TableVisualizer" testclass="ResultCollector" testname="Detailed URLs report" enabled="true">
-        <boolProp name="ResultCollector.error_logging">false</boolProp>
-        <objProp>
-          <name>saveConfig</name>
-          <value class="SampleSaveConfiguration">
-            <time>true</time>
-            <latency>false</latency>
-            <timestamp>false</timestamp>
-            <success>false</success>
-            <label>true</label>
-            <code>false</code>
-            <message>false</message>
-            <threadName>false</threadName>
-            <dataType>false</dataType>
-            <encoding>false</encoding>
-            <assertions>false</assertions>
-            <subresults>false</subresults>
-            <responseData>false</responseData>
-            <samplerData>false</samplerData>
-            <xml>false</xml>
-            <fieldNames>true</fieldNames>
-            <responseHeaders>false</responseHeaders>
-            <requestHeaders>false</requestHeaders>
-            <responseDataOnError>false</responseDataOnError>
-            <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
-            <assertionsResultsToSave>0</assertionsResultsToSave>
-            <url>true</url>
-            <hostname>true</hostname>
-            <threadCounts>true</threadCounts>
-            <sampleCount>true</sampleCount>
-          </value>
-        </objProp>
-        <stringProp name="filename">${report_save_path}/detailed-urls-report.log</stringProp>
-      </ResultCollector>
-      <hashTree/>
-      <ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" enabled="true">
-        <boolProp name="ResultCollector.error_logging">false</boolProp>
-        <objProp>
-          <name>saveConfig</name>
-          <value class="SampleSaveConfiguration">
-            <time>true</time>
-            <latency>true</latency>
-            <timestamp>true</timestamp>
-            <success>true</success>
-            <label>true</label>
-            <code>true</code>
-            <message>true</message>
-            <threadName>true</threadName>
-            <dataType>true</dataType>
-            <encoding>false</encoding>
-            <assertions>true</assertions>
-            <subresults>true</subresults>
-            <responseData>false</responseData>
-            <samplerData>false</samplerData>
-            <xml>false</xml>
-            <fieldNames>false</fieldNames>
-            <responseHeaders>false</responseHeaders>
-            <requestHeaders>false</requestHeaders>
-            <responseDataOnError>false</responseDataOnError>
-            <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
-            <assertionsResultsToSave>0</assertionsResultsToSave>
-            <bytes>true</bytes>
-            <hostname>true</hostname>
-            <threadCounts>true</threadCounts>
-            <sampleCount>true</sampleCount>
-          </value>
-        </objProp>
-        <stringProp name="filename">${report_save_path}/summary-report.log</stringProp>
-      </ResultCollector>
+      <CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie Manager" enabled="true">
+        <collectionProp name="CookieManager.cookies">
+          <elementProp name="product_list_limit" elementType="Cookie" testname="product_list_limit">
+            <stringProp name="Cookie.value">30</stringProp>
+            <stringProp name="Cookie.domain">${host}</stringProp>
+            <stringProp name="Cookie.path">/</stringProp>
+            <boolProp name="Cookie.secure">false</boolProp>
+            <longProp name="Cookie.expires">0</longProp>
+            <boolProp name="Cookie.path_specified">true</boolProp>
+            <boolProp name="Cookie.domain_specified">true</boolProp>
+          </elementProp>
+        </collectionProp>
+        <boolProp name="CookieManager.clearEachIteration">true</boolProp>
+      </CookieManager>
+      <hashTree/>
+      <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="SetUp - BeanShell Sampler: Clear properties" enabled="true">
+        <stringProp name="BeanShellSampler.query">props.remove("category_url_key");
+props.remove("category_name");
+props.remove("simple_products_list");
+props.remove("configurable_products_list");
+props.remove("users");
+props.remove("customer_emails_list");</stringProp>
+        <stringProp name="BeanShellSampler.filename"/>
+        <stringProp name="BeanShellSampler.parameters"/>
+        <boolProp name="BeanShellSampler.resetInterpreter">false</boolProp>
+      </BeanShellSampler>
       <hashTree/>
     </hashTree>
+  
+    <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true">
+      <boolProp name="ResultCollector.error_logging">false</boolProp>
+      <objProp>
+        <name>saveConfig</name>
+        <value class="SampleSaveConfiguration">
+          <time>true</time>
+          <latency>true</latency>
+          <timestamp>true</timestamp>
+          <success>true</success>
+          <label>true</label>
+          <code>true</code>
+          <message>true</message>
+          <threadName>true</threadName>
+          <dataType>true</dataType>
+          <encoding>false</encoding>
+          <assertions>true</assertions>
+          <subresults>true</subresults>
+          <responseData>false</responseData>
+          <samplerData>false</samplerData>
+          <xml>false</xml>
+          <fieldNames>false</fieldNames>
+          <responseHeaders>false</responseHeaders>
+          <requestHeaders>false</requestHeaders>
+          <responseDataOnError>false</responseDataOnError>
+          <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
+          <assertionsResultsToSave>0</assertionsResultsToSave>
+          <bytes>true</bytes>
+          <threadCounts>true</threadCounts>
+        </value>
+      </objProp>
+      <objProp>
+        <name/>
+        <value class="SampleSaveConfiguration">
+          <time>true</time>
+          <latency>true</latency>
+          <timestamp>true</timestamp>
+          <success>true</success>
+          <label>true</label>
+          <code>true</code>
+          <message>true</message>
+          <threadName>true</threadName>
+          <dataType>true</dataType>
+          <encoding>false</encoding>
+          <assertions>true</assertions>
+          <subresults>true</subresults>
+          <responseData>false</responseData>
+          <samplerData>false</samplerData>
+          <xml>true</xml>
+          <fieldNames>false</fieldNames>
+          <responseHeaders>false</responseHeaders>
+          <requestHeaders>true</requestHeaders>
+          <responseDataOnError>false</responseDataOnError>
+          <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
+          <assertionsResultsToSave>0</assertionsResultsToSave>
+          <bytes>true</bytes>
+          <hostname>true</hostname>
+          <threadCounts>true</threadCounts>
+          <sampleCount>true</sampleCount>
+        </value>
+      </objProp>
+      <stringProp name="filename"/>
+    </ResultCollector>
+    <hashTree/>
+  
+    <ResultCollector guiclass="TableVisualizer" testclass="ResultCollector" testname="Detailed URLs report" enabled="true">
+      <boolProp name="ResultCollector.error_logging">false</boolProp>
+      <objProp>
+        <name>saveConfig</name>
+        <value class="SampleSaveConfiguration">
+          <time>true</time>
+          <latency>false</latency>
+          <timestamp>false</timestamp>
+          <success>false</success>
+          <label>true</label>
+          <code>false</code>
+          <message>false</message>
+          <threadName>false</threadName>
+          <dataType>false</dataType>
+          <encoding>false</encoding>
+          <assertions>false</assertions>
+          <subresults>false</subresults>
+          <responseData>false</responseData>
+          <samplerData>false</samplerData>
+          <xml>false</xml>
+          <fieldNames>true</fieldNames>
+          <responseHeaders>false</responseHeaders>
+          <requestHeaders>false</requestHeaders>
+          <responseDataOnError>false</responseDataOnError>
+          <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
+          <assertionsResultsToSave>0</assertionsResultsToSave>
+          <url>true</url>
+          <hostname>true</hostname>
+          <threadCounts>true</threadCounts>
+          <sampleCount>true</sampleCount>
+        </value>
+      </objProp>
+      <stringProp name="filename">${report_save_path}/detailed-urls-report.log</stringProp>
+    </ResultCollector>
+    <hashTree/>
+  
+    <ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" enabled="true">
+      <boolProp name="ResultCollector.error_logging">false</boolProp>
+      <objProp>
+        <name>saveConfig</name>
+        <value class="SampleSaveConfiguration">
+          <time>true</time>
+          <latency>true</latency>
+          <timestamp>true</timestamp>
+          <success>true</success>
+          <label>true</label>
+          <code>true</code>
+          <message>true</message>
+          <threadName>true</threadName>
+          <dataType>true</dataType>
+          <encoding>false</encoding>
+          <assertions>true</assertions>
+          <subresults>true</subresults>
+          <responseData>false</responseData>
+          <samplerData>false</samplerData>
+          <xml>false</xml>
+          <fieldNames>false</fieldNames>
+          <responseHeaders>false</responseHeaders>
+          <requestHeaders>false</requestHeaders>
+          <responseDataOnError>false</responseDataOnError>
+          <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
+          <assertionsResultsToSave>0</assertionsResultsToSave>
+          <bytes>true</bytes>
+          <hostname>true</hostname>
+          <threadCounts>true</threadCounts>
+          <sampleCount>true</sampleCount>
+        </value>
+      </objProp>
+      <stringProp name="filename">${report_save_path}/summary-report.log</stringProp>
+    </ResultCollector>
+    <hashTree/>
+  </hashTree>
+    <WorkBench guiclass="WorkBenchGui" testclass="WorkBench" testname="WorkBench" enabled="true">
+      <boolProp name="WorkBench.save">true</boolProp>
+    </WorkBench>
   </hashTree>
 </jmeterTestPlan>
-- 
GitLab


From be05c581405edd424de2600960c4c2cba7292ae5 Mon Sep 17 00:00:00 2001
From: Mikalai_Shostka <mikalai_shostka@epam.com>
Date: Fri, 23 Oct 2015 17:36:06 +0300
Subject: [PATCH 254/370] Fix bug: Couldn't retrive a remote preview image
 file.

---
 .../Controller/Adminhtml/Product/Gallery/RetrieveImage.php     | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php b/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
index b0cd6ca9b16..fba8a5b4747 100644
--- a/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
+++ b/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
@@ -131,6 +131,9 @@ class RetrieveImage extends \Magento\Backend\App\Action
         $this->curl->setConfig(['header' => false]);
         $this->curl->write('GET', $fileUrl);
         $image = $this->curl->read();
+        if (empty($image)) {
+            throw new \InvalidArgumentException("Couldn't retrive a remote preview image file. Service is inaccessible.");
+        }
         $this->fileUtility->saveFile($localFilePath, $image);
     }
 
-- 
GitLab


From f13116fab67f3bbbde358feb87ec31cdcde8bd4d Mon Sep 17 00:00:00 2001
From: Stanislav Idolov <sidolov@ebay.com>
Date: Fri, 23 Oct 2015 17:37:38 +0300
Subject: [PATCH 255/370] MAGETWO-39588: store_id value is not honored when
 creating simple product through API in multi-websites / multi-stores setup

---
 .../Indexer/Fulltext/Plugin/ProductTest.php   | 49 ++++++++++++++-----
 1 file changed, 37 insertions(+), 12 deletions(-)

diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/ProductTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/ProductTest.php
index 49f37b71f1a..cb6c83ea3dc 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/ProductTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/ProductTest.php
@@ -16,10 +16,20 @@ class ProductTest extends \PHPUnit_Framework_TestCase
     protected $indexerMock;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\Product
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\ResourceModel\Product
      */
     protected $subjectMock;
 
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\Product
+     */
+    protected $productMock;
+
+    /**
+     * @var \Closure
+     */
+    protected $proceed;
+
     /**
      * @var \Magento\Framework\Indexer\IndexerRegistry|\PHPUnit_Framework_MockObject_MockObject
      */
@@ -32,8 +42,8 @@ class ProductTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->subjectMock = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false);
-
+        $this->productMock = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false);
+        $this->subjectMock = $this->getMock('Magento\Catalog\Model\ResourceModel\Product', [], [], '', false);
         $this->indexerMock = $this->getMockForAbstractClass(
             'Magento\Framework\Indexer\IndexerInterface',
             [],
@@ -43,7 +53,6 @@ class ProductTest extends \PHPUnit_Framework_TestCase
             true,
             ['getId', 'getState', '__wakeup']
         );
-
         $this->indexerRegistryMock = $this->getMock(
             'Magento\Framework\Indexer\IndexerRegistry',
             ['get'],
@@ -52,6 +61,10 @@ class ProductTest extends \PHPUnit_Framework_TestCase
             false
         );
 
+        $this->proceed = function () {
+            return $this->subjectMock;
+        };
+
         $this->model = new Product($this->indexerRegistryMock);
     }
 
@@ -61,9 +74,12 @@ class ProductTest extends \PHPUnit_Framework_TestCase
         $this->indexerMock->expects($this->once())->method('reindexRow')->with(1);
         $this->prepareIndexer();
 
-        $this->subjectMock->expects($this->once())->method('getId')->will($this->returnValue(1));
+        $this->productMock->expects($this->once())->method('getId')->will($this->returnValue(1));
 
-        $this->assertEquals($this->subjectMock, $this->model->afterSave($this->subjectMock));
+        $this->assertEquals(
+            $this->subjectMock,
+            $this->model->aroundSave($this->subjectMock, $this->proceed, $this->productMock)
+        );
     }
 
     public function testAfterSaveScheduled()
@@ -72,9 +88,12 @@ class ProductTest extends \PHPUnit_Framework_TestCase
         $this->indexerMock->expects($this->never())->method('reindexRow');
         $this->prepareIndexer();
 
-        $this->subjectMock->expects($this->once())->method('getId')->will($this->returnValue(1));
+        $this->productMock->expects($this->once())->method('getId')->will($this->returnValue(1));
 
-        $this->assertEquals($this->subjectMock, $this->model->afterSave($this->subjectMock));
+        $this->assertEquals(
+            $this->subjectMock,
+            $this->model->aroundSave($this->subjectMock, $this->proceed, $this->productMock)
+        );
     }
 
     public function testAfterDeleteNonScheduled()
@@ -83,9 +102,12 @@ class ProductTest extends \PHPUnit_Framework_TestCase
         $this->indexerMock->expects($this->once())->method('reindexRow')->with(1);
         $this->prepareIndexer();
 
-        $this->subjectMock->expects($this->once())->method('getId')->will($this->returnValue(1));
+        $this->productMock->expects($this->once())->method('getId')->will($this->returnValue(1));
 
-        $this->assertEquals($this->subjectMock, $this->model->afterDelete($this->subjectMock));
+        $this->assertEquals(
+            $this->subjectMock,
+            $this->model->aroundDelete($this->subjectMock, $this->proceed, $this->productMock)
+        );
     }
 
     public function testAfterDeleteScheduled()
@@ -94,9 +116,12 @@ class ProductTest extends \PHPUnit_Framework_TestCase
         $this->indexerMock->expects($this->never())->method('reindexRow');
         $this->prepareIndexer();
 
-        $this->subjectMock->expects($this->once())->method('getId')->will($this->returnValue(1));
+        $this->productMock->expects($this->once())->method('getId')->will($this->returnValue(1));
 
-        $this->assertEquals($this->subjectMock, $this->model->afterDelete($this->subjectMock));
+        $this->assertEquals(
+            $this->subjectMock,
+            $this->model->aroundDelete($this->subjectMock, $this->proceed, $this->productMock)
+        );
     }
 
     protected function prepareIndexer()
-- 
GitLab


From b676f746c53fbbcb3add677774227ce8ed3ef6b3 Mon Sep 17 00:00:00 2001
From: Mikalai_Shostka <mikalai_shostka@epam.com>
Date: Fri, 23 Oct 2015 18:03:16 +0300
Subject: [PATCH 256/370] Fix bug: Couldn't retrive a remote preview image
 file.

---
 .../Controller/Adminhtml/Product/Gallery/RetrieveImage.php      | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php b/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
index fba8a5b4747..5af6d0976dc 100644
--- a/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
+++ b/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
@@ -132,7 +132,7 @@ class RetrieveImage extends \Magento\Backend\App\Action
         $this->curl->write('GET', $fileUrl);
         $image = $this->curl->read();
         if (empty($image)) {
-            throw new \InvalidArgumentException("Couldn't retrive a remote preview image file. Service is inaccessible.");
+            throw new \InvalidArgumentException(__('Couldn\'t retrive a remote preview image file. Service is inaccessible.'));
         }
         $this->fileUtility->saveFile($localFilePath, $image);
     }
-- 
GitLab


From cd29c58c5eee006372e43500ecb95e5d0b4258d0 Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Fri, 23 Oct 2015 18:07:25 +0300
Subject: [PATCH 257/370] MAGETWO-44455: Email Templates - When new email
 template created, clicking Preview button, display empty page.

---
 .../Email/Test/Unit/Block/Adminhtml/Template/PreviewTest.php  | 4 ++--
 .../Unit/Controller/Adminhtml/Email/Template/PreviewTest.php  | 1 -
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/PreviewTest.php b/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/PreviewTest.php
index dbad5f98eaa..3a7d91dfefb 100644
--- a/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/PreviewTest.php
+++ b/app/code/Magento/Email/Test/Unit/Block/Adminhtml/Template/PreviewTest.php
@@ -58,9 +58,8 @@ class PreviewTest extends \PHPUnit_Framework_TestCase
                 $designConfigData
             ));
         $emailFactory = $this->getMock('Magento\Email\Model\TemplateFactory', ['create'], [], '', false);
-        $emailFactory->expects($this->once())
+        $emailFactory->expects($this->any())
             ->method('create')
-            ->with([])
             ->willReturn($template);
 
         $request = $this->getMock('Magento\Framework\App\RequestInterface');
@@ -109,6 +108,7 @@ class PreviewTest extends \PHPUnit_Framework_TestCase
             ->with($this->equalTo($requestParamMap[1][2]))
             ->willReturn(self::MALICIOUS_TEXT);
 
+        /** @var \Magento\Email\Block\Adminhtml\Template\Preview $preview */
         $preview = $this->objectManagerHelper->getObject(
             'Magento\Email\Block\Adminhtml\Template\Preview',
             [
diff --git a/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/PreviewTest.php b/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/PreviewTest.php
index 3ea858e356b..59fccebfe38 100644
--- a/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/PreviewTest.php
+++ b/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/PreviewTest.php
@@ -71,7 +71,6 @@ class PreviewTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         $this->requestMock = $this->getMockBuilder('Magento\Framework\App\RequestInterface')
-            ->disableOriginalConstructor()
             ->getMock();
         $this->pageMock = $this->getMockBuilder('Magento\Framework\View\Result\Page')
             ->disableOriginalConstructor()
-- 
GitLab


From b74a6ff0f2ad7e5105960ed4a79b6395a472a752 Mon Sep 17 00:00:00 2001
From: Bohdan Korablov <bkorablov@ebay.com>
Date: Fri, 23 Oct 2015 18:11:01 +0300
Subject: [PATCH 258/370] MAGETWO-43793: [github] broken references when
 viewing admin after initial install #1795

---
 .../Magento/Framework/View/Layout/Data/Structure.php      | 8 ++++----
 .../Framework/View/Layout/ScheduledStructure/Helper.php   | 6 +++---
 .../View/Test/Unit/Layout/Data/StructureTest.php          | 3 +--
 .../Test/Unit/Layout/ScheduledStructure/HelperTest.php    | 7 +------
 4 files changed, 9 insertions(+), 15 deletions(-)

diff --git a/lib/internal/Magento/Framework/View/Layout/Data/Structure.php b/lib/internal/Magento/Framework/View/Layout/Data/Structure.php
index 643b2cdf942..ee2fe6bd206 100644
--- a/lib/internal/Magento/Framework/View/Layout/Data/Structure.php
+++ b/lib/internal/Magento/Framework/View/Layout/Data/Structure.php
@@ -26,7 +26,7 @@ class Structure extends DataStructure
     protected $logger;
 
     /**
-     * @var \Magento\Framework\App\State
+     * @var State
      */
     protected $state;
 
@@ -34,12 +34,12 @@ class Structure extends DataStructure
      * Constructor
      *
      * @param \Psr\Log\LoggerInterface $logger
-     * @param \Magento\Framework\App\State $state
+     * @param State $state
      * @param array $elements
      */
     public function __construct(
         \Psr\Log\LoggerInterface $logger,
-        \Magento\Framework\App\State $state,
+        State $state,
         array $elements = null
     ) {
         $this->logger = $logger;
@@ -118,7 +118,7 @@ class Structure extends DataStructure
             if ($childName !== $sibling) {
                 $siblingParentName = $this->getParentId($sibling);
                 if ($parentName !== $siblingParentName) {
-                    if ($this->state->getMode() == State::MODE_DEVELOPER) {
+                    if ($this->state->getMode() === State::MODE_DEVELOPER) {
                         $this->logger->critical(
                             "Broken reference: the '{$childName}' tries to reorder itself towards '{$sibling}', but " .
                             "their parents are different: '{$parentName}' and '{$siblingParentName}' respectively."
diff --git a/lib/internal/Magento/Framework/View/Layout/ScheduledStructure/Helper.php b/lib/internal/Magento/Framework/View/Layout/ScheduledStructure/Helper.php
index e433a42056f..07d6f688e15 100644
--- a/lib/internal/Magento/Framework/View/Layout/ScheduledStructure/Helper.php
+++ b/lib/internal/Magento/Framework/View/Layout/ScheduledStructure/Helper.php
@@ -39,11 +39,11 @@ class Helper
 
     /**
      * @param \Psr\Log\LoggerInterface $logger
-     * @param \Magento\Framework\App\State $state
+     * @param State $state
      */
     public function __construct(
         \Psr\Log\LoggerInterface $logger,
-        \Magento\Framework\App\State $state
+        State $state
     ) {
         $this->logger = $logger;
         $this->state = $state;
@@ -200,7 +200,7 @@ class Helper
             } else {
                 $scheduledStructure->setElementToBrokenParentList($key);
 
-                if ($this->state->getMode() == State::MODE_DEVELOPER) {
+                if ($this->state->getMode() === State::MODE_DEVELOPER) {
                     $this->logger->critical(
                         "Broken reference: the '{$name}' element cannot be added as child to '{$parentName}', " .
                         'because the latter doesn\'t exist'
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Data/StructureTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Data/StructureTest.php
index da88b71ac38..f5d47e87b95 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Data/StructureTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Data/StructureTest.php
@@ -16,7 +16,7 @@ class StructureTest extends \PHPUnit_Framework_TestCase
     protected $loggerMock;
 
     /**
-     * @var \Magento\Framework\App\State|\PHPUnit_Framework_MockObject_MockObject
+     * @var State|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $stateMock;
 
@@ -63,7 +63,6 @@ class StructureTest extends \PHPUnit_Framework_TestCase
         $this->stateMock->expects($this->once())
             ->method('getMode')
             ->willReturn($stateMode);
-
         $this->loggerMock->expects($loggerExpects)
             ->method('critical')
             ->with(
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php
index 66bcad03943..82619fa03d2 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php
@@ -31,7 +31,7 @@ class HelperTest extends \PHPUnit_Framework_TestCase
     protected $loggerMock;
 
     /**
-     * @var \Magento\Framework\App\State|\PHPUnit_Framework_MockObject_MockObject
+     * @var State|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $stateMock;
 
@@ -173,16 +173,13 @@ class HelperTest extends \PHPUnit_Framework_TestCase
             ->method('hasStructureElement')
             ->with($parentName)
             ->willReturn(false);
-
         $this->dataStructureMock->expects($this->once())
             ->method('hasElement')
             ->with($parentName)
             ->willReturn(false);
-
         $this->stateMock->expects($this->once())
             ->method('getMode')
             ->willReturn($stateMode);
-
         $this->loggerMock->expects($loggerExpects)
             ->method('critical')
             ->with(
@@ -259,7 +256,6 @@ class HelperTest extends \PHPUnit_Framework_TestCase
             );
         $this->scheduledStructureMock->expects($this->any())->method('hasStructureElement')->willReturn(true);
         $this->scheduledStructureMock->expects($this->once())->method('setElement')->with($key, [$block, $data]);
-
         $this->dataStructureMock->expects($this->once())->method('createElement')->with($key, ['type' => $block]);
         $this->dataStructureMock->expects($this->once())
             ->method('hasElement')
@@ -269,7 +265,6 @@ class HelperTest extends \PHPUnit_Framework_TestCase
             ->method('setAsChild')
             ->with($key, $parentName, $alias)
             ->willReturn(true);
-
         $this->scheduledStructureMock->expects($this->exactly($toRemoveList))
             ->method('setElementToBrokenParentList')
             ->with($key);
-- 
GitLab


From ca48d029a2435beff1fa650db5a1ada9fe4f4195 Mon Sep 17 00:00:00 2001
From: Vadim Zubovich <vadim_zubovich@epam.com>
Date: Fri, 23 Oct 2015 18:12:31 +0300
Subject: [PATCH 259/370] MAGETWO-44274: The issue fixed

---
 .../Product/Attribute/Backend/Media.php       | 81 +++++++++++++------
 .../ProductVideo/Model/Plugin/BaseImage.php   | 10 +--
 .../Plugin/ExternalVideoEntryProcessor.php    | 12 ++-
 .../Plugin/ExternalVideoResourceBackend.php   | 47 +++++++++++
 .../Model/ResourceModel/Video.php             | 47 +++++++++++
 app/code/Magento/ProductVideo/etc/di.xml      |  3 +
 6 files changed, 167 insertions(+), 33 deletions(-)
 create mode 100644 app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoResourceBackend.php
 create mode 100644 app/code/Magento/ProductVideo/Model/ResourceModel/Video.php

diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php
index 1edaa8d87fd..5e413d19c57 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php
@@ -298,41 +298,29 @@ class Media extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      * @param array $newFiles
      * @param int $originalProductId
      * @param int $newProductId
-     * @return $this
+     * @return array
      */
     public function duplicate($attributeId, $newFiles, $originalProductId, $newProductId)
     {
-        $mainTableAlias = $this->getMainTableAlias();
+        $mediaGalleryEntities = $this->loadMediaGalleryEntities($attributeId, $originalProductId);
 
-        $select = $this->getConnection()->select()->from(
-            [$mainTableAlias => $this->getMainTable()],
-            ['value_id', 'value']
-        )->joinInner(
-            ['entity' => $this->getTable(self::GALLERY_VALUE_TO_ENTITY_TABLE)],
-            $mainTableAlias . '.value_id = entity.value_id',
-            ['entity_id' => 'entity_id']
-        )->where(
-            'attribute_id = ?',
-            $attributeId
-        )->where(
-            'entity.entity_id = ?',
-            $originalProductId
-        );
-
-        $valueIdMap = [];
         // Duplicate main entries of gallery
-        foreach ($this->getConnection()->fetchAll($select) as $row) {
+        $valueIdMap = [];
+        foreach ($mediaGalleryEntities as $row) {
+            $valueId = $row['value_id'];
             $data = [
                 'attribute_id' => $attributeId,
-                'entity_id' => $newProductId,
-                'value' => isset($newFiles[$row['value_id']]) ? $newFiles[$row['value_id']] : $row['value'],
+                'media_type' => $row['media_type'],
+                'disabled' => $row['disabled'],
+                'value' => isset($newFiles[$valueId]) ? $newFiles[$valueId] : $row['value'],
             ];
-
-            $valueIdMap[$row['value_id']] = $this->insertGallery($data);
+            $valueIdMap[$valueId] = $this->insertGallery($data);
         }
 
+
+
         if (count($valueIdMap) == 0) {
-            return $this;
+            return [];
         }
 
         // Duplicate per store gallery values
@@ -350,6 +338,49 @@ class Media extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
             $this->bindValueToEntity($row['value_id'], $newProductId);
         }
 
-        return $this;
+        return $valueIdMap;
+    }
+
+    /**
+     * @param array $valueIds
+     * @return array
+     * @throws \Magento\Framework\Exception\LocalizedException
+     */
+    public function loadMediaGalleryEntitiesbyId($valueIds)
+    {
+        $select = $this->getConnection()->select()->from(
+            $this->getMainTable()
+        )->where(
+            'value_id IN(?)',
+            $valueIds
+        );
+
+        return $this->getConnection()->fetchAll($select);
+    }
+
+    /**
+     * @param int $attributeId
+     * @param int $productId
+     * @return array
+     * @throws \Magento\Framework\Exception\LocalizedException
+     */
+    public function loadMediaGalleryEntities($attributeId, $productId)
+    {
+        $mainTableAlias = $this->getMainTableAlias();
+        $select = $this->getConnection()->select()->from(
+            [$mainTableAlias => $this->getMainTable()]
+        )->joinInner(
+            ['entity' => $this->getTable(self::GALLERY_VALUE_TO_ENTITY_TABLE)],
+            $mainTableAlias . '.value_id = entity.value_id',
+            ['entity_id' => 'entity_id']
+        )->where(
+            'attribute_id = ?',
+            $attributeId
+        )->where(
+            'entity.entity_id = ?',
+            $productId
+        );
+
+        return $this->getConnection()->fetchAll($select);
     }
 }
diff --git a/app/code/Magento/ProductVideo/Model/Plugin/BaseImage.php b/app/code/Magento/ProductVideo/Model/Plugin/BaseImage.php
index 809da5a9c6b..f9342074f99 100644
--- a/app/code/Magento/ProductVideo/Model/Plugin/BaseImage.php
+++ b/app/code/Magento/ProductVideo/Model/Plugin/BaseImage.php
@@ -6,7 +6,7 @@
 
 namespace Magento\ProductVideo\Model\Plugin;
 
-use Magento\Catalog\Block\Adminhtml\Product\Helper\Form\BaseImage as OriginalBloc;
+use Magento\Catalog\Block\Adminhtml\Product\Helper\Form\BaseImage as OriginalBlock;
 use Magento\Framework\View\Element\Template;
 
 /**
@@ -20,13 +20,13 @@ class BaseImage
     const ELEMENT_OUTPUT_TEMPLATE = 'Magento_ProductVideo::product/edit/base_image.phtml';
 
     /**
-     * @param OriginalBloc $baseImage
+     * @param OriginalBlock $baseImage
      * @param Template $block
      * @return Template
      *
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function afterAssignBlockVariables(OriginalBloc $baseImage, Template $block)
+    public function afterAssignBlockVariables(OriginalBlock $baseImage, Template $block)
     {
         $block->assign([
             'videoPlaceholderText' => __('Click here to add videos.'),
@@ -37,13 +37,13 @@ class BaseImage
     }
 
     /**
-     * @param OriginalBloc $baseImage
+     * @param OriginalBlock $baseImage
      * @param Template $block
      * @return Template
      *
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function afterCreateElementHtmlOutputBlock(OriginalBloc $baseImage, Template $block)
+    public function afterCreateElementHtmlOutputBlock(OriginalBlock $baseImage, Template $block)
     {
         $block->setTemplate(self::ELEMENT_OUTPUT_TEMPLATE);
         return $block;
diff --git a/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoEntryProcessor.php b/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoEntryProcessor.php
index 935e84de05c..1ac182f9039 100644
--- a/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoEntryProcessor.php
+++ b/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoEntryProcessor.php
@@ -41,13 +41,20 @@ class ExternalVideoEntryProcessor
      */
     protected $resourceEntryMediaGallery;
 
+    /**
+     * @var \Magento\ProductVideo\Model\ResourceModel\Video
+     */
+    protected $videoResourceModel;
+
     /**
      * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media $resourceEntryMediaGallery
      */
     public function __construct(
-        \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media $resourceEntryMediaGallery
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media $resourceEntryMediaGallery,
+        \Magento\ProductVideo\Model\ResourceModel\Video $videoResourceModel
     ) {
         $this->resourceEntryMediaGallery = $resourceEntryMediaGallery;
+        $this->videoResourceModel = $videoResourceModel;
     }
 
     /**
@@ -141,8 +148,7 @@ class ExternalVideoEntryProcessor
      */
     protected function saveVideoValuesItem(array $item)
     {
-        $this->resourceEntryMediaGallery->saveDataRow(
-            InstallSchema::GALLERY_VALUE_VIDEO_TABLE,
+        $this->videoResourceModel->insertOnDuplicate(
             $this->prepareVideoRowDataForSave($item)
         );
     }
diff --git a/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoResourceBackend.php b/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoResourceBackend.php
new file mode 100644
index 00000000000..d8a9f6232e2
--- /dev/null
+++ b/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoResourceBackend.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\ProductVideo\Model\Plugin;
+
+use Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media;
+use Magento\ProductVideo\Setup\InstallSchema;
+
+/**
+ * Attribute Media Resource decorator
+ */
+class ExternalVideoResourceBackend
+{
+    /**
+     * @var \Magento\ProductVideo\Model\ResourceModel\Video
+     */
+    protected $videoResourceModel;
+
+    /**
+     * @param \Magento\ProductVideo\Model\ResourceModel\Video $videoResourceModel
+     */
+    public function __construct(\Magento\ProductVideo\Model\ResourceModel\Video $videoResourceModel)
+    {
+        $this->videoResourceModel = $videoResourceModel;
+    }
+
+    /**
+     * @param Media $originalResourceModel
+     * @param array $valueIdMap
+     * @return array
+     *
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function afterDuplicate(Media $originalResourceModel, array $valueIdMap)
+    {
+        $mediaGalleryEntitiesData = $this->videoResourceModel->loadByIds(array_keys($valueIdMap));
+        foreach($mediaGalleryEntitiesData as $row) {
+            $row['value_id'] = $valueIdMap[$row['value_id']];
+            $this->videoResourceModel->insertOnDuplicate($row);
+        }
+
+        return $valueIdMap;
+    }
+}
diff --git a/app/code/Magento/ProductVideo/Model/ResourceModel/Video.php b/app/code/Magento/ProductVideo/Model/ResourceModel/Video.php
new file mode 100644
index 00000000000..3a242f71eb4
--- /dev/null
+++ b/app/code/Magento/ProductVideo/Model/ResourceModel/Video.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\ProductVideo\Model\ResourceModel;
+
+class Video extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
+{
+    /**
+     * Resource initialization
+     *
+     * @return void
+     */
+    public function _construct()
+    {
+        $this->_init(\Magento\ProductVideo\Setup\InstallSchema::GALLERY_VALUE_VIDEO_TABLE, 'value_id');
+    }
+
+    /**
+     * @param array $data
+     * @param array $fields
+     * @return int
+     * @throws \Magento\Framework\Exception\LocalizedException
+     */
+    public function insertOnDuplicate(array $data, array $fields = [])
+    {
+        return $this->getConnection()->insertOnDuplicate($this->getMainTable(), $data, $fields);
+    }
+
+    /**
+     * @param array $ids
+     * @return array
+     * @throws \Magento\Framework\Exception\LocalizedException
+     */
+    public function loadByIds(array $ids)
+    {
+        $select = $this->getConnection()->select()->from(
+            $this->getMainTable()
+        )->where(
+            'value_id IN(?)',
+            $ids
+        );
+
+        return $this->getConnection()->fetchAll($select);
+    }
+}
diff --git a/app/code/Magento/ProductVideo/etc/di.xml b/app/code/Magento/ProductVideo/etc/di.xml
index 99aeef0a725..7f27e06492a 100644
--- a/app/code/Magento/ProductVideo/etc/di.xml
+++ b/app/code/Magento/ProductVideo/etc/di.xml
@@ -39,6 +39,9 @@
     <type name="Magento\Catalog\Model\Product\Attribute\Backend\Media">
         <plugin name="external_video_media_entry_processor" type="Magento\ProductVideo\Model\Plugin\ExternalVideoEntryProcessor" />
     </type>
+    <type name="Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media">
+        <plugin name="external_video_media_resource_backend" type="Magento\ProductVideo\Model\Plugin\ExternalVideoResourceBackend" />
+    </type>
     <type name="Magento\Catalog\Block\Adminhtml\Product\Helper\Form\BaseImage">
         <plugin name="base_image_element_render" type="Magento\ProductVideo\Model\Plugin\BaseImage" />
     </type>
-- 
GitLab


From 7d032ee1149fc2143b70921031af159f87536482 Mon Sep 17 00:00:00 2001
From: Bohdan Korablov <bkorablov@ebay.com>
Date: Fri, 23 Oct 2015 18:18:44 +0300
Subject: [PATCH 260/370] MAGETWO-43793: [github] broken references when
 viewing admin after initial install #1795

---
 .../Magento/Framework/View/Layout/ScheduledStructure/Helper.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/internal/Magento/Framework/View/Layout/ScheduledStructure/Helper.php b/lib/internal/Magento/Framework/View/Layout/ScheduledStructure/Helper.php
index 07d6f688e15..c71c27beeb4 100644
--- a/lib/internal/Magento/Framework/View/Layout/ScheduledStructure/Helper.php
+++ b/lib/internal/Magento/Framework/View/Layout/ScheduledStructure/Helper.php
@@ -33,7 +33,7 @@ class Helper
     protected $logger;
 
     /**
-     * @var \Magento\Framework\App\State
+     * @var State
      */
     protected $state;
 
-- 
GitLab


From 8847346ae2c91957446feeebfc0a2dda4c3b6de7 Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Fri, 23 Oct 2015 18:22:42 +0300
Subject: [PATCH 261/370] MAGETWO-44521: Multi-check is absent in Admin data
 grid filters

- Add ui-select to cms page filters
---
 .../adminhtml/ui_component/cms_page_listing.xml     |  8 ++++++++
 app/code/Magento/Ui/Component/Filters.php           |  5 +++++
 .../Ui/view/base/web/js/form/element/ui-select.js   | 13 -------------
 3 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
index c55c919be21..27cc3ddc2e0 100644
--- a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
+++ b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
@@ -86,6 +86,14 @@
                         <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
                     </item>
+                    <item name="templates" xsi:type="array">
+                        <item name="filters" xsi:type="array">
+                            <item name="select" xsi:type="array">
+                                <item name="component" xsi:type="string">Magento_Ui/js/form/element/ui-select</item>
+                                <item name="template" xsi:type="string">ui/grid/filters/elements/ui-select</item>
+                            </item>
+                        </item>
+                    </item>
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
diff --git a/app/code/Magento/Ui/Component/Filters.php b/app/code/Magento/Ui/Component/Filters.php
index dadcdc2f095..3859f777f3e 100644
--- a/app/code/Magento/Ui/Component/Filters.php
+++ b/app/code/Magento/Ui/Component/Filters.php
@@ -73,6 +73,11 @@ class Filters extends AbstractComponent implements ObserverInterface
     {
         if ($component instanceof ColumnInterface) {
             $filterType = $component->getData('config/filter');
+
+            if (is_array($filterType)) {
+                $filterType = $filterType['filterType'];
+            }
+
             if (!$filterType) {
                 return;
             }
diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js b/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js
index 5547e3ad9db..6fe8c40c4d8 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js
@@ -57,19 +57,6 @@ define([
             }
         },
 
-        /**
-         * Extends instance with defaults, extends config with formatted values
-         *     and options, and invokes initialize method of AbstractElement class.
-         *
-         * @returns {Object} Chainable
-         */
-        initialize: function () {
-            this._super()
-                .initOptions();
-
-            return this;
-        },
-
         /**
          * Parses options and merges the result with instance
          *
-- 
GitLab


From af9504a901aff2ad4cf4809479bd837639368733 Mon Sep 17 00:00:00 2001
From: Michail Slabko <mslabko@ebay.com>
Date: Fri, 23 Oct 2015 18:26:27 +0300
Subject: [PATCH 262/370] MAGETWO-44460: Wrong price conversation for
 Configurable product

---
 .../Block/Product/View/Type/Configurable.php  | 33 ++-------
 .../Model/Product/Type/Configurable/Price.php | 28 +++++---
 .../Pricing/Price/BasePrice.php               | 68 -------------------
 .../Price/ConfigurablePriceResolver.php       | 24 +++----
 .../Price/ConfigurableRegularPrice.php        | 12 ++--
 .../Pricing/Price/FinalPrice.php              | 19 +-----
 .../Product/Type/Configurable/PriceTest.php   | 24 ++-----
 .../Magento/ConfigurableProduct/etc/di.xml    |  1 -
 8 files changed, 49 insertions(+), 160 deletions(-)
 delete mode 100644 app/code/Magento/ConfigurableProduct/Pricing/Price/BasePrice.php

diff --git a/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php b/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php
index fce1979115e..356f9b2f2b8 100644
--- a/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php
+++ b/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php
@@ -184,15 +184,15 @@ class Configurable extends \Magento\Catalog\Block\Product\View\AbstractView
             'optionPrices' => $this->getOptionPrices(),
             'prices' => [
                 'oldPrice' => [
-                    'amount' => $this->_registerJsPrice($this->_convertPrice($regularPrice->getAmount()->getValue())),
+                    'amount' => $this->_registerJsPrice($regularPrice->getAmount()->getValue()),
                 ],
                 'basePrice' => [
                     'amount' => $this->_registerJsPrice(
-                        $this->_convertPrice($finalPrice->getAmount()->getBaseAmount())
+                        $finalPrice->getAmount()->getBaseAmount()
                     ),
                 ],
                 'finalPrice' => [
-                    'amount' => $this->_registerJsPrice($this->_convertPrice($finalPrice->getAmount()->getValue())),
+                    'amount' => $this->_registerJsPrice($finalPrice->getAmount()->getValue()),
                 ],
             ],
             'productId' => $currentProduct->getId(),
@@ -223,17 +223,17 @@ class Configurable extends \Magento\Catalog\Block\Product\View\AbstractView
                 [
                     'oldPrice' => [
                         'amount' => $this->_registerJsPrice(
-                            $this->_convertPrice($priceInfo->getPrice('regular_price')->getAmount()->getValue())
+                            $priceInfo->getPrice('regular_price')->getAmount()->getValue()
                         ),
                     ],
                     'basePrice' => [
                         'amount' => $this->_registerJsPrice(
-                            $this->_convertPrice($priceInfo->getPrice('final_price')->getAmount()->getBaseAmount())
+                            $priceInfo->getPrice('final_price')->getAmount()->getBaseAmount()
                         ),
                     ],
                     'finalPrice' => [
                         'amount' => $this->_registerJsPrice(
-                            $this->_convertPrice($priceInfo->getPrice('final_price')->getAmount()->getValue())
+                            $priceInfo->getPrice('final_price')->getAmount()->getValue()
                         ),
                     ]
                 ];
@@ -251,25 +251,4 @@ class Configurable extends \Magento\Catalog\Block\Product\View\AbstractView
     {
         return str_replace(',', '.', $price);
     }
-
-    /**
-     * Convert price from default currency to current currency
-     *
-     * @param float $price
-     * @param bool $round
-     * @return float
-     */
-    protected function _convertPrice($price, $round = false)
-    {
-        if (empty($price)) {
-            return 0;
-        }
-
-        $price = $this->priceCurrency->convert($price);
-        if ($round) {
-            $price = $this->priceCurrency->round($price);
-        }
-
-        return $price;
-    }
 }
diff --git a/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable/Price.php b/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable/Price.php
index bd74b867c86..aeae1374a98 100644
--- a/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable/Price.php
+++ b/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable/Price.php
@@ -7,8 +7,6 @@
  */
 namespace Magento\ConfigurableProduct\Model\Product\Type\Configurable;
 
-use Magento\Framework\Pricing\PriceCurrencyInterface;
-
 class Price extends \Magento\Catalog\Model\Product\Type\Price
 {
     /**
@@ -24,17 +22,27 @@ class Price extends \Magento\Catalog\Model\Product\Type\Price
             return $product->getCalculatedFinalPrice();
         }
         if ($product->getCustomOption('simple_product')) {
-            $simpleProduct = $product->getCustomOption('simple_product')->getProduct();
-            $product->setSelectedConfigurableOption($simpleProduct);
-            $priceInfo = $simpleProduct->getPriceInfo();
+            return parent::getFinalPrice($qty, $product->getCustomOption('simple_product')->getProduct());
         } else {
             $priceInfo = $product->getPriceInfo();
+            $finalPrice = $priceInfo->getPrice('final_price')->getAmount()->getValue();
+            $finalPrice = $this->_applyOptionsPrice($product, $qty, $finalPrice);
+            $finalPrice = max(0, $finalPrice);
+            $product->setFinalPrice($finalPrice);
+
+            return $finalPrice;
         }
-        $finalPrice = $priceInfo->getPrice('final_price')->getAmount()->getValue();
-        $finalPrice = $this->_applyOptionsPrice($product, $qty, $finalPrice);
-        $finalPrice = max(0, $finalPrice);
-        $product->setFinalPrice($finalPrice);
+    }
 
-        return $finalPrice;
+    /**
+     * {@inheritdoc}
+     */
+    public function getPrice($product)
+    {
+        if ($product->getCustomOption('simple_product')) {
+            return $product->getCustomOption('simple_product')->getProduct()->getPrice();
+        } else {
+            return 0;
+        }
     }
 }
diff --git a/app/code/Magento/ConfigurableProduct/Pricing/Price/BasePrice.php b/app/code/Magento/ConfigurableProduct/Pricing/Price/BasePrice.php
deleted file mode 100644
index 76f2ef5cdd9..00000000000
--- a/app/code/Magento/ConfigurableProduct/Pricing/Price/BasePrice.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-namespace Magento\ConfigurableProduct\Pricing\Price;
-
-use \Magento\Framework\Pricing\Price\BasePriceProviderInterface;
-
-class BasePrice extends \Magento\Catalog\Pricing\Price\BasePrice
-{
-    /**
-     * @var array
-     */
-    protected $values = [];
-
-    /**
-     * @var null|boolean|float
-     */
-    protected $minimumAdditionalPrice;
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getValue()
-    {
-        $selectedConfigurableOption = $this->product->getSelectedConfigurableOption();
-        $productId = $selectedConfigurableOption ? $selectedConfigurableOption->getId() : $this->product->getId();
-        if (!isset($this->values[$productId])) {
-            $this->value = null;
-            if (!$selectedConfigurableOption) {
-                $this->values[$productId] = parent::getValue();
-            } else {
-                if (false !== $this->getMinimumAdditionalPrice()) {
-                    $this->values[$productId] = $this->getMinimumAdditionalPrice();
-                } else {
-                    $this->values[$productId] = parent::getValue();
-                }
-            }
-        }
-        return $this->values[$productId];
-    }
-
-    /**
-     * @return bool|float
-     */
-    protected function getMinimumAdditionalPrice()
-    {
-        if (null === $this->minimumAdditionalPrice) {
-            $priceCodes = [
-                \Magento\Catalog\Pricing\Price\SpecialPrice::PRICE_CODE,
-                \Magento\Catalog\Pricing\Price\TierPrice::PRICE_CODE,
-            ];
-            $this->minimumAdditionalPrice = false;
-            foreach ($priceCodes as $priceCode) {
-                $price = $this->product->getPriceInfo()->getPrice($priceCode);
-                if ($price instanceof BasePriceProviderInterface && $price->getValue() !== false) {
-                    $this->minimumAdditionalPrice = min(
-                        $price->getValue(),
-                        $this->minimumAdditionalPrice ?: $price->getValue()
-                    );
-                }
-            }
-        }
-        return $this->minimumAdditionalPrice;
-    }
-}
diff --git a/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurablePriceResolver.php b/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurablePriceResolver.php
index d0f2461c96a..d04e4fb79f2 100644
--- a/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurablePriceResolver.php
+++ b/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurablePriceResolver.php
@@ -37,22 +37,22 @@ class ConfigurablePriceResolver implements PriceResolverInterface
     }
 
     /**
-     * @param \Magento\Framework\Pricing\SaleableInterface $product
+     * @param \Magento\Framework\Pricing\SaleableInterface|\Magento\Catalog\Model\Product $product
      * @return float
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function resolvePrice(\Magento\Framework\Pricing\SaleableInterface $product)
     {
-        $selectedConfigurableOption = $product->getSelectedConfigurableOption();
-        if ($selectedConfigurableOption) {
-            $price = $this->priceResolver->resolvePrice($selectedConfigurableOption);
-        } else {
-            $price = null;
-            foreach ($this->configurable->getUsedProducts($product) as $subProduct) {
-                $productPrice = $this->priceResolver->resolvePrice($subProduct);
-                $price = $price ? min($price, $productPrice) : $productPrice;
-            }
+        $price = null;
+        foreach ($this->configurable->getUsedProducts($product) as $subProduct) {
+            $productPrice = $this->priceResolver->resolvePrice($subProduct);
+            $price = $price ? min($price, $productPrice) : $productPrice;
         }
-        $priceInCurrentCurrency = $this->priceCurrency->convertAndRound($price);
-        return $priceInCurrentCurrency ? (float)$priceInCurrentCurrency : false;
+        if (!$price) {
+            throw new \Magento\Framework\Exception\LocalizedException(
+                __('Configurable product "%s" do not have sub-products', $product->getName())
+            );
+        }
+        return (float)$price;
     }
 }
diff --git a/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurableRegularPrice.php b/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurableRegularPrice.php
index de5ea0dcb07..936698cef35 100644
--- a/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurableRegularPrice.php
+++ b/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurableRegularPrice.php
@@ -61,20 +61,19 @@ class ConfigurableRegularPrice extends AbstractPrice implements ConfigurableRegu
      */
     public function getValue()
     {
-        $selectedConfigurableOption = $this->product->getSelectedConfigurableOption();
-        $productId = $selectedConfigurableOption ? $selectedConfigurableOption->getId() : $this->product->getId();
-        if (!isset($this->values[$productId])) {
-            $this->values[$productId] = $this->priceResolver->resolvePrice($this->product);
+        if (!isset($this->values[$this->product->getId()])) {
+            $this->values[$this->product->getId()] = $this->priceResolver->resolvePrice($this->product);
         }
 
-        return $this->values[$productId];
+        return $this->values[$this->product->getId()];
     }
+
     /**
      * {@inheritdoc}
      */
     public function getAmount()
     {
-        return $this->getMinRegularAmount($this->product);
+        return $this->getMinRegularAmount();
     }
 
     /**
@@ -116,7 +115,6 @@ class ConfigurableRegularPrice extends AbstractPrice implements ConfigurableRegu
             $this->minRegularAmount = $this->doGetMinRegularAmount() ?: false;
         }
         return $this->minRegularAmount;
-
     }
 
     /**
diff --git a/app/code/Magento/ConfigurableProduct/Pricing/Price/FinalPrice.php b/app/code/Magento/ConfigurableProduct/Pricing/Price/FinalPrice.php
index 3d7cfd251d5..834df6ffd42 100644
--- a/app/code/Magento/ConfigurableProduct/Pricing/Price/FinalPrice.php
+++ b/app/code/Magento/ConfigurableProduct/Pricing/Price/FinalPrice.php
@@ -34,28 +34,15 @@ class FinalPrice extends \Magento\Catalog\Pricing\Price\FinalPrice
         $this->priceResolver = $priceResolver;
     }
 
-    /**
-     * {@inheritdoc}
-     */
-    public function getAmount()
-    {
-        if ($this->product->getSelectedConfigurableOption()) {
-            $this->amount = null;
-        }
-        return parent::getAmount();
-    }
-
     /**
      * {@inheritdoc}
      */
     public function getValue()
     {
-        $selectedConfigurableOption = $this->product->getSelectedConfigurableOption();
-        $productId = $selectedConfigurableOption ? $selectedConfigurableOption->getId() : $this->product->getId();
-        if (!isset($this->values[$productId])) {
-            $this->values[$productId] = $this->priceResolver->resolvePrice($this->product);
+        if (!isset($this->values[$this->product->getId()])) {
+            $this->values[$this->product->getId()] = $this->priceResolver->resolvePrice($this->product);
         }
 
-        return $this->values[$productId];
+        return $this->values[$this->product->getId()];
     }
 }
diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Type/Configurable/PriceTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Type/Configurable/PriceTest.php
index 7d14671ec0d..7757b435624 100644
--- a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Type/Configurable/PriceTest.php
+++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Type/Configurable/PriceTest.php
@@ -31,11 +31,7 @@ class PriceTest extends \PHPUnit_Framework_TestCase
         $qty = 1;
         $configurableProduct = $this->getMockBuilder('Magento\Catalog\Model\Product')
             ->disableOriginalConstructor()
-            ->setMethods(['getCustomOption', 'setSelectedConfigurableOption', 'setFinalPrice', '__wakeUp'])
-            ->getMock();
-        $childProduct = $this->getMockBuilder('Magento\Catalog\Model\Product')
-            ->disableOriginalConstructor()
-            ->setMethods(['getPriceInfo', '__wakeUp'])
+            ->setMethods(['getCustomOption', 'getPriceInfo', 'setFinalPrice', '__wakeUp'])
             ->getMock();
         $customOption = $this->getMockBuilder('Magento\Catalog\Model\Product\Configuration\Item\Option')
             ->disableOriginalConstructor()
@@ -52,24 +48,14 @@ class PriceTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        $configurableProduct->expects($this->at(0))
-            ->method('getCustomOption')
-            ->with('simple_product')
-            ->willReturn($customOption);
-        $configurableProduct->expects($this->at(1))
+        $configurableProduct->expects($this->any())
             ->method('getCustomOption')
-            ->with('simple_product')
-            ->willReturn($customOption);
-        $customOption->expects($this->once())->method('getProduct')->willReturn($childProduct);
-        $configurableProduct->expects($this->once())
-            ->method('setSelectedConfigurableOption')
-            ->with($childProduct)
-            ->willReturnSelf();
-        $childProduct->expects($this->once())->method('getPriceInfo')->willReturn($priceInfo);
+            ->willReturnMap([['simple_product', false], ['option_ids', false]]);
+        $customOption->expects($this->never())->method('getProduct');
+        $configurableProduct->expects($this->once())->method('getPriceInfo')->willReturn($priceInfo);
         $priceInfo->expects($this->once())->method('getPrice')->with('final_price')->willReturn($price);
         $price->expects($this->once())->method('getAmount')->willReturn($amount);
         $amount->expects($this->once())->method('getValue')->willReturn($finalPrice);
-        $configurableProduct->expects($this->at(3))->method('getCustomOption')->with('option_ids')->willReturn(false);
         $configurableProduct->expects($this->once())->method('setFinalPrice')->with($finalPrice)->willReturnSelf();
 
         $this->assertEquals($finalPrice, $this->model->getFinalPrice($qty, $configurableProduct));
diff --git a/app/code/Magento/ConfigurableProduct/etc/di.xml b/app/code/Magento/ConfigurableProduct/etc/di.xml
index ff1173c2e09..e2463e52daa 100644
--- a/app/code/Magento/ConfigurableProduct/etc/di.xml
+++ b/app/code/Magento/ConfigurableProduct/etc/di.xml
@@ -70,7 +70,6 @@
             <argument name="prices" xsi:type="array">
                 <item name="regular_price" xsi:type="string">Magento\ConfigurableProduct\Pricing\Price\ConfigurableRegularPrice</item>
                 <item name="final_price" xsi:type="string">Magento\ConfigurableProduct\Pricing\Price\FinalPrice</item>
-                <item name="base_price" xsi:type="string">Magento\ConfigurableProduct\Pricing\Price\BasePrice</item>
             </argument>
             <argument name="target" xsi:type="object">Magento\Catalog\Pricing\Price\Pool</argument>
         </arguments>
-- 
GitLab


From 18c161f22bfa59ac5217f0f73cf8d09a8ca456a9 Mon Sep 17 00:00:00 2001
From: Dmitry Kologrivov <dmitry_kologrivov@epam.com>
Date: Fri, 23 Oct 2015 19:01:01 +0300
Subject: [PATCH 263/370] PV-7: Fix fotorama with media on storfront

---
 .../view/frontend/web/js/fotorama-add-video-events.js | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
index c2795990c58..3b7b89a4579 100644
--- a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
+++ b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
@@ -134,22 +134,17 @@ define([
          */
         _createVideoData: function (inputData, isJSON) {
             var videoData = {},
-                key,
                 dataUrl,
                 tmpVideoData,
                 tmpInputData,
-                inputDataKeys,
                 i;
 
             if (isJSON) {
                 inputData = $.parseJSON(inputData);
             }
 
-            inputDataKeys = Object.keys(inputData);
-
-            for (i = 0; i < inputDataKeys.length; i++) {
-                key = inputDataKeys[i];
-                tmpInputData = inputData[key];
+            for (i = 0; i < inputData.length; i++) {
+                tmpInputData = inputData[i];
                 dataUrl = '';
                 tmpVideoData = {
                     mediaType: '',
@@ -172,7 +167,7 @@ define([
                     tmpVideoData.provider = dataUrl.type;
                 }
 
-                videoData[key] = tmpVideoData;
+                videoData[i] = tmpVideoData;
             }
 
             return videoData;
-- 
GitLab


From b20c8187533451d52ec88aa9c02060247ae7e875 Mon Sep 17 00:00:00 2001
From: Dmytro Aponasenko <daponasenko@ebay.com>
Date: Fri, 23 Oct 2015 19:43:41 +0300
Subject: [PATCH 264/370] MTA-2723: Functional test maintenance. Part 2

---
 .../app/Magento/Checkout/Test/Block/Cart/Sidebar/Item.php    | 1 +
 .../Adminhtml/Integration/IntegrationGrid/ResourcesPopup.php | 2 +-
 .../Adminhtml/Integration/IntegrationGrid/TokensPopup.php    | 2 +-
 .../AssertSitemapSuccessSaveAndGenerateMessages.php          | 2 +-
 .../AssertStoreGroupSuccessDeleteAndBackupMessages.php       | 2 +-
 .../Constraint/AssertStoreSuccessDeleteAndBackupMessages.php | 2 +-
 .../tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php      | 5 +----
 .../Magento/User/Test/Block/Adminhtml/Role/Tab/User/Grid.php | 2 +-
 8 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar/Item.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar/Item.php
index 43dbd23499a..f49a19118ed 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar/Item.php
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar/Item.php
@@ -47,6 +47,7 @@ class Item extends Sidebar
         /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
         $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
         $modal->acceptAlert();
+        $modal->waitModalWindowToDisappear();
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Integration/Test/Block/Adminhtml/Integration/IntegrationGrid/ResourcesPopup.php b/dev/tests/functional/tests/app/Magento/Integration/Test/Block/Adminhtml/Integration/IntegrationGrid/ResourcesPopup.php
index 9c25994a869..2436c28e37c 100644
--- a/dev/tests/functional/tests/app/Magento/Integration/Test/Block/Adminhtml/Integration/IntegrationGrid/ResourcesPopup.php
+++ b/dev/tests/functional/tests/app/Magento/Integration/Test/Block/Adminhtml/Integration/IntegrationGrid/ResourcesPopup.php
@@ -23,7 +23,7 @@ class ResourcesPopup extends Form
      *
      * @var string
      */
-    protected $allowButtonSelector = '[data-row-dialog="tokens"][role="button"]';
+    protected $allowButtonSelector = '[data-row-dialog="tokens"][type="button"]';
 
     /**
      * Selector for "Reauthorize" button.
diff --git a/dev/tests/functional/tests/app/Magento/Integration/Test/Block/Adminhtml/Integration/IntegrationGrid/TokensPopup.php b/dev/tests/functional/tests/app/Magento/Integration/Test/Block/Adminhtml/Integration/IntegrationGrid/TokensPopup.php
index e7307befb74..2fecf03fc4d 100644
--- a/dev/tests/functional/tests/app/Magento/Integration/Test/Block/Adminhtml/Integration/IntegrationGrid/TokensPopup.php
+++ b/dev/tests/functional/tests/app/Magento/Integration/Test/Block/Adminhtml/Integration/IntegrationGrid/TokensPopup.php
@@ -18,7 +18,7 @@ class TokensPopup extends Form
      *
      * @var string
      */
-    protected $doneButtonSelector = '.action-primary[role="button"]';
+    protected $doneButtonSelector = '.action-primary[type="button"]';
 
     /**
      * Click Done button on Integration tokens popup window.
diff --git a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapSuccessSaveAndGenerateMessages.php b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapSuccessSaveAndGenerateMessages.php
index 95db429103c..a2924af474a 100644
--- a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapSuccessSaveAndGenerateMessages.php
+++ b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Constraint/AssertSitemapSuccessSaveAndGenerateMessages.php
@@ -28,7 +28,7 @@ class AssertSitemapSuccessSaveAndGenerateMessages extends AbstractConstraint
      */
     public function processAssert(SitemapIndex $sitemapIndex, Sitemap $sitemap)
     {
-        $actualMessages = $sitemapIndex->getMessagesBlock()->getSuccessMessage();
+        $actualMessages = $sitemapIndex->getMessagesBlock()->getSuccessMessages();
         \PHPUnit_Framework_Assert::assertTrue(
             in_array(self::SUCCESS_SAVE_MESSAGE, $actualMessages) &&
             in_array(sprintf(self::SUCCESS_GENERATE_MESSAGE, $sitemap->getSitemapFilename()), $actualMessages),
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreGroupSuccessDeleteAndBackupMessages.php b/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreGroupSuccessDeleteAndBackupMessages.php
index e51bc86359a..7d101ed70c6 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreGroupSuccessDeleteAndBackupMessages.php
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreGroupSuccessDeleteAndBackupMessages.php
@@ -33,7 +33,7 @@ class AssertStoreGroupSuccessDeleteAndBackupMessages extends AbstractConstraint
      */
     public function processAssert(StoreIndex $storeIndex)
     {
-        $actualMessages = $storeIndex->getMessagesBlock()->getSuccessMessage();
+        $actualMessages = $storeIndex->getMessagesBlock()->getSuccessMessages();
         \PHPUnit_Framework_Assert::assertTrue(
             in_array(self::SUCCESS_BACKUP_MESSAGE, $actualMessages) &&
             in_array(self::SUCCESS_DELETE_MESSAGE, $actualMessages),
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreSuccessDeleteAndBackupMessages.php b/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreSuccessDeleteAndBackupMessages.php
index 113b9a7af0a..30993d6f2fc 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreSuccessDeleteAndBackupMessages.php
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/Constraint/AssertStoreSuccessDeleteAndBackupMessages.php
@@ -33,7 +33,7 @@ class AssertStoreSuccessDeleteAndBackupMessages extends AbstractConstraint
      */
     public function processAssert(StoreIndex $storeIndex)
     {
-        $actualMessages = $storeIndex->getMessagesBlock()->getSuccessMessage();
+        $actualMessages = $storeIndex->getMessagesBlock()->getSuccessMessages();
         \PHPUnit_Framework_Assert::assertTrue(
             in_array(self::SUCCESS_BACKUP_MESSAGE, $actualMessages) &&
             in_array(self::SUCCESS_DELETE_MESSAGE, $actualMessages),
diff --git a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php
index 4dbe091458f..f2ecfee702b 100644
--- a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php
+++ b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php
@@ -56,7 +56,6 @@ class Modal extends Block
     public function acceptAlert()
     {
         $this->_rootElement->find($this->acceptButtonSelector)->click();
-        $this->waitModalWindowToDisappear();
     }
 
     /**
@@ -67,7 +66,6 @@ class Modal extends Block
     public function dismissAlert()
     {
         $this->_rootElement->find($this->dismissButtonSelector)->click();
-        $this->waitModalWindowToDisappear();
     }
 
     /**
@@ -78,7 +76,6 @@ class Modal extends Block
     public function closeAlert()
     {
         $this->_rootElement->find($this->closeButtonSelector)->click();
-        $this->waitModalWindowToDisappear();
     }
 
     /**
@@ -107,7 +104,7 @@ class Modal extends Block
      *
      * @return void
      */
-    protected function waitModalWindowToDisappear()
+    public function waitModalWindowToDisappear()
     {
         $this->browser->waitUntil(
             function () {
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Block/Adminhtml/Role/Tab/User/Grid.php b/dev/tests/functional/tests/app/Magento/User/Test/Block/Adminhtml/Role/Tab/User/Grid.php
index ab1ea537ea6..ec0c365b817 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Block/Adminhtml/Role/Tab/User/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Block/Adminhtml/Role/Tab/User/Grid.php
@@ -30,5 +30,5 @@ class Grid extends AbstractGrid
      *
      * @var string
      */
-    protected $selectItem = '.col-in_role_users > input';
+    protected $selectItem = '.col-in_role_users input';
 }
-- 
GitLab


From e7e4da75dddc00b3adb1d23d2ec85c911a91e9ed Mon Sep 17 00:00:00 2001
From: "Gurzhyi, Andrii" <agurzhyi@ebay.com>
Date: Fri, 23 Oct 2015 21:20:50 +0300
Subject: [PATCH 265/370] MAGETWO-44443: Grunt less task fails

- Create command for deploy source files of theme
---
 app/code/Magento/Deploy/Model/Filesystem.php  |  10 +-
 .../Console/Command/CssDeployCommand.php      | 241 ------------------
 .../Command/SourceThemeDeployCommand.php      | 173 +++++++++++++
 .../FileGenerator/PublicationDecorator.php    |  20 +-
 .../Console/Command/CssDeployCommandTest.php  | 191 --------------
 app/code/Magento/Developer/etc/di.xml         |  69 ++++-
 app/code/Magento/Translation/etc/di.xml       |   4 +-
 dev/tools/grunt/configs/combo.js              |  10 +-
 8 files changed, 265 insertions(+), 453 deletions(-)
 delete mode 100644 app/code/Magento/Developer/Console/Command/CssDeployCommand.php
 create mode 100644 app/code/Magento/Developer/Console/Command/SourceThemeDeployCommand.php
 delete mode 100644 app/code/Magento/Developer/Test/Unit/Console/Command/CssDeployCommandTest.php

diff --git a/app/code/Magento/Deploy/Model/Filesystem.php b/app/code/Magento/Deploy/Model/Filesystem.php
index 178ad26a2d0..3f695ea4704 100644
--- a/app/code/Magento/Deploy/Model/Filesystem.php
+++ b/app/code/Magento/Deploy/Model/Filesystem.php
@@ -6,11 +6,10 @@
 
 namespace Magento\Deploy\Model;
 
-use Symfony\Component\Console\Output\OutputInterface;
 use Magento\Framework\App\State;
 use Magento\Framework\App\DeploymentConfig\Writer;
 use Magento\Framework\App\Filesystem\DirectoryList;
-use Magento\Developer\Console\Command\CssDeployCommand;
+use Magento\Developer\Console\Command\SourceThemeDeployCommand;
 
 /**
  * A class to manage Magento modes
@@ -137,9 +136,10 @@ class Filesystem
         $themeLocalePairs = $this->storeView->retrieveThemeLocalePairs();
         foreach ($themeLocalePairs as $themeLocalePair) {
             $theme = $themeLocalePair['theme'] ?: self::DEFAULT_THEME;
-            $cmd = $this->functionCallPath . 'dev:css:deploy less'
-                . ' --' . CssDeployCommand::THEME_OPTION . '="' . $theme . '"'
-                . ' --' . CssDeployCommand::LOCALE_OPTION . '="' . $themeLocalePair['locale'] . '"';
+            $cmd = $this->functionCallPath . 'dev:source_theme:deploy'
+                . ' --' . SourceThemeDeployCommand::TYPE_ARGUMENT . '="less"'
+                . ' --' . SourceThemeDeployCommand::THEME_OPTION . '="' . $theme . '"'
+                . ' --' . SourceThemeDeployCommand::LOCALE_OPTION . '="' . $themeLocalePair['locale'] . '"';
 
             /**
              * @todo build a solution that does not depend on exec
diff --git a/app/code/Magento/Developer/Console/Command/CssDeployCommand.php b/app/code/Magento/Developer/Console/Command/CssDeployCommand.php
deleted file mode 100644
index ac651b633d0..00000000000
--- a/app/code/Magento/Developer/Console/Command/CssDeployCommand.php
+++ /dev/null
@@ -1,241 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-namespace Magento\Developer\Console\Command;
-
-use Magento\Framework\View\Asset\PreProcessor\Pool;
-use Symfony\Component\Console\Command\Command;
-use Symfony\Component\Console\Input\InputArgument;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
-use Magento\Framework\Filesystem;
-use Magento\Framework\View\Asset\Source;
-use Magento\Framework\App\State;
-use Magento\Framework\View\Asset\Repository;
-use Magento\Framework\ObjectManagerInterface;
-use Magento\Framework\App\ObjectManager\ConfigLoader;
-use Magento\Framework\View\Asset\PreProcessor\ChainFactoryInterface;
-use Magento\Framework\App\Filesystem\DirectoryList;
-use Magento\Framework\Validator\Locale;
-
-/**
- * Class CssDeployCommand - collects, processes and publishes source files like LESS or SASS
- * @SuppressWarnings("PMD.CouplingBetweenObjects")
- */
-class CssDeployCommand extends Command
-{
-    /**
-     * Locale option key
-     */
-    const LOCALE_OPTION = 'locale';
-
-    /**
-     * Area option key
-     */
-    const AREA_OPTION = 'area';
-
-    /**
-     * Theme option key
-     */
-    const THEME_OPTION = 'theme';
-
-    /**
-     * Type argument key
-     */
-    const TYPE_ARGUMENT = 'type';
-
-    /**
-     * Files argument key
-     */
-    const FILE_ARGUMENT = 'file';
-
-    /**
-     * @var ObjectManagerInterface
-     */
-    private $objectManager;
-
-    /**
-     * @var Repository
-     */
-    private $assetRepo;
-
-    /**
-     * @var ConfigLoader
-     */
-    private $configLoader;
-
-    /**
-     * @var State
-     */
-    private $state;
-
-    /**
-     * @var Source
-     */
-    private $assetSource;
-
-    /**
-     * @var ChainFactoryInterface
-     */
-    private $chainFactory;
-
-    /**
-     * @var Filesystem
-     */
-    private $filesystem;
-
-    /**
-     * @var Locale
-     */
-    private $validator;
-
-    /**
-     * @var Pool
-     */
-    private $pool;
-
-    /**
-     * Inject dependencies
-     *
-     * @param ObjectManagerInterface $objectManager
-     * @param Repository $assetRepo
-     * @param ConfigLoader $configLoader
-     * @param State $state
-     * @param Source $assetSource
-     * @param ChainFactoryInterface $chainFactory
-     * @param Filesystem $filesystem
-     * @param Locale $validator
-     * @param Pool $pool
-     */
-    public function __construct(
-        ObjectManagerInterface $objectManager,
-        Repository $assetRepo,
-        ConfigLoader $configLoader,
-        State $state,
-        Source $assetSource,
-        ChainFactoryInterface $chainFactory,
-        Filesystem $filesystem,
-        Locale $validator,
-        Pool $pool
-    ) {
-        $this->state = $state;
-        $this->objectManager = $objectManager;
-        $this->configLoader = $configLoader;
-        $this->assetRepo = $assetRepo;
-        $this->assetSource = $assetSource;
-        $this->chainFactory = $chainFactory;
-        $this->filesystem = $filesystem;
-        $this->validator = $validator;
-
-        parent::__construct();
-        $this->pool = $pool;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function configure()
-    {
-        $this->setName('dev:css:deploy')
-            ->setDescription('Collects, processes and publishes source LESS files')
-            ->setDefinition([
-                new InputArgument(
-                    self::TYPE_ARGUMENT,
-                    InputArgument::REQUIRED,
-                    'Type of dynamic stylesheet language: [less]'
-                ),
-                new InputArgument(
-                    self::FILE_ARGUMENT,
-                    InputArgument::IS_ARRAY,
-                    'Files to pre-process (file should be specified without extension)',
-                    ['css/styles-m']
-                ),
-                new InputOption(
-                    self::LOCALE_OPTION,
-                    null,
-                    InputOption::VALUE_REQUIRED,
-                    'Locale',
-                    'en_US'
-                ),
-                new InputOption(
-                    self::AREA_OPTION,
-                    null,
-                    InputOption::VALUE_REQUIRED,
-                    'Area, one of [frontend|adminhtml]',
-                    'frontend'
-                ),
-                new InputOption(
-                    self::THEME_OPTION,
-                    null,
-                    InputOption::VALUE_REQUIRED,
-                    'Theme in format Vendor/theme',
-                    'Magento/blank'
-                ),
-
-            ]);
-
-        parent::configure();
-    }
-
-    /**
-     * {@inheritdoc}
-     * @throws \InvalidArgumentException
-     */
-    protected function execute(InputInterface $input, OutputInterface $output)
-    {
-        $locale = $input->getOption(self::LOCALE_OPTION);
-
-        if (!$this->validator->isValid($locale)) {
-            throw new \InvalidArgumentException(
-                $locale . ' argument has invalid value, please run info:language:list for list of available locales'
-            );
-        }
-
-        $area = $input->getOption(self::AREA_OPTION);
-        $theme = $input->getOption(self::THEME_OPTION);
-
-        $type = $input->getArgument(self::TYPE_ARGUMENT);
-
-        $this->state->setAreaCode($area);
-        $this->objectManager->configure($this->configLoader->load($area));
-
-        foreach ($input->getArgument(self::FILE_ARGUMENT) as $file) {
-            $file .= '.' . $type;
-
-            $output->writeln("<info>Gathering {$file} sources.</info>");
-
-            $asset = $this->assetRepo->createAsset(
-                $file,
-                [
-                    'area' => $area,
-                    'theme' => $theme,
-                    'locale' => $locale,
-                ]
-            );
-
-            $rootDir = $this->filesystem->getDirectoryWrite(DirectoryList::ROOT);
-            $sourceFile = $this->assetSource->findSource($asset);
-            $relativePath = $rootDir->getRelativePath($sourceFile);
-            $content = $rootDir->readFile($relativePath);
-
-            $chain = $this->chainFactory->create(
-                [
-                    'asset'           => $asset,
-                    'origContent'     => $content,
-                    'origContentType' => $asset->getContentType(),
-                    'origAssetPath'   => $relativePath
-                ]
-            );
-
-            $this->pool->process($chain);
-            $targetDir = $this->filesystem->getDirectoryWrite(DirectoryList::STATIC_VIEW);
-            $targetDir->writeFile($chain->getAsset()->getPath(), $chain->getContent());
-
-            $output->writeln('<info>Successfully processed dynamic stylesheet into CSS</info>');
-        }
-    }
-}
diff --git a/app/code/Magento/Developer/Console/Command/SourceThemeDeployCommand.php b/app/code/Magento/Developer/Console/Command/SourceThemeDeployCommand.php
new file mode 100644
index 00000000000..4ae886b3b8d
--- /dev/null
+++ b/app/code/Magento/Developer/Console/Command/SourceThemeDeployCommand.php
@@ -0,0 +1,173 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Developer\Console\Command;
+
+use Magento\Framework\App\State;
+use Magento\Framework\Validator\Locale;
+use Magento\Framework\View\Asset\Repository;
+use Symfony\Component\Console\Command\Command;
+use Magento\Framework\App\View\Asset\Publisher;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * Class SourceThemeDeployCommand
+ *
+ * Collects and publishes source files for theme
+ */
+class SourceThemeDeployCommand extends Command
+{
+    /**
+     * Locale option key
+     */
+    const LOCALE_OPTION = 'locale';
+
+    /**
+     * Area option key
+     */
+    const AREA_OPTION = 'area';
+
+    /**
+     * Theme option key
+     */
+    const THEME_OPTION = 'theme';
+
+    /**
+     * Type argument key
+     */
+    const TYPE_ARGUMENT = 'type';
+
+    /**
+     * Files argument key
+     */
+    const FILE_ARGUMENT = 'file';
+
+    /**
+     * @var Locale
+     */
+    private $validator;
+
+    /**
+     * @var Publisher
+     */
+    private $assetPublisher;
+
+    /**
+     * @var Repository
+     */
+    private $assetRepository;
+
+    /**
+     * Constructor
+     *
+     * @param Locale $validator
+     * @param Publisher $assetPublisher
+     * @param Repository $assetRepository
+     */
+    public function __construct(
+        Locale $validator,
+        Publisher $assetPublisher,
+        Repository $assetRepository
+    ) {
+        parent::__construct('dev:source_theme:deploy');
+        $this->validator = $validator;
+        $this->assetPublisher = $assetPublisher;
+        $this->assetRepository = $assetRepository;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        parent::configure();
+        $this->setDescription('Collects and publishes source files for theme.')
+            ->setDefinition([
+                new InputArgument(
+                    self::FILE_ARGUMENT,
+                    InputArgument::IS_ARRAY,
+                    'Files to pre-process (file should be specified without extension)',
+                    ['css/styles-m', 'css/styles-l']
+                ),
+                new InputOption(
+                    self::TYPE_ARGUMENT,
+                    null,
+                    InputOption::VALUE_REQUIRED,
+                    'Type of source files: [less]',
+                    'less'
+                ),
+                new InputOption(
+                    self::LOCALE_OPTION,
+                    null,
+                    InputOption::VALUE_REQUIRED,
+                    'Locale: [en_US]',
+                    'en_US'
+                ),
+                new InputOption(
+                    self::AREA_OPTION,
+                    null,
+                    InputOption::VALUE_REQUIRED,
+                    'Area: [frontend|adminhtml]',
+                    'frontend'
+                ),
+                new InputOption(
+                    self::THEME_OPTION,
+                    null,
+                    InputOption::VALUE_REQUIRED,
+                    'Theme: [Vendor/theme]',
+                    'Magento/luma'
+                ),
+
+            ]);
+    }
+
+    /**
+     * @inheritdoc
+     * @throws \InvalidArgumentException
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $area = $input->getOption(self::AREA_OPTION);
+        $locale = $input->getOption(self::LOCALE_OPTION);
+        $theme = $input->getOption(self::THEME_OPTION);
+        $type = $input->getOption(self::TYPE_ARGUMENT);
+
+        $files = $input->getArgument(self::FILE_ARGUMENT);
+
+        if (!$this->validator->isValid($locale)) {
+            throw new \InvalidArgumentException(
+                $locale . ' argument has invalid value, please run info:language:list for list of available locales'
+            );
+        }
+        $message = sprintf(
+            '<info>Processed Area: %s, Locale: %s, Theme: %s, File type: %s.</info>',
+            $area,
+            $locale,
+            $theme,
+            $type
+        );
+        $output->writeln($message);
+
+        foreach ($files as $file) {
+            $fileInfo = pathinfo($file);
+            $asset = $this->assetRepository->createAsset(
+                $fileInfo['dirname'] . DIRECTORY_SEPARATOR . $fileInfo['basename'] . '.' . $type,
+                [
+                    'area' => $area,
+                    'theme' => $theme,
+                    'locale' => $locale,
+                ]
+            );
+
+            $this->assetPublisher->publish($asset);
+            $output->writeln('<comment>-> ' . $asset->getFilePath() . '</comment>');
+        }
+
+        $output->writeln('<info>Successfully processed stylesheet</info>');
+    }
+}
diff --git a/app/code/Magento/Developer/Model/Css/PreProcessor/FileGenerator/PublicationDecorator.php b/app/code/Magento/Developer/Model/Css/PreProcessor/FileGenerator/PublicationDecorator.php
index 79c47044319..7c14c8f9e1d 100644
--- a/app/code/Magento/Developer/Model/Css/PreProcessor/FileGenerator/PublicationDecorator.php
+++ b/app/code/Magento/Developer/Model/Css/PreProcessor/FileGenerator/PublicationDecorator.php
@@ -5,45 +5,47 @@
  */
 namespace Magento\Developer\Model\Css\PreProcessor\FileGenerator;
 
-use Magento\Framework\Css\PreProcessor\FileGenerator\RelatedGenerator;
 use Magento\Framework\View\Asset\LocalInterface;
+use Magento\Framework\Css\PreProcessor\FileGenerator\RelatedGenerator;
 
 /**
  * Class PublicationDecorator
- * Decorates generator of related assets and publishes them
  *
- * @package Magento\Developer\Model\Less\FileGenerator
+ * Decorates generator of related assets and publishes them
  */
 class PublicationDecorator extends RelatedGenerator
 {
     /**
      * @var \Magento\Framework\App\View\Asset\Publisher
      */
-    private $publisher;
+    private $assetPublisher;
 
     /**
+     * Constructor
+     *
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Framework\View\Asset\Repository $assetRepo
      * @param \Magento\Framework\Css\PreProcessor\File\Temporary $temporaryFile
-     * @param \Magento\Framework\App\View\Asset\Publisher $publisher
+     * @param \Magento\Framework\App\View\Asset\Publisher $assetPublisher
      */
     public function __construct(
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Framework\View\Asset\Repository $assetRepo,
         \Magento\Framework\Css\PreProcessor\File\Temporary $temporaryFile,
-        \Magento\Framework\App\View\Asset\Publisher $publisher
+        \Magento\Framework\App\View\Asset\Publisher $assetPublisher
     ) {
         parent::__construct($filesystem, $assetRepo, $temporaryFile);
-        $this->publisher = $publisher;
+        $this->assetPublisher = $assetPublisher;
     }
 
     /**
-     * {inheritdoc}
+     * @inheritdoc
      */
     protected function generateRelatedFile($relatedFileId, LocalInterface $asset)
     {
         $relatedAsset = parent::generateRelatedFile($relatedFileId, $asset);
-        $this->publisher->publish($relatedAsset);
+        $this->assetPublisher->publish($relatedAsset);
+
         return $relatedAsset;
     }
 }
diff --git a/app/code/Magento/Developer/Test/Unit/Console/Command/CssDeployCommandTest.php b/app/code/Magento/Developer/Test/Unit/Console/Command/CssDeployCommandTest.php
deleted file mode 100644
index 0d930989e42..00000000000
--- a/app/code/Magento/Developer/Test/Unit/Console/Command/CssDeployCommandTest.php
+++ /dev/null
@@ -1,191 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-namespace Magento\Developer\Test\Unit\Console\Command;
-
-use Magento\Framework\Filesystem;
-use Magento\Framework\View\Asset\PreProcessor\Pool;
-use Magento\Framework\View\Asset\Source;
-use Magento\Framework\App\State;
-use Magento\Framework\View\Asset\Repository;
-use Magento\Framework\ObjectManagerInterface;
-use Magento\Framework\App\ObjectManager\ConfigLoader;
-use Magento\Framework\View\Asset\PreProcessor\ChainFactoryInterface;
-use Magento\Developer\Console\Command\CssDeployCommand;
-use Symfony\Component\Console\Tester\CommandTester;
-use Magento\Framework\Validator\Locale;
-
-/**
- * Class CssDeployCommandTest
- */
-class CssDeployCommandTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @var CssDeployCommand
-     */
-    private $command;
-
-    /**
-     * @var ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject
-     */
-    private $objectManager;
-
-    /**
-     * @var Repository|\PHPUnit_Framework_MockObject_MockObject
-     */
-    private $assetRepo;
-
-    /**
-     * @var ConfigLoader|\PHPUnit_Framework_MockObject_MockObject
-     */
-    private $configLoader;
-
-    /**
-     * @var State|\PHPUnit_Framework_MockObject_MockObject
-     */
-    private $state;
-
-    /**
-     * @var Source|\PHPUnit_Framework_MockObject_MockObject
-     */
-    private $assetSource;
-
-    /**
-     * @var ChainFactoryInterface|\PHPUnit_Framework_MockObject_MockObject
-     */
-    private $chainFactory;
-
-    /**
-     * @var Filesystem|\PHPUnit_Framework_MockObject_MockObject
-     */
-    private $filesystem;
-
-    /**
-     * @var Locale|\PHPUnit_Framework_MockObject_MockObject
-     */
-    private $validator;
-
-    /**
-     * @var Pool|\PHPUnit_Framework_MockObject_MockObject
-     */
-    private $poolMock;
-
-    public function setUp()
-    {
-        $this->objectManager = $this->getMockForAbstractClass('Magento\Framework\ObjectManagerInterface');
-        $this->assetRepo = $this->getMock('Magento\Framework\View\Asset\Repository', [], [], '', false);
-        $this->configLoader = $this->getMock('Magento\Framework\App\ObjectManager\ConfigLoader', [], [], '', false);
-        $this->state = $this->getMock('Magento\Framework\App\State', [], [], '', false);
-        $this->assetSource = $this->getMock('Magento\Framework\View\Asset\Source', [], [], '', false);
-        $this->chainFactory = $this->getMockForAbstractClass(
-            'Magento\Framework\View\Asset\PreProcessor\ChainFactoryInterface'
-        );
-        $this->filesystem = $this->getMock('Magento\Framework\Filesystem', [], [], '', false);
-        $this->validator = $this->getMock('Magento\Framework\Validator\Locale', [], [], '', false);
-        $this->poolMock = $this->getMockBuilder('Magento\Framework\View\Asset\PreProcessor\Pool')
-            ->disableOriginalConstructor()
-            ->getMock();
-
-        $this->command = new CssDeployCommand(
-            $this->objectManager,
-            $this->assetRepo,
-            $this->configLoader,
-            $this->state,
-            $this->assetSource,
-            $this->chainFactory,
-            $this->filesystem,
-            $this->validator,
-            $this->poolMock
-        );
-    }
-
-    public function testExecute()
-    {
-        $file = 'css/styles-m' . '.less';
-
-        $this->configLoader->expects($this->once())->method('load')->with('frontend')->willReturn([]);
-        $this->objectManager->expects($this->once())->method('configure');
-        $asset = $this->getMockForAbstractClass('Magento\Framework\View\Asset\LocalInterface');
-        $asset->expects($this->once())->method('getContentType')->willReturn('type');
-        $this->assetRepo->expects($this->once())
-            ->method('createAsset')
-            ->with(
-                $file,
-                [
-                    'area' => 'frontend',
-                    'theme' => 'Magento/blank',
-                    'locale' => 'en_US'
-                ]
-            )
-            ->willReturn($asset);
-        $this->assetSource->expects($this->once())->method('findSource')->willReturn('/dev/null');
-
-        $chainMock = $this->getMock('Magento\Framework\View\Asset\PreProcessor\Chain', [], [], '', false);
-        $assetMock = $this->getMockBuilder('Magento\Framework\View\Asset\LocalInterface')
-            ->getMockForAbstractClass();
-
-        $this->chainFactory->expects($this->once())
-            ->method('create')
-            ->with(
-                [
-                    'asset' => $asset,
-                    'origContent' => 'content',
-                    'origContentType' => 'type',
-                    'origAssetPath' => 'relative/path',
-                ]
-            )->willReturn($chainMock);
-
-        $chainMock->expects(self::once())
-            ->method('getAsset')
-            ->willReturn($assetMock);
-
-        $rootDir = $this->getMock('\Magento\Framework\Filesystem\Directory\WriteInterface', [], [], '', false);
-        $this->filesystem->expects($this->at(0))->method('getDirectoryWrite')->willReturn($rootDir);
-        $this->filesystem->expects($this->at(1))->method('getDirectoryWrite')->willReturn(
-            $this->getMock('\Magento\Framework\Filesystem\Directory\WriteInterface', [], [], '', false)
-        );
-        $rootDir->expects($this->atLeastOnce())->method('getRelativePath')->willReturn('relative/path');
-        $rootDir->expects($this->once())->method('readFile')->willReturn('content');
-
-        $this->validator->expects($this->once())->method('isValid')->with('en_US')->willReturn(true);
-
-        $commandTester = new CommandTester($this->command);
-        $commandTester->execute(
-            [
-                'type' => 'less'
-            ]
-        );
-        $this->assertContains(
-            'Successfully processed dynamic stylesheet into CSS',
-            $commandTester->getDisplay()
-        );
-    }
-
-    /**
-     * @expectedException \RuntimeException
-     * @expectedExceptionMessage Not enough arguments
-     */
-    public function testExecuteWithoutParameters()
-    {
-        $commandTester = new CommandTester($this->command);
-        $commandTester->execute([]);
-    }
-
-    /**
-     * @expectedException \InvalidArgumentException
-     * @expectedExceptionMessage WRONG_LOCALE argument has invalid value, please run info:language:list
-     */
-    public function testExecuteWithWrongFormat()
-    {
-        $commandTester = new CommandTester($this->command);
-        $commandTester->execute(
-            [
-                'type' => 'less',
-                '--locale' => 'WRONG_LOCALE'
-            ]
-        );
-    }
-}
diff --git a/app/code/Magento/Developer/etc/di.xml b/app/code/Magento/Developer/etc/di.xml
index a208ec7c5de..25b49f280fd 100644
--- a/app/code/Magento/Developer/etc/di.xml
+++ b/app/code/Magento/Developer/etc/di.xml
@@ -23,11 +23,67 @@
             </argument>
         </arguments>
     </type>
+
+    <virtualType name="AssetMaterializationStrategySourceThemeDeployFactory" type="Magento\Framework\App\View\Asset\MaterializationStrategy\Factory">
+        <arguments>
+            <argument name="strategiesList" xsi:type="array">
+                <item name="symlink" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Symlink</item>
+                <item name="copy" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Copy</item>
+            </argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="AssetPublisherSourceThemeDeploy" type="Magento\Framework\App\View\Asset\Publisher">
+        <arguments>
+            <argument name="materializationStrategyFactory" xsi:type="object">AssetMaterializationStrategySourceThemeDeployFactory</argument>
+        </arguments>
+    </virtualType>
+    <type name="Magento\Developer\Model\Css\PreProcessor\FileGenerator\PublicationDecorator">
+        <arguments>
+            <argument name="assetPublisher" xsi:type="object">AssetPublisherSourceThemeDeploy</argument>
+        </arguments>
+    </type>
+    <virtualType name="PreProcessorInstructionImportSourceThemeDeploy" type="Magento\Framework\Css\PreProcessor\Instruction\Import">
+        <arguments>
+            <argument name="relatedFileGenerator" xsi:type="object">Magento\Developer\Model\Css\PreProcessor\FileGenerator\PublicationDecorator</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="AssetPreProcessorPoolSourceThemeDeploy" type="Magento\Framework\View\Asset\PreProcessor\Pool">
+        <arguments>
+            <argument name="preprocessors" xsi:type="array">
+                <item name="less" xsi:type="array">
+                    <item name="magento_import" xsi:type="array">
+                        <item name="class" xsi:type="string">Magento\Framework\Css\PreProcessor\Instruction\MagentoImport</item>
+                    </item>
+                    <item name="import" xsi:type="array">
+                        <item name="after" xsi:type="string">magento_import</item>
+                        <item name="class" xsi:type="string">PreProcessorInstructionImportSourceThemeDeploy</item>
+                    </item>
+                </item>
+            </argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="AssetSourceSourceThemeDeploy" type="Magento\Framework\View\Asset\Source">
+        <arguments>
+            <argument name="preProcessorPool" xsi:type="object">AssetPreProcessorPoolSourceThemeDeploy</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="AssetRepositorySourceThemeDeploy" type="Magento\Framework\View\Asset\Repository">
+        <arguments>
+            <argument name="assetSource" xsi:type="object">AssetSourceSourceThemeDeploy</argument>
+        </arguments>
+    </virtualType>
+    <type name="Magento\Developer\Console\Command\SourceThemeDeployCommand">
+        <arguments>
+            <argument name="assetPublisher" xsi:type="object">AssetPublisherSourceThemeDeploy</argument>
+            <argument name="assetRepository" xsi:type="object">AssetRepositorySourceThemeDeploy</argument>
+        </arguments>
+    </type>
+
     <type name="Magento\Framework\Console\CommandList">
         <arguments>
             <argument name="commands" xsi:type="array">
                 <item name="dev_tests_run" xsi:type="object">Magento\Developer\Console\Command\DevTestsRunCommand</item>
-                <item name="dev_css_deploy" xsi:type="object">Magento\Developer\Console\Command\CssDeployCommand</item>
+                <item name="dev_source_theme_deploy" xsi:type="object">Magento\Developer\Console\Command\SourceThemeDeployCommand</item>
                 <item name="xml_converter" xsi:type="object">Magento\Developer\Console\Command\XmlConverterCommand</item>
             </argument>
         </arguments>
@@ -62,6 +118,11 @@
     <type name="Magento\Framework\View\Asset\PreProcessor\Pool">
         <arguments>
             <argument name="defaultPreprocessor" xsi:type="string">Magento\Framework\View\Asset\PreProcessor\Passthrough</argument>
+        </arguments>
+    </type>
+
+    <virtualType name="AssetPreProcessorPool" type="Magento\Framework\View\Asset\PreProcessor\Pool">
+        <arguments>
             <argument name="preprocessors" xsi:type="array">
                 <item name="less" xsi:type="array">
                     <item name="magento_import" xsi:type="array">
@@ -96,6 +157,12 @@
                 </item>
             </argument>
         </arguments>
+    </virtualType>
+
+    <type name="Magento\Framework\View\Asset\Source">
+        <arguments>
+            <argument name="preProcessorPool" xsi:type="object">AssetPreProcessorPool</argument>
+        </arguments>
     </type>
 
     <type name="Magento\Framework\Css\PreProcessor\Instruction\MagentoImport">
diff --git a/app/code/Magento/Translation/etc/di.xml b/app/code/Magento/Translation/etc/di.xml
index 05c7f766a45..7d2ec64b604 100644
--- a/app/code/Magento/Translation/etc/di.xml
+++ b/app/code/Magento/Translation/etc/di.xml
@@ -64,7 +64,7 @@
         </arguments>
     </type>
 
-    <type name="Magento\Framework\View\Asset\PreProcessor\Pool">
+    <virtualType name="AssetPreProcessorPool">
         <arguments>
             <argument name="preprocessors" xsi:type="array">
                 <item name="js" xsi:type="array">
@@ -79,7 +79,7 @@
                 </item>
             </argument>
         </arguments>
-    </type>
+    </virtualType>
 
     <type name="Magento\Framework\Console\CommandList">
         <arguments>
diff --git a/dev/tools/grunt/configs/combo.js b/dev/tools/grunt/configs/combo.js
index cd3484eee78..f86a47261b8 100644
--- a/dev/tools/grunt/configs/combo.js
+++ b/dev/tools/grunt/configs/combo.js
@@ -16,10 +16,12 @@ module.exports = {
         var cmdPlus = /^win/.test(process.platform) ? ' & ' : ' && ',
             command = 'grunt --force clean:' + themeName + cmdPlus;
 
-        command = command + 'php bin/magento dev:css:deploy ' + theme[themeName].dsl + ' ' + theme[themeName].files.join(' ') +
-        ' --locale=' + theme[themeName].locale +
-        ' --area=' + theme[themeName].area +
-        ' --theme=' + theme[themeName].name;
+        command = command + 'php bin/magento dev:source_theme:deploy ' +
+            theme[themeName].files.join(' ') +
+            ' --type=less' +
+            ' --locale=' + theme[themeName].locale +
+            ' --area=' + theme[themeName].area +
+            ' --theme=' + theme[themeName].name;
 
         return command;
     },
-- 
GitLab


From b3061c49fc5ed0a2f305d80e1d430783ea80d97a Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Fri, 23 Oct 2015 14:51:28 -0500
Subject: [PATCH 266/370] MAGETWO-41954: Eliminate code generatio in production
 mode

---
 .../Framework/Interception/Config/Config.php  |   2 +-
 .../Test/Unit/Config/ConfigTest.php           |  13 +-
 .../Console/Command/DiCompileCommand.php      |  14 ++-
 .../Operation/ApplicationCodeGenerator.php    |  35 +++++-
 .../Di/App/Task/Operation/Interception.php    |   7 +-
 .../Di/App/Task/Operation/ProxyGenerator.php  |  75 ++++++++++++
 .../Task/Operation/RepositoryGenerator.php    |  10 +-
 .../Module/Di/App/Task/OperationFactory.php   |   8 +-
 .../Console/Command/DiCompileCommandTest.php  |   2 +-
 .../App/Task/ApplicationCodeGeneratorTest.php | 111 ++++++++++++++++++
 .../Module/Di/App/Task/ProxyGeneratorTest.php |  94 +++++++++++++++
 11 files changed, 358 insertions(+), 13 deletions(-)
 create mode 100644 setup/src/Magento/Setup/Module/Di/App/Task/Operation/ProxyGenerator.php
 create mode 100644 setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/ApplicationCodeGeneratorTest.php
 create mode 100644 setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/ProxyGeneratorTest.php

diff --git a/lib/internal/Magento/Framework/Interception/Config/Config.php b/lib/internal/Magento/Framework/Interception/Config/Config.php
index 7c9ede12daf..43be5547c46 100644
--- a/lib/internal/Magento/Framework/Interception/Config/Config.php
+++ b/lib/internal/Magento/Framework/Interception/Config/Config.php
@@ -63,7 +63,7 @@ class Config implements \Magento\Framework\Interception\ConfigInterface
      *
      * @var array
      */
-    protected $_serviceClassTypes = ['Proxy', 'Interceptor'];
+    protected $_serviceClassTypes = ['Interceptor'];
 
     /**
      * @var \Magento\Framework\Config\ScopeListInterface
diff --git a/lib/internal/Magento/Framework/Interception/Test/Unit/Config/ConfigTest.php b/lib/internal/Magento/Framework/Interception/Test/Unit/Config/ConfigTest.php
index 6c127589056..b2bcba673e2 100644
--- a/lib/internal/Magento/Framework/Interception/Test/Unit/Config/ConfigTest.php
+++ b/lib/internal/Magento/Framework/Interception/Test/Unit/Config/ConfigTest.php
@@ -102,6 +102,10 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
                         'Magento\Framework\Interception\Test\Unit\Custom\Module\Model\ItemContainer\Enhanced',
                         'Magento\Framework\Interception\Test\Unit\Custom\Module\Model\ItemContainer\Enhanced',
                     ],
+                    [
+                        'Magento\Framework\Interception\Test\Unit\Custom\Module\Model\ItemContainer\Proxy',
+                        'Magento\Framework\Interception\Test\Unit\Custom\Module\Model\ItemContainer\Proxy',
+                    ],
                     [
                         'Magento\Framework\Interception\Test\Unit\Custom\Module\Model\ItemProxy',
                         'Magento\Framework\Interception\Test\Unit\Custom\Module\Model\ItemProxy',
@@ -151,6 +155,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
             'Magento\Framework\Interception\Test\Unit\Custom\Module\Model\Item' => true,
             'Magento\Framework\Interception\Test\Unit\Custom\Module\Model\Item\Enhanced' => true,
             'Magento\Framework\Interception\Test\Unit\Custom\Module\Model\ItemContainer\Enhanced' => true,
+            'Magento\Framework\Interception\Test\Unit\Custom\Module\Model\ItemContainer\Proxy' => true,
             'Magento\Framework\Interception\Test\Unit\Custom\Module\Model\ItemProxy' => false,
             'virtual_custom_item' => true,
         ];
@@ -195,7 +200,13 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
             [
                 // the following model has only inherited plugins
                 true,
-                'Magento\Framework\Interception\Test\Unit\Custom\Module\Model\ItemContainer\Enhanced',
+                'Magento\Framework\Interception\Test\Unit\Custom\Module\Model\ItemContainer\Proxy',
+                ['Magento\Framework\Interception\Test\Unit\Custom\Module\Model\ItemContainer'],
+            ],
+            [
+                // the following model has only inherited plugins
+                true,
+                'Magento\Framework\Interception\Test\Unit\Custom\Module\Model\ItemContainer\Proxy',
                 ['Magento\Framework\Interception\Test\Unit\Custom\Module\Model\ItemContainer'],
             ],
             [
diff --git a/setup/src/Magento/Setup/Console/Command/DiCompileCommand.php b/setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
index 8138a0db280..8540a636d63 100644
--- a/setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
+++ b/setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
@@ -294,6 +294,10 @@ class DiCompileCommand extends Command
         array $dataAttributesIncludePattern
     ) {
         $operations = [
+            OperationFactory::PROXY_GENERATOR => [
+                'paths' => $compiledPathsList['application'],
+                'filePatterns' => ['di' => '/\/etc\/([a-zA-Z_]*\/di|di)\.xml$/']
+            ],
             OperationFactory::REPOSITORY_GENERATOR => [
                 'paths' => $compiledPathsList['application'],
                 'filePatterns' => ['di' => '/\/etc\/([a-zA-Z_]*\/di|di)\.xml$/']
@@ -303,9 +307,13 @@ class DiCompileCommand extends Command
                 'filePatterns' => $dataAttributesIncludePattern
             ],
             OperationFactory::APPLICATION_CODE_GENERATOR => [
-                $compiledPathsList['application'],
-                $compiledPathsList['library'],
-                $compiledPathsList['generated_helpers'],
+                'paths' => [
+                    $compiledPathsList['application'],
+                    $compiledPathsList['library'],
+                    $compiledPathsList['generated_helpers'],
+                ],
+                'filePatterns' => ['php' => '/\.php$/'],
+                'excludePatterns' => ['/\/Test\//']
             ],
             OperationFactory::INTERCEPTION => [
                 'intercepted_paths' => [
diff --git a/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ApplicationCodeGenerator.php b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ApplicationCodeGenerator.php
index 3b412d15cc1..21254457ddf 100644
--- a/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ApplicationCodeGenerator.php
+++ b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ApplicationCodeGenerator.php
@@ -5,8 +5,12 @@
  */
 namespace Magento\Setup\Module\Di\App\Task\Operation;
 
+use Magento\Framework\App\Bootstrap;
+use Magento\Framework\Exception\FileSystemException;
 use Magento\Setup\Module\Di\App\Task\OperationInterface;
 use Magento\Setup\Module\Di\Code\Reader\ClassesScanner;
+use Magento\Setup\Module\Di\Code\Scanner\DirectoryScanner;
+use Magento\Setup\Module\Di\Code\Scanner\PhpScanner;
 
 class ApplicationCodeGenerator implements OperationInterface
 {
@@ -20,16 +24,30 @@ class ApplicationCodeGenerator implements OperationInterface
      */
     private $classesScanner;
 
+    /**
+     * @var PhpScanner
+     */
+    private $phpScanner;
+
+    /**
+     * @var DirectoryScanner
+     */
+    private $directoryScanner;
+
     /**
      * @param ClassesScanner $classesScanner
      * @param array $data
      */
     public function __construct(
         ClassesScanner $classesScanner,
+        PhpScanner $phpScanner,
+        DirectoryScanner $directoryScanner,
         $data = []
     ) {
         $this->data = $data;
         $this->classesScanner = $classesScanner;
+        $this->phpScanner = $phpScanner;
+        $this->directoryScanner = $directoryScanner;
     }
 
     /**
@@ -37,16 +55,27 @@ class ApplicationCodeGenerator implements OperationInterface
      */
     public function doOperation()
     {
-        if (empty($this->data)) {
+        if (array_diff(array_keys($this->data), ['filePatterns', 'paths', 'excludePatterns'])
+            !== array_diff(['filePatterns', 'paths', 'excludePatterns'], array_keys($this->data))) {
             return;
         }
 
-        foreach ($this->data as $paths) {
+        foreach ($this->data['paths'] as $paths) {
             if (!is_array($paths)) {
                 $paths = (array)$paths;
             }
+            $files = [];
             foreach ($paths as $path) {
-                $this->classesScanner->getList($path);
+                try {
+                    $this->classesScanner->getList($path);
+                    $files = array_merge_recursive($files, $this->directoryScanner->scan($path, $this->data['filePatterns'], $this->data['excludePatterns']));
+                } catch(FileSystemException $e) {
+                    // skip
+                }
+            }
+            $entities = $this->phpScanner->collectEntities($files['php']);
+            foreach ($entities as $entityName) {
+                class_exists($entityName);
             }
         }
     }
diff --git a/setup/src/Magento/Setup/Module/Di/App/Task/Operation/Interception.php b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/Interception.php
index 0c48cd4f519..269e65bb48c 100644
--- a/setup/src/Magento/Setup/Module/Di/App/Task/Operation/Interception.php
+++ b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/Interception.php
@@ -5,6 +5,7 @@
  */
 namespace Magento\Setup\Module\Di\App\Task\Operation;
 
+use Magento\Framework\Exception\FileSystemException;
 use Magento\Setup\Module\Di\App\Task\OperationInterface;
 use Magento\Setup\Module\Di\Code\Generator\InterceptionConfigurationBuilder;
 use Magento\Framework\Interception\Code\Generator\Interceptor;
@@ -80,7 +81,11 @@ class Interception implements OperationInterface
                 $paths = (array)$paths;
             }
             foreach ($paths as $path) {
-                $classesList = array_merge($classesList, $this->classesScanner->getList($path));
+                try {
+                    $classesList = array_merge($classesList, $this->classesScanner->getList($path));
+                } catch(FileSystemException $e) {
+                    // skip
+                }
             }
         }
 
diff --git a/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ProxyGenerator.php b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ProxyGenerator.php
new file mode 100644
index 00000000000..38751954c9e
--- /dev/null
+++ b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ProxyGenerator.php
@@ -0,0 +1,75 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Setup\Module\Di\App\Task\Operation;
+
+use Magento\Setup\Module\Di\App\Task\OperationInterface;
+use Magento\Setup\Module\Di\Code\Scanner;
+
+class ProxyGenerator implements OperationInterface
+{
+    /**
+     * @var Scanner\DirectoryScanner
+     */
+    private $directoryScanner;
+
+    /**
+     * @var Scanner\XmlScanner
+     */
+    private $proxyScanner;
+
+    /**
+     * @var array
+     */
+    private $data;
+
+    /**
+     * @param Scanner\DirectoryScanner $directoryScanner
+     * @param Scanner\XmlScanner $proxyScanner
+     * @param array $data
+     */
+    public function __construct(
+        Scanner\DirectoryScanner $directoryScanner,
+        Scanner\XmlScanner $proxyScanner,
+        $data = []
+    ) {
+        $this->directoryScanner = $directoryScanner;
+        $this->proxyScanner = $proxyScanner;
+        $this->data = $data;
+    }
+
+    /**
+     * Processes operation task
+     *
+     * @return void
+     */
+    public function doOperation()
+    {
+        if (array_diff(array_keys($this->data), ['filePatterns', 'paths'])
+            !== array_diff(['filePatterns', 'paths'], array_keys($this->data))) {
+            return;
+        }
+
+        $files = [];
+        foreach ($this->data['paths'] as $path) {
+            $files = array_merge_recursive($files, $this->directoryScanner->scan($path, $this->data['filePatterns']));
+        }
+        $proxies = $this->proxyScanner->collectEntities($files['di']);
+        foreach ($proxies as $entityName) {
+            class_exists($entityName);
+        }
+    }
+
+    /**
+     * Returns operation name
+     *
+     * @return string
+     */
+    public function getName()
+    {
+        return 'Proxies code generation';
+    }
+}
diff --git a/setup/src/Magento/Setup/Module/Di/App/Task/Operation/RepositoryGenerator.php b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/RepositoryGenerator.php
index cf3c779a3f7..d72b4c932a7 100644
--- a/setup/src/Magento/Setup/Module/Di/App/Task/Operation/RepositoryGenerator.php
+++ b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/RepositoryGenerator.php
@@ -6,6 +6,7 @@
 
 namespace Magento\Setup\Module\Di\App\Task\Operation;
 
+use Magento\Framework\Exception\FileSystemException;
 use Magento\Setup\Module\Di\App\Task\OperationInterface;
 use Magento\Setup\Module\Di\Code\Scanner;
 use Magento\Setup\Module\Di\Code\Reader\ClassesScanner;
@@ -62,9 +63,14 @@ class RepositoryGenerator implements OperationInterface
             return;
         }
 
-        foreach ($this->data['paths'] as $path) {
-            $this->classesScanner->getList($path);
+        try {
+            foreach ($this->data['paths'] as $path) {
+                $this->classesScanner->getList($path);
+            }
+        } catch(FileSystemException $e) {
+            // skip
         }
+
         $this->repositoryScanner->setUseAutoload(false);
         $files = [];
         foreach ($this->data['paths'] as $path) {
diff --git a/setup/src/Magento/Setup/Module/Di/App/Task/OperationFactory.php b/setup/src/Magento/Setup/Module/Di/App/Task/OperationFactory.php
index dd6bfa1f5ff..cb5c930f6e4 100644
--- a/setup/src/Magento/Setup/Module/Di/App/Task/OperationFactory.php
+++ b/setup/src/Magento/Setup/Module/Di/App/Task/OperationFactory.php
@@ -32,6 +32,11 @@ class OperationFactory
      */
     const REPOSITORY_GENERATOR = 'repository_generator';
 
+    /**
+     * Proxy generator
+     */
+    const PROXY_GENERATOR = 'proxy_generator';
+
     /**
      * Service data attributes generator
      */
@@ -53,7 +58,8 @@ class OperationFactory
         self::APPLICATION_CODE_GENERATOR => 'Magento\Setup\Module\Di\App\Task\Operation\ApplicationCodeGenerator',
         self::INTERCEPTION => 'Magento\Setup\Module\Di\App\Task\Operation\Interception',
         self::INTERCEPTION_CACHE => 'Magento\Setup\Module\Di\App\Task\Operation\InterceptionCache',
-        self::REPOSITORY_GENERATOR => 'Magento\Setup\Module\Di\App\Task\Operation\RepositoryGenerator'
+        self::REPOSITORY_GENERATOR => 'Magento\Setup\Module\Di\App\Task\Operation\RepositoryGenerator',
+        self::PROXY_GENERATOR => 'Magento\Setup\Module\Di\App\Task\Operation\ProxyGenerator',
     ];
 
     /**
diff --git a/setup/src/Magento/Setup/Test/Unit/Console/Command/DiCompileCommandTest.php b/setup/src/Magento/Setup/Test/Unit/Console/Command/DiCompileCommandTest.php
index 303e4a80142..2cbf5cc3f8e 100644
--- a/setup/src/Magento/Setup/Test/Unit/Console/Command/DiCompileCommandTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Console/Command/DiCompileCommandTest.php
@@ -141,7 +141,7 @@ class DiCompileCommandTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->with('Symfony\Component\Console\Helper\ProgressBar')
             ->willReturn($progressBar);
-        $this->manager->expects($this->exactly(6))->method('addOperation');
+        $this->manager->expects($this->exactly(7))->method('addOperation');
         $this->manager->expects($this->once())->method('process');
         $tester = new CommandTester($this->command);
         $tester->execute([]);
diff --git a/setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/ApplicationCodeGeneratorTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/ApplicationCodeGeneratorTest.php
new file mode 100644
index 00000000000..0a988bb3a51
--- /dev/null
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/ApplicationCodeGeneratorTest.php
@@ -0,0 +1,111 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Setup\Test\Unit\Module\Di\App\Task;
+
+use Magento\Setup\Module\Di\App\Task\Operation\ApplicationCodeGenerator;
+use Magento\Setup\Module\Di\Code\Scanner;
+use Magento\Setup\Module\Di\Code\Reader\ClassesScanner;
+
+class ApplicationCodeGeneratorTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var Scanner\DirectoryScanner | \PHPUnit_Framework_MockObject_MockObject
+     */
+    private $directoryScannerMock;
+
+    /**
+     * @var Scanner\PhpScanner | \PHPUnit_Framework_MockObject_MockObject
+     */
+    private $phpScannerMock;
+
+    /**
+     * @var ClassesScanner | \PHPUnit_Framework_MockObject_MockObject
+     */
+    private $classesScannerMock;
+
+    protected function setUp()
+    {
+        $this->directoryScannerMock = $this->getMockBuilder('Magento\Setup\Module\Di\Code\Scanner\DirectoryScanner')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->phpScannerMock = $this->getMockBuilder('Magento\Setup\Module\Di\Code\Scanner\PhpScanner')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->classesScannerMock = $this->getMockBuilder('Magento\Setup\Module\Di\Code\Reader\ClassesScanner')
+            ->disableOriginalConstructor()
+            ->getMock();
+    }
+
+    /**
+     * @param array $data
+     *
+     * @dataProvider doOperationWrongDataDataProvider
+     */
+    public function testDoOperationWrongData($data)
+    {
+        $model = new ApplicationCodeGenerator(
+            $this->classesScannerMock,
+            $this->phpScannerMock,
+            $this->directoryScannerMock,
+            $data
+        );
+
+        $this->classesScannerMock->expects($this->never())
+            ->method('getList');
+        $this->directoryScannerMock->expects($this->never())
+            ->method('scan');
+        $this->phpScannerMock->expects($this->never())
+            ->method('collectEntities');
+
+        $this->assertEmpty($model->doOperation());
+    }
+
+    /**
+     * @return array
+     */
+    public function doOperationWrongDataDataProvider()
+    {
+        return [
+            [[]],
+            [['filePatterns' => ['php' => '*.php']]],
+            [['path' => 'path']],
+        ];
+    }
+
+    public function testDoOperation()
+    {
+        $data = [
+            'paths' => ['path/to/app'],
+            'filePatterns' => ['php' => '.php'],
+            'excludePatterns' => ['/\/Test\//']
+        ];
+        $files = ['php' => []];
+        $model = new ApplicationCodeGenerator(
+            $this->classesScannerMock,
+            $this->phpScannerMock,
+            $this->directoryScannerMock,
+            $data
+        );
+
+        $this->classesScannerMock->expects($this->once())
+            ->method('getList')
+            ->with($data['paths'][0]);
+        $this->directoryScannerMock->expects($this->once())
+            ->method('scan')
+            ->with(
+                $data['paths'][0],
+                $data['filePatterns'],
+                $data['excludePatterns']
+            )->willReturn($files);
+        $this->phpScannerMock->expects($this->once())
+            ->method('collectEntities')
+            ->with($files['php'])
+            ->willReturn([]);
+
+        $this->assertEmpty($model->doOperation());
+    }
+}
diff --git a/setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/ProxyGeneratorTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/ProxyGeneratorTest.php
new file mode 100644
index 00000000000..9b78e237db3
--- /dev/null
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/ProxyGeneratorTest.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Setup\Test\Unit\Module\Di\App\Task;
+
+use Magento\Setup\Module\Di\App\Task\Operation\ProxyGenerator;
+use Magento\Setup\Module\Di\Code\Scanner;
+use Magento\Setup\Module\Di\Code\Reader\ClassesScanner;
+
+class ProxyGeneratorTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var Scanner\DirectoryScanner | \PHPUnit_Framework_MockObject_MockObject
+     */
+    private $directoryScannerMock;
+
+    /**
+     * @var Scanner\XmlScanner | \PHPUnit_Framework_MockObject_MockObject
+     */
+    private $proxyScannerMock;
+
+    protected function setUp()
+    {
+        $this->directoryScannerMock = $this->getMockBuilder('Magento\Setup\Module\Di\Code\Scanner\DirectoryScanner')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->proxyScannerMock = $this->getMockBuilder('Magento\Setup\Module\Di\Code\Scanner\XmlScanner')
+            ->disableOriginalConstructor()
+            ->getMock();
+    }
+
+    /**
+     * @param array $data
+     *
+     * @dataProvider doOperationWrongDataDataProvider
+     */
+    public function testDoOperationWrongData($data)
+    {
+        $model = new ProxyGenerator(
+            $this->directoryScannerMock,
+            $this->proxyScannerMock,
+            $data
+        );
+
+        $this->directoryScannerMock->expects($this->never())
+            ->method('scan');
+        $this->proxyScannerMock->expects($this->never())
+            ->method('collectEntities');
+
+        $this->assertEmpty($model->doOperation());
+    }
+
+    /**
+     * @return array
+     */
+    public function doOperationWrongDataDataProvider()
+    {
+        return [
+            [[]],
+            [['filePatterns' => ['php' => '*.php']]],
+            [['path' => 'path']],
+        ];
+    }
+
+    public function testDoOperation()
+    {
+        $data = [
+            'paths' => ['path/to/app'],
+            'filePatterns' => ['di' => 'di.xml'],
+        ];
+        $files = ['di' => []];
+        $model = new ProxyGenerator(
+            $this->directoryScannerMock,
+            $this->proxyScannerMock,
+            $data
+        );
+
+        $this->directoryScannerMock->expects($this->once())
+            ->method('scan')
+            ->with(
+                $data['paths'][0],
+                $data['filePatterns']
+            )->willReturn($files);
+        $this->proxyScannerMock->expects($this->once())
+            ->method('collectEntities')
+            ->with($files['di'])
+            ->willReturn([]);
+
+        $this->assertEmpty($model->doOperation());
+    }
+}
-- 
GitLab


From c068c8e5a86f9ee75b48decbc458a7cd1965482b Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Fri, 23 Oct 2015 14:54:38 -0500
Subject: [PATCH 267/370] MAGETWO-44189: Does not work to switch the language
 in the admin area  - apply new  style to  the legal section

---
 .../Backend/view/adminhtml/layout/default.xml | 20 +++++++++++--------
 .../adminhtml/templates/page/copyright.phtml  |  6 ++----
 .../web/css/source/module/_footer.less        | 10 +++-------
 3 files changed, 17 insertions(+), 19 deletions(-)

diff --git a/app/code/Magento/Backend/view/adminhtml/layout/default.xml b/app/code/Magento/Backend/view/adminhtml/layout/default.xml
index 56c7c5d553a..216934514bc 100644
--- a/app/code/Magento/Backend/view/adminhtml/layout/default.xml
+++ b/app/code/Magento/Backend/view/adminhtml/layout/default.xml
@@ -53,14 +53,18 @@
             <block class="Magento\Framework\View\Element\Template" name="page.actions.toolbar" template="Magento_Backend::pageactions.phtml" after="-"/>
         </referenceContainer>
         <referenceContainer name="footer">
-            <container name="legal" htmlTag="div" htmlClass="footer-legal col-m-12">
-                <block class="Magento\Backend\Block\Page\Footer" name="version" as="version" />
-                <block class="Magento\Backend\Block\Page\Copyright" name="copyright" as="copyright" />
-                <block class="Magento\Framework\View\Element\Template" name="report" as="report" template="Magento_Backend::page/report.phtml">
-                    <arguments>
-                        <argument name="bugreport_url" xsi:type="string">https://github.com/magento/magento2/issues</argument>
-                    </arguments>
-                </block>
+            <container name="legal" htmlTag="div" htmlClass="footer-legal">
+                <container name="legal.copyright" htmlTag="p" htmlClass="copyright col-m-6">
+                    <block class="Magento\Backend\Block\Page\Copyright" name="copyright" as="copyright" />
+                </container>
+                <container name="legal.system" htmlTag="div" htmlClass="footer-legal-system col-m-6">
+                    <block class="Magento\Backend\Block\Page\Footer" name="version" as="version" />
+                    <block class="Magento\Framework\View\Element\Template" name="report" as="report" template="Magento_Backend::page/report.phtml">
+                        <arguments>
+                            <argument name="bugreport_url" xsi:type="string">https://github.com/magento/magento2/issues</argument>
+                        </arguments>
+                    </block>
+                </container>
             </container>
         </referenceContainer>
         <referenceContainer name="backend.page">
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/page/copyright.phtml b/app/code/Magento/Backend/view/adminhtml/templates/page/copyright.phtml
index 5612ab20661..41781c9d128 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/page/copyright.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/page/copyright.phtml
@@ -7,7 +7,5 @@
 // @codingStandardsIgnoreFile
 
 ?>
-<p class="copyright">
-    <a class="link-copyright" href="http://magento.com" target="_blank" title="<?php /* @escapeNotVerified */ echo __('Magento') ?>"></a>
-    <?php /* @escapeNotVerified */ echo __('Copyright &copy; %1 Magento. All rights reserved.', date('Y')) ?>
-</p>
+<a class="link-copyright" href="http://magento.com" target="_blank" title="<?php /* @escapeNotVerified */ echo __('Magento') ?>"></a>
+<?php /* @escapeNotVerified */ echo __('Copyright &copy; %1 Magento. All rights reserved.', date('Y')) ?>
diff --git a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/_footer.less b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/_footer.less
index 65e24732ac4..7752b6d2fed 100644
--- a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/_footer.less
+++ b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/_footer.less
@@ -53,6 +53,7 @@
 
 //  Copyright
 .copyright {
+    text-align: left;
     margin-bottom: -.2rem;
     position: relative;
     .link-copyright {
@@ -85,15 +86,10 @@
 
 .footer-legal {
     padding-top: 1rem;
-    text-align: right;
 }
 
-//  Locale switcher
-.locale-switcher {
-    .label {
-        display: block;
-        margin-bottom: 1rem;
-    }
+.footer-legal-system {
+    text-align: right;
 }
 
 //
-- 
GitLab


From bbb9f6c131afcc3ae2f84f6e774b36df3acf7bd4 Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Fri, 23 Oct 2015 15:10:56 -0500
Subject: [PATCH 268/370] MAGETWO-43857: [github] cache types don't properly
 invalidate all the time #1844

---
 .../Theme/Model/Design/Backend/Theme.php       |  1 +
 .../Unit/Model/Design/Backend/ThemeTest.php    | 18 +++++++++++++++++-
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Theme/Model/Design/Backend/Theme.php b/app/code/Magento/Theme/Model/Design/Backend/Theme.php
index d58e9b38242..108e82528a0 100644
--- a/app/code/Magento/Theme/Model/Design/Backend/Theme.php
+++ b/app/code/Magento/Theme/Model/Design/Backend/Theme.php
@@ -68,6 +68,7 @@ class Theme extends Value
         parent::afterSave();
         if ($this->isValueChanged()) {
             $this->_cacheManager->clean();
+            $this->_eventManager->dispatch('adminhtml_cache_flush_system');
         }
         return $this;
     }
diff --git a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php
index 4082cac2232..e394482d748 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php
@@ -32,6 +32,11 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
      */
     protected $cacheTypeListMock;
 
+    /**
+     * @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $eventManagerMock;
+
     /**
      * @var \Magento\Framework\App\CacheInterface | \PHPUnit_Framework_MockObject_MockObject
      */
@@ -48,9 +53,15 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
         $this->cacheManagerMock = $this->getMockBuilder('Magento\Framework\App\CacheInterface')
             ->disableOriginalConstructor()
             ->getMock();
+        $this->eventManagerMock = $this->getMockBuilder('Magento\Framework\Event\ManagerInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
         $this->context = $objectManager->getObject(
             'Magento\Framework\Model\Context',
-            ['cacheManager' => $this->cacheManagerMock]
+            [
+                'cacheManager' => $this->cacheManagerMock,
+                'eventDispatcher' => $this->eventManagerMock,
+            ]
         );
 
         $this->designMock = $this->getMockBuilder('Magento\Framework\View\DesignInterface')->getMock();
@@ -100,6 +111,11 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
         $this->configMock->expects($this->any())
             ->method('getValue')
             ->willReturn($oldValue);
+        if ($callNumber) {
+            $this->eventManagerMock->expects($this->at(3))
+                ->method('dispatch')
+                ->with('adminhtml_cache_flush_system');
+        }
         $this->model->setValue('some_value');
         $this->assertInstanceOf(get_class($this->model), $this->model->afterSave());
     }
-- 
GitLab


From 9dcfff78d4d8cc0f6fc54c33e5aa497835cd41ca Mon Sep 17 00:00:00 2001
From: Yu Tang <ytang1@ebay.com>
Date: Fri, 23 Oct 2015 15:09:49 -0500
Subject: [PATCH 269/370] MAGETWO-44491: [TD] ActionInterface has Method
 dispatch() Instead of execute()

---
 .../Adminhtml/Notification/AjaxMarkAsRead.php |  2 +-
 .../Adminhtml/Notification/Index.php          |  2 +-
 .../Adminhtml/Notification/MarkAsRead.php     |  2 +-
 .../Adminhtml/Notification/MassMarkAsRead.php |  2 +-
 .../Adminhtml/Notification/MassRemove.php     |  2 +-
 .../Adminhtml/Notification/Remove.php         |  2 +-
 .../Adminhtml/System/Message/ListAction.php   |  2 +-
 .../Controller/Adminhtml/Export/GetFilter.php |  2 +-
 .../Authorizenet/Directpost/Payment/Place.php |  2 +-
 .../Directpost/Payment/Redirect.php           |  2 +-
 .../Directpost/Payment/ReturnQuote.php        |  2 +-
 .../Directpost/Payment/BackendResponse.php    |  2 +-
 .../Controller/Directpost/Payment/Place.php   |  2 +-
 .../Directpost/Payment/Redirect.php           |  2 +-
 .../Directpost/Payment/Response.php           |  2 +-
 .../Directpost/Payment/ReturnQuote.php        |  2 +-
 .../Directpost/Payment/PlaceTest.php          |  4 ++--
 .../Magento/Backend/App/AbstractAction.php    |  6 +++---
 .../Controller/Adminhtml/Ajax/Translate.php   |  2 +-
 .../Adminhtml/Auth/DeniedIframe.php           |  2 +-
 .../Controller/Adminhtml/Auth/DeniedJson.php  |  2 +-
 .../Controller/Adminhtml/Auth/Login.php       |  2 +-
 .../Controller/Adminhtml/Auth/Logout.php      |  2 +-
 .../Adminhtml/BackendApp/Redirect.php         |  2 +-
 .../Adminhtml/Cache/CleanImages.php           |  2 +-
 .../Controller/Adminhtml/Cache/CleanMedia.php |  2 +-
 .../Adminhtml/Cache/CleanStaticFiles.php      |  2 +-
 .../Controller/Adminhtml/Cache/FlushAll.php   |  2 +-
 .../Adminhtml/Cache/FlushSystem.php           |  2 +-
 .../Controller/Adminhtml/Cache/Index.php      |  2 +-
 .../Adminhtml/Cache/MassDisable.php           |  2 +-
 .../Controller/Adminhtml/Cache/MassEnable.php |  2 +-
 .../Adminhtml/Cache/MassRefresh.php           |  2 +-
 .../Adminhtml/Dashboard/AjaxBlock.php         |  2 +-
 .../Adminhtml/Dashboard/CustomersMost.php     |  2 +-
 .../Adminhtml/Dashboard/CustomersNewest.php   |  2 +-
 .../Controller/Adminhtml/Dashboard/Index.php  |  2 +-
 .../Adminhtml/Dashboard/ProductsViewed.php    |  2 +-
 .../Adminhtml/Dashboard/RefreshStatistics.php |  2 +-
 .../Controller/Adminhtml/Dashboard/Tunnel.php |  2 +-
 .../Backend/Controller/Adminhtml/Denied.php   |  2 +-
 .../Adminhtml/Index/ChangeLocale.php          |  2 +-
 .../Adminhtml/Index/GlobalSearch.php          |  2 +-
 .../Controller/Adminhtml/Index/Index.php      |  2 +-
 .../Controller/Adminhtml/Noroute/Index.php    |  2 +-
 .../Adminhtml/System/Account/Index.php        |  2 +-
 .../Adminhtml/System/Account/Save.php         |  2 +-
 .../Adminhtml/System/Design/Delete.php        |  2 +-
 .../Adminhtml/System/Design/Edit.php          |  2 +-
 .../Adminhtml/System/Design/Grid.php          |  2 +-
 .../Adminhtml/System/Design/Index.php         |  2 +-
 .../Adminhtml/System/Design/NewAction.php     |  2 +-
 .../Adminhtml/System/Design/Save.php          |  2 +-
 .../Controller/Adminhtml/System/Index.php     |  2 +-
 .../Controller/Adminhtml/System/SetStore.php  |  2 +-
 .../Adminhtml/System/Store/DeleteGroup.php    |  2 +-
 .../System/Store/DeleteGroupPost.php          |  2 +-
 .../Adminhtml/System/Store/DeleteStore.php    |  2 +-
 .../System/Store/DeleteStorePost.php          |  2 +-
 .../Adminhtml/System/Store/DeleteWebsite.php  |  2 +-
 .../System/Store/DeleteWebsitePost.php        |  2 +-
 .../Adminhtml/System/Store/EditGroup.php      |  2 +-
 .../Adminhtml/System/Store/EditStore.php      |  2 +-
 .../Adminhtml/System/Store/EditWebsite.php    |  2 +-
 .../Adminhtml/System/Store/Index.php          |  2 +-
 .../Adminhtml/System/Store/NewGroup.php       |  2 +-
 .../Adminhtml/System/Store/NewStore.php       |  2 +-
 .../Adminhtml/System/Store/NewWebsite.php     |  2 +-
 .../Adminhtml/System/Store/Save.php           |  2 +-
 .../Test/Unit/App/Action/Stub/ActionStub.php  |  2 +-
 .../Adminhtml/Cache/CleanStaticFilesTest.php  |  2 +-
 .../Dashboard/RefreshStatisticsTest.php       |  2 +-
 .../Adminhtml/Dashboard/TunnelTest.php        |  6 +++---
 .../Adminhtml/System/Account/SaveTest.php     |  2 +-
 .../Controller/Adminhtml/Index/Create.php     |  2 +-
 .../Controller/Adminhtml/Index/Download.php   |  2 +-
 .../Controller/Adminhtml/Index/Grid.php       |  2 +-
 .../Controller/Adminhtml/Index/Index.php      |  2 +-
 .../Controller/Adminhtml/Index/MassDelete.php |  2 +-
 .../Controller/Adminhtml/Index/Rollback.php   |  2 +-
 .../Adminhtml/Index/DownloadTest.php          |  8 ++++----
 .../Controller/Creditcard/AjaxSave.php        |  2 +-
 .../Controller/Creditcard/Delete.php          |  2 +-
 .../Controller/Creditcard/DeleteConfirm.php   |  2 +-
 .../Braintree/Controller/Creditcard/Edit.php  |  2 +-
 .../Controller/Creditcard/Generate.php        |  2 +-
 .../Braintree/Controller/Creditcard/Index.php |  2 +-
 .../Controller/Creditcard/NewCard.php         |  2 +-
 .../Braintree/Controller/Creditcard/Save.php  |  2 +-
 .../Braintree/Controller/MyCreditCards.php    |  4 ++--
 .../Magento/Braintree/Controller/PayPal.php   |  4 ++--
 .../Controller/PayPal/GetButtonData.php       |  2 +-
 .../Controller/PayPal/PlaceOrder.php          |  2 +-
 .../Braintree/Controller/PayPal/Review.php    |  2 +-
 .../Controller/PayPal/SaveShippingMethod.php  |  2 +-
 .../Controller/PayPal/GetButtonDataTest.php   |  4 ++--
 .../Unit/Controller/PayPal/PlaceOrderTest.php |  4 ++--
 .../Unit/Controller/PayPal/ReviewTest.php     | 14 ++++++-------
 .../PayPal/SaveShippingMethodTest.php         |  4 ++--
 .../Test/Unit/Controller/PayPalTest.php       |  4 ++--
 .../Controller/Stub/MyCreditCardsStub.php     |  2 +-
 .../Test/Unit/Controller/Stub/PayPalStub.php  |  2 +-
 .../Adminhtml/Bundle/Product/Edit/Form.php    |  2 +-
 .../Adminhtml/Bundle/Selection/Grid.php       |  2 +-
 .../Adminhtml/Bundle/Selection/Search.php     |  2 +-
 .../Bundle/Product/Edit/FormTest.php          |  2 +-
 .../Adminhtml/Bundle/Selection/GridTest.php   |  4 ++--
 .../Adminhtml/Bundle/Selection/SearchTest.php |  2 +-
 .../Controller/Adminhtml/Refresh/Refresh.php  |  2 +-
 .../Captcha/Controller/Refresh/Index.php      |  2 +-
 .../Unit/Controller/Refresh/IndexTest.php     |  2 +-
 .../Controller/Adminhtml/Category/Add.php     |  2 +-
 .../Adminhtml/Category/CategoriesJson.php     |  2 +-
 .../Controller/Adminhtml/Category/Delete.php  |  2 +-
 .../Controller/Adminhtml/Category/Edit.php    |  2 +-
 .../Controller/Adminhtml/Category/Grid.php    |  2 +-
 .../Controller/Adminhtml/Category/Index.php   |  2 +-
 .../Controller/Adminhtml/Category/Move.php    |  2 +-
 .../Adminhtml/Category/RefreshPath.php        |  2 +-
 .../Controller/Adminhtml/Category/Save.php    |  2 +-
 .../Adminhtml/Category/SuggestCategories.php  |  2 +-
 .../Controller/Adminhtml/Category/Tree.php    |  2 +-
 .../Category/Widget/CategoriesJson.php        |  2 +-
 .../Adminhtml/Category/Widget/Chooser.php     |  2 +-
 .../Product/Action/Attribute/Edit.php         |  2 +-
 .../Product/Action/Attribute/Save.php         |  2 +-
 .../Product/Action/Attribute/Validate.php     |  2 +-
 .../Product/AddAttributeToTemplate.php        |  2 +-
 .../Adminhtml/Product/AlertsPriceGrid.php     |  2 +-
 .../Adminhtml/Product/AlertsStockGrid.php     |  2 +-
 .../Adminhtml/Product/Attribute.php           |  4 ++--
 .../Adminhtml/Product/Attribute/Delete.php    |  2 +-
 .../Adminhtml/Product/Attribute/Edit.php      |  2 +-
 .../Adminhtml/Product/Attribute/Index.php     |  2 +-
 .../Adminhtml/Product/Attribute/NewAction.php |  2 +-
 .../Adminhtml/Product/Attribute/Save.php      |  2 +-
 .../Adminhtml/Product/Attribute/Validate.php  |  2 +-
 .../Adminhtml/Product/Categories.php          |  2 +-
 .../Adminhtml/Product/Crosssell.php           |  2 +-
 .../Adminhtml/Product/CrosssellGrid.php       |  2 +-
 .../Adminhtml/Product/CustomOptions.php       |  2 +-
 .../Adminhtml/Product/Datafeeds/Index.php     |  2 +-
 .../Adminhtml/Product/Duplicate.php           |  2 +-
 .../Controller/Adminhtml/Product/Edit.php     |  2 +-
 .../Adminhtml/Product/Gallery/Upload.php      |  2 +-
 .../Controller/Adminhtml/Product/Grid.php     |  2 +-
 .../Controller/Adminhtml/Product/GridOnly.php |  2 +-
 .../Adminhtml/Product/Group/Save.php          |  2 +-
 .../Controller/Adminhtml/Product/Index.php    |  2 +-
 .../Adminhtml/Product/MassDelete.php          |  2 +-
 .../Adminhtml/Product/MassStatus.php          |  2 +-
 .../Adminhtml/Product/NewAction.php           |  2 +-
 .../Controller/Adminhtml/Product/Options.php  |  2 +-
 .../Adminhtml/Product/OptionsImportGrid.php   |  2 +-
 .../Controller/Adminhtml/Product/Related.php  |  2 +-
 .../Controller/Adminhtml/Product/Save.php     |  2 +-
 .../Controller/Adminhtml/Product/Set/Add.php  |  2 +-
 .../Adminhtml/Product/Set/Delete.php          |  2 +-
 .../Controller/Adminhtml/Product/Set/Edit.php |  2 +-
 .../Adminhtml/Product/Set/Index.php           |  2 +-
 .../Controller/Adminhtml/Product/Set/Save.php |  2 +-
 .../Adminhtml/Product/Set/SetGrid.php         |  2 +-
 .../Adminhtml/Product/ShowUpdateResult.php    |  2 +-
 .../Adminhtml/Product/SuggestAttributes.php   |  2 +-
 .../Product/SuggestProductTemplates.php       |  2 +-
 .../Controller/Adminhtml/Product/Upsell.php   |  2 +-
 .../Adminhtml/Product/UpsellGrid.php          |  2 +-
 .../Controller/Adminhtml/Product/Validate.php |  2 +-
 .../Adminhtml/Product/Widget/Chooser.php      |  2 +-
 .../Controller/Adminhtml/Product/Wysiwyg.php  |  2 +-
 .../Catalog/Controller/Category/View.php      |  2 +-
 .../Catalog/Controller/Index/Index.php        |  2 +-
 .../Controller/Product/Compare/Add.php        |  2 +-
 .../Controller/Product/Compare/Clear.php      |  2 +-
 .../Controller/Product/Compare/Index.php      |  2 +-
 .../Controller/Product/Compare/Remove.php     |  2 +-
 .../Catalog/Controller/Product/Gallery.php    |  2 +-
 .../Catalog/Controller/Product/View.php       |  2 +-
 .../Adminhtml/Category/DeleteTest.php         |  4 ++--
 .../Adminhtml/Category/SaveTest.php           |  2 +-
 .../Category/Widget/CategoriesJsonTest.php    |  2 +-
 .../Adminhtml/Category/Widget/ChooserTest.php |  2 +-
 .../Product/Action/Attribute/SaveTest.php     |  2 +-
 .../Adminhtml/Product/Attribute/EditTest.php  |  4 ++--
 .../Adminhtml/Product/MassStatusTest.php      |  2 +-
 .../Adminhtml/Product/NewActionTest.php       |  4 ++--
 .../Controller/Adminhtml/Product/SaveTest.php |  2 +-
 .../Product/ShowUpdateResultTest.php          |  2 +-
 .../Adminhtml/Product/ValidateTest.php        |  4 ++--
 .../Unit/Controller/Category/ViewTest.php     |  2 +-
 .../Controller/Product/Compare/IndexTest.php  |  4 ++--
 .../Adminhtml/Promo/Catalog/ApplyRules.php    |  2 +-
 .../Adminhtml/Promo/Catalog/Chooser.php       |  2 +-
 .../Adminhtml/Promo/Catalog/Delete.php        |  2 +-
 .../Adminhtml/Promo/Catalog/Edit.php          |  2 +-
 .../Adminhtml/Promo/Catalog/Index.php         |  2 +-
 .../Adminhtml/Promo/Catalog/NewAction.php     |  2 +-
 .../Adminhtml/Promo/Catalog/NewActionHtml.php |  2 +-
 .../Promo/Catalog/NewConditionHtml.php        |  2 +-
 .../Adminhtml/Promo/Catalog/Save.php          |  2 +-
 .../Controller/Adminhtml/Promo/Index.php      |  2 +-
 .../Adminhtml/Promo/Widget/CategoriesJson.php |  2 +-
 .../Adminhtml/Promo/Widget/Chooser.php        |  2 +-
 .../Controller/Advanced/Index.php             |  2 +-
 .../Controller/Advanced/Result.php            |  2 +-
 .../CatalogSearch/Controller/Result/Index.php |  2 +-
 .../Unit/Controller/Advanced/ResultTest.php   |  2 +-
 .../Adminhtml/Product/Widget/Conditions.php   |  2 +-
 .../Product/Widget/ConditionsTest.php         |  2 +-
 .../Checkout/Controller/Account/Create.php    |  2 +-
 .../Magento/Checkout/Controller/Cart/Add.php  |  2 +-
 .../Checkout/Controller/Cart/Addgroup.php     |  2 +-
 .../Checkout/Controller/Cart/Configure.php    |  2 +-
 .../Checkout/Controller/Cart/CouponPost.php   |  2 +-
 .../Checkout/Controller/Cart/Delete.php       |  2 +-
 .../Checkout/Controller/Cart/EstimatePost.php |  2 +-
 .../Controller/Cart/EstimateUpdatePost.php    |  2 +-
 .../Checkout/Controller/Cart/Index.php        |  2 +-
 .../Controller/Cart/UpdateItemOptions.php     |  2 +-
 .../Checkout/Controller/Cart/UpdatePost.php   |  2 +-
 .../Checkout/Controller/Index/Index.php       |  2 +-
 .../Checkout/Controller/Noroute/Index.php     |  2 +-
 .../Magento/Checkout/Controller/Onepage.php   |  4 ++--
 .../Checkout/Controller/Onepage/Failure.php   |  2 +-
 .../Checkout/Controller/Onepage/SaveOrder.php |  2 +-
 .../Checkout/Controller/Onepage/Success.php   |  2 +-
 .../Controller/ShippingRates/Index.php        |  2 +-
 .../Controller/Sidebar/RemoveItem.php         |  2 +-
 .../Controller/Sidebar/UpdateItemQty.php      |  2 +-
 .../Unit/Controller/Account/CreateTest.php    |  4 ++--
 .../Unit/Controller/Cart/ConfigureTest.php    |  4 ++--
 .../Unit/Controller/Cart/CouponPostTest.php   | 10 +++++-----
 .../Test/Unit/Controller/Cart/IndexTest.php   |  2 +-
 .../Test/Unit/Controller/Index/IndexTest.php  |  6 +++---
 .../Test/Unit/Controller/OnepageTest.php      |  2 +-
 .../Controller/Sidebar/RemoveItemTest.php     |  6 +++---
 .../Controller/Sidebar/UpdateItemQtyTest.php  |  6 +++---
 .../Test/Unit/Controller/Stub/OnepageStub.php |  2 +-
 .../Controller/Adminhtml/Agreement/Delete.php |  2 +-
 .../Controller/Adminhtml/Agreement/Edit.php   |  2 +-
 .../Controller/Adminhtml/Agreement/Index.php  |  2 +-
 .../Adminhtml/Agreement/NewAction.php         |  2 +-
 .../Controller/Adminhtml/Agreement/Save.php   |  2 +-
 .../Cms/Controller/Adminhtml/Block/Delete.php |  2 +-
 .../Cms/Controller/Adminhtml/Block/Edit.php   |  2 +-
 .../Cms/Controller/Adminhtml/Block/Index.php  |  2 +-
 .../Controller/Adminhtml/Block/InlineEdit.php |  2 +-
 .../Controller/Adminhtml/Block/MassDelete.php |  2 +-
 .../Controller/Adminhtml/Block/NewAction.php  |  2 +-
 .../Cms/Controller/Adminhtml/Block/Save.php   |  2 +-
 .../Adminhtml/Block/Widget/Chooser.php        |  2 +-
 .../Cms/Controller/Adminhtml/Page/Delete.php  |  2 +-
 .../Cms/Controller/Adminhtml/Page/Edit.php    |  2 +-
 .../Cms/Controller/Adminhtml/Page/Index.php   |  2 +-
 .../Controller/Adminhtml/Page/InlineEdit.php  |  2 +-
 .../Controller/Adminhtml/Page/MassDelete.php  |  2 +-
 .../Controller/Adminhtml/Page/MassDisable.php |  2 +-
 .../Controller/Adminhtml/Page/MassEnable.php  |  2 +-
 .../Controller/Adminhtml/Page/NewAction.php   |  2 +-
 .../Cms/Controller/Adminhtml/Page/Save.php    |  2 +-
 .../Adminhtml/Page/Widget/Chooser.php         |  2 +-
 .../Adminhtml/Wysiwyg/Directive.php           |  2 +-
 .../Adminhtml/Wysiwyg/Images/Contents.php     |  2 +-
 .../Adminhtml/Wysiwyg/Images/DeleteFiles.php  |  2 +-
 .../Adminhtml/Wysiwyg/Images/DeleteFolder.php |  2 +-
 .../Adminhtml/Wysiwyg/Images/Index.php        |  2 +-
 .../Adminhtml/Wysiwyg/Images/NewFolder.php    |  2 +-
 .../Adminhtml/Wysiwyg/Images/OnInsert.php     |  2 +-
 .../Adminhtml/Wysiwyg/Images/Thumbnail.php    |  2 +-
 .../Adminhtml/Wysiwyg/Images/TreeJson.php     |  2 +-
 .../Adminhtml/Wysiwyg/Images/Upload.php       |  2 +-
 .../Cms/Controller/Index/DefaultNoRoute.php   |  2 +-
 .../Magento/Cms/Controller/Index/Index.php    |  2 +-
 .../Magento/Cms/Controller/Noroute/Index.php  |  2 +-
 app/code/Magento/Cms/Controller/Page/View.php |  2 +-
 .../Controller/Adminhtml/Block/DeleteTest.php |  6 +++---
 .../Controller/Adminhtml/Block/EditTest.php   |  4 ++--
 .../Adminhtml/Block/MassDeleteTest.php        |  2 +-
 .../Controller/Adminhtml/Block/SaveTest.php   | 10 +++++-----
 .../Controller/Adminhtml/Page/DeleteTest.php  |  6 +++---
 .../Adminhtml/Page/InlineEditTest.php         |  8 ++++----
 .../Adminhtml/Page/MassDeleteTest.php         |  2 +-
 .../Adminhtml/Page/MassDisableTest.php        |  2 +-
 .../Adminhtml/Page/MassEnableTest.php         |  2 +-
 .../Adminhtml/Wysiwyg/DirectiveTest.php       |  8 ++++----
 .../Unit/Controller/Block/InlineEditTest.php  |  4 ++--
 .../Test/Unit/Controller/Index/IndexTest.php  |  4 ++--
 .../Unit/Controller/Noroute/IndexTest.php     |  4 ++--
 .../Test/Unit/Controller/Page/ViewTest.php    |  4 ++--
 .../Adminhtml/System/AbstractConfig.php       |  4 ++--
 .../Adminhtml/System/Config/Edit.php          |  2 +-
 .../Adminhtml/System/Config/Index.php         |  2 +-
 .../Adminhtml/System/Config/Save.php          |  2 +-
 .../Adminhtml/System/Config/State.php         |  2 +-
 .../Adminhtml/System/Config/SaveTest.php      |  8 ++++----
 .../Adminhtml/Product/AddAttribute.php        |  2 +-
 .../Adminhtml/Product/Associated/Grid.php     |  2 +-
 .../Product/Attribute/CreateOptions.php       |  2 +-
 .../Product/Attribute/GetAttributes.php       |  2 +-
 .../SuggestConfigurableAttributes.php         |  2 +-
 .../Adminhtml/Product/AddAttributeTest.php    |  2 +-
 .../SuggestConfigurableAttributesTest.php     |  2 +-
 app/code/Magento/Contact/Controller/Index.php |  4 ++--
 .../Contact/Controller/Index/Index.php        |  2 +-
 .../Magento/Contact/Controller/Index/Post.php |  2 +-
 .../Test/Unit/Controller/Index/IndexTest.php  |  2 +-
 .../Test/Unit/Controller/Index/PostTest.php   |  6 +++---
 .../Test/Unit/Controller/IndexTest.php        |  2 +-
 .../Test/Unit/Controller/Stub/IndexStub.php   |  2 +-
 .../Cookie/Controller/Index/NoCookies.php     |  2 +-
 .../Unit/Controller/Index/NoCookiesTest.php   |  6 +++---
 .../Adminhtml/System/Currency/FetchRates.php  |  2 +-
 .../Adminhtml/System/Currency/Index.php       |  2 +-
 .../Adminhtml/System/Currency/SaveRates.php   |  2 +-
 .../Adminhtml/System/Currencysymbol/Index.php |  2 +-
 .../Adminhtml/System/Currencysymbol/Save.php  |  2 +-
 .../System/Currencysymbol/IndexTest.php       |  2 +-
 .../System/Currencysymbol/SaveTest.php        |  2 +-
 .../Customer/Controller/Account/Confirm.php   |  2 +-
 .../Controller/Account/Confirmation.php       |  2 +-
 .../Customer/Controller/Account/Create.php    |  2 +-
 .../Controller/Account/CreatePassword.php     |  2 +-
 .../Controller/Account/CreatePost.php         |  2 +-
 .../Customer/Controller/Account/Edit.php      |  2 +-
 .../Customer/Controller/Account/EditPost.php  |  2 +-
 .../Controller/Account/ForgotPassword.php     |  2 +-
 .../Controller/Account/ForgotPasswordPost.php |  2 +-
 .../Customer/Controller/Account/Index.php     |  2 +-
 .../Customer/Controller/Account/Login.php     |  2 +-
 .../Customer/Controller/Account/LoginPost.php |  2 +-
 .../Customer/Controller/Account/Logout.php    |  2 +-
 .../Controller/Account/LogoutSuccess.php      |  2 +-
 .../Controller/Account/ResetPasswordPost.php  |  2 +-
 .../Magento/Customer/Controller/Address.php   |  4 ++--
 .../Customer/Controller/Address/Delete.php    |  2 +-
 .../Customer/Controller/Address/Edit.php      |  2 +-
 .../Customer/Controller/Address/Form.php      |  2 +-
 .../Customer/Controller/Address/FormPost.php  |  2 +-
 .../Customer/Controller/Address/Index.php     |  2 +-
 .../Customer/Controller/Address/NewAction.php |  2 +-
 .../Cart/Product/Composite/Cart/Configure.php |  2 +-
 .../Cart/Product/Composite/Cart/Update.php    |  2 +-
 .../Adminhtml/Customer/InvalidateToken.php    |  2 +-
 .../Controller/Adminhtml/Group/Delete.php     |  2 +-
 .../Controller/Adminhtml/Group/Edit.php       |  2 +-
 .../Controller/Adminhtml/Group/Index.php      |  2 +-
 .../Controller/Adminhtml/Group/NewAction.php  |  2 +-
 .../Controller/Adminhtml/Group/Save.php       |  2 +-
 .../Adminhtml/Index/AbstractMassAction.php    |  2 +-
 .../Controller/Adminhtml/Index/Cart.php       |  2 +-
 .../Controller/Adminhtml/Index/Carts.php      |  2 +-
 .../Controller/Adminhtml/Index/Delete.php     |  2 +-
 .../Controller/Adminhtml/Index/Edit.php       |  2 +-
 .../Controller/Adminhtml/Index/Index.php      |  2 +-
 .../Controller/Adminhtml/Index/InlineEdit.php |  2 +-
 .../Controller/Adminhtml/Index/LastOrders.php |  2 +-
 .../Controller/Adminhtml/Index/NewAction.php  |  2 +-
 .../Controller/Adminhtml/Index/Newsletter.php |  2 +-
 .../Controller/Adminhtml/Index/Orders.php     |  2 +-
 .../Adminhtml/Index/ProductReviews.php        |  2 +-
 .../Adminhtml/Index/ResetPassword.php         |  2 +-
 .../Controller/Adminhtml/Index/Save.php       |  2 +-
 .../Controller/Adminhtml/Index/Validate.php   |  2 +-
 .../Controller/Adminhtml/Index/ViewCart.php   |  2 +-
 .../Adminhtml/Index/ViewWishlist.php          |  2 +-
 .../Controller/Adminhtml/Index/Viewfile.php   |  2 +-
 .../Controller/Adminhtml/Index/Wishlist.php   |  2 +-
 .../Controller/Adminhtml/Online/Index.php     |  2 +-
 .../System/Config/Validatevat/Validate.php    |  2 +-
 .../Config/Validatevat/ValidateAdvanced.php   |  2 +-
 .../Product/Composite/Wishlist/Configure.php  |  2 +-
 .../Product/Composite/Wishlist/Update.php     |  2 +-
 .../Customer/Controller/Ajax/Login.php        |  2 +-
 .../Customer/Controller/Ajax/Logout.php       |  2 +-
 .../Magento/Customer/Controller/Review.php    |  2 +-
 .../Customer/Controller/Section/Load.php      |  2 +-
 .../Unit/Controller/Account/ConfirmTest.php   |  8 ++++----
 .../Controller/Account/CreatePasswordTest.php |  6 +++---
 .../Controller/Account/CreatePostTest.php     |  8 ++++----
 .../Unit/Controller/Account/CreateTest.php    |  4 ++--
 .../Unit/Controller/Account/EditPostTest.php  | 10 +++++-----
 .../Account/ForgotPasswordPostTest.php        |  8 ++++----
 .../Unit/Controller/Account/LoginPostTest.php | 10 +++++-----
 .../Account/ResetPasswordPostTest.php         |  8 ++++----
 .../Unit/Controller/Address/FormPostTest.php  | 10 +++++-----
 .../Controller/Adminhtml/Index/IndexTest.php  |  8 ++++----
 .../Adminhtml/Index/InlineEditTest.php        |  8 ++++----
 .../Adminhtml/Index/MassAssignGroupTest.php   |  4 ++--
 .../Adminhtml/Index/MassDeleteTest.php        |  4 ++--
 .../Adminhtml/Index/MassSubscribeTest.php     |  4 ++--
 .../Adminhtml/Index/MassUnsubscribeTest.php   |  4 ++--
 .../Adminhtml/Index/NewsletterTest.php        |  2 +-
 .../Adminhtml/Index/ResetPasswordTest.php     | 12 +++++------
 .../Controller/Adminhtml/Index/SaveTest.php   | 20 +++++++++----------
 .../Adminhtml/Index/ValidateTest.php          |  6 +++---
 .../Adminhtml/Index/ViewfileTest.php          |  6 +++---
 .../Config/Validatevat/ValidateTest.php       |  2 +-
 .../Test/Unit/Controller/Ajax/LoginTest.php   |  4 ++--
 .../Controller/Adminhtml/Index/ExportCsv.php  |  2 +-
 .../Controller/Adminhtml/Index/ExportXml.php  |  2 +-
 .../Adminhtml/Json/CountryRegion.php          |  2 +-
 .../Controller/Currency/SwitchAction.php      |  2 +-
 .../Adminhtml/Downloadable/File/Upload.php    |  2 +-
 .../Downloadable/Product/Edit/Form.php        |  2 +-
 .../Downloadable/Product/Edit/Link.php        |  2 +-
 .../Downloadable/Product/Edit/Sample.php      |  2 +-
 .../Controller/Customer/Products.php          |  6 +++---
 .../Downloadable/Controller/Download/Link.php |  2 +-
 .../Controller/Download/LinkSample.php        |  2 +-
 .../Controller/Download/Sample.php            |  2 +-
 .../Downloadable/File/UploadTest.php          |  2 +-
 .../Downloadable/Product/Edit/LinkTest.php    |  4 ++--
 .../Downloadable/Product/Edit/SampleTest.php  |  4 ++--
 .../Controller/Download/LinkSampleTest.php    |  4 ++--
 .../Unit/Controller/Download/LinkTest.php     | 10 +++++-----
 .../Unit/Controller/Download/SampleTest.php   |  4 ++--
 .../Email/Template/DefaultTemplate.php        |  2 +-
 .../Adminhtml/Email/Template/Delete.php       |  2 +-
 .../Adminhtml/Email/Template/Edit.php         |  2 +-
 .../Adminhtml/Email/Template/Grid.php         |  2 +-
 .../Adminhtml/Email/Template/Index.php        |  2 +-
 .../Adminhtml/Email/Template/NewAction.php    |  2 +-
 .../Adminhtml/Email/Template/Preview.php      |  2 +-
 .../Adminhtml/Email/Template/Save.php         |  2 +-
 .../Adminhtml/Email/Template/EditTest.php     |  8 ++++----
 .../Adminhtml/Email/Template/IndexTest.php    |  6 +++---
 .../Controller/Adminhtml/Crypt/Key/Index.php  |  2 +-
 .../Controller/Adminhtml/Crypt/Key/Save.php   |  2 +-
 .../Adminhtml/Crypt/Key/SaveTest.php          |  6 +++---
 .../Controller/Adminhtml/Edit/Popup.php       |  2 +-
 .../Controller/Adminhtml/Edit/PopupTest.php   |  4 ++--
 .../Controller/Adminhtml/Export/Export.php    |  2 +-
 .../Controller/Adminhtml/Export/GetFilter.php |  2 +-
 .../Controller/Adminhtml/Export/Index.php     |  2 +-
 .../Controller/Adminhtml/History/Download.php |  2 +-
 .../Controller/Adminhtml/History/Index.php    |  2 +-
 .../Controller/Adminhtml/Import/Download.php  |  2 +-
 .../Controller/Adminhtml/Import/Index.php     |  2 +-
 .../Controller/Adminhtml/Import/Start.php     |  2 +-
 .../Controller/Adminhtml/Import/Validate.php  |  2 +-
 .../Adminhtml/History/DownloadTest.php        |  4 ++--
 .../Adminhtml/History/IndexTest.php           |  2 +-
 .../Adminhtml/Indexer/ListAction.php          |  2 +-
 .../Adminhtml/Indexer/MassChangelog.php       |  2 +-
 .../Adminhtml/Indexer/MassOnTheFly.php        |  2 +-
 .../Adminhtml/Indexer/ListActionTest.php      |  2 +-
 .../Adminhtml/Indexer/MassChangelogTest.php   |  2 +-
 .../Adminhtml/Indexer/MassOnTheFlyTest.php    |  2 +-
 .../Adminhtml/Integration/Delete.php          |  2 +-
 .../Controller/Adminhtml/Integration/Edit.php |  2 +-
 .../Controller/Adminhtml/Integration/Grid.php |  2 +-
 .../Adminhtml/Integration/Index.php           |  2 +-
 .../Integration/LoginSuccessCallback.php      |  2 +-
 .../Adminhtml/Integration/NewAction.php       |  2 +-
 .../Integration/PermissionsDialog.php         |  2 +-
 .../Controller/Adminhtml/Integration/Save.php |  2 +-
 .../Adminhtml/Integration/TokensDialog.php    |  2 +-
 .../Adminhtml/Integration/TokensExchange.php  |  2 +-
 .../Integration/Controller/Token/Access.php   |  2 +-
 .../Integration/Controller/Token/Request.php  |  2 +-
 .../Adminhtml/Integration/DeleteTest.php      | 12 +++++------
 .../Adminhtml/Integration/EditTest.php        |  8 ++++----
 .../Adminhtml/Integration/IndexTest.php       |  2 +-
 .../Adminhtml/Integration/NewActionTest.php   |  2 +-
 .../Integration/PermissionsDialogTest.php     |  2 +-
 .../Adminhtml/Integration/SaveTest.php        | 10 +++++-----
 .../Integration/TokensDialogTest.php          |  4 ++--
 .../Test/Unit/Controller/Token/AccessTest.php |  2 +-
 .../Unit/Controller/Token/RequestTest.php     |  2 +-
 .../Controller/Adminhtml/Index/Index.php      |  2 +-
 .../Controller/Adminhtml/Partners/Index.php   |  2 +-
 .../Test/Unit/Controller/Index/IndexTest.php  |  4 ++--
 .../Unit/Controller/Partners/IndexTest.php    |  4 ++--
 .../System/Config/System/Storage/Status.php   |  2 +-
 .../Config/System/Storage/Synchronize.php     |  2 +-
 .../Multishipping/Controller/Checkout.php     | 14 ++++++-------
 .../Controller/Checkout/Address.php           |  4 ++--
 .../Checkout/Address/EditAddress.php          |  2 +-
 .../Checkout/Address/EditBilling.php          |  2 +-
 .../Checkout/Address/EditShipping.php         |  2 +-
 .../Checkout/Address/EditShippingPost.php     |  2 +-
 .../Checkout/Address/NewBilling.php           |  2 +-
 .../Checkout/Address/NewShipping.php          |  2 +-
 .../Checkout/Address/SaveBilling.php          |  2 +-
 .../Checkout/Address/SelectBilling.php        |  2 +-
 .../Checkout/Address/SetBilling.php           |  2 +-
 .../Checkout/Address/ShippingSaved.php        |  2 +-
 .../Controller/Checkout/Addresses.php         |  2 +-
 .../Controller/Checkout/AddressesPost.php     |  2 +-
 .../Controller/Checkout/BackToAddresses.php   |  2 +-
 .../Controller/Checkout/BackToBilling.php     |  2 +-
 .../Controller/Checkout/BackToShipping.php    |  2 +-
 .../Controller/Checkout/Billing.php           |  2 +-
 .../Controller/Checkout/Index.php             |  2 +-
 .../Controller/Checkout/Login.php             |  2 +-
 .../Controller/Checkout/Overview.php          |  2 +-
 .../Controller/Checkout/OverviewPost.php      |  2 +-
 .../Controller/Checkout/Register.php          |  2 +-
 .../Controller/Checkout/RemoveItem.php        |  2 +-
 .../Controller/Checkout/Shipping.php          |  2 +-
 .../Controller/Checkout/ShippingPost.php      |  2 +-
 .../Controller/Checkout/Success.php           |  2 +-
 .../Checkout/Address/EditAddressTest.php      |  4 ++--
 .../Checkout/Address/EditBillingTest.php      |  4 ++--
 .../Checkout/Address/EditShippingTest.php     |  4 ++--
 .../Checkout/Address/NewBillingTest.php       |  4 ++--
 .../Checkout/Address/NewShippingTest.php      |  4 ++--
 .../Checkout/Address/ShippingSavedTest.php    |  4 ++--
 .../Controller/Adminhtml/Problem/Grid.php     |  2 +-
 .../Controller/Adminhtml/Problem/Index.php    |  2 +-
 .../Controller/Adminhtml/Queue/Cancel.php     |  2 +-
 .../Controller/Adminhtml/Queue/Drop.php       |  2 +-
 .../Controller/Adminhtml/Queue/Edit.php       |  2 +-
 .../Controller/Adminhtml/Queue/Grid.php       |  2 +-
 .../Controller/Adminhtml/Queue/Index.php      |  2 +-
 .../Controller/Adminhtml/Queue/Pause.php      |  2 +-
 .../Controller/Adminhtml/Queue/Preview.php    |  2 +-
 .../Controller/Adminhtml/Queue/Resume.php     |  2 +-
 .../Controller/Adminhtml/Queue/Save.php       |  2 +-
 .../Controller/Adminhtml/Queue/Sending.php    |  2 +-
 .../Controller/Adminhtml/Queue/Start.php      |  2 +-
 .../Adminhtml/Subscriber/ExportCsv.php        |  2 +-
 .../Adminhtml/Subscriber/ExportXml.php        |  2 +-
 .../Controller/Adminhtml/Subscriber/Grid.php  |  2 +-
 .../Controller/Adminhtml/Subscriber/Index.php |  2 +-
 .../Adminhtml/Subscriber/MassDelete.php       |  2 +-
 .../Adminhtml/Subscriber/MassUnsubscribe.php  |  2 +-
 .../Controller/Adminhtml/Template/Delete.php  |  2 +-
 .../Controller/Adminhtml/Template/Drop.php    |  2 +-
 .../Controller/Adminhtml/Template/Edit.php    |  2 +-
 .../Controller/Adminhtml/Template/Grid.php    |  2 +-
 .../Controller/Adminhtml/Template/Index.php   |  2 +-
 .../Adminhtml/Template/NewAction.php          |  2 +-
 .../Controller/Adminhtml/Template/Preview.php |  2 +-
 .../Controller/Adminhtml/Template/Save.php    |  2 +-
 .../Magento/Newsletter/Controller/Manage.php  |  4 ++--
 .../Newsletter/Controller/Manage/Index.php    |  2 +-
 .../Newsletter/Controller/Manage/Save.php     |  2 +-
 .../Controller/Subscriber/Confirm.php         |  2 +-
 .../Controller/Subscriber/NewAction.php       |  2 +-
 .../Controller/Subscriber/Unsubscribe.php     |  2 +-
 .../Test/Unit/Controller/Manage/SaveTest.php  |  6 +++---
 .../System/Config/ExportTablerates.php        |  2 +-
 .../PageCache/ExportVarnishConfig.php         |  2 +-
 .../PageCache/Controller/Block/Esi.php        |  2 +-
 .../PageCache/Controller/Block/Render.php     |  2 +-
 .../PageCache/ExportVarnishConfigTest.php     |  2 +-
 .../Test/Unit/Controller/Block/EsiTest.php    |  4 ++--
 .../Test/Unit/Controller/Block/RenderTest.php |  6 +++---
 .../Adminhtml/Billing/Agreement/Cancel.php    |  2 +-
 .../Billing/Agreement/CustomerGrid.php        |  2 +-
 .../Adminhtml/Billing/Agreement/Delete.php    |  2 +-
 .../Adminhtml/Billing/Agreement/Grid.php      |  2 +-
 .../Adminhtml/Billing/Agreement/Index.php     |  2 +-
 .../Billing/Agreement/OrdersGrid.php          |  2 +-
 .../Adminhtml/Billing/Agreement/View.php      |  2 +-
 .../Adminhtml/Paypal/Reports/Details.php      |  2 +-
 .../Adminhtml/Paypal/Reports/Fetch.php        |  2 +-
 .../Adminhtml/Paypal/Reports/Grid.php         |  2 +-
 .../Adminhtml/Paypal/Reports/Index.php        |  2 +-
 .../Paypal/Controller/Billing/Agreement.php   |  6 +++---
 .../Controller/Billing/Agreement/Cancel.php   |  2 +-
 .../Billing/Agreement/CancelWizard.php        |  2 +-
 .../Controller/Billing/Agreement/Index.php    |  2 +-
 .../Billing/Agreement/ReturnWizard.php        |  2 +-
 .../Billing/Agreement/StartWizard.php         |  2 +-
 .../Controller/Billing/Agreement/View.php     |  2 +-
 .../Magento/Paypal/Controller/Bml/Start.php   |  2 +-
 .../Express/AbstractExpress/Cancel.php        |  2 +-
 .../Express/AbstractExpress/Edit.php          |  2 +-
 .../Express/AbstractExpress/PlaceOrder.php    |  2 +-
 .../Express/AbstractExpress/ReturnAction.php  |  2 +-
 .../Express/AbstractExpress/Review.php        |  2 +-
 .../AbstractExpress/SaveShippingMethod.php    |  2 +-
 .../ShippingOptionsCallback.php               |  2 +-
 .../Express/AbstractExpress/Start.php         |  2 +-
 .../AbstractExpress/UpdateShippingMethods.php |  2 +-
 .../Paypal/Controller/Hostedpro/Cancel.php    |  2 +-
 .../Paypal/Controller/Hostedpro/Redirect.php  |  2 +-
 .../Controller/Hostedpro/ReturnAction.php     |  2 +-
 .../Magento/Paypal/Controller/Ipn/Index.php   |  2 +-
 .../Controller/Payflow/CancelPayment.php      |  2 +-
 .../Paypal/Controller/Payflow/Form.php        |  2 +-
 .../Paypal/Controller/Payflow/ReturnUrl.php   |  2 +-
 .../Paypal/Controller/Payflow/SilentPost.php  |  2 +-
 .../Paypal/Controller/Payflowbml/Start.php    |  2 +-
 .../Transparent/RequestSecureToken.php        |  2 +-
 .../Controller/Transparent/Response.php       |  2 +-
 .../Billing/Agreement/CancelTest.php          |  6 +++---
 .../Unit/Controller/Payflow/ReturnUrlTest.php |  4 ++--
 .../Transparent/RequestSecureTokenTest.php    |  6 +++---
 .../Controller/Transparent/ResponseTest.php   |  4 ++--
 .../Controller/Index/ExpressCheckout.php      |  2 +-
 .../Controller/Index/SaveMethod.php           |  2 +-
 .../Controller/Index/UnsetCookie.php          |  2 +-
 .../Magento/ProductAlert/Controller/Add.php   |  4 ++--
 .../ProductAlert/Controller/Add/Price.php     |  2 +-
 .../ProductAlert/Controller/Add/Stock.php     |  2 +-
 .../Controller/Add/TestObserver.php           |  2 +-
 .../Controller/Unsubscribe/Price.php          |  2 +-
 .../Controller/Unsubscribe/PriceAll.php       |  2 +-
 .../Controller/Unsubscribe/Stock.php          |  2 +-
 .../Controller/Unsubscribe/StockAll.php       |  2 +-
 .../Product/Gallery/RetrieveImage.php         |  2 +-
 .../Product/Gallery/RetrieveImageTest.php     |  2 +-
 .../Adminhtml/Report/Customer/Accounts.php    |  2 +-
 .../Report/Customer/ExportAccountsCsv.php     |  2 +-
 .../Report/Customer/ExportAccountsExcel.php   |  2 +-
 .../Report/Customer/ExportOrdersCsv.php       |  2 +-
 .../Report/Customer/ExportOrdersExcel.php     |  2 +-
 .../Report/Customer/ExportTotalsCsv.php       |  2 +-
 .../Report/Customer/ExportTotalsExcel.php     |  2 +-
 .../Adminhtml/Report/Customer/Orders.php      |  2 +-
 .../Adminhtml/Report/Customer/Totals.php      |  2 +-
 .../Adminhtml/Report/Product/Downloads.php    |  2 +-
 .../Report/Product/ExportDownloadsCsv.php     |  2 +-
 .../Report/Product/ExportDownloadsExcel.php   |  2 +-
 .../Report/Product/ExportLowstockCsv.php      |  2 +-
 .../Report/Product/ExportLowstockExcel.php    |  2 +-
 .../Report/Product/ExportSoldCsv.php          |  2 +-
 .../Report/Product/ExportSoldExcel.php        |  2 +-
 .../Report/Product/ExportViewedCsv.php        |  2 +-
 .../Report/Product/ExportViewedExcel.php      |  2 +-
 .../Adminhtml/Report/Product/Lowstock.php     |  2 +-
 .../Adminhtml/Report/Product/Sold.php         |  2 +-
 .../Adminhtml/Report/Product/Viewed.php       |  2 +-
 .../Adminhtml/Report/Review/Customer.php      |  2 +-
 .../Report/Review/ExportCustomerCsv.php       |  2 +-
 .../Report/Review/ExportCustomerExcel.php     |  2 +-
 .../Report/Review/ExportProductCsv.php        |  2 +-
 .../Report/Review/ExportProductDetailCsv.php  |  2 +-
 .../Review/ExportProductDetailExcel.php       |  2 +-
 .../Report/Review/ExportProductExcel.php      |  2 +-
 .../Adminhtml/Report/Review/Product.php       |  2 +-
 .../Adminhtml/Report/Review/ProductDetail.php |  2 +-
 .../Adminhtml/Report/Sales/Bestsellers.php    |  2 +-
 .../Adminhtml/Report/Sales/Coupons.php        |  2 +-
 .../Report/Sales/ExportBestsellersCsv.php     |  2 +-
 .../Report/Sales/ExportBestsellersExcel.php   |  2 +-
 .../Report/Sales/ExportCouponsCsv.php         |  2 +-
 .../Report/Sales/ExportCouponsExcel.php       |  2 +-
 .../Report/Sales/ExportInvoicedCsv.php        |  2 +-
 .../Report/Sales/ExportInvoicedExcel.php      |  2 +-
 .../Report/Sales/ExportRefundedCsv.php        |  2 +-
 .../Report/Sales/ExportRefundedExcel.php      |  2 +-
 .../Adminhtml/Report/Sales/ExportSalesCsv.php |  2 +-
 .../Report/Sales/ExportSalesExcel.php         |  2 +-
 .../Report/Sales/ExportShippingCsv.php        |  2 +-
 .../Report/Sales/ExportShippingExcel.php      |  2 +-
 .../Adminhtml/Report/Sales/ExportTaxCsv.php   |  2 +-
 .../Adminhtml/Report/Sales/ExportTaxExcel.php |  2 +-
 .../Adminhtml/Report/Sales/Invoiced.php       |  2 +-
 .../Report/Sales/RefreshLifetime.php          |  2 +-
 .../Adminhtml/Report/Sales/RefreshRecent.php  |  2 +-
 .../Report/Sales/RefreshStatistics.php        |  2 +-
 .../Adminhtml/Report/Sales/Refunded.php       |  2 +-
 .../Adminhtml/Report/Sales/Sales.php          |  2 +-
 .../Adminhtml/Report/Sales/Shipping.php       |  2 +-
 .../Controller/Adminhtml/Report/Sales/Tax.php |  2 +-
 .../Adminhtml/Report/Shopcart/Abandoned.php   |  2 +-
 .../Adminhtml/Report/Shopcart/Customer.php    |  2 +-
 .../Report/Shopcart/ExportAbandonedCsv.php    |  2 +-
 .../Report/Shopcart/ExportAbandonedExcel.php  |  2 +-
 .../Report/Shopcart/ExportCustomerCsv.php     |  2 +-
 .../Report/Shopcart/ExportCustomerExcel.php   |  2 +-
 .../Report/Shopcart/ExportProductCsv.php      |  2 +-
 .../Report/Shopcart/ExportProductExcel.php    |  2 +-
 .../Adminhtml/Report/Shopcart/Product.php     |  2 +-
 .../Adminhtml/Report/Statistics/Index.php     |  2 +-
 .../Report/Statistics/RefreshLifetime.php     |  2 +-
 .../Report/Statistics/RefreshRecent.php       |  2 +-
 .../Report/Customer/AccountsTest.php          |  2 +-
 .../Report/Customer/ExportAccountsCsvTest.php |  2 +-
 .../Customer/ExportAccountsExcelTest.php      |  2 +-
 .../Report/Customer/ExportOrdersCsvTest.php   |  2 +-
 .../Report/Customer/ExportOrdersExcelTest.php |  2 +-
 .../Report/Customer/ExportTotalsCsvTest.php   |  2 +-
 .../Report/Customer/ExportTotalsExcelTest.php |  2 +-
 .../Adminhtml/Report/Customer/OrdersTest.php  |  2 +-
 .../Adminhtml/Report/Customer/TotalsTest.php  |  2 +-
 .../Report/Product/DownloadsTest.php          |  2 +-
 .../Report/Product/ExportDownloadsCsvTest.php |  2 +-
 .../Product/ExportDownloadsExcelTest.php      |  2 +-
 .../Report/Product/ExportLowstockCsvTest.php  |  2 +-
 .../Product/ExportLowstockExcelTest.php       |  2 +-
 .../Report/Product/ExportSoldCsvTest.php      |  2 +-
 .../Report/Product/ExportSoldExcelTest.php    |  2 +-
 .../Report/Product/ExportViewedCsvTest.php    |  2 +-
 .../Report/Product/ExportViewedExcelTest.php  |  2 +-
 .../Adminhtml/Report/Product/LowstockTest.php |  2 +-
 .../Adminhtml/Report/Product/SoldTest.php     |  2 +-
 .../Adminhtml/Report/Product/ViewedTest.php   |  6 +++---
 .../Controller/Adminhtml/Product/Delete.php   |  2 +-
 .../Controller/Adminhtml/Product/Edit.php     |  2 +-
 .../Controller/Adminhtml/Product/Index.php    |  2 +-
 .../Adminhtml/Product/JsonProductInfo.php     |  2 +-
 .../Adminhtml/Product/MassDelete.php          |  2 +-
 .../Adminhtml/Product/MassUpdateStatus.php    |  2 +-
 .../Adminhtml/Product/MassVisibleIn.php       |  2 +-
 .../Adminhtml/Product/NewAction.php           |  2 +-
 .../Controller/Adminhtml/Product/Pending.php  |  2 +-
 .../Controller/Adminhtml/Product/Post.php     |  2 +-
 .../Adminhtml/Product/ProductGrid.php         |  2 +-
 .../Adminhtml/Product/RatingItems.php         |  2 +-
 .../Adminhtml/Product/ReviewGrid.php          |  2 +-
 .../Adminhtml/Product/Reviews/Grid.php        |  2 +-
 .../Controller/Adminhtml/Product/Save.php     |  2 +-
 .../Controller/Adminhtml/Rating/Delete.php    |  2 +-
 .../Controller/Adminhtml/Rating/Edit.php      |  2 +-
 .../Controller/Adminhtml/Rating/Index.php     |  2 +-
 .../Controller/Adminhtml/Rating/NewAction.php |  2 +-
 .../Controller/Adminhtml/Rating/Save.php      |  2 +-
 .../Magento/Review/Controller/Customer.php    |  4 ++--
 .../Review/Controller/Customer/Index.php      |  2 +-
 .../Review/Controller/Customer/View.php       |  2 +-
 .../Magento/Review/Controller/Product.php     |  6 +++---
 .../Review/Controller/Product/ListAction.php  |  2 +-
 .../Review/Controller/Product/ListAjax.php    |  2 +-
 .../Review/Controller/Product/Post.php        |  2 +-
 .../Review/Controller/Product/View.php        |  2 +-
 .../Controller/Adminhtml/Product/PostTest.php |  2 +-
 .../Test/Unit/Controller/Product/PostTest.php |  2 +-
 .../Rss/Controller/Adminhtml/Feed/Index.php   |  2 +-
 .../Magento/Rss/Controller/Feed/Index.php     |  2 +-
 .../Magento/Rss/Controller/Index/Index.php    |  2 +-
 .../Controller/Adminhtml/Feed/IndexTest.php   |  4 ++--
 .../Test/Unit/Controller/Feed/IndexTest.php   |  4 ++--
 .../AbstractController/PrintAction.php        |  2 +-
 .../AbstractController/PrintCreditmemo.php    |  2 +-
 .../AbstractController/PrintInvoice.php       |  2 +-
 .../AbstractController/PrintShipment.php      |  2 +-
 .../Controller/AbstractController/Reorder.php |  2 +-
 .../Controller/AbstractController/View.php    |  2 +-
 .../Creditmemo/AbstractCreditmemo/Email.php   |  2 +-
 .../Creditmemo/AbstractCreditmemo/Grid.php    |  2 +-
 .../Creditmemo/AbstractCreditmemo/Index.php   |  2 +-
 .../AbstractCreditmemo/PrintAction.php        |  2 +-
 .../Creditmemo/AbstractCreditmemo/View.php    |  2 +-
 .../Controller/Adminhtml/Creditmemo/Index.php |  4 ++--
 .../Invoice/AbstractInvoice/Email.php         |  2 +-
 .../Invoice/AbstractInvoice/Grid.php          |  2 +-
 .../Invoice/AbstractInvoice/Index.php         |  2 +-
 .../Invoice/AbstractInvoice/PrintAction.php   |  2 +-
 .../Invoice/AbstractInvoice/View.php          |  2 +-
 .../Adminhtml/Order/AbstractMassAction.php    |  2 +-
 .../Controller/Adminhtml/Order/AddComment.php |  2 +-
 .../Controller/Adminhtml/Order/Address.php    |  2 +-
 .../Adminhtml/Order/AddressSave.php           |  2 +-
 .../Controller/Adminhtml/Order/Cancel.php     |  2 +-
 .../Adminhtml/Order/CommentsHistory.php       |  2 +-
 .../Adminhtml/Order/Create/AddConfigured.php  |  2 +-
 .../Adminhtml/Order/Create/Cancel.php         |  2 +-
 .../Order/Create/ConfigureProductToAdd.php    |  2 +-
 .../Order/Create/ConfigureQuoteItems.php      |  2 +-
 .../Adminhtml/Order/Create/Index.php          |  2 +-
 .../Adminhtml/Order/Create/LoadBlock.php      |  2 +-
 .../Adminhtml/Order/Create/ProcessData.php    |  2 +-
 .../Adminhtml/Order/Create/Reorder.php        |  2 +-
 .../Adminhtml/Order/Create/Save.php           |  2 +-
 .../Order/Create/ShowUpdateResult.php         |  2 +-
 .../Adminhtml/Order/Create/Start.php          |  2 +-
 .../Adminhtml/Order/Creditmemo/AddComment.php |  2 +-
 .../Adminhtml/Order/Creditmemo/Cancel.php     |  2 +-
 .../Adminhtml/Order/Creditmemo/NewAction.php  |  2 +-
 .../Order/Creditmemo/PrintAction.php          |  4 ++--
 .../Adminhtml/Order/Creditmemo/Save.php       |  2 +-
 .../Adminhtml/Order/Creditmemo/Start.php      |  2 +-
 .../Adminhtml/Order/Creditmemo/UpdateQty.php  |  2 +-
 .../Adminhtml/Order/Creditmemo/View.php       |  2 +-
 .../Adminhtml/Order/Creditmemo/Void.php       |  2 +-
 .../Adminhtml/Order/Creditmemos.php           |  2 +-
 .../Controller/Adminhtml/Order/Edit/Index.php |  2 +-
 .../Controller/Adminhtml/Order/Edit/Start.php |  2 +-
 .../Controller/Adminhtml/Order/Email.php      |  2 +-
 .../Sales/Controller/Adminhtml/Order/Grid.php |  2 +-
 .../Sales/Controller/Adminhtml/Order/Hold.php |  2 +-
 .../Controller/Adminhtml/Order/Index.php      |  2 +-
 .../Adminhtml/Order/Invoice/AddComment.php    |  2 +-
 .../Adminhtml/Order/Invoice/Cancel.php        |  2 +-
 .../Adminhtml/Order/Invoice/Capture.php       |  2 +-
 .../Adminhtml/Order/Invoice/NewAction.php     |  2 +-
 .../Adminhtml/Order/Invoice/Save.php          |  2 +-
 .../Adminhtml/Order/Invoice/Start.php         |  2 +-
 .../Adminhtml/Order/Invoice/UpdateQty.php     |  2 +-
 .../Adminhtml/Order/Invoice/View.php          |  2 +-
 .../Adminhtml/Order/Invoice/Void.php          |  2 +-
 .../Controller/Adminhtml/Order/Invoices.php   |  2 +-
 .../Adminhtml/Order/ReviewPayment.php         |  2 +-
 .../Controller/Adminhtml/Order/Shipments.php  |  2 +-
 .../Adminhtml/Order/Status/Assign.php         |  2 +-
 .../Adminhtml/Order/Status/AssignPost.php     |  2 +-
 .../Adminhtml/Order/Status/Edit.php           |  2 +-
 .../Adminhtml/Order/Status/Index.php          |  2 +-
 .../Adminhtml/Order/Status/NewAction.php      |  2 +-
 .../Adminhtml/Order/Status/Save.php           |  2 +-
 .../Adminhtml/Order/Status/Unassign.php       |  2 +-
 .../Adminhtml/Order/Transactions.php          |  2 +-
 .../Controller/Adminhtml/Order/Unhold.php     |  2 +-
 .../Sales/Controller/Adminhtml/Order/View.php |  2 +-
 .../Adminhtml/Order/View/Giftmessage/Save.php |  2 +-
 .../Adminhtml/Order/VoidPayment.php           |  2 +-
 .../Shipment/AbstractShipment/Index.php       |  2 +-
 .../Shipment/AbstractShipment/PrintAction.php |  2 +-
 .../Shipment/AbstractShipment/View.php        |  2 +-
 .../Adminhtml/Transactions/Fetch.php          |  2 +-
 .../Adminhtml/Transactions/Grid.php           |  2 +-
 .../Adminhtml/Transactions/Index.php          |  2 +-
 .../Adminhtml/Transactions/View.php           |  2 +-
 .../Download/DownloadCustomOption.php         |  2 +-
 .../Magento/Sales/Controller/Guest/Form.php   |  2 +-
 .../Controller/Guest/PrintCreditmemo.php      |  2 +-
 .../Sales/Controller/Guest/PrintInvoice.php   |  2 +-
 .../Sales/Controller/Guest/PrintShipment.php  |  2 +-
 .../Magento/Sales/Controller/Guest/View.php   |  2 +-
 .../Sales/Controller/Order/History.php        |  2 +-
 .../AbstractCreditmemo/EmailTest.php          |  4 ++--
 .../Invoice/AbstractInvoice/EmailTest.php     |  6 +++---
 .../Controller/Adminhtml/Order/CancelTest.php |  2 +-
 .../Order/Create/ProcessDataTest.php          |  2 +-
 .../Order/Creditmemo/AddCommentTest.php       |  8 ++++----
 .../Adminhtml/Order/Creditmemo/CancelTest.php |  8 ++++----
 .../Order/Creditmemo/NewActionTest.php        |  2 +-
 .../Order/Creditmemo/PrintActionTest.php      |  8 ++++----
 .../Order/Creditmemo/UpdateQtyTest.php        |  6 +++---
 .../Adminhtml/Order/Creditmemo/ViewTest.php   |  4 ++--
 .../Adminhtml/Order/Creditmemo/VoidTest.php   |  8 ++++----
 .../Controller/Adminhtml/Order/EmailTest.php  |  4 ++--
 .../Controller/Adminhtml/Order/HoldTest.php   |  2 +-
 .../Order/Invoice/AddCommentTest.php          |  6 +++---
 .../Adminhtml/Order/Invoice/CancelTest.php    |  8 ++++----
 .../Adminhtml/Order/Invoice/CaptureTest.php   |  8 ++++----
 .../Adminhtml/Order/Invoice/NewActionTest.php |  4 ++--
 .../Order/Invoice/PrintActionTest.php         |  2 +-
 .../Adminhtml/Order/Invoice/SaveTest.php      |  2 +-
 .../Adminhtml/Order/Invoice/UpdateQtyTest.php |  6 +++---
 .../Adminhtml/Order/Invoice/ViewTest.php      |  4 ++--
 .../Adminhtml/Order/Invoice/VoidTest.php      |  6 +++---
 .../Adminhtml/Order/MassCancelTest.php        |  6 +++---
 .../Adminhtml/Order/MassHoldTest.php          |  4 ++--
 .../Adminhtml/Order/MassUnholdTest.php        |  4 ++--
 .../Adminhtml/Order/ReviewPaymentTest.php     |  2 +-
 .../Controller/Adminhtml/Order/UnholdTest.php |  2 +-
 .../Controller/Adminhtml/Order/ViewTest.php   | 12 +++++------
 .../Download/DownloadCustomOptionTest.php     |  4 ++--
 .../Test/Unit/Controller/Guest/ViewTest.php   |  4 ++--
 .../Adminhtml/Promo/Quote/ApplyRules.php      |  2 +-
 .../Adminhtml/Promo/Quote/Chooser.php         |  2 +-
 .../Adminhtml/Promo/Quote/CouponsGrid.php     |  2 +-
 .../Promo/Quote/CouponsMassDelete.php         |  2 +-
 .../Adminhtml/Promo/Quote/Delete.php          |  2 +-
 .../Controller/Adminhtml/Promo/Quote/Edit.php |  2 +-
 .../Promo/Quote/ExportCouponsCsv.php          |  2 +-
 .../Promo/Quote/ExportCouponsXml.php          |  2 +-
 .../Adminhtml/Promo/Quote/Generate.php        |  2 +-
 .../Adminhtml/Promo/Quote/Index.php           |  2 +-
 .../Adminhtml/Promo/Quote/NewAction.php       |  2 +-
 .../Adminhtml/Promo/Quote/NewActionHtml.php   |  2 +-
 .../Promo/Quote/NewConditionHtml.php          |  2 +-
 .../Controller/Adminhtml/Promo/Quote/Save.php |  2 +-
 .../Controller/Adminhtml/Term/Delete.php      |  2 +-
 .../Search/Controller/Adminhtml/Term/Edit.php |  2 +-
 .../Adminhtml/Term/ExportSearchCsv.php        |  2 +-
 .../Adminhtml/Term/ExportSearchExcel.php      |  2 +-
 .../Controller/Adminhtml/Term/Index.php       |  2 +-
 .../Controller/Adminhtml/Term/MassDelete.php  |  2 +-
 .../Controller/Adminhtml/Term/NewAction.php   |  2 +-
 .../Controller/Adminhtml/Term/Report.php      |  2 +-
 .../Search/Controller/Adminhtml/Term/Save.php |  2 +-
 .../Search/Controller/Ajax/Suggest.php        |  2 +-
 .../Search/Controller/Term/Popular.php        |  6 +++---
 .../Controller/Adminhtml/Ajax/SuggestTest.php |  4 ++--
 .../Adminhtml/Term/MassDeleteTest.php         |  2 +-
 .../Controller/Adminhtml/Term/SaveTest.php    | 12 +++++------
 .../Magento/SendFriend/Controller/Product.php |  4 ++--
 .../SendFriend/Controller/Product/Send.php    |  2 +-
 .../Controller/Product/Sendmail.php           |  2 +-
 .../Test/Unit/Controller/Product/SendTest.php | 12 +++++------
 .../Unit/Controller/Product/SendmailTest.php  | 16 +++++++--------
 .../Adminhtml/Order/Shipment/AddComment.php   |  2 +-
 .../Adminhtml/Order/Shipment/AddTrack.php     |  2 +-
 .../Adminhtml/Order/Shipment/CreateLabel.php  |  2 +-
 .../Adminhtml/Order/Shipment/Email.php        |  2 +-
 .../Order/Shipment/GetShippingItemsGrid.php   |  2 +-
 .../Adminhtml/Order/Shipment/NewAction.php    |  2 +-
 .../Adminhtml/Order/Shipment/PrintLabel.php   |  2 +-
 .../Adminhtml/Order/Shipment/PrintPackage.php |  2 +-
 .../Adminhtml/Order/Shipment/RemoveTrack.php  |  2 +-
 .../Adminhtml/Order/Shipment/Save.php         |  2 +-
 .../Adminhtml/Order/Shipment/Start.php        |  2 +-
 .../Adminhtml/Order/Shipment/View.php         |  2 +-
 .../Shipping/Controller/Tracking/Popup.php    |  2 +-
 .../Order/Shipment/AddCommentTest.php         |  8 ++++----
 .../Adminhtml/Order/Shipment/AddTrackTest.php |  2 +-
 .../Order/Shipment/CreateLabelTest.php        |  8 ++++----
 .../Adminhtml/Order/Shipment/EmailTest.php    |  2 +-
 .../Shipment/GetShippingItemsGridTest.php     |  2 +-
 .../Order/Shipment/NewActionTest.php          |  2 +-
 .../Order/Shipment/PrintLabelTest.php         |  8 ++++----
 .../Order/Shipment/PrintPackageTest.php       |  4 ++--
 .../Order/Shipment/RemoveTrackTest.php        |  8 ++++----
 .../Adminhtml/Order/Shipment/SaveTest.php     |  4 ++--
 .../Adminhtml/Order/Shipment/ViewTest.php     |  4 ++--
 .../Controller/Adminhtml/Sitemap/Delete.php   |  2 +-
 .../Controller/Adminhtml/Sitemap/Edit.php     |  2 +-
 .../Controller/Adminhtml/Sitemap/Generate.php |  2 +-
 .../Controller/Adminhtml/Sitemap/Index.php    |  2 +-
 .../Adminhtml/Sitemap/NewAction.php           |  2 +-
 .../Controller/Adminhtml/Sitemap/Save.php     |  2 +-
 .../Controller/Adminhtml/Sitemap/SaveTest.php |  4 ++--
 .../Store/Controller/Store/SwitchAction.php   |  2 +-
 .../Swagger/Controller/Index/Index.php        |  2 +-
 .../Controller/Adminhtml/Iframe/Show.php      |  2 +-
 .../Swatches/Controller/Ajax/Media.php        |  2 +-
 .../Controller/Adminhtml/Iframe/ShowTest.php  |  4 ++--
 .../Test/Unit/Controller/Ajax/MediaTest.php   |  4 ++--
 .../Tax/Controller/Adminhtml/Rate/Add.php     |  2 +-
 .../Controller/Adminhtml/Rate/AjaxDelete.php  |  2 +-
 .../Controller/Adminhtml/Rate/AjaxLoad.php    |  2 +-
 .../Controller/Adminhtml/Rate/AjaxSave.php    |  2 +-
 .../Tax/Controller/Adminhtml/Rate/Delete.php  |  2 +-
 .../Tax/Controller/Adminhtml/Rate/Edit.php    |  2 +-
 .../Tax/Controller/Adminhtml/Rate/Index.php   |  2 +-
 .../Tax/Controller/Adminhtml/Rate/Save.php    |  2 +-
 .../Tax/Controller/Adminhtml/Rule/Delete.php  |  2 +-
 .../Tax/Controller/Adminhtml/Rule/Edit.php    |  2 +-
 .../Tax/Controller/Adminhtml/Rule/Index.php   |  2 +-
 .../Controller/Adminhtml/Rule/NewAction.php   |  2 +-
 .../Tax/Controller/Adminhtml/Rule/Save.php    |  2 +-
 .../Controller/Adminhtml/Tax/AjaxDelete.php   |  2 +-
 .../Tax/Controller/Adminhtml/Tax/AjaxSave.php |  2 +-
 .../Adminhtml/Tax/IgnoreTaxNotification.php   |  2 +-
 .../Controller/Adminhtml/Rate/ExportCsv.php   |  2 +-
 .../Controller/Adminhtml/Rate/ExportPost.php  |  2 +-
 .../Controller/Adminhtml/Rate/ExportXml.php   |  2 +-
 .../Adminhtml/Rate/ImportExport.php           |  2 +-
 .../Controller/Adminhtml/Rate/ImportPost.php  |  2 +-
 .../Adminhtml/System/Design/Theme/Delete.php  |  2 +-
 .../System/Design/Theme/DownloadCss.php       |  2 +-
 .../System/Design/Theme/DownloadCustomCss.php |  2 +-
 .../Adminhtml/System/Design/Theme/Edit.php    |  2 +-
 .../Adminhtml/System/Design/Theme/Grid.php    |  2 +-
 .../Adminhtml/System/Design/Theme/Index.php   |  2 +-
 .../System/Design/Theme/NewAction.php         |  2 +-
 .../Adminhtml/System/Design/Theme/Save.php    |  2 +-
 .../System/Design/Theme/UploadCss.php         |  2 +-
 .../System/Design/Theme/UploadJs.php          |  2 +-
 .../System/Design/Wysiwyg/Files/Contents.php  |  2 +-
 .../Design/Wysiwyg/Files/DeleteFiles.php      |  2 +-
 .../Design/Wysiwyg/Files/DeleteFolder.php     |  2 +-
 .../System/Design/Wysiwyg/Files/Index.php     |  2 +-
 .../System/Design/Wysiwyg/Files/NewFolder.php |  2 +-
 .../System/Design/Wysiwyg/Files/OnInsert.php  |  2 +-
 .../Design/Wysiwyg/Files/PreviewImage.php     |  2 +-
 .../System/Design/Wysiwyg/Files/TreeJson.php  |  2 +-
 .../System/Design/Wysiwyg/Files/Upload.php    |  2 +-
 .../System/Design/Theme/DeleteTest.php        |  6 +++---
 .../System/Design/Theme/DownloadCssTest.php   |  4 ++--
 .../Design/Theme/DownloadCustomCssTest.php    |  4 ++--
 .../System/Design/Theme/EditTest.php          |  6 +++---
 .../System/Design/Theme/IndexTest.php         |  2 +-
 .../System/Design/Theme/SaveTest.php          |  2 +-
 .../System/Design/Theme/UploadCssTest.php     |  6 +++---
 .../System/Design/Theme/UploadJsTest.php      |  6 +++---
 .../Design/Wysiwyg/Files/ContentsTest.php     |  2 +-
 .../Design/Wysiwyg/Files/DeleteFilesTest.php  |  4 ++--
 .../Design/Wysiwyg/Files/DeleteFolderTest.php |  2 +-
 .../System/Design/Wysiwyg/Files/IndexTest.php |  2 +-
 .../Design/Wysiwyg/Files/OnInsertTest.php     |  2 +-
 .../Translation/Controller/Ajax/Index.php     |  2 +-
 .../Controller/Adminhtml/AbstractAction.php   |  2 +-
 .../Controller/Adminhtml/Bookmark/Delete.php  |  2 +-
 .../Ui/Controller/Adminhtml/Bookmark/Save.php |  2 +-
 .../Controller/Adminhtml/Export/GridToCsv.php |  2 +-
 .../Controller/Adminhtml/Export/GridToXml.php |  2 +-
 .../Ui/Controller/Adminhtml/Index/Render.php  |  2 +-
 .../Adminhtml/Export/GridToCsvTest.php        |  2 +-
 .../Adminhtml/Export/GridToXmlTest.php        |  2 +-
 .../Adminhtml/Url/Rewrite/CategoriesJson.php  |  2 +-
 .../Adminhtml/Url/Rewrite/CmsPageGrid.php     |  2 +-
 .../Adminhtml/Url/Rewrite/Delete.php          |  2 +-
 .../Controller/Adminhtml/Url/Rewrite/Edit.php |  2 +-
 .../Adminhtml/Url/Rewrite/Index.php           |  2 +-
 .../Adminhtml/Url/Rewrite/ProductGrid.php     |  2 +-
 .../Controller/Adminhtml/Url/Rewrite/Save.php |  2 +-
 .../Adminhtml/Auth/Forgotpassword.php         |  2 +-
 .../Adminhtml/Auth/ResetPassword.php          |  2 +-
 .../Adminhtml/Auth/ResetPasswordPost.php      |  2 +-
 .../User/Controller/Adminhtml/Locks/Grid.php  |  2 +-
 .../User/Controller/Adminhtml/Locks/Index.php |  2 +-
 .../Controller/Adminhtml/Locks/MassUnlock.php |  2 +-
 .../User/Controller/Adminhtml/User/Delete.php |  2 +-
 .../User/Controller/Adminhtml/User/Edit.php   |  2 +-
 .../User/Controller/Adminhtml/User/Index.php  |  2 +-
 .../Adminhtml/User/InvalidateToken.php        |  2 +-
 .../Controller/Adminhtml/User/NewAction.php   |  2 +-
 .../Controller/Adminhtml/User/Role/Delete.php |  2 +-
 .../Adminhtml/User/Role/EditRole.php          |  2 +-
 .../Adminhtml/User/Role/Editrolegrid.php      |  2 +-
 .../Controller/Adminhtml/User/Role/Index.php  |  2 +-
 .../Adminhtml/User/Role/RoleGrid.php          |  2 +-
 .../Adminhtml/User/Role/SaveRole.php          |  2 +-
 .../Controller/Adminhtml/User/RoleGrid.php    |  2 +-
 .../Controller/Adminhtml/User/RolesGrid.php   |  2 +-
 .../User/Controller/Adminhtml/User/Save.php   |  2 +-
 .../Controller/Adminhtml/User/Validate.php    |  2 +-
 .../Adminhtml/System/Variable/Delete.php      |  2 +-
 .../Adminhtml/System/Variable/Edit.php        |  2 +-
 .../Adminhtml/System/Variable/Index.php       |  2 +-
 .../Adminhtml/System/Variable/NewAction.php   |  2 +-
 .../Adminhtml/System/Variable/Save.php        |  2 +-
 .../Adminhtml/System/Variable/Validate.php    |  2 +-
 .../System/Variable/WysiwygPlugin.php         |  2 +-
 .../System/Variable/ValidateTest.php          |  2 +-
 .../Version/Controller/Index/Index.php        |  2 +-
 .../Adminhtml/Widget/BuildWidget.php          |  2 +-
 .../Controller/Adminhtml/Widget/Index.php     |  2 +-
 .../Adminhtml/Widget/Instance/Blocks.php      |  2 +-
 .../Adminhtml/Widget/Instance/Categories.php  |  2 +-
 .../Adminhtml/Widget/Instance/Delete.php      |  2 +-
 .../Adminhtml/Widget/Instance/Edit.php        |  2 +-
 .../Adminhtml/Widget/Instance/Index.php       |  2 +-
 .../Adminhtml/Widget/Instance/NewAction.php   |  2 +-
 .../Adminhtml/Widget/Instance/Products.php    |  2 +-
 .../Adminhtml/Widget/Instance/Save.php        |  2 +-
 .../Adminhtml/Widget/Instance/Template.php    |  2 +-
 .../Adminhtml/Widget/Instance/Validate.php    |  2 +-
 .../Adminhtml/Widget/LoadOptions.php          |  2 +-
 .../Widget/Instance/CategoriesTest.php        |  2 +-
 .../Magento/Wishlist/Controller/Index/Add.php |  2 +-
 .../Wishlist/Controller/Index/Allcart.php     |  2 +-
 .../Wishlist/Controller/Index/Cart.php        |  2 +-
 .../Wishlist/Controller/Index/Configure.php   |  2 +-
 .../Controller/Index/DownloadCustomOption.php |  2 +-
 .../Wishlist/Controller/Index/Fromcart.php    |  2 +-
 .../Wishlist/Controller/Index/Index.php       |  2 +-
 .../Wishlist/Controller/Index/Remove.php      |  2 +-
 .../Wishlist/Controller/Index/Send.php        |  2 +-
 .../Wishlist/Controller/Index/Share.php       |  2 +-
 .../Wishlist/Controller/Index/Update.php      |  2 +-
 .../Controller/Index/UpdateItemOptions.php    |  2 +-
 .../Wishlist/Controller/Shared/Allcart.php    |  2 +-
 .../Wishlist/Controller/Shared/Cart.php       |  2 +-
 .../Wishlist/Controller/Shared/Index.php      |  2 +-
 .../Unit/Controller/Index/AllcartTest.php     |  6 +++---
 .../Test/Unit/Controller/Index/CartTest.php   | 12 +++++------
 .../Unit/Controller/Index/FromcartTest.php    |  8 ++++----
 .../Test/Unit/Controller/Index/IndexTest.php  |  4 ++--
 .../Test/Unit/Controller/Index/RemoveTest.php |  8 ++++----
 .../Test/Unit/Controller/Index/SendTest.php   | 10 +++++-----
 .../Test/Unit/Controller/Index/ShareTest.php  |  4 ++--
 .../Index/UpdateItemOptionsTest.php           | 10 +++++-----
 .../Unit/Controller/Shared/AllcartTest.php    |  4 ++--
 .../Test/Unit/Controller/Shared/CartTest.php  |  8 ++++----
 .../TestModule1/Controller/CookieTester.php   |  2 +-
 .../Backend/Controller/Adminhtml/AuthTest.php | 10 +++++-----
 .../Controller/Adminhtml/IndexTest.php        |  6 +++---
 .../Product/Action/AttributeTest.php          |  4 ++--
 .../Product/Stub/ProductControllerStub.php    |  2 +-
 .../System/Currency/FetchRatesTest.php        |  2 +-
 .../Controller/Billing/AgreementTest.php      |  2 +-
 .../Adminhtml/Order/Stub/OrderCreateStub.php  |  2 +-
 .../Controller/Adminhtml/Noroute.php          |  2 +-
 .../User/Controller/Adminhtml/AuthTest.php    | 14 ++++++-------
 .../Controller/Adminhtml/User/RoleTest.php    |  4 ++--
 .../Magento/Framework/App/Action/Action.php   |  6 +++---
 .../Magento/Framework/App/Action/Forward.php  |  2 +-
 .../Magento/Framework/App/Action/Redirect.php |  2 +-
 .../Magento/Framework/App/ActionInterface.php |  2 +-
 .../Magento/Framework/App/FrontController.php |  2 +-
 .../App/Test/Unit/Action/ActionTest.php       |  4 ++--
 .../App/Test/Unit/Action/ForwardTest.php      |  2 +-
 .../App/Test/Unit/Action/Stub/ActionStub.php  |  2 +-
 .../Framework/Controller/Index/Index.php      |  2 +-
 .../Framework/Controller/Noroute/Index.php    |  2 +-
 1074 files changed, 1408 insertions(+), 1408 deletions(-)

diff --git a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/AjaxMarkAsRead.php b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/AjaxMarkAsRead.php
index 793cbe22525..53f8a7fc3ae 100644
--- a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/AjaxMarkAsRead.php
+++ b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/AjaxMarkAsRead.php
@@ -13,7 +13,7 @@ class AjaxMarkAsRead extends \Magento\AdminNotification\Controller\Adminhtml\Not
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->getRequest()->getPostValue()) {
             return;
diff --git a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/Index.php b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/Index.php
index 15b88e4c2b6..df4b3465ad9 100644
--- a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/Index.php
+++ b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/Index.php
@@ -11,7 +11,7 @@ class Index extends \Magento\AdminNotification\Controller\Adminhtml\Notification
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $this->_setActiveMenu(
diff --git a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MarkAsRead.php b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MarkAsRead.php
index bcf66825edf..fe11c65da69 100644
--- a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MarkAsRead.php
+++ b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MarkAsRead.php
@@ -11,7 +11,7 @@ class MarkAsRead extends \Magento\AdminNotification\Controller\Adminhtml\Notific
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $notificationId = (int)$this->getRequest()->getParam('id');
         if ($notificationId) {
diff --git a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassMarkAsRead.php b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassMarkAsRead.php
index 78090163aa6..3f923e05797 100644
--- a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassMarkAsRead.php
+++ b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassMarkAsRead.php
@@ -11,7 +11,7 @@ class MassMarkAsRead extends \Magento\AdminNotification\Controller\Adminhtml\Not
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $ids = $this->getRequest()->getParam('notification');
         if (!is_array($ids)) {
diff --git a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassRemove.php b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassRemove.php
index 4b0068520ba..fd73d3cece4 100644
--- a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassRemove.php
+++ b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/MassRemove.php
@@ -11,7 +11,7 @@ class MassRemove extends \Magento\AdminNotification\Controller\Adminhtml\Notific
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $ids = $this->getRequest()->getParam('notification');
         if (!is_array($ids)) {
diff --git a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/Remove.php b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/Remove.php
index b4fe7e0e295..81a62e76134 100644
--- a/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/Remove.php
+++ b/app/code/Magento/AdminNotification/Controller/Adminhtml/Notification/Remove.php
@@ -11,7 +11,7 @@ class Remove extends \Magento\AdminNotification\Controller\Adminhtml\Notificatio
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($id = $this->getRequest()->getParam('id')) {
             $model = $this->_objectManager->create('Magento\AdminNotification\Model\Inbox')->load($id);
diff --git a/app/code/Magento/AdminNotification/Controller/Adminhtml/System/Message/ListAction.php b/app/code/Magento/AdminNotification/Controller/Adminhtml/System/Message/ListAction.php
index 4bf51c2df29..e173f1df102 100644
--- a/app/code/Magento/AdminNotification/Controller/Adminhtml/System/Message/ListAction.php
+++ b/app/code/Magento/AdminNotification/Controller/Adminhtml/System/Message/ListAction.php
@@ -38,7 +38,7 @@ class ListAction extends \Magento\Backend\App\AbstractAction
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $severity = $this->getRequest()->getParam('severity');
         if ($severity) {
diff --git a/app/code/Magento/AdvancedPricingImportExport/Controller/Adminhtml/Export/GetFilter.php b/app/code/Magento/AdvancedPricingImportExport/Controller/Adminhtml/Export/GetFilter.php
index 945c25b67b9..d41f9c69c2a 100644
--- a/app/code/Magento/AdvancedPricingImportExport/Controller/Adminhtml/Export/GetFilter.php
+++ b/app/code/Magento/AdvancedPricingImportExport/Controller/Adminhtml/Export/GetFilter.php
@@ -17,7 +17,7 @@ class GetFilter extends ExportController
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $data = $this->getRequest()->getParams();
         if ($this->getRequest()->isXmlHttpRequest() && $data) {
diff --git a/app/code/Magento/Authorizenet/Controller/Adminhtml/Authorizenet/Directpost/Payment/Place.php b/app/code/Magento/Authorizenet/Controller/Adminhtml/Authorizenet/Directpost/Payment/Place.php
index 3da7f100f75..2934f7a00cc 100644
--- a/app/code/Magento/Authorizenet/Controller/Adminhtml/Authorizenet/Directpost/Payment/Place.php
+++ b/app/code/Magento/Authorizenet/Controller/Adminhtml/Authorizenet/Directpost/Payment/Place.php
@@ -51,7 +51,7 @@ class Place extends \Magento\Sales\Controller\Adminhtml\Order\Create
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.UnusedLocalVariable)
      */
-    public function execute()
+    public function executeInternal()
     {
         $paymentParam = $this->getRequest()->getParam('payment');
         $controller = $this->getRequest()->getParam('controller');
diff --git a/app/code/Magento/Authorizenet/Controller/Adminhtml/Authorizenet/Directpost/Payment/Redirect.php b/app/code/Magento/Authorizenet/Controller/Adminhtml/Authorizenet/Directpost/Payment/Redirect.php
index d147c3d91e1..2387a1bf5b7 100644
--- a/app/code/Magento/Authorizenet/Controller/Adminhtml/Authorizenet/Directpost/Payment/Redirect.php
+++ b/app/code/Magento/Authorizenet/Controller/Adminhtml/Authorizenet/Directpost/Payment/Redirect.php
@@ -90,7 +90,7 @@ class Redirect extends \Magento\Sales\Controller\Adminhtml\Order\Create
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $redirectParams = $this->getRequest()->getParams();
         $params = [];
diff --git a/app/code/Magento/Authorizenet/Controller/Adminhtml/Authorizenet/Directpost/Payment/ReturnQuote.php b/app/code/Magento/Authorizenet/Controller/Adminhtml/Authorizenet/Directpost/Payment/ReturnQuote.php
index 7ac7153fecf..ae85af3ad68 100644
--- a/app/code/Magento/Authorizenet/Controller/Adminhtml/Authorizenet/Directpost/Payment/ReturnQuote.php
+++ b/app/code/Magento/Authorizenet/Controller/Adminhtml/Authorizenet/Directpost/Payment/ReturnQuote.php
@@ -31,7 +31,7 @@ class ReturnQuote extends \Magento\Sales\Controller\Adminhtml\Order\Create
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_returnQuote();
         $this->getResponse()->representJson(
diff --git a/app/code/Magento/Authorizenet/Controller/Directpost/Payment/BackendResponse.php b/app/code/Magento/Authorizenet/Controller/Directpost/Payment/BackendResponse.php
index 6f0696fbf9d..5dc96c39a91 100644
--- a/app/code/Magento/Authorizenet/Controller/Directpost/Payment/BackendResponse.php
+++ b/app/code/Magento/Authorizenet/Controller/Directpost/Payment/BackendResponse.php
@@ -14,7 +14,7 @@ class BackendResponse extends \Magento\Authorizenet\Controller\Directpost\Paymen
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_responseAction('adminhtml');
     }
diff --git a/app/code/Magento/Authorizenet/Controller/Directpost/Payment/Place.php b/app/code/Magento/Authorizenet/Controller/Directpost/Payment/Place.php
index 2cb3ea54210..7a13d0ba6c0 100644
--- a/app/code/Magento/Authorizenet/Controller/Directpost/Payment/Place.php
+++ b/app/code/Magento/Authorizenet/Controller/Directpost/Payment/Place.php
@@ -71,7 +71,7 @@ class Place extends Payment
      *
      * @return string
      */
-    public function execute()
+    public function executeInternal()
     {
         $paymentParam = $this->getRequest()->getParam('payment');
         $controller = $this->getRequest()->getParam('controller');
diff --git a/app/code/Magento/Authorizenet/Controller/Directpost/Payment/Redirect.php b/app/code/Magento/Authorizenet/Controller/Directpost/Payment/Redirect.php
index 0a0fc1a9906..421e4f04fe1 100644
--- a/app/code/Magento/Authorizenet/Controller/Directpost/Payment/Redirect.php
+++ b/app/code/Magento/Authorizenet/Controller/Directpost/Payment/Redirect.php
@@ -15,7 +15,7 @@ class Redirect extends \Magento\Authorizenet\Controller\Directpost\Payment
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $helper = $this->dataFactory->create('frontend');
 
diff --git a/app/code/Magento/Authorizenet/Controller/Directpost/Payment/Response.php b/app/code/Magento/Authorizenet/Controller/Directpost/Payment/Response.php
index 7a25db11b46..541571db6d9 100644
--- a/app/code/Magento/Authorizenet/Controller/Directpost/Payment/Response.php
+++ b/app/code/Magento/Authorizenet/Controller/Directpost/Payment/Response.php
@@ -14,7 +14,7 @@ class Response extends \Magento\Authorizenet\Controller\Directpost\Payment
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_responseAction('frontend');
     }
diff --git a/app/code/Magento/Authorizenet/Controller/Directpost/Payment/ReturnQuote.php b/app/code/Magento/Authorizenet/Controller/Directpost/Payment/ReturnQuote.php
index 1cef3b03286..b90112bca7f 100644
--- a/app/code/Magento/Authorizenet/Controller/Directpost/Payment/ReturnQuote.php
+++ b/app/code/Magento/Authorizenet/Controller/Directpost/Payment/ReturnQuote.php
@@ -13,7 +13,7 @@ class ReturnQuote extends \Magento\Authorizenet\Controller\Directpost\Payment
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_returnCustomerQuote();
         $this->getResponse()->representJson(
diff --git a/app/code/Magento/Authorizenet/Test/Unit/Controller/Directpost/Payment/PlaceTest.php b/app/code/Magento/Authorizenet/Test/Unit/Controller/Directpost/Payment/PlaceTest.php
index 517b9e41f7d..a80b7b41420 100644
--- a/app/code/Magento/Authorizenet/Test/Unit/Controller/Directpost/Payment/PlaceTest.php
+++ b/app/code/Magento/Authorizenet/Test/Unit/Controller/Directpost/Payment/PlaceTest.php
@@ -205,7 +205,7 @@ class PlaceTest extends \PHPUnit_Framework_TestCase
             ->method('jsonEncode')
             ->with($result);
 
-        $this->placeOrderController->execute();
+        $this->placeOrderController->executeInternal();
     }
 
     /**
@@ -243,7 +243,7 @@ class PlaceTest extends \PHPUnit_Framework_TestCase
             ->method('jsonEncode')
             ->with($result);
 
-        $this->placeOrderController->execute();
+        $this->placeOrderController->executeInternal();
     }
 
     /**
diff --git a/app/code/Magento/Backend/App/AbstractAction.php b/app/code/Magento/Backend/App/AbstractAction.php
index c41338591d3..e84bee226d2 100644
--- a/app/code/Magento/Backend/App/AbstractAction.php
+++ b/app/code/Magento/Backend/App/AbstractAction.php
@@ -200,10 +200,10 @@ abstract class AbstractAction extends \Magento\Framework\App\Action\Action
      * @param \Magento\Framework\App\RequestInterface $request
      * @return \Magento\Framework\App\ResponseInterface
      */
-    public function dispatch(\Magento\Framework\App\RequestInterface $request)
+    public function execute(\Magento\Framework\App\RequestInterface $request)
     {
         if (!$this->_processUrlKeys()) {
-            return parent::dispatch($request);
+            return parent::execute($request);
         }
 
         if ($request->isDispatched() && $request->getActionName() !== 'denied' && !$this->_isAllowed()) {
@@ -223,7 +223,7 @@ abstract class AbstractAction extends \Magento\Framework\App\Action\Action
 
         $this->_processLocaleSettings();
 
-        return parent::dispatch($request);
+        return parent::execute($request);
     }
 
     /**
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Ajax/Translate.php b/app/code/Magento/Backend/Controller/Adminhtml/Ajax/Translate.php
index 143b12d06c3..c8e72073581 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Ajax/Translate.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Ajax/Translate.php
@@ -40,7 +40,7 @@ class Translate extends \Magento\Backend\App\Action
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         $translate = (array)$this->getRequest()->getPost('translate');
 
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Auth/DeniedIframe.php b/app/code/Magento/Backend/Controller/Adminhtml/Auth/DeniedIframe.php
index 08f81426145..42836b603d0 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Auth/DeniedIframe.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Auth/DeniedIframe.php
@@ -41,7 +41,7 @@ class DeniedIframe extends \Magento\Backend\Controller\Adminhtml\Auth
      *
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Raw $resultRaw */
         $resultRaw = $this->resultRawFactory->create();
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Auth/DeniedJson.php b/app/code/Magento/Backend/Controller/Adminhtml/Auth/DeniedJson.php
index 43062aa6908..bd2d2150076 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Auth/DeniedJson.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Auth/DeniedJson.php
@@ -43,7 +43,7 @@ class DeniedJson extends \Magento\Backend\Controller\Adminhtml\Auth
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Json $resultJson */
         $resultJson = $this->resultJsonFactory->create();
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Auth/Login.php b/app/code/Magento/Backend/Controller/Adminhtml/Auth/Login.php
index 6aed5e22c52..e29183357ea 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Auth/Login.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Auth/Login.php
@@ -32,7 +32,7 @@ class Login extends \Magento\Backend\Controller\Adminhtml\Auth
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->_auth->isLoggedIn()) {
             if ($this->_auth->getAuthStorage()->isFirstPageAfterLogin()) {
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Auth/Logout.php b/app/code/Magento/Backend/Controller/Adminhtml/Auth/Logout.php
index 098022bed0a..a8b3973595e 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Auth/Logout.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Auth/Logout.php
@@ -13,7 +13,7 @@ class Logout extends \Magento\Backend\Controller\Adminhtml\Auth
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_auth->logout();
         $this->messageManager->addSuccess(__('You have logged out.'));
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/BackendApp/Redirect.php b/app/code/Magento/Backend/Controller/Adminhtml/BackendApp/Redirect.php
index f622e39e491..6ac1f14d193 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/BackendApp/Redirect.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/BackendApp/Redirect.php
@@ -39,7 +39,7 @@ class Redirect extends AbstractAction
     /**
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultRedirect = $this->resultRedirectFactory->create();
         if ($this->getRequest()->getParam('app')) {
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Cache/CleanImages.php b/app/code/Magento/Backend/Controller/Adminhtml/Cache/CleanImages.php
index 2cb699549bd..75ea9ccaa84 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Cache/CleanImages.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Cache/CleanImages.php
@@ -16,7 +16,7 @@ class CleanImages extends \Magento\Backend\Controller\Adminhtml\Cache
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->_objectManager->create('Magento\Catalog\Model\Product\Image')->clearCache();
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Cache/CleanMedia.php b/app/code/Magento/Backend/Controller/Adminhtml/Cache/CleanMedia.php
index 41174c3c1f2..553e22810c1 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Cache/CleanMedia.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Cache/CleanMedia.php
@@ -16,7 +16,7 @@ class CleanMedia extends \Magento\Backend\Controller\Adminhtml\Cache
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->_objectManager->get('Magento\Framework\View\Asset\MergeService')->cleanMergedJsCss();
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Cache/CleanStaticFiles.php b/app/code/Magento/Backend/Controller/Adminhtml/Cache/CleanStaticFiles.php
index 4ca025b3ec5..29529085927 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Cache/CleanStaticFiles.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Cache/CleanStaticFiles.php
@@ -15,7 +15,7 @@ class CleanStaticFiles extends \Magento\Backend\Controller\Adminhtml\Cache
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_objectManager->get('Magento\Framework\App\State\CleanupFiles')->clearMaterializedViewFiles();
         $this->_eventManager->dispatch('clean_static_files_cache_after');
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Cache/FlushAll.php b/app/code/Magento/Backend/Controller/Adminhtml/Cache/FlushAll.php
index 049f5fa3cb3..2bdddc1048c 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Cache/FlushAll.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Cache/FlushAll.php
@@ -13,7 +13,7 @@ class FlushAll extends \Magento\Backend\Controller\Adminhtml\Cache
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_eventManager->dispatch('adminhtml_cache_flush_all');
         /** @var $cacheFrontend \Magento\Framework\Cache\FrontendInterface */
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Cache/FlushSystem.php b/app/code/Magento/Backend/Controller/Adminhtml/Cache/FlushSystem.php
index bdd099206ed..35885a93ee9 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Cache/FlushSystem.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Cache/FlushSystem.php
@@ -13,7 +13,7 @@ class FlushSystem extends \Magento\Backend\Controller\Adminhtml\Cache
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var $cacheFrontend \Magento\Framework\Cache\FrontendInterface */
         foreach ($this->_cacheFrontendPool as $cacheFrontend) {
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Cache/Index.php b/app/code/Magento/Backend/Controller/Adminhtml/Cache/Index.php
index 1078cdf7201..2d0fd902112 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Cache/Index.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Cache/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Backend\Controller\Adminhtml\Cache
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassDisable.php b/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassDisable.php
index 98703f0bfa1..5ed4d74b9e6 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassDisable.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassDisable.php
@@ -16,7 +16,7 @@ class MassDisable extends \Magento\Backend\Controller\Adminhtml\Cache
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $types = $this->getRequest()->getParam('types');
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassEnable.php b/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassEnable.php
index 3fd92bc7077..361e4c12a7e 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassEnable.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassEnable.php
@@ -16,7 +16,7 @@ class MassEnable extends \Magento\Backend\Controller\Adminhtml\Cache
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $types = $this->getRequest()->getParam('types');
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassRefresh.php b/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassRefresh.php
index 420d8757e5b..d44b9996429 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassRefresh.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Cache/MassRefresh.php
@@ -16,7 +16,7 @@ class MassRefresh extends \Magento\Backend\Controller\Adminhtml\Cache
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $types = $this->getRequest()->getParam('types');
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/AjaxBlock.php b/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/AjaxBlock.php
index e51999e6fc9..b5823437cd8 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/AjaxBlock.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/AjaxBlock.php
@@ -36,7 +36,7 @@ class AjaxBlock extends \Magento\Backend\Controller\Adminhtml\Dashboard
     /**
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         $output = '';
         $blockTab = $this->getRequest()->getParam('block');
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/CustomersMost.php b/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/CustomersMost.php
index 16f345f31fd..6a942ca15f0 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/CustomersMost.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/CustomersMost.php
@@ -13,7 +13,7 @@ class CustomersMost extends AjaxBlock
      *
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         $output = $this->layoutFactory->create()
             ->createBlock('Magento\Backend\Block\Dashboard\Tab\Customers\Most')
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/CustomersNewest.php b/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/CustomersNewest.php
index d1d460971fb..1e531683a74 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/CustomersNewest.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/CustomersNewest.php
@@ -13,7 +13,7 @@ class CustomersNewest extends AjaxBlock
      *
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         $output = $this->layoutFactory->create()
             ->createBlock('Magento\Backend\Block\Dashboard\Tab\Customers\Newest')
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/Index.php b/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/Index.php
index 4b6474bfee4..1c3098e82bc 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/Index.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/Index.php
@@ -28,7 +28,7 @@ class Index extends \Magento\Backend\Controller\Adminhtml\Dashboard
     /**
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/ProductsViewed.php b/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/ProductsViewed.php
index 8d5862fcc22..1931f7284d4 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/ProductsViewed.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/ProductsViewed.php
@@ -13,7 +13,7 @@ class ProductsViewed extends AjaxBlock
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $output = $this->layoutFactory->create()
             ->createBlock('Magento\Backend\Block\Dashboard\Tab\Products\Viewed')
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/RefreshStatistics.php b/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/RefreshStatistics.php
index e9e51cd3f1d..943e8e0d2f6 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/RefreshStatistics.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/RefreshStatistics.php
@@ -27,7 +27,7 @@ class RefreshStatistics extends \Magento\Reports\Controller\Adminhtml\Report\Sta
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $collectionsNames = array_values($this->reportTypes);
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/Tunnel.php b/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/Tunnel.php
index f738be1e83a..b4e624b0943 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/Tunnel.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Dashboard/Tunnel.php
@@ -36,7 +36,7 @@ class Tunnel extends \Magento\Backend\Controller\Adminhtml\Dashboard
      *
      * @return  \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         $error = __('invalid request');
         $httpCode = 400;
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Denied.php b/app/code/Magento/Backend/Controller/Adminhtml/Denied.php
index c77bb09fb00..478cfa7bca0 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Denied.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Denied.php
@@ -28,7 +28,7 @@ class Denied extends \Magento\Backend\App\Action
     /**
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->_auth->isLoggedIn()) {
             /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Index/ChangeLocale.php b/app/code/Magento/Backend/Controller/Adminhtml/Index/ChangeLocale.php
index 9505f4b1d6d..cdb9fa361c3 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Index/ChangeLocale.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Index/ChangeLocale.php
@@ -13,7 +13,7 @@ class ChangeLocale extends \Magento\Backend\Controller\Adminhtml\Index
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $redirectResult = $this->resultRedirectFactory->create();
         $redirectResult->setRefererUrl();
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Index/GlobalSearch.php b/app/code/Magento/Backend/Controller/Adminhtml/Index/GlobalSearch.php
index afa3019cfd6..8e69d2bc6a2 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Index/GlobalSearch.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Index/GlobalSearch.php
@@ -40,7 +40,7 @@ class GlobalSearch extends \Magento\Backend\Controller\Adminhtml\Index
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         $items = [];
 
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Index/Index.php b/app/code/Magento/Backend/Controller/Adminhtml/Index/Index.php
index 0298a2b9d36..0fc32f759c1 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Index/Index.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Index/Index.php
@@ -14,7 +14,7 @@ class Index extends \Magento\Backend\Controller\Adminhtml\Index
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultRedirectFactory->create();
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/Noroute/Index.php b/app/code/Magento/Backend/Controller/Adminhtml/Noroute/Index.php
index a11957e1b7d..6f8101396f7 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/Noroute/Index.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/Noroute/Index.php
@@ -30,7 +30,7 @@ class Index extends \Magento\Backend\App\Action
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Account/Index.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Account/Index.php
index 950b72df2df..4c63db63ef3 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Account/Index.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Account/Index.php
@@ -28,7 +28,7 @@ class Index extends \Magento\Backend\Controller\Adminhtml\System\Account
     /**
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultPage = $this->resultPageFactory->create();
         $resultPage->getConfig()->getTitle()->prepend(__('My Account'));
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Account/Save.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Account/Save.php
index 4607cd61274..31f60ebc84d 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Account/Save.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Account/Save.php
@@ -18,7 +18,7 @@ class Save extends \Magento\Backend\Controller\Adminhtml\System\Account
      * @return \Magento\Backend\Model\View\Result\Redirect
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         $userId = $this->_objectManager->get('Magento\Backend\Model\Auth\Session')->getUser()->getId();
         $password = (string)$this->getRequest()->getParam('password');
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Delete.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Delete.php
index cec54abf608..a1cdb07d9f5 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Delete.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Delete.php
@@ -11,7 +11,7 @@ class Delete extends \Magento\Backend\Controller\Adminhtml\System\Design
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = $this->getRequest()->getParam('id');
         if ($id) {
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Edit.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Edit.php
index 7d3445f51d1..afac63a56c6 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Edit.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Edit.php
@@ -11,7 +11,7 @@ class Edit extends \Magento\Backend\Controller\Adminhtml\System\Design
     /**
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Grid.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Grid.php
index 1c8dca8b425..b0d9594e04a 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Grid.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Grid.php
@@ -11,7 +11,7 @@ class Grid extends \Magento\Backend\Controller\Adminhtml\System\Design
     /**
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         return $this->resultLayoutFactory->create();
     }
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Index.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Index.php
index b1538003926..0df90982922 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Index.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Index.php
@@ -11,7 +11,7 @@ class Index extends \Magento\Backend\Controller\Adminhtml\System\Design
     /**
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Design/NewAction.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Design/NewAction.php
index 3734ef53d73..6521aa114f7 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Design/NewAction.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Design/NewAction.php
@@ -11,7 +11,7 @@ class NewAction extends \Magento\Backend\Controller\Adminhtml\System\Design
     /**
      * @return \Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Forward $resultForward */
         $resultForward = $this->resultForwardFactory->create();
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Save.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Save.php
index 1d6cc8c6c23..7e52e57ecad 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Save.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Design/Save.php
@@ -28,7 +28,7 @@ class Save extends \Magento\Backend\Controller\Adminhtml\System\Design
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $data = $this->getRequest()->getPostValue();
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Index.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Index.php
index 4af63776d24..0203351b888 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Index.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Index.php
@@ -28,7 +28,7 @@ class Index extends \Magento\Backend\Controller\Adminhtml\System
     /**
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/SetStore.php b/app/code/Magento/Backend/Controller/Adminhtml/System/SetStore.php
index a53452ec158..962a4b882d9 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/SetStore.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/SetStore.php
@@ -11,7 +11,7 @@ class SetStore extends \Magento\Backend\Controller\Adminhtml\System
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $storeId = (int)$this->getRequest()->getParam('store');
         if ($storeId) {
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteGroup.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteGroup.php
index 3604948ee6b..e6066ce3d2a 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteGroup.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteGroup.php
@@ -11,7 +11,7 @@ class DeleteGroup extends \Magento\Backend\Controller\Adminhtml\System\Store
     /**
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $itemId = $this->getRequest()->getParam('item_id', null);
         if (!($model = $this->_objectManager->create('Magento\Store\Model\Group')->load($itemId))) {
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteGroupPost.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteGroupPost.php
index fe67adeca90..28557917199 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteGroupPost.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteGroupPost.php
@@ -13,7 +13,7 @@ class DeleteGroupPost extends \Magento\Backend\Controller\Adminhtml\System\Store
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $itemId = $this->getRequest()->getParam('item_id');
 
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteStore.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteStore.php
index 826f8493fa0..82486686752 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteStore.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteStore.php
@@ -11,7 +11,7 @@ class DeleteStore extends \Magento\Backend\Controller\Adminhtml\System\Store
     /**
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $itemId = $this->getRequest()->getParam('item_id', null);
         if (!($model = $this->_objectManager->create('Magento\Store\Model\Store')->load($itemId))) {
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteStorePost.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteStorePost.php
index c7764a1b204..589be3238e5 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteStorePost.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteStorePost.php
@@ -15,7 +15,7 @@ class DeleteStorePost extends \Magento\Backend\Controller\Adminhtml\System\Store
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $itemId = $this->getRequest()->getParam('item_id');
 
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteWebsite.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteWebsite.php
index ea67a101763..b2c88101d37 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteWebsite.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteWebsite.php
@@ -11,7 +11,7 @@ class DeleteWebsite extends \Magento\Backend\Controller\Adminhtml\System\Store
     /**
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $itemId = $this->getRequest()->getParam('item_id', null);
         if (!($model = $this->_objectManager->create('Magento\Store\Model\Website')->load($itemId))) {
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteWebsitePost.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteWebsitePost.php
index 6951bc3b3a9..dc705339ddd 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteWebsitePost.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/DeleteWebsitePost.php
@@ -13,7 +13,7 @@ class DeleteWebsitePost extends \Magento\Backend\Controller\Adminhtml\System\Sto
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $itemId = $this->getRequest()->getParam('item_id');
         $model = $this->_objectManager->create('Magento\Store\Model\Website');
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/EditGroup.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/EditGroup.php
index f7403c9eaa2..4e591b0b106 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/EditGroup.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/EditGroup.php
@@ -11,7 +11,7 @@ class EditGroup extends \Magento\Backend\Controller\Adminhtml\System\Store
     /**
      * @return \Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_coreRegistry->register('store_type', 'group');
         /** @var \Magento\Backend\Model\View\Result\Forward $resultForward */
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/EditStore.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/EditStore.php
index f6521a418f4..0d9465c4b8d 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/EditStore.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/EditStore.php
@@ -13,7 +13,7 @@ class EditStore extends \Magento\Backend\Controller\Adminhtml\System\Store
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->_getSession()->getPostData()) {
             $this->_coreRegistry->register('store_post_data', $this->_getSession()->getPostData());
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/EditWebsite.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/EditWebsite.php
index 1fe94f98173..b26692e6f54 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/EditWebsite.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/EditWebsite.php
@@ -11,7 +11,7 @@ class EditWebsite extends \Magento\Backend\Controller\Adminhtml\System\Store
     /**
      * @return \Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_coreRegistry->register('store_type', 'website');
         /** @var \Magento\Backend\Model\View\Result\Forward $resultForward */
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/Index.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/Index.php
index b1f9cf67309..a91d61bfb20 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/Index.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/Index.php
@@ -11,7 +11,7 @@ class Index extends \Magento\Backend\Controller\Adminhtml\System\Store
     /**
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultPage = $this->resultPageFactory->create();
         $resultPage->getConfig()->getTitle()->prepend(__('Stores'));
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/NewGroup.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/NewGroup.php
index 70f9d8b726b..f020762e613 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/NewGroup.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/NewGroup.php
@@ -11,7 +11,7 @@ class NewGroup extends \Magento\Backend\Controller\Adminhtml\System\Store
     /**
      * @return \Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_coreRegistry->register('store_type', 'group');
         /** @var \Magento\Backend\Model\View\Result\Forward $resultForward */
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/NewStore.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/NewStore.php
index 817c67c8be9..b59df090433 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/NewStore.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/NewStore.php
@@ -11,7 +11,7 @@ class NewStore extends \Magento\Backend\Controller\Adminhtml\System\Store
     /**
      * @return \Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->_coreRegistry->registry('store_type')) {
             $this->_coreRegistry->register('store_type', 'store');
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/NewWebsite.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/NewWebsite.php
index 65bdd1ee1ed..cf514c49d02 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/NewWebsite.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/NewWebsite.php
@@ -11,7 +11,7 @@ class NewWebsite extends \Magento\Backend\Controller\Adminhtml\System\Store
     /**
      * @return \Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_coreRegistry->register('store_type', 'website');
         /** @var \Magento\Backend\Model\View\Result\Forward $resultForward */
diff --git a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/Save.php b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/Save.php
index 7f2152e1e89..de1d131eaf8 100644
--- a/app/code/Magento/Backend/Controller/Adminhtml/System/Store/Save.php
+++ b/app/code/Magento/Backend/Controller/Adminhtml/System/Store/Save.php
@@ -13,7 +13,7 @@ class Save extends \Magento\Backend\Controller\Adminhtml\System\Store
      * @return \Magento\Backend\Model\View\Result\Redirect
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Redirect $redirectResult */
         $redirectResult = $this->resultRedirectFactory->create();
diff --git a/app/code/Magento/Backend/Test/Unit/App/Action/Stub/ActionStub.php b/app/code/Magento/Backend/Test/Unit/App/Action/Stub/ActionStub.php
index fa8eb043b33..d8a8df5bc17 100644
--- a/app/code/Magento/Backend/Test/Unit/App/Action/Stub/ActionStub.php
+++ b/app/code/Magento/Backend/Test/Unit/App/Action/Stub/ActionStub.php
@@ -8,7 +8,7 @@ namespace Magento\Backend\Test\Unit\App\Action\Stub;
 
 class ActionStub extends \Magento\Backend\App\Action
 {
-    protected function execute()
+    protected function executeInternal()
     {
         // Empty method stub for test
     }
diff --git a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Cache/CleanStaticFilesTest.php b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Cache/CleanStaticFilesTest.php
index 0e78f533c85..dfc5059ec47 100644
--- a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Cache/CleanStaticFilesTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Cache/CleanStaticFilesTest.php
@@ -94,6 +94,6 @@ class CleanStaticFilesTest extends \PHPUnit_Framework_TestCase
             ->willReturnSelf();
 
         // Run
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/RefreshStatisticsTest.php b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/RefreshStatisticsTest.php
index 76d670fef54..a224583fe5a 100644
--- a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/RefreshStatisticsTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/RefreshStatisticsTest.php
@@ -128,7 +128,7 @@ class RefreshStatisticsTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Redirect',
-            $this->refreshStatisticsController->execute()
+            $this->refreshStatisticsController->executeInternal()
         );
     }
 }
diff --git a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/TunnelTest.php b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/TunnelTest.php
index 2e5cd51547e..cae77b8ad3c 100644
--- a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/TunnelTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/TunnelTest.php
@@ -92,7 +92,7 @@ class TunnelTest extends \PHPUnit_Framework_TestCase
             ->with('success_msg')
             ->willReturnSelf();
 
-        $controller->execute();
+        $controller->executeInternal();
         $this->assertEquals('success_msg', $controller->getResponse()->getBody());
     }
 
@@ -112,7 +112,7 @@ class TunnelTest extends \PHPUnit_Framework_TestCase
             ->with('Service unavailable: invalid request')
             ->willReturnSelf();
 
-        $controller->execute();
+        $controller->executeInternal();
     }
 
     public function testTunnelAction503()
@@ -164,7 +164,7 @@ class TunnelTest extends \PHPUnit_Framework_TestCase
             ->with('Service unavailable: see error log for details')
             ->willReturnSelf();
 
-        $controller->execute();
+        $controller->executeInternal();
     }
 
     /**
diff --git a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/System/Account/SaveTest.php b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/System/Account/SaveTest.php
index b63c4f1e1a5..a68d23ab22c 100644
--- a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/System/Account/SaveTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/System/Account/SaveTest.php
@@ -199,6 +199,6 @@ class SaveTest extends \PHPUnit_Framework_TestCase
 
         $this->_messagesMock->expects($this->once())->method('addSuccess')->with($this->equalTo($testedMessage));
 
-        $this->_controller->execute();
+        $this->_controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Backup/Controller/Adminhtml/Index/Create.php b/app/code/Magento/Backup/Controller/Adminhtml/Index/Create.php
index abfd789889b..caa8da583a6 100644
--- a/app/code/Magento/Backup/Controller/Adminhtml/Index/Create.php
+++ b/app/code/Magento/Backup/Controller/Adminhtml/Index/Create.php
@@ -17,7 +17,7 @@ class Create extends \Magento\Backup\Controller\Adminhtml\Index
      * @return void|\Magento\Backend\App\Action
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->getRequest()->isAjax()) {
             return $this->_redirect('*/*/index');
diff --git a/app/code/Magento/Backup/Controller/Adminhtml/Index/Download.php b/app/code/Magento/Backup/Controller/Adminhtml/Index/Download.php
index c9fe2c57586..a5ea380d2b6 100644
--- a/app/code/Magento/Backup/Controller/Adminhtml/Index/Download.php
+++ b/app/code/Magento/Backup/Controller/Adminhtml/Index/Download.php
@@ -49,7 +49,7 @@ class Download extends \Magento\Backup\Controller\Adminhtml\Index
      *
      * @return void|\Magento\Backend\App\Action
      */
-    public function execute()
+    public function executeInternal()
     {
         /* @var $backup \Magento\Backup\Model\Backup */
         $backup = $this->_backupModelFactory->create(
diff --git a/app/code/Magento/Backup/Controller/Adminhtml/Index/Grid.php b/app/code/Magento/Backup/Controller/Adminhtml/Index/Grid.php
index 0b932103382..f1b60948461 100644
--- a/app/code/Magento/Backup/Controller/Adminhtml/Index/Grid.php
+++ b/app/code/Magento/Backup/Controller/Adminhtml/Index/Grid.php
@@ -13,7 +13,7 @@ class Grid extends \Magento\Backup\Controller\Adminhtml\Index
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $this->_view->renderLayout();
diff --git a/app/code/Magento/Backup/Controller/Adminhtml/Index/Index.php b/app/code/Magento/Backup/Controller/Adminhtml/Index/Index.php
index 6d3e4f75f4a..5335d40f9a8 100644
--- a/app/code/Magento/Backup/Controller/Adminhtml/Index/Index.php
+++ b/app/code/Magento/Backup/Controller/Adminhtml/Index/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Backup\Controller\Adminhtml\Index
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->getRequest()->getParam('ajax')) {
             $this->_forward('grid');
diff --git a/app/code/Magento/Backup/Controller/Adminhtml/Index/MassDelete.php b/app/code/Magento/Backup/Controller/Adminhtml/Index/MassDelete.php
index b0c1af3a1f4..c9958e65d66 100644
--- a/app/code/Magento/Backup/Controller/Adminhtml/Index/MassDelete.php
+++ b/app/code/Magento/Backup/Controller/Adminhtml/Index/MassDelete.php
@@ -13,7 +13,7 @@ class MassDelete extends \Magento\Backup\Controller\Adminhtml\Index
      *
      * @return \Magento\Backend\App\Action
      */
-    public function execute()
+    public function executeInternal()
     {
         $backupIds = $this->getRequest()->getParam('ids', []);
 
diff --git a/app/code/Magento/Backup/Controller/Adminhtml/Index/Rollback.php b/app/code/Magento/Backup/Controller/Adminhtml/Index/Rollback.php
index fdb4714f0ac..bd80aff5feb 100644
--- a/app/code/Magento/Backup/Controller/Adminhtml/Index/Rollback.php
+++ b/app/code/Magento/Backup/Controller/Adminhtml/Index/Rollback.php
@@ -19,7 +19,7 @@ class Rollback extends \Magento\Backup\Controller\Adminhtml\Index
      * @SuppressWarnings(PHPMD.NPathComplexity)
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->_objectManager->get('Magento\Backup\Helper\Data')->isRollbackAllowed()) {
             $this->_forward('denied');
diff --git a/app/code/Magento/Backup/Test/Unit/Controller/Adminhtml/Index/DownloadTest.php b/app/code/Magento/Backup/Test/Unit/Controller/Adminhtml/Index/DownloadTest.php
index 21d27ef0c5a..6d2c6d515f1 100644
--- a/app/code/Magento/Backup/Test/Unit/Controller/Adminhtml/Index/DownloadTest.php
+++ b/app/code/Magento/Backup/Test/Unit/Controller/Adminhtml/Index/DownloadTest.php
@@ -143,7 +143,7 @@ class DownloadTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Backup\Controller\Adminhtml\Index\Download::execute
+     * @covers \Magento\Backup\Controller\Adminhtml\Index\Download::executeInternal
      */
     public function testExecuteBackupFound()
     {
@@ -201,11 +201,11 @@ class DownloadTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->willReturn($this->resultRawMock);
 
-        $this->assertSame($this->resultRawMock, $this->downloadController->execute());
+        $this->assertSame($this->resultRawMock, $this->downloadController->executeInternal());
     }
 
     /**
-     * @covers \Magento\Backup\Controller\Adminhtml\Index\Download::execute
+     * @covers \Magento\Backup\Controller\Adminhtml\Index\Download::executeInternal
      * @param int $time
      * @param bool $exists
      * @param int $existsCount
@@ -240,7 +240,7 @@ class DownloadTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->willReturn($this->resultRedirectMock);
 
-        $this->assertSame($this->resultRedirectMock, $this->downloadController->execute());
+        $this->assertSame($this->resultRedirectMock, $this->downloadController->executeInternal());
     }
 
     /**
diff --git a/app/code/Magento/Braintree/Controller/Creditcard/AjaxSave.php b/app/code/Magento/Braintree/Controller/Creditcard/AjaxSave.php
index 0177988ea45..c5d284c62cd 100644
--- a/app/code/Magento/Braintree/Controller/Creditcard/AjaxSave.php
+++ b/app/code/Magento/Braintree/Controller/Creditcard/AjaxSave.php
@@ -14,7 +14,7 @@ class AjaxSave extends \Magento\Braintree\Controller\MyCreditCards
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->vault->processNonce(
diff --git a/app/code/Magento/Braintree/Controller/Creditcard/Delete.php b/app/code/Magento/Braintree/Controller/Creditcard/Delete.php
index 2dd4c4f9b13..a1f8d5e55a9 100644
--- a/app/code/Magento/Braintree/Controller/Creditcard/Delete.php
+++ b/app/code/Magento/Braintree/Controller/Creditcard/Delete.php
@@ -12,7 +12,7 @@ class Delete extends \Magento\Braintree\Controller\MyCreditCards
      *
      * @return \Magento\Framework\View\Result\Page|\Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->hasToken()) {
             if (!$this->vault->storedCard($this->hasToken())) {
diff --git a/app/code/Magento/Braintree/Controller/Creditcard/DeleteConfirm.php b/app/code/Magento/Braintree/Controller/Creditcard/DeleteConfirm.php
index bef7c62f781..20102ff5c36 100644
--- a/app/code/Magento/Braintree/Controller/Creditcard/DeleteConfirm.php
+++ b/app/code/Magento/Braintree/Controller/Creditcard/DeleteConfirm.php
@@ -29,7 +29,7 @@ class DeleteConfirm extends \Magento\Braintree\Controller\MyCreditCards
      *
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($token = $this->hasToken()) {
             $result = $this->vault->deleteCard($token);
diff --git a/app/code/Magento/Braintree/Controller/Creditcard/Edit.php b/app/code/Magento/Braintree/Controller/Creditcard/Edit.php
index 864d53f5563..7e88faeeeed 100644
--- a/app/code/Magento/Braintree/Controller/Creditcard/Edit.php
+++ b/app/code/Magento/Braintree/Controller/Creditcard/Edit.php
@@ -12,7 +12,7 @@ class Edit extends \Magento\Braintree\Controller\MyCreditCards
      *
      * @return \Magento\Framework\View\Result\Page|\Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->hasToken()) {
             if (!$this->vault->storedCard($this->hasToken())) {
diff --git a/app/code/Magento/Braintree/Controller/Creditcard/Generate.php b/app/code/Magento/Braintree/Controller/Creditcard/Generate.php
index 7bfcdfde5b9..41c13f08cda 100644
--- a/app/code/Magento/Braintree/Controller/Creditcard/Generate.php
+++ b/app/code/Magento/Braintree/Controller/Creditcard/Generate.php
@@ -19,7 +19,7 @@ class Generate extends \Magento\Braintree\Controller\MyCreditCards
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             if ($this->hasToken()) {
diff --git a/app/code/Magento/Braintree/Controller/Creditcard/Index.php b/app/code/Magento/Braintree/Controller/Creditcard/Index.php
index db240cda6fc..9e94ccdb307 100644
--- a/app/code/Magento/Braintree/Controller/Creditcard/Index.php
+++ b/app/code/Magento/Braintree/Controller/Creditcard/Index.php
@@ -12,7 +12,7 @@ class Index extends \Magento\Braintree\Controller\MyCreditCards
      *
      * @return \Magento\Framework\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/Braintree/Controller/Creditcard/NewCard.php b/app/code/Magento/Braintree/Controller/Creditcard/NewCard.php
index 000ba39e0ab..1ac92a741d1 100644
--- a/app/code/Magento/Braintree/Controller/Creditcard/NewCard.php
+++ b/app/code/Magento/Braintree/Controller/Creditcard/NewCard.php
@@ -12,7 +12,7 @@ class NewCard extends \Magento\Braintree\Controller\MyCreditCards
      *
      * @return \Magento\Framework\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/Braintree/Controller/Creditcard/Save.php b/app/code/Magento/Braintree/Controller/Creditcard/Save.php
index d51c3de2828..9080a2a3b65 100644
--- a/app/code/Magento/Braintree/Controller/Creditcard/Save.php
+++ b/app/code/Magento/Braintree/Controller/Creditcard/Save.php
@@ -12,7 +12,7 @@ class Save extends \Magento\Braintree\Controller\MyCreditCards
      *
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->messageManager->addError(__('There was error during saving card data'));
         /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/Braintree/Controller/MyCreditCards.php b/app/code/Magento/Braintree/Controller/MyCreditCards.php
index 122edc79ca2..04ff04202bc 100644
--- a/app/code/Magento/Braintree/Controller/MyCreditCards.php
+++ b/app/code/Magento/Braintree/Controller/MyCreditCards.php
@@ -68,7 +68,7 @@ abstract class MyCreditCards extends \Magento\Framework\App\Action\Action
      * @param RequestInterface $request
      * @return \Magento\Framework\Controller\Result\Redirect|\Magento\Framework\App\ResponseInterface
      */
-    public function dispatch(RequestInterface $request)
+    public function execute(RequestInterface $request)
     {
         $loginUrl = $this->customerUrl->getLoginUrl();
         if (!$this->customerSession->authenticate($loginUrl)) {
@@ -82,7 +82,7 @@ abstract class MyCreditCards extends \Magento\Framework\App\Action\Action
             return $resultRedirect;
         }
 
-        return parent::dispatch($request);
+        return parent::execute($request);
     }
 
     /**
diff --git a/app/code/Magento/Braintree/Controller/PayPal.php b/app/code/Magento/Braintree/Controller/PayPal.php
index e24bd47e8d3..b85b605c9ef 100644
--- a/app/code/Magento/Braintree/Controller/PayPal.php
+++ b/app/code/Magento/Braintree/Controller/PayPal.php
@@ -77,7 +77,7 @@ abstract class PayPal extends \Magento\Framework\App\Action\Action
      * @param RequestInterface $request
      * @return \Magento\Framework\Controller\Result\Redirect|\Magento\Framework\App\ResponseInterface
      */
-    public function dispatch(RequestInterface $request)
+    public function execute(RequestInterface $request)
     {
         if (!$this->braintreePayPalConfig->isActive() || !$this->braintreePayPalConfig->isShortcutCheckoutEnabled()) {
             $this->_actionFlag->set('', self::FLAG_NO_DISPATCH, true);
@@ -87,7 +87,7 @@ abstract class PayPal extends \Magento\Framework\App\Action\Action
             return $resultRedirect;
         }
 
-        return parent::dispatch($request);
+        return parent::execute($request);
     }
 
     /**
diff --git a/app/code/Magento/Braintree/Controller/PayPal/GetButtonData.php b/app/code/Magento/Braintree/Controller/PayPal/GetButtonData.php
index 4d070aa489d..4be1d5aaebd 100644
--- a/app/code/Magento/Braintree/Controller/PayPal/GetButtonData.php
+++ b/app/code/Magento/Braintree/Controller/PayPal/GetButtonData.php
@@ -37,7 +37,7 @@ class GetButtonData extends \Magento\Framework\App\Action\Action
      * @return ResultInterface
      * @throws LocalizedException
      */
-    public function execute()
+    public function executeInternal()
     {
         $isAjax = $this->_request->getParam('isAjax');
 
diff --git a/app/code/Magento/Braintree/Controller/PayPal/PlaceOrder.php b/app/code/Magento/Braintree/Controller/PayPal/PlaceOrder.php
index 45041a25ef0..febdcf06fed 100644
--- a/app/code/Magento/Braintree/Controller/PayPal/PlaceOrder.php
+++ b/app/code/Magento/Braintree/Controller/PayPal/PlaceOrder.php
@@ -48,7 +48,7 @@ class PlaceOrder extends \Magento\Braintree\Controller\PayPal
      *
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             if (!$this->agreementsValidator->isValid(array_keys($this->getRequest()->getPost('agreement', [])))) {
diff --git a/app/code/Magento/Braintree/Controller/PayPal/Review.php b/app/code/Magento/Braintree/Controller/PayPal/Review.php
index ef01f89b38e..48634e9fe7b 100644
--- a/app/code/Magento/Braintree/Controller/PayPal/Review.php
+++ b/app/code/Magento/Braintree/Controller/PayPal/Review.php
@@ -49,7 +49,7 @@ class Review extends \Magento\Braintree\Controller\PayPal
     /**
      * @return $this|\Magento\Framework\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $paymentMethodNonce = $this->getRequest()->getParam('payment_method_nonce');
         $details = $this->getRequest()->getParam('details');
diff --git a/app/code/Magento/Braintree/Controller/PayPal/SaveShippingMethod.php b/app/code/Magento/Braintree/Controller/PayPal/SaveShippingMethod.php
index d8041b7186e..6ec5b0c18e2 100644
--- a/app/code/Magento/Braintree/Controller/PayPal/SaveShippingMethod.php
+++ b/app/code/Magento/Braintree/Controller/PayPal/SaveShippingMethod.php
@@ -15,7 +15,7 @@ class SaveShippingMethod extends \Magento\Braintree\Controller\PayPal
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $isAjax = $this->getRequest()->getParam('isAjax');
diff --git a/app/code/Magento/Braintree/Test/Unit/Controller/PayPal/GetButtonDataTest.php b/app/code/Magento/Braintree/Test/Unit/Controller/PayPal/GetButtonDataTest.php
index 75718aa2f9c..ee314f710e2 100644
--- a/app/code/Magento/Braintree/Test/Unit/Controller/PayPal/GetButtonDataTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Controller/PayPal/GetButtonDataTest.php
@@ -85,7 +85,7 @@ class GetButtonDataTest extends \PHPUnit_Framework_TestCase
             ->willReturn($data['currency']);
 
         $getButtonData = new GetButtonData($this->contextMock, $this->checkoutSessionMock);
-        $getButtonData->execute();
+        $getButtonData->executeInternal();
     }
 
     /**
@@ -168,7 +168,7 @@ class GetButtonDataTest extends \PHPUnit_Framework_TestCase
         ->method('getQuote');
 
         $getButtonData = new GetButtonData($this->contextMock, $this->checkoutSessionMock);
-        $getButtonData->execute();
+        $getButtonData->executeInternal();
     }
 
     /**
diff --git a/app/code/Magento/Braintree/Test/Unit/Controller/PayPal/PlaceOrderTest.php b/app/code/Magento/Braintree/Test/Unit/Controller/PayPal/PlaceOrderTest.php
index e27de2bedd4..1d4fb2a241b 100644
--- a/app/code/Magento/Braintree/Test/Unit/Controller/PayPal/PlaceOrderTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Controller/PayPal/PlaceOrderTest.php
@@ -204,7 +204,7 @@ class PlaceOrderTest extends \PHPUnit_Framework_TestCase
             ->with(\Magento\Framework\Controller\ResultFactory::TYPE_REDIRECT)
             ->willReturn($resultRedirect);
 
-        $this->assertEquals($resultRedirect, $this->controller->execute());
+        $this->assertEquals($resultRedirect, $this->controller->executeInternal());
     }
 
     public function testExecuteException()
@@ -234,6 +234,6 @@ class PlaceOrderTest extends \PHPUnit_Framework_TestCase
             ->with(\Magento\Framework\Controller\ResultFactory::TYPE_REDIRECT)
             ->willReturn($resultRedirect);
 
-        $this->assertEquals($resultRedirect, $this->controller->execute());
+        $this->assertEquals($resultRedirect, $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Braintree/Test/Unit/Controller/PayPal/ReviewTest.php b/app/code/Magento/Braintree/Test/Unit/Controller/PayPal/ReviewTest.php
index bac4378b974..c7fc1da8662 100644
--- a/app/code/Magento/Braintree/Test/Unit/Controller/PayPal/ReviewTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Controller/PayPal/ReviewTest.php
@@ -253,7 +253,7 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
             ->with($paymentMethodNonce, ['email' => $email]);
         $resultPageMock = $this->setupReviewPage($quoteMock);
 
-        $this->assertEquals($resultPageMock, $this->controller->execute());
+        $this->assertEquals($resultPageMock, $this->controller->executeInternal());
     }
 
     public function testExecuteWithBillingAddress()
@@ -285,7 +285,7 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
             ->with($paymentMethodNonce, $details);
         $resultPageMock = $this->setupReviewPage($quoteMock);
 
-        $this->assertEquals($resultPageMock, $this->controller->execute());
+        $this->assertEquals($resultPageMock, $this->controller->executeInternal());
     }
 
     public function testExecuteRefresh()
@@ -296,7 +296,7 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
             ->willReturn(\Magento\Braintree\Model\PaymentMethod\PayPal::METHOD_CODE);
         $resultPageMock = $this->setupReviewPage($quoteMock);
 
-        $this->assertEquals($resultPageMock, $this->controller->execute());
+        $this->assertEquals($resultPageMock, $this->controller->executeInternal());
     }
 
     public function testExecuteNoPayment()
@@ -328,7 +328,7 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->with(\Magento\Framework\Controller\ResultFactory::TYPE_REDIRECT)
             ->willReturn($resultRedirect);
-        $this->assertEquals($resultRedirect, $this->controller->execute());
+        $this->assertEquals($resultRedirect, $this->controller->executeInternal());
     }
 
     public function testExecuteIncorrectPaymentMathod()
@@ -352,7 +352,7 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->with(\Magento\Framework\Controller\ResultFactory::TYPE_REDIRECT)
             ->willReturn($resultRedirect);
-        $this->assertEquals($resultRedirect, $this->controller->execute());
+        $this->assertEquals($resultRedirect, $this->controller->executeInternal());
     }
 
     public function testExecuteValidationFailure()
@@ -400,7 +400,7 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->with(\Magento\Framework\Controller\ResultFactory::TYPE_REDIRECT)
             ->willReturn($resultRedirect);
-        $this->assertEquals($resultRedirect, $this->controller->execute());
+        $this->assertEquals($resultRedirect, $this->controller->executeInternal());
     }
 
     public function testExecuteException()
@@ -447,6 +447,6 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->with(\Magento\Framework\Controller\ResultFactory::TYPE_REDIRECT)
             ->willReturn($resultRedirect);
-        $this->assertEquals($resultRedirect, $this->controller->execute());
+        $this->assertEquals($resultRedirect, $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Braintree/Test/Unit/Controller/PayPal/SaveShippingMethodTest.php b/app/code/Magento/Braintree/Test/Unit/Controller/PayPal/SaveShippingMethodTest.php
index 38d61187310..c1c5da115fc 100644
--- a/app/code/Magento/Braintree/Test/Unit/Controller/PayPal/SaveShippingMethodTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Controller/PayPal/SaveShippingMethodTest.php
@@ -198,7 +198,7 @@ class SaveShippingMethodTest extends \PHPUnit_Framework_TestCase
             ->with(ResultFactory::TYPE_PAGE)
             ->willReturn($responsePageMock);
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     public function testExecuteException()
@@ -236,6 +236,6 @@ class SaveShippingMethodTest extends \PHPUnit_Framework_TestCase
             ->method('setBody')
             ->with($html);
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Braintree/Test/Unit/Controller/PayPalTest.php b/app/code/Magento/Braintree/Test/Unit/Controller/PayPalTest.php
index b20831f92fe..f9d3db87e6d 100644
--- a/app/code/Magento/Braintree/Test/Unit/Controller/PayPalTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Controller/PayPalTest.php
@@ -125,7 +125,7 @@ class PayPalTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->willReturn($resultRedirect);
 
-        $this->assertEquals($resultRedirect, $this->controller->dispatch($this->requestMock));
+        $this->assertEquals($resultRedirect, $this->controller->execute($this->requestMock));
         $this->assertEquals('noRoute', $resultRedirect->getPath()) ;
     }
 
@@ -146,7 +146,7 @@ class PayPalTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->willReturn($resultRedirect);
 
-        $this->assertEquals($resultRedirect, $this->controller->dispatch($this->requestMock));
+        $this->assertEquals($resultRedirect, $this->controller->execute($this->requestMock));
         $this->assertEquals('noRoute', $resultRedirect->getPath()) ;
     }
 }
diff --git a/app/code/Magento/Braintree/Test/Unit/Controller/Stub/MyCreditCardsStub.php b/app/code/Magento/Braintree/Test/Unit/Controller/Stub/MyCreditCardsStub.php
index 971edb13bfa..b8abdda7eb0 100644
--- a/app/code/Magento/Braintree/Test/Unit/Controller/Stub/MyCreditCardsStub.php
+++ b/app/code/Magento/Braintree/Test/Unit/Controller/Stub/MyCreditCardsStub.php
@@ -8,7 +8,7 @@ namespace Magento\Braintree\Test\Unit\Controller\Stub;
 
 class MyCreditCardsStub extends \Magento\Braintree\Controller\MyCreditCards
 {
-    protected function execute()
+    protected function executeInternal()
     {
         // Empty method stub for test
     }
diff --git a/app/code/Magento/Braintree/Test/Unit/Controller/Stub/PayPalStub.php b/app/code/Magento/Braintree/Test/Unit/Controller/Stub/PayPalStub.php
index b0b5a3dc318..ca9248d5e6b 100644
--- a/app/code/Magento/Braintree/Test/Unit/Controller/Stub/PayPalStub.php
+++ b/app/code/Magento/Braintree/Test/Unit/Controller/Stub/PayPalStub.php
@@ -8,7 +8,7 @@ namespace Magento\Braintree\Test\Unit\Controller\Stub;
 
 class PayPalStub extends \Magento\Braintree\Controller\PayPal
 {
-    protected function execute()
+    protected function executeInternal()
     {
         // Empty method stub for test
     }
diff --git a/app/code/Magento/Bundle/Controller/Adminhtml/Bundle/Product/Edit/Form.php b/app/code/Magento/Bundle/Controller/Adminhtml/Bundle/Product/Edit/Form.php
index 8323781a07c..2f6f5061a79 100644
--- a/app/code/Magento/Bundle/Controller/Adminhtml/Bundle/Product/Edit/Form.php
+++ b/app/code/Magento/Bundle/Controller/Adminhtml/Bundle/Product/Edit/Form.php
@@ -33,7 +33,7 @@ class Form extends \Magento\Catalog\Controller\Adminhtml\Product
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $product = $this->initializationHelper->initialize($this->productBuilder->build($this->getRequest()));
         $this->getResponse()->setBody(
diff --git a/app/code/Magento/Bundle/Controller/Adminhtml/Bundle/Selection/Grid.php b/app/code/Magento/Bundle/Controller/Adminhtml/Bundle/Selection/Grid.php
index 684eb43e4ad..359f69c72e0 100644
--- a/app/code/Magento/Bundle/Controller/Adminhtml/Bundle/Selection/Grid.php
+++ b/app/code/Magento/Bundle/Controller/Adminhtml/Bundle/Selection/Grid.php
@@ -11,7 +11,7 @@ class Grid extends \Magento\Backend\App\Action
     /**
      * @return mixed
      */
-    public function execute()
+    public function executeInternal()
     {
         $index = $this->getRequest()->getParam('index');
         if (!preg_match('/^[a-z0-9_.]*$/i', $index)) {
diff --git a/app/code/Magento/Bundle/Controller/Adminhtml/Bundle/Selection/Search.php b/app/code/Magento/Bundle/Controller/Adminhtml/Bundle/Selection/Search.php
index 46c2fae16f4..6101d8b9593 100644
--- a/app/code/Magento/Bundle/Controller/Adminhtml/Bundle/Selection/Search.php
+++ b/app/code/Magento/Bundle/Controller/Adminhtml/Bundle/Selection/Search.php
@@ -11,7 +11,7 @@ class Search extends \Magento\Backend\App\Action
     /**
      * @return mixed
      */
-    public function execute()
+    public function executeInternal()
     {
         return $this->getResponse()->setBody(
             $this->_view->getLayout()->createBlock(
diff --git a/app/code/Magento/Bundle/Test/Unit/Controller/Adminhtml/Bundle/Product/Edit/FormTest.php b/app/code/Magento/Bundle/Test/Unit/Controller/Adminhtml/Bundle/Product/Edit/FormTest.php
index 34f249ca2cd..75a14fd13a6 100644
--- a/app/code/Magento/Bundle/Test/Unit/Controller/Adminhtml/Bundle/Product/Edit/FormTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Controller/Adminhtml/Bundle/Product/Edit/FormTest.php
@@ -112,6 +112,6 @@ class FormTest extends \PHPUnit_Framework_TestCase
         $layout->expects($this->once())->method('createBlock')->willReturn($block);
         $block->expects($this->once())->method('toHtml')->willReturnSelf();
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Bundle/Test/Unit/Controller/Adminhtml/Bundle/Selection/GridTest.php b/app/code/Magento/Bundle/Test/Unit/Controller/Adminhtml/Bundle/Selection/GridTest.php
index c0a7342f824..49a6c22704e 100644
--- a/app/code/Magento/Bundle/Test/Unit/Controller/Adminhtml/Bundle/Selection/GridTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Controller/Adminhtml/Bundle/Selection/GridTest.php
@@ -88,7 +88,7 @@ class GridTest extends \PHPUnit_Framework_TestCase
         $block->expects($this->once())->method('setIndex')->willReturnSelf();
         $block->expects($this->once())->method('toHtml')->willReturnSelf();
 
-        $this->assertEquals($this->response, $this->controller->execute());
+        $this->assertEquals($this->response, $this->controller->executeInternal());
     }
 
     /**
@@ -99,6 +99,6 @@ class GridTest extends \PHPUnit_Framework_TestCase
     {
         $this->request->expects($this->once())->method('getParam')->with('index')->willReturn('<index"');
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Bundle/Test/Unit/Controller/Adminhtml/Bundle/Selection/SearchTest.php b/app/code/Magento/Bundle/Test/Unit/Controller/Adminhtml/Bundle/Selection/SearchTest.php
index 2ef224ab717..7f03eeccfd1 100644
--- a/app/code/Magento/Bundle/Test/Unit/Controller/Adminhtml/Bundle/Selection/SearchTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Controller/Adminhtml/Bundle/Selection/SearchTest.php
@@ -87,6 +87,6 @@ class SearchTest extends \PHPUnit_Framework_TestCase
         $block->expects($this->once())->method('setFirstShow')->with(true)->willReturnSelf();
         $block->expects($this->once())->method('toHtml')->willReturnSelf();
 
-        $this->assertEquals($this->response, $this->controller->execute());
+        $this->assertEquals($this->response, $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Captcha/Controller/Adminhtml/Refresh/Refresh.php b/app/code/Magento/Captcha/Controller/Adminhtml/Refresh/Refresh.php
index 2c6ad98a280..7dd6846a3fd 100644
--- a/app/code/Magento/Captcha/Controller/Adminhtml/Refresh/Refresh.php
+++ b/app/code/Magento/Captcha/Controller/Adminhtml/Refresh/Refresh.php
@@ -13,7 +13,7 @@ class Refresh extends \Magento\Backend\App\Action
     /**
      * {@inheritdoc}
      */
-    public function execute()
+    public function executeInternal()
     {
         $formId = $this->getRequest()->getPost('formId');
         $captchaModel = $this->_objectManager->get('Magento\Captcha\Helper\Data')->getCaptcha($formId);
diff --git a/app/code/Magento/Captcha/Controller/Refresh/Index.php b/app/code/Magento/Captcha/Controller/Refresh/Index.php
index f12d17afaa9..6e4a78090bd 100644
--- a/app/code/Magento/Captcha/Controller/Refresh/Index.php
+++ b/app/code/Magento/Captcha/Controller/Refresh/Index.php
@@ -30,7 +30,7 @@ class Index extends \Magento\Framework\App\Action\Action
     /**
      * {@inheritdoc}
      */
-    public function execute()
+    public function executeInternal()
     {
         $formId = $this->_request->getPost('formId');
         if (null === $formId) {
diff --git a/app/code/Magento/Captcha/Test/Unit/Controller/Refresh/IndexTest.php b/app/code/Magento/Captcha/Test/Unit/Controller/Refresh/IndexTest.php
index fd47b19ea90..55f33af2161 100644
--- a/app/code/Magento/Captcha/Test/Unit/Controller/Refresh/IndexTest.php
+++ b/app/code/Magento/Captcha/Test/Unit/Controller/Refresh/IndexTest.php
@@ -100,7 +100,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
         $this->responseMock->expects($this->once())->method('representJson')->with(json_encode(['imgSrc' => 'source']));
         $this->flagMock->expects($this->once())->method('set')->with('', 'no-postDispatch', true);
 
-        $this->model->execute();
+        $this->model->executeInternal();
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Add.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Add.php
index 5cd9fffd001..9860f99b826 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Add.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Add.php
@@ -30,7 +30,7 @@ class Add extends \Magento\Catalog\Controller\Adminhtml\Category
      *
      * @return \Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_objectManager->get('Magento\Backend\Model\Auth\Session')->unsActiveTabId();
         /** @var \Magento\Backend\Model\View\Result\Forward $resultForward */
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/CategoriesJson.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/CategoriesJson.php
index 6f9cf5cc6e5..21c4c2fddbd 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/CategoriesJson.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/CategoriesJson.php
@@ -38,7 +38,7 @@ class CategoriesJson extends \Magento\Catalog\Controller\Adminhtml\Category
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->getRequest()->getParam('expand_all')) {
             $this->_objectManager->get('Magento\Backend\Model\Auth\Session')->setIsTreeWasExpanded(true);
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Delete.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Delete.php
index cc0e60a82a3..7590c92887c 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Delete.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Delete.php
@@ -28,7 +28,7 @@ class Delete extends \Magento\Catalog\Controller\Adminhtml\Category
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultRedirectFactory->create();
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Edit.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Edit.php
index 3c308d5deea..4c8f0e0be64 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Edit.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Edit.php
@@ -40,7 +40,7 @@ class Edit extends \Magento\Catalog\Controller\Adminhtml\Category
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         $storeId = (int)$this->getRequest()->getParam('store');
         $parentId = (int)$this->getRequest()->getParam('parent');
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Grid.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Grid.php
index fdecd7c3922..6f389e87de6 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Grid.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Grid.php
@@ -39,7 +39,7 @@ class Grid extends \Magento\Catalog\Controller\Adminhtml\Category
      *
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         $category = $this->_initCategory(true);
         if (!$category) {
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Index.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Index.php
index 1b0bbf347f5..7fb6ab9e956 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Index.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Index.php
@@ -30,7 +30,7 @@ class Index extends \Magento\Catalog\Controller\Adminhtml\Category
      *
      * @return \Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Forward $resultForward */
         $resultForward = $this->resultForwardFactory->create();
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Move.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Move.php
index fb0d48aacc4..28f7d43bec6 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Move.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Move.php
@@ -46,7 +46,7 @@ class Move extends \Magento\Catalog\Controller\Adminhtml\Category
      *
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         /**
          * New parent category identifier
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/RefreshPath.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/RefreshPath.php
index 150b0194664..5441e165874 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/RefreshPath.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/RefreshPath.php
@@ -30,7 +30,7 @@ class RefreshPath extends \Magento\Catalog\Controller\Adminhtml\Category
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         $categoryId = (int)$this->getRequest()->getParam('id');
         if ($categoryId) {
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php
index ac0b303f18d..014bea2cfa3 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php
@@ -70,7 +70,7 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Category
      * @SuppressWarnings(PHPMD.NPathComplexity)
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultRedirectFactory->create();
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/SuggestCategories.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/SuggestCategories.php
index 94c8010cc39..6fbed45cc76 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/SuggestCategories.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/SuggestCategories.php
@@ -38,7 +38,7 @@ class SuggestCategories extends \Magento\Catalog\Controller\Adminhtml\Category
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Json $resultJson */
         $resultJson = $this->resultJsonFactory->create();
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Tree.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Tree.php
index 9acd075bc82..1eee483d716 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Tree.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Tree.php
@@ -39,7 +39,7 @@ class Tree extends \Magento\Catalog\Controller\Adminhtml\Category
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $storeId = (int)$this->getRequest()->getParam('store');
         $categoryId = (int)$this->getRequest()->getParam('id');
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Widget/CategoriesJson.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Widget/CategoriesJson.php
index 329f786314f..953daaa4607 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Widget/CategoriesJson.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Widget/CategoriesJson.php
@@ -42,7 +42,7 @@ class CategoriesJson extends \Magento\Catalog\Controller\Adminhtml\Category\Widg
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         $categoryId = (int)$this->getRequest()->getPost('id');
         if ($categoryId) {
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Widget/Chooser.php b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Widget/Chooser.php
index fa9b2ab95b2..f65912621ce 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Category/Widget/Chooser.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Category/Widget/Chooser.php
@@ -32,7 +32,7 @@ class Chooser extends \Magento\Catalog\Controller\Adminhtml\Category\Widget
      *
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Raw $resultRaw */
         $resultRaw = $this->resultRawFactory->create();
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Edit.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Edit.php
index 29f30ad573f..e83384f5f35 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Edit.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Edit.php
@@ -51,7 +51,7 @@ class Edit extends \Magento\Catalog\Controller\Adminhtml\Product\Action\Attribut
     /**
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $collection = $this->filter->getCollection($this->collectionFactory->create());
         $this->attributeHelper->setProductIds($collection->getAllIds());
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Save.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Save.php
index 3661567d5fa..c77b65c71a2 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Save.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Save.php
@@ -85,7 +85,7 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Action\Attribut
      * @SuppressWarnings(PHPMD.NPathComplexity)
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->_validateProducts()) {
             return $this->resultRedirectFactory->create()->setPath('catalog/product/', ['_current' => true]);
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Validate.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Validate.php
index a7f2da57762..1b3c6e2ad17 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Validate.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Validate.php
@@ -40,7 +40,7 @@ class Validate extends \Magento\Catalog\Controller\Adminhtml\Product\Action\Attr
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $response = $this->_objectManager->create('Magento\Framework\DataObject');
         $response->setError(false);
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/AddAttributeToTemplate.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/AddAttributeToTemplate.php
index 7d337411b0a..4f53240f745 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/AddAttributeToTemplate.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/AddAttributeToTemplate.php
@@ -31,7 +31,7 @@ class AddAttributeToTemplate extends \Magento\Catalog\Controller\Adminhtml\Produ
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         $request = $this->getRequest();
         $resultJson = $this->resultJsonFactory->create();
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/AlertsPriceGrid.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/AlertsPriceGrid.php
index b865313f943..e8b34dde057 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/AlertsPriceGrid.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/AlertsPriceGrid.php
@@ -14,7 +14,7 @@ class AlertsPriceGrid extends AbstractProductGrid
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         return $this->resultLayoutFactory->create();
     }
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/AlertsStockGrid.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/AlertsStockGrid.php
index dc4a3f14470..e6324f21714 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/AlertsStockGrid.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/AlertsStockGrid.php
@@ -39,7 +39,7 @@ class AlertsStockGrid extends \Magento\Catalog\Controller\Adminhtml\Product
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         return $this->resultLayoutFactory->create();
     }
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute.php
index 6d444009f5a..d2bc262e1a8 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute.php
@@ -62,14 +62,14 @@ abstract class Attribute extends \Magento\Backend\App\Action
      * @param \Magento\Framework\App\RequestInterface $request
      * @return \Magento\Framework\App\ResponseInterface
      */
-    public function dispatch(\Magento\Framework\App\RequestInterface $request)
+    public function execute(\Magento\Framework\App\RequestInterface $request)
     {
         $this->_entityTypeId = $this->_objectManager->create(
             'Magento\Eav\Model\Entity'
         )->setType(
             \Magento\Catalog\Model\Product::ENTITY
         )->getTypeId();
-        return parent::dispatch($request);
+        return parent::execute($request);
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Delete.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Delete.php
index aa99a78945e..be13157399e 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Delete.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Delete.php
@@ -11,7 +11,7 @@ class Delete extends \Magento\Catalog\Controller\Adminhtml\Product\Attribute
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = $this->getRequest()->getParam('attribute_id');
         $resultRedirect = $this->resultRedirectFactory->create();
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Edit.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Edit.php
index bfe598b3d9b..14baeaa2461 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Edit.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Edit.php
@@ -12,7 +12,7 @@ class Edit extends \Magento\Catalog\Controller\Adminhtml\Product\Attribute
      * @return \Magento\Framework\Controller\ResultInterface
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = $this->getRequest()->getParam('attribute_id');
         /** @var $model \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Index.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Index.php
index bb264940f4a..b2caa1c5219 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Index.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Index.php
@@ -11,7 +11,7 @@ class Index extends \Magento\Catalog\Controller\Adminhtml\Product\Attribute
     /**
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultPage = $this->createActionPage();
         $resultPage->addContent(
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/NewAction.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/NewAction.php
index 08e6e33b32f..97886d735b7 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/NewAction.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/NewAction.php
@@ -34,7 +34,7 @@ class NewAction extends \Magento\Catalog\Controller\Adminhtml\Product\Attribute
     /**
      * @return \Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         return $this->resultForwardFactory->create()->forward('edit');
     }
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Save.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Save.php
index 2d57b6148e5..17bed1b247b 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Save.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Save.php
@@ -86,7 +86,7 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Attribute
      * @SuppressWarnings(PHPMD.NPathComplexity)
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
-    public function execute()
+    public function executeInternal()
     {
         $data = $this->getRequest()->getPostValue();
         $resultRedirect = $this->resultRedirectFactory->create();
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Validate.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Validate.php
index bb870c3f8ef..7a529343b1f 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Validate.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Validate.php
@@ -44,7 +44,7 @@ class Validate extends \Magento\Catalog\Controller\Adminhtml\Product\Attribute
     /**
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $response = new \Magento\Framework\DataObject();
         $response->setError(false);
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Categories.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Categories.php
index 202f41cda59..f62dc494341 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Categories.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Categories.php
@@ -32,7 +32,7 @@ class Categories extends \Magento\Catalog\Controller\Adminhtml\Product
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->productBuilder->build($this->getRequest());
         return $this->resultPageFactory->create();
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Crosssell.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Crosssell.php
index 298dd38b065..a39e81bcb5d 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Crosssell.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Crosssell.php
@@ -32,7 +32,7 @@ class Crosssell extends \Magento\Catalog\Controller\Adminhtml\Product
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->productBuilder->build($this->getRequest());
         $resultLayout = $this->resultLayoutFactory->create();
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/CrosssellGrid.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/CrosssellGrid.php
index 7dd03b84c09..06213df4acd 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/CrosssellGrid.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/CrosssellGrid.php
@@ -32,7 +32,7 @@ class CrosssellGrid extends \Magento\Catalog\Controller\Adminhtml\Product
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->productBuilder->build($this->getRequest());
         $resultLayout = $this->resultLayoutFactory->create();
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/CustomOptions.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/CustomOptions.php
index cc5dde10f1a..23546bfe57d 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/CustomOptions.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/CustomOptions.php
@@ -45,7 +45,7 @@ class CustomOptions extends \Magento\Catalog\Controller\Adminhtml\Product
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->registry->register('import_option_products', $this->getRequest()->getPost('products'));
         return $this->resultLayoutFactory->create();
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Datafeeds/Index.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Datafeeds/Index.php
index f51fb90425a..0abe6282eee 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Datafeeds/Index.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Datafeeds/Index.php
@@ -11,7 +11,7 @@ class Index extends \Magento\Backend\App\Action
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
     }
 }
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Duplicate.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Duplicate.php
index d335b898f71..fa68907d14c 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Duplicate.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Duplicate.php
@@ -35,7 +35,7 @@ class Duplicate extends \Magento\Catalog\Controller\Adminhtml\Product
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultRedirectFactory->create();
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Edit.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Edit.php
index 30e1299ca17..123117c22a7 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Edit.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Edit.php
@@ -39,7 +39,7 @@ class Edit extends \Magento\Catalog\Controller\Adminhtml\Product
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $productId = (int) $this->getRequest()->getParam('id');
         $product = $this->productBuilder->build($this->getRequest());
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Gallery/Upload.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Gallery/Upload.php
index fb6511ec6bb..6e41eed07bb 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Gallery/Upload.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Gallery/Upload.php
@@ -38,7 +38,7 @@ class Upload extends \Magento\Backend\App\Action
     /**
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $uploader = $this->_objectManager->create(
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Grid.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Grid.php
index fdda822206b..a9536e615d0 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Grid.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Grid.php
@@ -32,7 +32,7 @@ class Grid extends \Magento\Catalog\Controller\Adminhtml\Product
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         return $this->resultPageFactory->create();
     }
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/GridOnly.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/GridOnly.php
index 0732fd041b9..f489d581fe3 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/GridOnly.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/GridOnly.php
@@ -39,7 +39,7 @@ class GridOnly extends \Magento\Catalog\Controller\Adminhtml\Product
      *
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->getPage()->getConfig()->getTitle()->prepend(__('Products'));
 
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Group/Save.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Group/Save.php
index 9c4ba567e04..810fa031ba9 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Group/Save.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Group/Save.php
@@ -19,7 +19,7 @@ class Save extends \Magento\Backend\App\Action
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $model = $this->_objectManager->create('Magento\Eav\Model\Entity\Attribute\Group');
 
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Index.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Index.php
index 2edf364aa66..89051652951 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Index.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Index.php
@@ -32,7 +32,7 @@ class Index extends \Magento\Catalog\Controller\Adminhtml\Product
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassDelete.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassDelete.php
index 831fb79fc5f..2140d25e250 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassDelete.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassDelete.php
@@ -46,7 +46,7 @@ class MassDelete extends \Magento\Catalog\Controller\Adminhtml\Product
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $collection = $this->filter->getCollection($this->collectionFactory->create());
         $productDeleted = 0;
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassStatus.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassStatus.php
index 04f37fda61f..913a1be34b5 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassStatus.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassStatus.php
@@ -75,7 +75,7 @@ class MassStatus extends \Magento\Catalog\Controller\Adminhtml\Product
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $collection = $this->filter->getCollection($this->collectionFactory->create());
         $productIds = $collection->getAllIds();
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/NewAction.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/NewAction.php
index 47c42d49e3a..d22b64ee03e 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/NewAction.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/NewAction.php
@@ -51,7 +51,7 @@ class NewAction extends \Magento\Catalog\Controller\Adminhtml\Product
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->getRequest()->getParam('set')) {
             return $this->resultForwardFactory->create()->forward('noroute');
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Options.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Options.php
index 2fcd0dcf961..3bd0b5eab8e 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Options.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Options.php
@@ -32,7 +32,7 @@ class Options extends \Magento\Catalog\Controller\Adminhtml\Product
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->productBuilder->build($this->getRequest());
         return $this->resultLayoutFactory->create();
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/OptionsImportGrid.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/OptionsImportGrid.php
index a2b2dbda990..2958d8fb965 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/OptionsImportGrid.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/OptionsImportGrid.php
@@ -13,7 +13,7 @@ class OptionsImportGrid extends AbstractProductGrid
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         return $this->resultLayoutFactory->create();
     }
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Related.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Related.php
index d503a79ff3a..98bc500a023 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Related.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Related.php
@@ -31,7 +31,7 @@ class Related extends \Magento\Catalog\Controller\Adminhtml\Product
     /**
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->productBuilder->build($this->getRequest());
         $resultLayout = $this->resultLayoutFactory->create();
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Save.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Save.php
index f37bc324c56..d09ce170e4c 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Save.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Save.php
@@ -53,7 +53,7 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         $storeId = $this->getRequest()->getParam('store');
         $redirectBack = $this->getRequest()->getParam('back', false);
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Add.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Add.php
index 81f61ec8362..d452df55b25 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Add.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Add.php
@@ -30,7 +30,7 @@ class Add extends \Magento\Catalog\Controller\Adminhtml\Product\Set
     /**
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_setTypeId();
 
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Delete.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Delete.php
index 9849dc68847..42ceb88ed7e 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Delete.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Delete.php
@@ -30,7 +30,7 @@ class Delete extends \Magento\Catalog\Controller\Adminhtml\Product\Set
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $setId = $this->getRequest()->getParam('id');
         $resultRedirect = $this->resultRedirectFactory->create();
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Edit.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Edit.php
index d40982a5d56..b4cab4b49ce 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Edit.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Edit.php
@@ -30,7 +30,7 @@ class Edit extends \Magento\Catalog\Controller\Adminhtml\Product\Set
     /**
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_setTypeId();
         $attributeSet = $this->_objectManager->create('Magento\Eav\Model\Entity\Attribute\Set')
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Index.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Index.php
index 7b9edb21c7e..131ec6cd61e 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Index.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Index.php
@@ -30,7 +30,7 @@ class Index extends \Magento\Catalog\Controller\Adminhtml\Product\Set
     /**
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_setTypeId();
 
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Save.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Save.php
index 5870190db02..2535d9b4c65 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Save.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/Save.php
@@ -57,7 +57,7 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Set
      * @return \Magento\Framework\Controller\ResultInterface
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         $entityTypeId = $this->_getEntityTypeId();
         $hasError = false;
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/SetGrid.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/SetGrid.php
index d58fa4a600a..13a7440a7a7 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/SetGrid.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Set/SetGrid.php
@@ -30,7 +30,7 @@ class SetGrid extends \Magento\Catalog\Controller\Adminhtml\Product\Set
     /**
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_setTypeId();
         return $this->resultLayoutFactory->create();
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/ShowUpdateResult.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/ShowUpdateResult.php
index d7e4db8dbb7..c5bda8da562 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/ShowUpdateResult.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/ShowUpdateResult.php
@@ -35,7 +35,7 @@ class ShowUpdateResult extends \Magento\Catalog\Controller\Adminhtml\Product
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $layout = false;
         if ($this->_session->hasCompositeProductResult()
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/SuggestAttributes.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/SuggestAttributes.php
index 6b60c4f7481..b5db6ac5e07 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/SuggestAttributes.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/SuggestAttributes.php
@@ -40,7 +40,7 @@ class SuggestAttributes extends \Magento\Catalog\Controller\Adminhtml\Product
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultJson = $this->resultJsonFactory->create();
         $resultJson->setData(
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/SuggestProductTemplates.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/SuggestProductTemplates.php
index d28b72799e7..2ef7b040654 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/SuggestProductTemplates.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/SuggestProductTemplates.php
@@ -38,7 +38,7 @@ class SuggestProductTemplates extends \Magento\Backend\App\Action
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultJson = $this->resultJsonFactory->create();
         $resultJson->setData(
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Upsell.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Upsell.php
index 4c11f14d9f9..09ef399f3ce 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Upsell.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Upsell.php
@@ -32,7 +32,7 @@ class Upsell extends \Magento\Catalog\Controller\Adminhtml\Product
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->productBuilder->build($this->getRequest());
         $resultLayout = $this->resultLayoutFactory->create();
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/UpsellGrid.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/UpsellGrid.php
index 171a1e4694a..b4a6a42d94f 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/UpsellGrid.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/UpsellGrid.php
@@ -32,7 +32,7 @@ class UpsellGrid extends \Magento\Catalog\Controller\Adminhtml\Product
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->productBuilder->build($this->getRequest());
         $resultLayout = $this->resultLayoutFactory->create();
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Validate.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Validate.php
index 82e68cd1c94..be1d2b5b962 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Validate.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Validate.php
@@ -72,7 +72,7 @@ class Validate extends \Magento\Catalog\Controller\Adminhtml\Product
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         $response = new \Magento\Framework\DataObject();
         $response->setError(false);
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Widget/Chooser.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Widget/Chooser.php
index 1c883ea7989..eeb41e0bea5 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Widget/Chooser.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Widget/Chooser.php
@@ -38,7 +38,7 @@ class Chooser extends \Magento\Backend\App\Action
      *
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         $uniqId = $this->getRequest()->getParam('uniq_id');
         $massAction = $this->getRequest()->getParam('use_massaction', false);
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Wysiwyg.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Wysiwyg.php
index f0f0b5274a6..98daec96d73 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Wysiwyg.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Wysiwyg.php
@@ -40,7 +40,7 @@ class Wysiwyg extends \Magento\Catalog\Controller\Adminhtml\Product
      *
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         $elementId = $this->getRequest()->getParam('element_id', md5(microtime()));
         $storeId = $this->getRequest()->getParam('store_id', 0);
diff --git a/app/code/Magento/Catalog/Controller/Category/View.php b/app/code/Magento/Catalog/Controller/Category/View.php
index b0684d90546..bcdea75c74c 100644
--- a/app/code/Magento/Catalog/Controller/Category/View.php
+++ b/app/code/Magento/Catalog/Controller/Category/View.php
@@ -150,7 +150,7 @@ class View extends \Magento\Framework\App\Action\Action
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->_request->getParam(\Magento\Framework\App\ActionInterface::PARAM_NAME_URL_ENCODED)) {
             return $this->resultRedirectFactory->create()->setUrl($this->_redirect->getRedirectUrl());
diff --git a/app/code/Magento/Catalog/Controller/Index/Index.php b/app/code/Magento/Catalog/Controller/Index/Index.php
index 5ea3a57caf4..d6890855f14 100644
--- a/app/code/Magento/Catalog/Controller/Index/Index.php
+++ b/app/code/Magento/Catalog/Controller/Index/Index.php
@@ -12,7 +12,7 @@ class Index extends \Magento\Framework\App\Action\Action
      *
      * @return $this
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultRedirect = $this->resultRedirectFactory->create();
         return $resultRedirect->setPath('/');
diff --git a/app/code/Magento/Catalog/Controller/Product/Compare/Add.php b/app/code/Magento/Catalog/Controller/Product/Compare/Add.php
index 995f51e23ec..99dccd664df 100644
--- a/app/code/Magento/Catalog/Controller/Product/Compare/Add.php
+++ b/app/code/Magento/Catalog/Controller/Product/Compare/Add.php
@@ -15,7 +15,7 @@ class Add extends \Magento\Catalog\Controller\Product\Compare
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultRedirect = $this->resultRedirectFactory->create();
         if (!$this->_formKeyValidator->validate($this->getRequest())) {
diff --git a/app/code/Magento/Catalog/Controller/Product/Compare/Clear.php b/app/code/Magento/Catalog/Controller/Product/Compare/Clear.php
index 40525ddb90f..085013b86a4 100644
--- a/app/code/Magento/Catalog/Controller/Product/Compare/Clear.php
+++ b/app/code/Magento/Catalog/Controller/Product/Compare/Clear.php
@@ -15,7 +15,7 @@ class Clear extends \Magento\Catalog\Controller\Product\Compare
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Catalog\Model\ResourceModel\Product\Compare\Item\Collection $items */
         $items = $this->_itemCollectionFactory->create();
diff --git a/app/code/Magento/Catalog/Controller/Product/Compare/Index.php b/app/code/Magento/Catalog/Controller/Product/Compare/Index.php
index a8e79afa1c0..5808e737e5d 100644
--- a/app/code/Magento/Catalog/Controller/Product/Compare/Index.php
+++ b/app/code/Magento/Catalog/Controller/Product/Compare/Index.php
@@ -71,7 +71,7 @@ class Index extends \Magento\Catalog\Controller\Product\Compare
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $items = $this->getRequest()->getParam('items');
 
diff --git a/app/code/Magento/Catalog/Controller/Product/Compare/Remove.php b/app/code/Magento/Catalog/Controller/Product/Compare/Remove.php
index b710c3a066d..00db1446bda 100644
--- a/app/code/Magento/Catalog/Controller/Product/Compare/Remove.php
+++ b/app/code/Magento/Catalog/Controller/Product/Compare/Remove.php
@@ -15,7 +15,7 @@ class Remove extends \Magento\Catalog\Controller\Product\Compare
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $productId = (int)$this->getRequest()->getParam('product');
         if ($productId) {
diff --git a/app/code/Magento/Catalog/Controller/Product/Gallery.php b/app/code/Magento/Catalog/Controller/Product/Gallery.php
index b4e9c7480ba..32411c663db 100644
--- a/app/code/Magento/Catalog/Controller/Product/Gallery.php
+++ b/app/code/Magento/Catalog/Controller/Product/Gallery.php
@@ -44,7 +44,7 @@ class Gallery extends \Magento\Catalog\Controller\Product
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $result = null;
         if (!$this->_initProduct()) {
diff --git a/app/code/Magento/Catalog/Controller/Product/View.php b/app/code/Magento/Catalog/Controller/Product/View.php
index aed317633da..b50819ecb98 100644
--- a/app/code/Magento/Catalog/Controller/Product/View.php
+++ b/app/code/Magento/Catalog/Controller/Product/View.php
@@ -69,7 +69,7 @@ class View extends \Magento\Catalog\Controller\Product
      *
      * @return \Magento\Framework\Controller\Result\Forward|\Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         // Get initial data from request
         $categoryId = (int) $this->getRequest()->getParam('category', false);
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/DeleteTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/DeleteTest.php
index bec5548f8bb..203f49495c8 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/DeleteTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/DeleteTest.php
@@ -122,7 +122,7 @@ class DeleteTest extends \PHPUnit_Framework_TestCase
             ->with('catalog/*/', ['_current' => true, 'id' => null]);
         $this->categoryRepository->expects($this->never())->method('get');
 
-        $this->unit->execute();
+        $this->unit->executeInternal();
     }
 
     public function testDelete()
@@ -138,6 +138,6 @@ class DeleteTest extends \PHPUnit_Framework_TestCase
         $this->resultRedirect->expects($this->once())->method('setPath')
             ->with('catalog/*/', ['_current' => true, 'id' => $parentId]);
 
-        $this->unit->execute();
+        $this->unit->executeInternal();
     }
 }
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/SaveTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/SaveTest.php
index 09cad210ad8..b4e61882ee5 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/SaveTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/SaveTest.php
@@ -550,7 +550,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             )
             ->will($this->returnValue('result-execute'));
 
-        $this->assertEquals('result-execute', $this->save->execute());
+        $this->assertEquals('result-execute', $this->save->executeInternal());
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/Widget/CategoriesJsonTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/Widget/CategoriesJsonTest.php
index 26b7598e03b..e1ae3110fed 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/Widget/CategoriesJsonTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/Widget/CategoriesJsonTest.php
@@ -141,6 +141,6 @@ class CategoriesJsonTest extends \PHPUnit_Framework_TestCase
         $testHtml = '<div>Some test html</div>';
         $this->chooserBlockMock->expects($this->once())->method('getTreeJson')->will($this->returnValue($testHtml));
         $this->resultJson->expects($this->once())->method('setJsonData')->with($testHtml)->willReturnSelf();
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/Widget/ChooserTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/Widget/ChooserTest.php
index f61c31a6620..ec55fc86161 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/Widget/ChooserTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/Widget/ChooserTest.php
@@ -123,6 +123,6 @@ class ChooserTest extends \PHPUnit_Framework_TestCase
         $testHtml = '<div>Some test html</div>';
         $this->chooserBlockMock->expects($this->once())->method('toHtml')->will($this->returnValue($testHtml));
         $this->resultRaw->expects($this->once())->method('setContents')->with($testHtml);
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Action/Attribute/SaveTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Action/Attribute/SaveTest.php
index b83afa0e636..db88d451374 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Action/Attribute/SaveTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Action/Attribute/SaveTest.php
@@ -274,6 +274,6 @@ class SaveTest extends \PHPUnit_Framework_TestCase
         $this->messageManager->expects($this->never())->method('addError');
         $this->messageManager->expects($this->never())->method('addException');
 
-        $this->object->execute();
+        $this->object->executeInternal();
     }
 }
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Attribute/EditTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Attribute/EditTest.php
index f8cf08f5474..480f84e43b8 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Attribute/EditTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Attribute/EditTest.php
@@ -199,7 +199,7 @@ class EditTest extends \PHPUnit_Framework_TestCase
 
         $this->blockTemplate->expects($this->any())->method('setIsPopup')->willReturnSelf();
 
-        $this->assertSame($this->resultPage, $this->editController->execute());
+        $this->assertSame($this->resultPage, $this->editController->executeInternal());
     }
 
     public function testExecuteNoPopup()
@@ -250,6 +250,6 @@ class EditTest extends \PHPUnit_Framework_TestCase
 
         $this->blockTemplate->expects($this->any())->method('setIsPopup')->willReturnSelf();
 
-        $this->assertSame($this->resultPage, $this->editController->execute());
+        $this->assertSame($this->resultPage, $this->editController->executeInternal());
     }
 }
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/MassStatusTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/MassStatusTest.php
index 47dd99f5ce0..9a66cfdd37e 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/MassStatusTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/MassStatusTest.php
@@ -80,6 +80,6 @@ class MassStatusTest extends \Magento\Catalog\Test\Unit\Controller\Adminhtml\Pro
     public function testMassStatusAction()
     {
         $this->priceProcessor->expects($this->once())->method('reindexList');
-        $this->action->execute();
+        $this->action->executeInternal();
     }
 }
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/NewActionTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/NewActionTest.php
index 215be1b4d16..8dd5602000f 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/NewActionTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/NewActionTest.php
@@ -76,7 +76,7 @@ class NewActionTest extends \Magento\Catalog\Test\Unit\Controller\Adminhtml\Prod
         $this->action->getRequest()->expects($this->any())->method('getParam')->willReturn(true);
         $this->action->getRequest()->expects($this->any())->method('getFullActionName')
             ->willReturn('catalog_product_new');
-        $this->action->execute();
+        $this->action->executeInternal();
     }
 
     public function testExecuteObtainsProductDataFromSession()
@@ -90,6 +90,6 @@ class NewActionTest extends \Magento\Catalog\Test\Unit\Controller\Adminhtml\Prod
 
         $this->product->expects($this->once())->method('addData')->with(['name' => 'test-name', 'stock_data' => null]);
 
-        $this->action->execute();
+        $this->action->executeInternal();
     }
 }
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/SaveTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/SaveTest.php
index 17a99b3ab8f..4a9d892060a 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/SaveTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/SaveTest.php
@@ -120,7 +120,7 @@ class SaveTest extends \Magento\Catalog\Test\Unit\Controller\Adminhtml\ProductTe
         $this->session->expects($this->once())->method('setProductData')->with($productData);
         $this->resultRedirect->expects($this->once())->method('setPath')->with('catalog/*/new');
 
-        $this->action->execute();
+        $this->action->executeInternal();
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/ShowUpdateResultTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/ShowUpdateResultTest.php
index c9209c3f0a7..e5c1e4f425f 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/ShowUpdateResultTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/ShowUpdateResultTest.php
@@ -146,6 +146,6 @@ class ShowUpdateResultTest extends \PHPUnit_Framework_TestCase
 
         /** @var \Magento\Catalog\Controller\Adminhtml\Product\ShowUpdateResult $controller */
         $controller = new ShowUpdateResult($context, $productBuilder, $productCompositeHelper);
-        $controller->execute();
+        $controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/ValidateTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/ValidateTest.php
index 9c58d09dfe4..709cd8db941 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/ValidateTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/ValidateTest.php
@@ -132,7 +132,7 @@ class ValidateTest extends \Magento\Catalog\Test\Unit\Controller\Adminhtml\Produ
         $this->request->expects($this->any())->method('getPost')->willReturnMap([['set', null, 9]]);
         $this->product->expects($this->once())->method('setAttributeSetId')->with(9);
 
-        $this->action->execute();
+        $this->action->executeInternal();
     }
 
     public function testAttributeSetIsObtainedFromGetWhenThereIsNoOneInPost()
@@ -141,6 +141,6 @@ class ValidateTest extends \Magento\Catalog\Test\Unit\Controller\Adminhtml\Produ
         $this->request->expects($this->any())->method('getPost')->willReturnMap([['set', null, null]]);
         $this->product->expects($this->once())->method('setAttributeSetId')->with(4);
 
-        $this->action->execute();
+        $this->action->executeInternal();
     }
 }
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Category/ViewTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Category/ViewTest.php
index 735c13b0483..eacdcc13328 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Category/ViewTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Category/ViewTest.php
@@ -197,6 +197,6 @@ class ViewTest extends \PHPUnit_Framework_TestCase
 
         $this->catalogDesign->expects($this->any())->method('getDesignSettings')->will($this->returnValue($settings));
 
-        $this->action->execute();
+        $this->action->executeInternal();
     }
 }
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Product/Compare/IndexTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Product/Compare/IndexTest.php
index 134776df353..da0c0c7bea7 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Product/Compare/IndexTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Product/Compare/IndexTest.php
@@ -154,7 +154,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
             ->willReturnSelf();
         $this->listCompareMock->expects($this->never())->method('addProducts');
         $this->redirectFactoryMock->expects($this->never())->method('create');
-        $this->index->execute();
+        $this->index->executeInternal();
     }
 
     public function testExecuteWithItems()
@@ -180,6 +180,6 @@ class IndexTest extends \PHPUnit_Framework_TestCase
         $this->redirectFactoryMock->expects($this->once())
             ->method('create')
             ->willReturn($redirect);
-        $this->index->execute();
+        $this->index->executeInternal();
     }
 }
diff --git a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/ApplyRules.php b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/ApplyRules.php
index abe88aa2fcc..df2b1a38b58 100644
--- a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/ApplyRules.php
+++ b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/ApplyRules.php
@@ -16,7 +16,7 @@ class ApplyRules extends \Magento\CatalogRule\Controller\Adminhtml\Promo\Catalog
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $errorMessage = __('We can\'t apply the rules.');
         try {
diff --git a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Chooser.php b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Chooser.php
index 34d74818512..ac908bffe6d 100644
--- a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Chooser.php
+++ b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Chooser.php
@@ -11,7 +11,7 @@ class Chooser extends \Magento\CatalogRule\Controller\Adminhtml\Promo\Catalog
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->getRequest()->getParam('attribute') == 'sku') {
             $type = 'Magento\CatalogRule\Block\Adminhtml\Promo\Widget\Chooser\Sku';
diff --git a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Delete.php b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Delete.php
index 41cca27abd8..dd14365e464 100644
--- a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Delete.php
+++ b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Delete.php
@@ -13,7 +13,7 @@ class Delete extends \Magento\CatalogRule\Controller\Adminhtml\Promo\Catalog
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = $this->getRequest()->getParam('id');
         if ($id) {
diff --git a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Edit.php b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Edit.php
index 97495f7d0d4..1f2f29390f7 100644
--- a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Edit.php
+++ b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Edit.php
@@ -11,7 +11,7 @@ class Edit extends \Magento\CatalogRule\Controller\Adminhtml\Promo\Catalog
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = $this->getRequest()->getParam('id');
         $model = $this->_objectManager->create('Magento\CatalogRule\Model\Rule');
diff --git a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Index.php b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Index.php
index fd6533a042c..9eb60fc13cd 100644
--- a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Index.php
+++ b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Index.php
@@ -11,7 +11,7 @@ class Index extends \Magento\CatalogRule\Controller\Adminhtml\Promo\Catalog
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $dirtyRules = $this->_objectManager->create('Magento\CatalogRule\Model\Flag')->loadSelf();
         if ($dirtyRules->getState()) {
diff --git a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/NewAction.php b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/NewAction.php
index fe944cf16f4..f3a42f0c955 100644
--- a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/NewAction.php
+++ b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/NewAction.php
@@ -11,7 +11,7 @@ class NewAction extends \Magento\CatalogRule\Controller\Adminhtml\Promo\Catalog
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_forward('edit');
     }
diff --git a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/NewActionHtml.php b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/NewActionHtml.php
index 2a1d8aaf878..a588a5e00ad 100644
--- a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/NewActionHtml.php
+++ b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/NewActionHtml.php
@@ -13,7 +13,7 @@ class NewActionHtml extends \Magento\CatalogRule\Controller\Adminhtml\Promo\Cata
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = $this->getRequest()->getParam('id');
         $typeArr = explode('|', str_replace('-', '/', $this->getRequest()->getParam('type')));
diff --git a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/NewConditionHtml.php b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/NewConditionHtml.php
index 977806d176b..5a58180e448 100644
--- a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/NewConditionHtml.php
+++ b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/NewConditionHtml.php
@@ -13,7 +13,7 @@ class NewConditionHtml extends \Magento\CatalogRule\Controller\Adminhtml\Promo\C
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = $this->getRequest()->getParam('id');
         $typeArr = explode('|', str_replace('-', '/', $this->getRequest()->getParam('type')));
diff --git a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Save.php b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Save.php
index 16415977b55..2ac65d736b4 100644
--- a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Save.php
+++ b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Catalog/Save.php
@@ -14,7 +14,7 @@ class Save extends \Magento\CatalogRule\Controller\Adminhtml\Promo\Catalog
      * @return void
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->getRequest()->getPostValue()) {
             try {
diff --git a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Index.php b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Index.php
index 646e3cf6c37..4b8f29d1444 100644
--- a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Index.php
+++ b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Index.php
@@ -19,7 +19,7 @@ class Index extends \Magento\Backend\App\Action
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $this->_setActiveMenu('Magento_CatalogRule::promo');
diff --git a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Widget/CategoriesJson.php b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Widget/CategoriesJson.php
index 592d6f0bbc2..ae1c964761f 100644
--- a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Widget/CategoriesJson.php
+++ b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Widget/CategoriesJson.php
@@ -68,7 +68,7 @@ class CategoriesJson extends \Magento\CatalogRule\Controller\Adminhtml\Promo\Wid
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $categoryId = (int)$this->getRequest()->getPost('id');
         if ($categoryId) {
diff --git a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Widget/Chooser.php b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Widget/Chooser.php
index ea081c9c436..7c764a2452c 100644
--- a/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Widget/Chooser.php
+++ b/app/code/Magento/CatalogRule/Controller/Adminhtml/Promo/Widget/Chooser.php
@@ -13,7 +13,7 @@ class Chooser extends \Magento\CatalogRule\Controller\Adminhtml\Promo\Widget
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $request = $this->getRequest();
 
diff --git a/app/code/Magento/CatalogSearch/Controller/Advanced/Index.php b/app/code/Magento/CatalogSearch/Controller/Advanced/Index.php
index dfc0013e6e2..961a4cd73d7 100644
--- a/app/code/Magento/CatalogSearch/Controller/Advanced/Index.php
+++ b/app/code/Magento/CatalogSearch/Controller/Advanced/Index.php
@@ -11,7 +11,7 @@ class Index extends \Magento\Framework\App\Action\Action
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $this->_view->renderLayout();
diff --git a/app/code/Magento/CatalogSearch/Controller/Advanced/Result.php b/app/code/Magento/CatalogSearch/Controller/Advanced/Result.php
index d98ff86f779..e5c71f294f6 100644
--- a/app/code/Magento/CatalogSearch/Controller/Advanced/Result.php
+++ b/app/code/Magento/CatalogSearch/Controller/Advanced/Result.php
@@ -47,7 +47,7 @@ class Result extends \Magento\Framework\App\Action\Action
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->_catalogSearchAdvanced->addFilters($this->getRequest()->getQueryValue());
diff --git a/app/code/Magento/CatalogSearch/Controller/Result/Index.php b/app/code/Magento/CatalogSearch/Controller/Result/Index.php
index 4a682161c6d..92221b02af4 100644
--- a/app/code/Magento/CatalogSearch/Controller/Result/Index.php
+++ b/app/code/Magento/CatalogSearch/Controller/Result/Index.php
@@ -65,7 +65,7 @@ class Index extends \Magento\Framework\App\Action\Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->layerResolver->create(Resolver::CATALOG_LAYER_SEARCH);
         /* @var $query \Magento\Search\Model\Query */
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Controller/Advanced/ResultTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Controller/Advanced/ResultTest.php
index 529b92bf436..f90be4e218f 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Controller/Advanced/ResultTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Controller/Advanced/ResultTest.php
@@ -50,6 +50,6 @@ class ResultTest extends \PHPUnit_Framework_TestCase
             'Magento\CatalogSearch\Controller\Advanced\Result',
             ['context' => $context, 'catalogSearchAdvanced' => $catalogSearchAdvanced]
         );
-        $instance->execute();
+        $instance->executeInternal();
     }
 }
diff --git a/app/code/Magento/CatalogWidget/Controller/Adminhtml/Product/Widget/Conditions.php b/app/code/Magento/CatalogWidget/Controller/Adminhtml/Product/Widget/Conditions.php
index dd779b03510..f2a0dde38a0 100644
--- a/app/code/Magento/CatalogWidget/Controller/Adminhtml/Product/Widget/Conditions.php
+++ b/app/code/Magento/CatalogWidget/Controller/Adminhtml/Product/Widget/Conditions.php
@@ -32,7 +32,7 @@ class Conditions extends \Magento\CatalogWidget\Controller\Adminhtml\Product\Wid
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = $this->getRequest()->getParam('id');
         $typeData = explode('|', str_replace('-', '/', $this->getRequest()->getParam('type')));
diff --git a/app/code/Magento/CatalogWidget/Test/Unit/Controller/Adminhtml/Product/Widget/ConditionsTest.php b/app/code/Magento/CatalogWidget/Test/Unit/Controller/Adminhtml/Product/Widget/ConditionsTest.php
index 984b420c0bd..5b76de4974c 100644
--- a/app/code/Magento/CatalogWidget/Test/Unit/Controller/Adminhtml/Product/Widget/ConditionsTest.php
+++ b/app/code/Magento/CatalogWidget/Test/Unit/Controller/Adminhtml/Product/Widget/ConditionsTest.php
@@ -94,6 +94,6 @@ class ConditionsTest extends \PHPUnit_Framework_TestCase
         $this->objectManager->expects($this->once())->method('create')->will($this->returnValue($condition));
 
         $this->response->expects($this->once())->method('setBody')->with('<some_html>')->will($this->returnSelf());
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Checkout/Controller/Account/Create.php b/app/code/Magento/Checkout/Controller/Account/Create.php
index 4e8514699c1..c6f7ccb7c60 100644
--- a/app/code/Magento/Checkout/Controller/Account/Create.php
+++ b/app/code/Magento/Checkout/Controller/Account/Create.php
@@ -52,7 +52,7 @@ class Create extends \Magento\Framework\App\Action\Action
      * @throws \Exception
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->customerSession->isLoggedIn()) {
             $this->messageManager->addError(__("Customer is already registered"));
diff --git a/app/code/Magento/Checkout/Controller/Cart/Add.php b/app/code/Magento/Checkout/Controller/Cart/Add.php
index 6e4b71de00f..1106eab2282 100644
--- a/app/code/Magento/Checkout/Controller/Cart/Add.php
+++ b/app/code/Magento/Checkout/Controller/Cart/Add.php
@@ -75,7 +75,7 @@ class Add extends \Magento\Checkout\Controller\Cart
      * @return \Magento\Framework\Controller\Result\Redirect
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->_formKeyValidator->validate($this->getRequest())) {
             return $this->resultRedirectFactory->create()->setPath('*/*/');
diff --git a/app/code/Magento/Checkout/Controller/Cart/Addgroup.php b/app/code/Magento/Checkout/Controller/Cart/Addgroup.php
index 0665e0c2915..abaed132df4 100644
--- a/app/code/Magento/Checkout/Controller/Cart/Addgroup.php
+++ b/app/code/Magento/Checkout/Controller/Cart/Addgroup.php
@@ -11,7 +11,7 @@ class Addgroup extends \Magento\Checkout\Controller\Cart
     /**
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $orderItemIds = $this->getRequest()->getParam('order_items', []);
         if (is_array($orderItemIds)) {
diff --git a/app/code/Magento/Checkout/Controller/Cart/Configure.php b/app/code/Magento/Checkout/Controller/Cart/Configure.php
index bd614ec3110..f1086d86f2c 100644
--- a/app/code/Magento/Checkout/Controller/Cart/Configure.php
+++ b/app/code/Magento/Checkout/Controller/Cart/Configure.php
@@ -48,7 +48,7 @@ class Configure extends \Magento\Checkout\Controller\Cart
      *
      * @return \Magento\Framework\View\Result\Page|\Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         // Extract item and product to configure
         $id = (int)$this->getRequest()->getParam('id');
diff --git a/app/code/Magento/Checkout/Controller/Cart/CouponPost.php b/app/code/Magento/Checkout/Controller/Cart/CouponPost.php
index 2496709c162..421effe5552 100644
--- a/app/code/Magento/Checkout/Controller/Cart/CouponPost.php
+++ b/app/code/Magento/Checkout/Controller/Cart/CouponPost.php
@@ -61,7 +61,7 @@ class CouponPost extends \Magento\Checkout\Controller\Cart
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         $couponCode = $this->getRequest()->getParam('remove') == 1
             ? ''
diff --git a/app/code/Magento/Checkout/Controller/Cart/Delete.php b/app/code/Magento/Checkout/Controller/Cart/Delete.php
index 3d73a5f0c20..873133f3cbb 100644
--- a/app/code/Magento/Checkout/Controller/Cart/Delete.php
+++ b/app/code/Magento/Checkout/Controller/Cart/Delete.php
@@ -13,7 +13,7 @@ class Delete extends \Magento\Checkout\Controller\Cart
      *
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = (int)$this->getRequest()->getParam('id');
         if ($id) {
diff --git a/app/code/Magento/Checkout/Controller/Cart/EstimatePost.php b/app/code/Magento/Checkout/Controller/Cart/EstimatePost.php
index 2ce3a8805e8..e7808167252 100644
--- a/app/code/Magento/Checkout/Controller/Cart/EstimatePost.php
+++ b/app/code/Magento/Checkout/Controller/Cart/EstimatePost.php
@@ -50,7 +50,7 @@ class EstimatePost extends \Magento\Checkout\Controller\Cart
      *
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $country = (string)$this->getRequest()->getParam('country_id');
         $postcode = (string)$this->getRequest()->getParam('estimate_postcode');
diff --git a/app/code/Magento/Checkout/Controller/Cart/EstimateUpdatePost.php b/app/code/Magento/Checkout/Controller/Cart/EstimateUpdatePost.php
index 0dcd81a8e01..da121bf5cb4 100644
--- a/app/code/Magento/Checkout/Controller/Cart/EstimateUpdatePost.php
+++ b/app/code/Magento/Checkout/Controller/Cart/EstimateUpdatePost.php
@@ -11,7 +11,7 @@ class EstimateUpdatePost extends \Magento\Checkout\Controller\Cart
     /**
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $code = (string)$this->getRequest()->getParam('estimate_method');
         if (!empty($code)) {
diff --git a/app/code/Magento/Checkout/Controller/Cart/Index.php b/app/code/Magento/Checkout/Controller/Cart/Index.php
index 1486c2b8487..3a6ffc2d9de 100644
--- a/app/code/Magento/Checkout/Controller/Cart/Index.php
+++ b/app/code/Magento/Checkout/Controller/Cart/Index.php
@@ -49,7 +49,7 @@ class Index extends \Magento\Checkout\Controller\Cart
      *
      * @return \Magento\Framework\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultPage = $this->resultPageFactory->create();
         $resultPage->getConfig()->getTitle()->set(__('Shopping Cart'));
diff --git a/app/code/Magento/Checkout/Controller/Cart/UpdateItemOptions.php b/app/code/Magento/Checkout/Controller/Cart/UpdateItemOptions.php
index c3e38a96dd3..9b5dcc0f396 100644
--- a/app/code/Magento/Checkout/Controller/Cart/UpdateItemOptions.php
+++ b/app/code/Magento/Checkout/Controller/Cart/UpdateItemOptions.php
@@ -15,7 +15,7 @@ class UpdateItemOptions extends \Magento\Checkout\Controller\Cart
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = (int)$this->getRequest()->getParam('id');
         $params = $this->getRequest()->getParams();
diff --git a/app/code/Magento/Checkout/Controller/Cart/UpdatePost.php b/app/code/Magento/Checkout/Controller/Cart/UpdatePost.php
index 71685ea0005..73261faf037 100644
--- a/app/code/Magento/Checkout/Controller/Cart/UpdatePost.php
+++ b/app/code/Magento/Checkout/Controller/Cart/UpdatePost.php
@@ -64,7 +64,7 @@ class UpdatePost extends \Magento\Checkout\Controller\Cart
      *
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->_formKeyValidator->validate($this->getRequest())) {
             return $this->resultRedirectFactory->create()->setPath('*/*/');
diff --git a/app/code/Magento/Checkout/Controller/Index/Index.php b/app/code/Magento/Checkout/Controller/Index/Index.php
index 0bb9c2fe851..73de6be7b12 100644
--- a/app/code/Magento/Checkout/Controller/Index/Index.php
+++ b/app/code/Magento/Checkout/Controller/Index/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Checkout\Controller\Onepage
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Checkout\Helper\Data $checkoutHelper */
         $checkoutHelper = $this->_objectManager->get('Magento\Checkout\Helper\Data');
diff --git a/app/code/Magento/Checkout/Controller/Noroute/Index.php b/app/code/Magento/Checkout/Controller/Noroute/Index.php
index e8925820094..6c1821f30ed 100644
--- a/app/code/Magento/Checkout/Controller/Noroute/Index.php
+++ b/app/code/Magento/Checkout/Controller/Noroute/Index.php
@@ -17,7 +17,7 @@ class Index extends \Magento\Framework\App\Action\Action
      * @return void
      * @codeCoverageIgnore
      */
-    public function execute()
+    public function executeInternal()
     {
         throw new NotFoundException(__('Page not found.'));
     }
diff --git a/app/code/Magento/Checkout/Controller/Onepage.php b/app/code/Magento/Checkout/Controller/Onepage.php
index 38e141855f3..2bfbf61db7a 100644
--- a/app/code/Magento/Checkout/Controller/Onepage.php
+++ b/app/code/Magento/Checkout/Controller/Onepage.php
@@ -141,7 +141,7 @@ abstract class Onepage extends Action
      * @return \Magento\Framework\App\ResponseInterface
      * @throws \Magento\Framework\Exception\NotFoundException
      */
-    public function dispatch(RequestInterface $request)
+    public function execute(RequestInterface $request)
     {
         $this->_request = $request;
         $result = $this->_preDispatchValidateCustomer();
@@ -158,7 +158,7 @@ abstract class Onepage extends Action
         if (!$this->_canShowForUnregisteredUsers()) {
             throw new NotFoundException(__('Page not found.'));
         }
-        return parent::dispatch($request);
+        return parent::execute($request);
     }
 
     /**
diff --git a/app/code/Magento/Checkout/Controller/Onepage/Failure.php b/app/code/Magento/Checkout/Controller/Onepage/Failure.php
index e6155dbea29..dcff66c6c29 100644
--- a/app/code/Magento/Checkout/Controller/Onepage/Failure.php
+++ b/app/code/Magento/Checkout/Controller/Onepage/Failure.php
@@ -11,7 +11,7 @@ class Failure extends \Magento\Checkout\Controller\Onepage
     /**
      * @return \Magento\Framework\View\Result\Page|\Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $lastQuoteId = $this->getOnepage()->getCheckout()->getLastQuoteId();
         $lastOrderId = $this->getOnepage()->getCheckout()->getLastOrderId();
diff --git a/app/code/Magento/Checkout/Controller/Onepage/SaveOrder.php b/app/code/Magento/Checkout/Controller/Onepage/SaveOrder.php
index 6c66fd165de..55fded81c19 100644
--- a/app/code/Magento/Checkout/Controller/Onepage/SaveOrder.php
+++ b/app/code/Magento/Checkout/Controller/Onepage/SaveOrder.php
@@ -17,7 +17,7 @@ class SaveOrder extends \Magento\Checkout\Controller\Onepage
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->_formKeyValidator->validate($this->getRequest())) {
             return $this->resultRedirectFactory->create()->setPath('*/*/');
diff --git a/app/code/Magento/Checkout/Controller/Onepage/Success.php b/app/code/Magento/Checkout/Controller/Onepage/Success.php
index 6287f478544..18155e5c61d 100644
--- a/app/code/Magento/Checkout/Controller/Onepage/Success.php
+++ b/app/code/Magento/Checkout/Controller/Onepage/Success.php
@@ -13,7 +13,7 @@ class Success extends \Magento\Checkout\Controller\Onepage
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $session = $this->getOnepage()->getCheckout();
         if (!$this->_objectManager->get('Magento\Checkout\Model\Session\SuccessValidator')->isValid()) {
diff --git a/app/code/Magento/Checkout/Controller/ShippingRates/Index.php b/app/code/Magento/Checkout/Controller/ShippingRates/Index.php
index c407b0bab65..ea8a4da9076 100644
--- a/app/code/Magento/Checkout/Controller/ShippingRates/Index.php
+++ b/app/code/Magento/Checkout/Controller/ShippingRates/Index.php
@@ -41,7 +41,7 @@ class Index extends \Magento\Framework\App\Action\Action
      * @return \Magento\Framework\Controller\ResultInterface
      * @throws Action\NotFoundException
      */
-    public function execute()
+    public function executeInternal()
     {
         $quote = $this->checkoutSession->getQuote();
         $address = $quote->getShippingAddress();
diff --git a/app/code/Magento/Checkout/Controller/Sidebar/RemoveItem.php b/app/code/Magento/Checkout/Controller/Sidebar/RemoveItem.php
index 0eac880fcbd..307cc0ae49a 100644
--- a/app/code/Magento/Checkout/Controller/Sidebar/RemoveItem.php
+++ b/app/code/Magento/Checkout/Controller/Sidebar/RemoveItem.php
@@ -61,7 +61,7 @@ class RemoveItem extends Action
     /**
      * @return $this
      */
-    public function execute()
+    public function executeInternal()
     {
         $itemId = (int)$this->getRequest()->getParam('item_id');
         try {
diff --git a/app/code/Magento/Checkout/Controller/Sidebar/UpdateItemQty.php b/app/code/Magento/Checkout/Controller/Sidebar/UpdateItemQty.php
index e5504082d6f..434276d6951 100644
--- a/app/code/Magento/Checkout/Controller/Sidebar/UpdateItemQty.php
+++ b/app/code/Magento/Checkout/Controller/Sidebar/UpdateItemQty.php
@@ -52,7 +52,7 @@ class UpdateItemQty extends Action
     /**
      * @return $this
      */
-    public function execute()
+    public function executeInternal()
     {
         $itemId = (int)$this->getRequest()->getParam('item_id');
         $itemQty = (int)$this->getRequest()->getParam('item_qty');
diff --git a/app/code/Magento/Checkout/Test/Unit/Controller/Account/CreateTest.php b/app/code/Magento/Checkout/Test/Unit/Controller/Account/CreateTest.php
index 2e3ce377ab7..43e765cea0a 100644
--- a/app/code/Magento/Checkout/Test/Unit/Controller/Account/CreateTest.php
+++ b/app/code/Magento/Checkout/Test/Unit/Controller/Account/CreateTest.php
@@ -65,7 +65,7 @@ class CreateTest extends \PHPUnit_Framework_TestCase
     {
         $this->customerSession->expects($this->once())->method('isLoggedIn')->will($this->returnValue(true));
         $this->messageManager->expects($this->once())->method('addError')->with();
-        $this->action->execute();
+        $this->action->executeInternal();
     }
 
     public function testExecute()
@@ -76,6 +76,6 @@ class CreateTest extends \PHPUnit_Framework_TestCase
         $this->orderCustomerService->expects($this->once())->method('create')->with(100)->will(
             $this->returnValue($customer)
         );
-        $this->action->execute();
+        $this->action->executeInternal();
     }
 }
diff --git a/app/code/Magento/Checkout/Test/Unit/Controller/Cart/ConfigureTest.php b/app/code/Magento/Checkout/Test/Unit/Controller/Cart/ConfigureTest.php
index 35fff77a2b4..9c2664a966a 100644
--- a/app/code/Magento/Checkout/Test/Unit/Controller/Cart/ConfigureTest.php
+++ b/app/code/Magento/Checkout/Test/Unit/Controller/Cart/ConfigureTest.php
@@ -162,7 +162,7 @@ class ConfigureTest extends \PHPUnit_Framework_TestCase
 
         $productMock->expects($this->exactly(2))->method('getId')->willReturn($actualProductId);
 
-        $this->assertSame($pageMock, $this->configureController->execute());
+        $this->assertSame($pageMock, $this->configureController->executeInternal());
     }
 
     /**
@@ -206,6 +206,6 @@ class ConfigureTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->with(ResultFactory::TYPE_REDIRECT, [])
             ->willReturn($this->resultRedirectMock);
-        $this->assertSame($this->resultRedirectMock, $this->configureController->execute());
+        $this->assertSame($this->resultRedirectMock, $this->configureController->executeInternal());
     }
 }
diff --git a/app/code/Magento/Checkout/Test/Unit/Controller/Cart/CouponPostTest.php b/app/code/Magento/Checkout/Test/Unit/Controller/Cart/CouponPostTest.php
index 99e3ccd1a7c..42453493e53 100644
--- a/app/code/Magento/Checkout/Test/Unit/Controller/Cart/CouponPostTest.php
+++ b/app/code/Magento/Checkout/Test/Unit/Controller/Cart/CouponPostTest.php
@@ -174,7 +174,7 @@ class CouponPostTest extends \PHPUnit_Framework_TestCase
             ->method('getQuote')
             ->willReturn($this->quote);
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     public function testExecuteWithGoodCouponAndItems()
@@ -232,7 +232,7 @@ class CouponPostTest extends \PHPUnit_Framework_TestCase
             ->method('get')
             ->willReturnSelf();
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     public function testExecuteWithGoodCouponAndNoItems()
@@ -286,7 +286,7 @@ class CouponPostTest extends \PHPUnit_Framework_TestCase
             ->method('get')
             ->willReturnSelf();
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     public function testExecuteWithBadCouponAndItems()
@@ -337,7 +337,7 @@ class CouponPostTest extends \PHPUnit_Framework_TestCase
             ->with('You canceled the coupon code.')
             ->willReturnSelf();
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     public function testExecuteWithBadCouponAndNoItems()
@@ -382,6 +382,6 @@ class CouponPostTest extends \PHPUnit_Framework_TestCase
             ->method('get')
             ->willReturnSelf();
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Checkout/Test/Unit/Controller/Cart/IndexTest.php b/app/code/Magento/Checkout/Test/Unit/Controller/Cart/IndexTest.php
index fc219940727..7fe1d10605d 100644
--- a/app/code/Magento/Checkout/Test/Unit/Controller/Cart/IndexTest.php
+++ b/app/code/Magento/Checkout/Test/Unit/Controller/Cart/IndexTest.php
@@ -156,7 +156,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
         $this->resultPageFactory->expects($this->once())
             ->method('create')
             ->willReturn($page);
-        $result = $this->controller->execute();
+        $result = $this->controller->executeInternal();
         $this->assertInstanceOf('Magento\Framework\View\Result\Page', $result);
     }
 }
diff --git a/app/code/Magento/Checkout/Test/Unit/Controller/Index/IndexTest.php b/app/code/Magento/Checkout/Test/Unit/Controller/Index/IndexTest.php
index c0f13dc4094..85d242087e6 100644
--- a/app/code/Magento/Checkout/Test/Unit/Controller/Index/IndexTest.php
+++ b/app/code/Magento/Checkout/Test/Unit/Controller/Index/IndexTest.php
@@ -192,7 +192,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
 
         //Expected outcomes
         $this->sessionMock->expects($this->once())->method('regenerateId');
-        $this->assertSame($this->resultPageMock, $this->model->execute());
+        $this->assertSame($this->resultPageMock, $this->model->executeInternal());
     }
 
     public function testOnepageCheckoutNotAvailable()
@@ -205,7 +205,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
             ->with($expectedPath)
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->model->execute());
+        $this->assertSame($this->resultRedirectMock, $this->model->executeInternal());
     }
 
     public function testInvalidQuote()
@@ -218,7 +218,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
             ->with($expectedPath)
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->model->execute());
+        $this->assertSame($this->resultRedirectMock, $this->model->executeInternal());
     }
 
     /**
diff --git a/app/code/Magento/Checkout/Test/Unit/Controller/OnepageTest.php b/app/code/Magento/Checkout/Test/Unit/Controller/OnepageTest.php
index 659fa90754e..8afa4c6326d 100644
--- a/app/code/Magento/Checkout/Test/Unit/Controller/OnepageTest.php
+++ b/app/code/Magento/Checkout/Test/Unit/Controller/OnepageTest.php
@@ -100,6 +100,6 @@ class OnepageTest extends \PHPUnit_Framework_TestCase
             ->method('getActionName')
             ->willReturn('index');
 
-        $this->assertEquals($this->response, $this->controller->dispatch($this->request));
+        $this->assertEquals($this->response, $this->controller->execute($this->request));
     }
 }
diff --git a/app/code/Magento/Checkout/Test/Unit/Controller/Sidebar/RemoveItemTest.php b/app/code/Magento/Checkout/Test/Unit/Controller/Sidebar/RemoveItemTest.php
index d2cf39386d2..4e8b5690ab1 100644
--- a/app/code/Magento/Checkout/Test/Unit/Controller/Sidebar/RemoveItemTest.php
+++ b/app/code/Magento/Checkout/Test/Unit/Controller/Sidebar/RemoveItemTest.php
@@ -113,7 +113,7 @@ class RemoveItemTest extends \PHPUnit_Framework_TestCase
             ->with('json encoded')
             ->willReturn('json represented');
 
-        $this->assertEquals('json represented', $this->removeItem->execute());
+        $this->assertEquals('json represented', $this->removeItem->executeInternal());
     }
 
     public function testExecuteWithLocalizedException()
@@ -153,7 +153,7 @@ class RemoveItemTest extends \PHPUnit_Framework_TestCase
             ->with('json encoded')
             ->willReturn('json represented');
 
-        $this->assertEquals('json represented', $this->removeItem->execute());
+        $this->assertEquals('json represented', $this->removeItem->executeInternal());
     }
 
     public function testExecuteWithException()
@@ -200,6 +200,6 @@ class RemoveItemTest extends \PHPUnit_Framework_TestCase
             ->with('json encoded')
             ->willReturn('json represented');
 
-        $this->assertEquals('json represented', $this->removeItem->execute());
+        $this->assertEquals('json represented', $this->removeItem->executeInternal());
     }
 }
diff --git a/app/code/Magento/Checkout/Test/Unit/Controller/Sidebar/UpdateItemQtyTest.php b/app/code/Magento/Checkout/Test/Unit/Controller/Sidebar/UpdateItemQtyTest.php
index b36cbed010b..dd666066f96 100644
--- a/app/code/Magento/Checkout/Test/Unit/Controller/Sidebar/UpdateItemQtyTest.php
+++ b/app/code/Magento/Checkout/Test/Unit/Controller/Sidebar/UpdateItemQtyTest.php
@@ -110,7 +110,7 @@ class UpdateItemQtyTest extends \PHPUnit_Framework_TestCase
             ->with('json encoded')
             ->willReturn('json represented');
 
-        $this->assertEquals('json represented', $this->updateItemQty->execute());
+        $this->assertEquals('json represented', $this->updateItemQty->executeInternal());
     }
 
     public function testExecuteWithLocalizedException()
@@ -154,7 +154,7 @@ class UpdateItemQtyTest extends \PHPUnit_Framework_TestCase
             ->with('json encoded')
             ->willReturn('json represented');
 
-        $this->assertEquals('json represented', $this->updateItemQty->execute());
+        $this->assertEquals('json represented', $this->updateItemQty->executeInternal());
     }
 
     public function testExecuteWithException()
@@ -205,6 +205,6 @@ class UpdateItemQtyTest extends \PHPUnit_Framework_TestCase
             ->with('json encoded')
             ->willReturn('json represented');
 
-        $this->assertEquals('json represented', $this->updateItemQty->execute());
+        $this->assertEquals('json represented', $this->updateItemQty->executeInternal());
     }
 }
diff --git a/app/code/Magento/Checkout/Test/Unit/Controller/Stub/OnepageStub.php b/app/code/Magento/Checkout/Test/Unit/Controller/Stub/OnepageStub.php
index 0ee81629337..01d5acd4222 100644
--- a/app/code/Magento/Checkout/Test/Unit/Controller/Stub/OnepageStub.php
+++ b/app/code/Magento/Checkout/Test/Unit/Controller/Stub/OnepageStub.php
@@ -8,7 +8,7 @@ namespace Magento\Checkout\Test\Unit\Controller\Stub;
 
 class OnepageStub extends \Magento\Checkout\Controller\Onepage
 {
-    protected function execute()
+    protected function executeInternal()
     {
         // Empty method stub for test
     }
diff --git a/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/Delete.php b/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/Delete.php
index 8ca81a642df..72b54d8986c 100644
--- a/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/Delete.php
+++ b/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/Delete.php
@@ -11,7 +11,7 @@ class Delete extends \Magento\CheckoutAgreements\Controller\Adminhtml\Agreement
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = (int)$this->getRequest()->getParam('id');
         $model = $this->_objectManager->get('Magento\CheckoutAgreements\Model\Agreement')->load($id);
diff --git a/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/Edit.php b/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/Edit.php
index 01fcef39eaf..117905e8c50 100644
--- a/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/Edit.php
+++ b/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/Edit.php
@@ -12,7 +12,7 @@ class Edit extends \Magento\CheckoutAgreements\Controller\Adminhtml\Agreement
      * @return void
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = $this->getRequest()->getParam('id');
         $agreementModel = $this->_objectManager->create('Magento\CheckoutAgreements\Model\Agreement');
diff --git a/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/Index.php b/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/Index.php
index 5327672f749..e290737d272 100644
--- a/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/Index.php
+++ b/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/Index.php
@@ -11,7 +11,7 @@ class Index extends \Magento\CheckoutAgreements\Controller\Adminhtml\Agreement
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initAction()->_addContent(
             $this->_view->getLayout()->createBlock('Magento\CheckoutAgreements\Block\Adminhtml\Agreement')
diff --git a/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/NewAction.php b/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/NewAction.php
index 49c4368bc67..666d8e90763 100644
--- a/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/NewAction.php
+++ b/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/NewAction.php
@@ -12,7 +12,7 @@ class NewAction extends \Magento\CheckoutAgreements\Controller\Adminhtml\Agreeme
      * @return void
      * @codeCoverageIgnore
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_forward('edit');
     }
diff --git a/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/Save.php b/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/Save.php
index ffdfd74395d..d85847caab2 100644
--- a/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/Save.php
+++ b/app/code/Magento/CheckoutAgreements/Controller/Adminhtml/Agreement/Save.php
@@ -11,7 +11,7 @@ class Save extends \Magento\CheckoutAgreements\Controller\Adminhtml\Agreement
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $postData = $this->getRequest()->getPostValue();
         if ($postData) {
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Block/Delete.php b/app/code/Magento/Cms/Controller/Adminhtml/Block/Delete.php
index 107b5f4eb9e..3a11c2b4ff0 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Block/Delete.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Block/Delete.php
@@ -13,7 +13,7 @@ class Delete extends \Magento\Cms\Controller\Adminhtml\Block
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultRedirectFactory->create();
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Block/Edit.php b/app/code/Magento/Cms/Controller/Adminhtml/Block/Edit.php
index bc8f586567c..bd0a0fbb62e 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Block/Edit.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Block/Edit.php
@@ -33,7 +33,7 @@ class Edit extends \Magento\Cms\Controller\Adminhtml\Block
      * @return \Magento\Framework\Controller\ResultInterface
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         // 1. Get ID and create model
         $id = $this->getRequest()->getParam('block_id');
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Block/Index.php b/app/code/Magento/Cms/Controller/Adminhtml/Block/Index.php
index b81e879b917..5e36a87e5a7 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Block/Index.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Block/Index.php
@@ -32,7 +32,7 @@ class Index extends \Magento\Cms\Controller\Adminhtml\Block
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Block/InlineEdit.php b/app/code/Magento/Cms/Controller/Adminhtml/Block/InlineEdit.php
index 6ce12cfbf02..4d8a7f238bc 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Block/InlineEdit.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Block/InlineEdit.php
@@ -36,7 +36,7 @@ class InlineEdit extends \Magento\Backend\App\Action
     /**
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Json $resultJson */
         $resultJson = $this->jsonFactory->create();
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Block/MassDelete.php b/app/code/Magento/Cms/Controller/Adminhtml/Block/MassDelete.php
index a173e9f3dac..3b45c6902d2 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Block/MassDelete.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Block/MassDelete.php
@@ -44,7 +44,7 @@ class MassDelete extends \Magento\Backend\App\Action
      * @return \Magento\Backend\Model\View\Result\Redirect
      * @throws \Magento\Framework\Exception\LocalizedException|\Exception
      */
-    public function execute()
+    public function executeInternal()
     {
         $collection = $this->filter->getCollection($this->collectionFactory->create());
         $collectionSize = $collection->getSize();
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Block/NewAction.php b/app/code/Magento/Cms/Controller/Adminhtml/Block/NewAction.php
index bc87b5cb808..29e37ffeaef 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Block/NewAction.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Block/NewAction.php
@@ -32,7 +32,7 @@ class NewAction extends \Magento\Cms\Controller\Adminhtml\Block
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Forward $resultForward */
         $resultForward = $this->resultForwardFactory->create();
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Block/Save.php b/app/code/Magento/Cms/Controller/Adminhtml/Block/Save.php
index c6e17f07cbf..9582e89c995 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Block/Save.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Block/Save.php
@@ -13,7 +13,7 @@ class Save extends \Magento\Cms\Controller\Adminhtml\Block
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultRedirectFactory->create();
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Block/Widget/Chooser.php b/app/code/Magento/Cms/Controller/Adminhtml/Block/Widget/Chooser.php
index e785e256d97..363805df349 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Block/Widget/Chooser.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Block/Widget/Chooser.php
@@ -39,7 +39,7 @@ class Chooser extends \Magento\Backend\App\Action
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\View\Layout $layout */
         $layout = $this->layoutFactory->create();
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/Delete.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/Delete.php
index 278515e3f10..3ae84ce63e7 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/Delete.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/Delete.php
@@ -21,7 +21,7 @@ class Delete extends \Magento\Backend\App\Action
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         // check if we know what should be deleted
         $id = $this->getRequest()->getParam('page_id');
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/Edit.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/Edit.php
index c53641376c4..716e51bc0b4 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/Edit.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/Edit.php
@@ -67,7 +67,7 @@ class Edit extends \Magento\Backend\App\Action
      * @return \Magento\Backend\Model\View\Result\Page|\Magento\Backend\Model\View\Result\Redirect
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         // 1. Get ID and create model
         $id = $this->getRequest()->getParam('page_id');
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/Index.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/Index.php
index 61405419a00..7be6ad88b7b 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/Index.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/Index.php
@@ -42,7 +42,7 @@ class Index extends \Magento\Backend\App\Action
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/InlineEdit.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/InlineEdit.php
index 52882ff71fd..762d5384afe 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/InlineEdit.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/InlineEdit.php
@@ -47,7 +47,7 @@ class InlineEdit extends \Magento\Backend\App\Action
     /**
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Json $resultJson */
         $resultJson = $this->jsonFactory->create();
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php
index 45314ebf2d9..9ab84769739 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php
@@ -43,7 +43,7 @@ class MassDelete extends \Magento\Backend\App\Action
      * @return \Magento\Backend\Model\View\Result\Redirect
      * @throws \Magento\Framework\Exception\LocalizedException|\Exception
      */
-    public function execute()
+    public function executeInternal()
     {
         $collection = $this->filter->getCollection($this->collectionFactory->create());
         $collectionSize = $collection->getSize();
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDisable.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDisable.php
index 8d8da00375c..cda4e802f06 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDisable.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDisable.php
@@ -43,7 +43,7 @@ class MassDisable extends \Magento\Backend\App\Action
      * @return \Magento\Backend\Model\View\Result\Redirect
      * @throws \Magento\Framework\Exception\LocalizedException|\Exception
      */
-    public function execute()
+    public function executeInternal()
     {
         $collection = $this->filter->getCollection($this->collectionFactory->create());
 
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassEnable.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassEnable.php
index aa44d34ea78..a904249e653 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassEnable.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassEnable.php
@@ -43,7 +43,7 @@ class MassEnable extends \Magento\Backend\App\Action
      * @return \Magento\Backend\Model\View\Result\Redirect
      * @throws \Magento\Framework\Exception\LocalizedException|\Exception
      */
-    public function execute()
+    public function executeInternal()
     {
         $collection = $this->filter->getCollection($this->collectionFactory->create());
 
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/NewAction.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/NewAction.php
index 100c0b05f2a..9f816a59252 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/NewAction.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/NewAction.php
@@ -38,7 +38,7 @@ class NewAction extends \Magento\Backend\App\Action
      *
      * @return \Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Forward $resultForward */
         $resultForward = $this->resultForwardFactory->create();
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/Save.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/Save.php
index 6858ef9cadf..276073e1e96 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/Save.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/Save.php
@@ -38,7 +38,7 @@ class Save extends \Magento\Backend\App\Action
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $data = $this->getRequest()->getPostValue();
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/Widget/Chooser.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/Widget/Chooser.php
index 49e8206f822..493ae73a83d 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/Widget/Chooser.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/Widget/Chooser.php
@@ -40,7 +40,7 @@ class Chooser extends \Magento\Backend\App\Action
      *
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         $uniqId = $this->getRequest()->getParam('uniq_id');
         /** @var \Magento\Framework\View\Layout $layout */
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Directive.php b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Directive.php
index 51d1fc3502b..05e6350da2b 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Directive.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Directive.php
@@ -40,7 +40,7 @@ class Directive extends \Magento\Backend\App\Action
      *
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         $directive = $this->getRequest()->getParam('___directive');
         $directive = $this->urlDecoder->decode($directive);
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/Contents.php b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/Contents.php
index 0b115525837..05c8912acf8 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/Contents.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/Contents.php
@@ -53,7 +53,7 @@ class Contents extends \Magento\Cms\Controller\Adminhtml\Wysiwyg\Images
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->_initAction()->_saveSessionCurrentPath();
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFiles.php b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFiles.php
index 73389122633..1af77052535 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFiles.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFiles.php
@@ -43,7 +43,7 @@ class DeleteFiles extends \Magento\Cms\Controller\Adminhtml\Wysiwyg\Images
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             if (!$this->getRequest()->isPost()) {
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFolder.php b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFolder.php
index 2566d3159e4..45a85b1d009 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFolder.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFolder.php
@@ -40,7 +40,7 @@ class DeleteFolder extends \Magento\Cms\Controller\Adminhtml\Wysiwyg\Images
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $path = $this->getStorage()->getCmsWysiwygImages()->getCurrentPath();
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/Index.php b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/Index.php
index 3c22b5fbcb0..eacf2cb6268 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/Index.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/Index.php
@@ -32,7 +32,7 @@ class Index extends \Magento\Cms\Controller\Adminhtml\Wysiwyg\Images
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $storeId = (int)$this->getRequest()->getParam('store');
 
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/NewFolder.php b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/NewFolder.php
index 24240b5ab25..8077f38a5a4 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/NewFolder.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/NewFolder.php
@@ -32,7 +32,7 @@ class NewFolder extends \Magento\Cms\Controller\Adminhtml\Wysiwyg\Images
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->_initAction();
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/OnInsert.php b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/OnInsert.php
index 738cba1295e..b0d4818b940 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/OnInsert.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/OnInsert.php
@@ -32,7 +32,7 @@ class OnInsert extends \Magento\Cms\Controller\Adminhtml\Wysiwyg\Images
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $helper = $this->_objectManager->get('Magento\Cms\Helper\Wysiwyg\Images');
         $storeId = $this->getRequest()->getParam('store');
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/Thumbnail.php b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/Thumbnail.php
index a5a2d6bbc2a..9412c2471a0 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/Thumbnail.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/Thumbnail.php
@@ -35,7 +35,7 @@ class Thumbnail extends \Magento\Cms\Controller\Adminhtml\Wysiwyg\Images
      *
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         $file = $this->getRequest()->getParam('file');
         $file = $this->_objectManager->get('Magento\Cms\Helper\Wysiwyg\Images')->idDecode($file);
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/TreeJson.php b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/TreeJson.php
index 9d70dd5a038..1690cb3d708 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/TreeJson.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/TreeJson.php
@@ -40,7 +40,7 @@ class TreeJson extends \Magento\Cms\Controller\Adminhtml\Wysiwyg\Images
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Json $resultJson */
         $resultJson = $this->resultJsonFactory->create();
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/Upload.php b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/Upload.php
index b05ff1ac92b..0811d0572db 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/Upload.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/Upload.php
@@ -32,7 +32,7 @@ class Upload extends \Magento\Cms\Controller\Adminhtml\Wysiwyg\Images
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->_initAction();
diff --git a/app/code/Magento/Cms/Controller/Index/DefaultNoRoute.php b/app/code/Magento/Cms/Controller/Index/DefaultNoRoute.php
index 91cb0939634..51c6ec15a24 100644
--- a/app/code/Magento/Cms/Controller/Index/DefaultNoRoute.php
+++ b/app/code/Magento/Cms/Controller/Index/DefaultNoRoute.php
@@ -27,7 +27,7 @@ class DefaultNoRoute extends \Magento\Framework\App\Action\Action
     /**
      * @return \Magento\Framework\View\Result\LayoutFactory
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultLayout = $this->resultPageFactory->create();
         $resultLayout->setStatusHeader(404, '1.1', 'Not Found');
diff --git a/app/code/Magento/Cms/Controller/Index/Index.php b/app/code/Magento/Cms/Controller/Index/Index.php
index fe007e0d517..969ad75a366 100644
--- a/app/code/Magento/Cms/Controller/Index/Index.php
+++ b/app/code/Magento/Cms/Controller/Index/Index.php
@@ -32,7 +32,7 @@ class Index extends \Magento\Framework\App\Action\Action
      * @return \Magento\Framework\Controller\Result\Forward
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function execute($coreRoute = null)
+    public function executeInternal($coreRoute = null)
     {
         $pageId = $this->_objectManager->get(
             'Magento\Framework\App\Config\ScopeConfigInterface'
diff --git a/app/code/Magento/Cms/Controller/Noroute/Index.php b/app/code/Magento/Cms/Controller/Noroute/Index.php
index 18c4d218147..16d67c38a81 100644
--- a/app/code/Magento/Cms/Controller/Noroute/Index.php
+++ b/app/code/Magento/Cms/Controller/Noroute/Index.php
@@ -30,7 +30,7 @@ class Index extends \Magento\Framework\App\Action\Action
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $pageId = $this->_objectManager->get(
             'Magento\Framework\App\Config\ScopeConfigInterface',
diff --git a/app/code/Magento/Cms/Controller/Page/View.php b/app/code/Magento/Cms/Controller/Page/View.php
index 4775fc3fe93..0c185380200 100644
--- a/app/code/Magento/Cms/Controller/Page/View.php
+++ b/app/code/Magento/Cms/Controller/Page/View.php
@@ -30,7 +30,7 @@ class View extends \Magento\Framework\App\Action\Action
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $pageId = $this->getRequest()->getParam('page_id', $this->getRequest()->getParam('id', false));
         $resultPage = $this->_objectManager->get('Magento\Cms\Helper\Page')->prepareResultPage($this, $pageId);
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/DeleteTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/DeleteTest.php
index c32d11572cf..08c23452659 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/DeleteTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/DeleteTest.php
@@ -148,7 +148,7 @@ class DeleteTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/')
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->deleteController->execute());
+        $this->assertSame($this->resultRedirectMock, $this->deleteController->executeInternal());
     }
 
     public function testDeleteActionNoId()
@@ -168,7 +168,7 @@ class DeleteTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/')
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->deleteController->execute());
+        $this->assertSame($this->resultRedirectMock, $this->deleteController->executeInternal());
     }
 
     public function testDeleteActionThrowsException()
@@ -195,6 +195,6 @@ class DeleteTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/edit', ['block_id' => $this->blockId])
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->deleteController->execute());
+        $this->assertSame($this->resultRedirectMock, $this->deleteController->executeInternal());
     }
 }
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/EditTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/EditTest.php
index b2432abc0cb..a48b5b69ea8 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/EditTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/EditTest.php
@@ -154,7 +154,7 @@ class EditTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/')
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->editController->execute());
+        $this->assertSame($this->resultRedirectMock, $this->editController->executeInternal());
     }
 
     /**
@@ -220,7 +220,7 @@ class EditTest extends \PHPUnit_Framework_TestCase
             ->method('getConfig')
             ->willReturn($pageConfigMock);
 
-        $this->assertSame($resultPageMock, $this->editController->execute());
+        $this->assertSame($resultPageMock, $this->editController->executeInternal());
     }
 
     /**
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php
index 81164feafac..4c52ac86c94 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php
@@ -80,7 +80,7 @@ class MassDeleteTest extends AbstractMassActionTest
             ->with('*/*/')
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->massDeleteController->execute());
+        $this->assertSame($this->resultRedirectMock, $this->massDeleteController->executeInternal());
     }
 
     /**
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/SaveTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/SaveTest.php
index 0a1c7be6c95..04f6ac3f081 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/SaveTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/SaveTest.php
@@ -216,14 +216,14 @@ class SaveTest extends \PHPUnit_Framework_TestCase
 
         $this->resultRedirect->expects($this->atLeastOnce())->method('setPath')->with('*/*/') ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirect, $this->saveController->execute());
+        $this->assertSame($this->resultRedirect, $this->saveController->executeInternal());
     }
 
     public function testSaveActionWithoutData()
     {
         $this->requestMock->expects($this->any())->method('getPostValue')->willReturn(false);
         $this->resultRedirect->expects($this->atLeastOnce())->method('setPath')->with('*/*/') ->willReturnSelf();
-        $this->assertSame($this->resultRedirect, $this->saveController->execute());
+        $this->assertSame($this->resultRedirect, $this->saveController->executeInternal());
     }
 
     public function testSaveActionNoId()
@@ -256,7 +256,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
 
         $this->resultRedirect->expects($this->atLeastOnce())->method('setPath')->with('*/*/') ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirect, $this->saveController->execute());
+        $this->assertSame($this->resultRedirect, $this->saveController->executeInternal());
     }
 
     public function testSaveAndContinue()
@@ -303,7 +303,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/edit', ['block_id' => $this->blockId])
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirect, $this->saveController->execute());
+        $this->assertSame($this->resultRedirect, $this->saveController->executeInternal());
     }
 
     public function testSaveActionThrowsException()
@@ -352,6 +352,6 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/edit', ['block_id' => $this->blockId])
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirect, $this->saveController->execute());
+        $this->assertSame($this->resultRedirect, $this->saveController->executeInternal());
     }
 }
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/DeleteTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/DeleteTest.php
index 4d2b25a708d..e218e22421c 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/DeleteTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/DeleteTest.php
@@ -146,7 +146,7 @@ class DeleteTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/')
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->deleteController->execute());
+        $this->assertSame($this->resultRedirectMock, $this->deleteController->executeInternal());
     }
 
     public function testDeleteActionNoId()
@@ -166,7 +166,7 @@ class DeleteTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/')
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->deleteController->execute());
+        $this->assertSame($this->resultRedirectMock, $this->deleteController->executeInternal());
     }
 
     public function testDeleteActionThrowsException()
@@ -210,6 +210,6 @@ class DeleteTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/edit', ['page_id' => $this->pageId])
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->deleteController->execute());
+        $this->assertSame($this->resultRedirectMock, $this->deleteController->executeInternal());
     }
 }
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/InlineEditTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/InlineEditTest.php
index 8402fbc8f3b..3024c271a3e 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/InlineEditTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/InlineEditTest.php
@@ -163,7 +163,7 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase
             ])
             ->willReturnSelf();
 
-        $this->assertSame($this->resultJson, $this->controller->execute());
+        $this->assertSame($this->resultJson, $this->controller->executeInternal());
     }
 
     public function testExecuteWithRuntimeException()
@@ -184,7 +184,7 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase
             ])
             ->willReturnSelf();
 
-        $this->assertSame($this->resultJson, $this->controller->execute());
+        $this->assertSame($this->resultJson, $this->controller->executeInternal());
     }
 
     public function testExecuteWithException()
@@ -205,7 +205,7 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase
             ])
             ->willReturnSelf();
 
-        $this->assertSame($this->resultJson, $this->controller->execute());
+        $this->assertSame($this->resultJson, $this->controller->executeInternal());
     }
 
     public function testExecuteWithoutData()
@@ -231,7 +231,7 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase
             ])
             ->willReturnSelf();
 
-        $this->assertSame($this->resultJson, $this->controller->execute());
+        $this->assertSame($this->resultJson, $this->controller->executeInternal());
     }
 
     public function testSetCmsPageData()
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
index 98a5df2b619..72cd0cedba3 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
@@ -80,7 +80,7 @@ class MassDeleteTest extends AbstractMassActionTest
             ->with('*/*/')
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->massDeleteController->execute());
+        $this->assertSame($this->resultRedirectMock, $this->massDeleteController->executeInternal());
     }
 
     /**
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php
index 688cc87fa09..f8d82e0b863 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php
@@ -85,7 +85,7 @@ class MassDisableTest extends AbstractMassActionTest
             ->with('*/*/')
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->massDisableController->execute());
+        $this->assertSame($this->resultRedirectMock, $this->massDisableController->executeInternal());
     }
 
     /**
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php
index 661231aa012..f7460ae29cb 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php
@@ -85,7 +85,7 @@ class MassEnableTest extends AbstractMassActionTest
             ->with('*/*/')
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->massEnableController->execute());
+        $this->assertSame($this->resultRedirectMock, $this->massEnableController->executeInternal());
     }
 
     /**
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Wysiwyg/DirectiveTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Wysiwyg/DirectiveTest.php
index 7d0ec584d46..b0120b54ae0 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Wysiwyg/DirectiveTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Wysiwyg/DirectiveTest.php
@@ -157,7 +157,7 @@ class DirectiveTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Cms\Controller\Adminhtml\Wysiwyg\Directive::execute
+     * @covers \Magento\Cms\Controller\Adminhtml\Wysiwyg\Directive::executeInternal
      */
     public function testExecute()
     {
@@ -188,12 +188,12 @@ class DirectiveTest extends \PHPUnit_Framework_TestCase
 
         $this->assertSame(
             $this->rawMock,
-            $this->wysiwygDirective->execute()
+            $this->wysiwygDirective->executeInternal()
         );
     }
 
     /**
-     * @covers \Magento\Cms\Controller\Adminhtml\Wysiwyg\Directive::execute
+     * @covers \Magento\Cms\Controller\Adminhtml\Wysiwyg\Directive::executeInternal
      */
     public function testExecuteException()
     {
@@ -236,7 +236,7 @@ class DirectiveTest extends \PHPUnit_Framework_TestCase
 
         $this->assertSame(
             $this->rawMock,
-            $this->wysiwygDirective->execute()
+            $this->wysiwygDirective->executeInternal()
         );
     }
 
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Block/InlineEditTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Block/InlineEditTest.php
index 85cab72d2aa..37872f893c3 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Block/InlineEditTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Block/InlineEditTest.php
@@ -131,7 +131,7 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase
             ])
             ->willReturnSelf();
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     public function testExecuteWithoutData()
@@ -157,6 +157,6 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase
             ])
             ->willReturnSelf();
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Index/IndexTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Index/IndexTest.php
index 3b4ecc8ee10..10bb82ac001 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Index/IndexTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Index/IndexTest.php
@@ -96,7 +96,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
             ->method('prepareResultPage')
             ->with($this->controller, $this->pageId)
             ->willReturn($this->resultPageMock);
-        $this->assertSame($this->resultPageMock, $this->controller->execute());
+        $this->assertSame($this->resultPageMock, $this->controller->executeInternal());
     }
 
     public function testExecuteResultForward()
@@ -105,6 +105,6 @@ class IndexTest extends \PHPUnit_Framework_TestCase
             ->method('forward')
             ->with('defaultIndex')
             ->willReturnSelf();
-        $this->assertSame($this->forwardMock, $this->controller->execute());
+        $this->assertSame($this->forwardMock, $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Noroute/IndexTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Noroute/IndexTest.php
index 4ff2bcaa752..444a1d76725 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Noroute/IndexTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Noroute/IndexTest.php
@@ -113,7 +113,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
         );
         $this->assertSame(
             $this->resultPageMock,
-            $this->_controller->execute()
+            $this->_controller->executeInternal()
         );
     }
 
@@ -146,7 +146,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
         );
         $this->assertSame(
             $this->forwardMock,
-            $this->_controller->execute()
+            $this->_controller->executeInternal()
         );
     }
 }
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Page/ViewTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Page/ViewTest.php
index df009be3bb0..5c15f13b931 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Page/ViewTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Page/ViewTest.php
@@ -89,7 +89,7 @@ class ViewTest extends \PHPUnit_Framework_TestCase
             ->method('prepareResultPage')
             ->with($this->controller, $this->pageId)
             ->willReturn($this->resultPageMock);
-        $this->assertSame($this->resultPageMock, $this->controller->execute());
+        $this->assertSame($this->resultPageMock, $this->controller->executeInternal());
     }
 
     public function testExecuteResultForward()
@@ -106,6 +106,6 @@ class ViewTest extends \PHPUnit_Framework_TestCase
             ->method('forward')
             ->with('noroute')
             ->willReturnSelf();
-        $this->assertSame($this->forwardMock, $this->controller->execute());
+        $this->assertSame($this->forwardMock, $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Config/Controller/Adminhtml/System/AbstractConfig.php b/app/code/Magento/Config/Controller/Adminhtml/System/AbstractConfig.php
index 92e50151a75..57b28ebdd42 100644
--- a/app/code/Magento/Config/Controller/Adminhtml/System/AbstractConfig.php
+++ b/app/code/Magento/Config/Controller/Adminhtml/System/AbstractConfig.php
@@ -44,12 +44,12 @@ abstract class AbstractConfig extends \Magento\Backend\App\AbstractAction
      * @param \Magento\Framework\App\RequestInterface $request
      * @return \Magento\Framework\App\ResponseInterface
      */
-    public function dispatch(\Magento\Framework\App\RequestInterface $request)
+    public function execute(\Magento\Framework\App\RequestInterface $request)
     {
         if (!$request->getParam('section')) {
             $request->setParam('section', $this->_configStructure->getFirstSection()->getId());
         }
-        return parent::dispatch($request);
+        return parent::execute($request);
     }
 
     /**
diff --git a/app/code/Magento/Config/Controller/Adminhtml/System/Config/Edit.php b/app/code/Magento/Config/Controller/Adminhtml/System/Config/Edit.php
index 9f8bf3a73f1..ad25ce834a5 100644
--- a/app/code/Magento/Config/Controller/Adminhtml/System/Config/Edit.php
+++ b/app/code/Magento/Config/Controller/Adminhtml/System/Config/Edit.php
@@ -36,7 +36,7 @@ class Edit extends AbstractScopeConfig
      *
      * @return \Magento\Framework\App\ResponseInterface|void
      */
-    public function execute()
+    public function executeInternal()
     {
         $current = $this->getRequest()->getParam('section');
         $website = $this->getRequest()->getParam('website');
diff --git a/app/code/Magento/Config/Controller/Adminhtml/System/Config/Index.php b/app/code/Magento/Config/Controller/Adminhtml/System/Config/Index.php
index 2513c9cb00f..f92619feb04 100644
--- a/app/code/Magento/Config/Controller/Adminhtml/System/Config/Index.php
+++ b/app/code/Magento/Config/Controller/Adminhtml/System/Config/Index.php
@@ -36,7 +36,7 @@ class Index extends AbstractScopeConfig
      *
      * @return \Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Forward $resultForward */
         $resultForward = $this->resultForwardFactory->create();
diff --git a/app/code/Magento/Config/Controller/Adminhtml/System/Config/Save.php b/app/code/Magento/Config/Controller/Adminhtml/System/Config/Save.php
index d18c4ffc4bc..6dea5197bb4 100644
--- a/app/code/Magento/Config/Controller/Adminhtml/System/Config/Save.php
+++ b/app/code/Magento/Config/Controller/Adminhtml/System/Config/Save.php
@@ -141,7 +141,7 @@ class Save extends AbstractConfig
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             // custom save logic
diff --git a/app/code/Magento/Config/Controller/Adminhtml/System/Config/State.php b/app/code/Magento/Config/Controller/Adminhtml/System/Config/State.php
index d1f299e6a32..9ac46a6dcb3 100644
--- a/app/code/Magento/Config/Controller/Adminhtml/System/Config/State.php
+++ b/app/code/Magento/Config/Controller/Adminhtml/System/Config/State.php
@@ -36,7 +36,7 @@ class State extends AbstractScopeConfig
      *
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->getRequest()->getParam('isAjax')
             && $this->getRequest()->getParam('container') != ''
diff --git a/app/code/Magento/Config/Test/Unit/Controller/Adminhtml/System/Config/SaveTest.php b/app/code/Magento/Config/Test/Unit/Controller/Adminhtml/System/Config/SaveTest.php
index eb5d66c4a62..3cbd4c901d1 100644
--- a/app/code/Magento/Config/Test/Unit/Controller/Adminhtml/System/Config/SaveTest.php
+++ b/app/code/Magento/Config/Test/Unit/Controller/Adminhtml/System/Config/SaveTest.php
@@ -213,7 +213,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             $this->returnValue($backendConfigMock)
         );
 
-        $this->assertEquals($this->resultRedirect, $this->_controller->execute());
+        $this->assertEquals($this->resultRedirect, $this->_controller->executeInternal());
     }
 
     public function testIndexActionSaveState()
@@ -234,7 +234,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
         )->will(
             $this->returnValue($data)
         );
-        $this->assertEquals($this->resultRedirect, $this->_controller->execute());
+        $this->assertEquals($this->resultRedirect, $this->_controller->executeInternal());
     }
 
     public function testIndexActionGetGroupForSave()
@@ -285,7 +285,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
         );
         $backendConfigMock->expects($this->once())->method('save');
 
-        $this->assertEquals($this->resultRedirect, $this->_controller->execute());
+        $this->assertEquals($this->resultRedirect, $this->_controller->executeInternal());
     }
 
     public function testIndexActionSaveAdvanced()
@@ -311,6 +311,6 @@ class SaveTest extends \PHPUnit_Framework_TestCase
         $backendConfigMock->expects($this->once())->method('save');
 
         $this->_cacheMock->expects($this->once())->method('clean')->with(\Zend_Cache::CLEANING_MODE_ALL);
-        $this->assertEquals($this->resultRedirect, $this->_controller->execute());
+        $this->assertEquals($this->resultRedirect, $this->_controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/AddAttribute.php b/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/AddAttribute.php
index 2377de0c5b9..ac318931264 100644
--- a/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/AddAttribute.php
+++ b/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/AddAttribute.php
@@ -32,7 +32,7 @@ class AddAttribute extends Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout('popup');
         $this->productBuilder->build($this->getRequest());
diff --git a/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Associated/Grid.php b/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Associated/Grid.php
index 6eb4facfee9..6fb61d0548a 100644
--- a/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Associated/Grid.php
+++ b/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Associated/Grid.php
@@ -33,7 +33,7 @@ class Grid extends Action
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\View\Result\Layout $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/CreateOptions.php b/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/CreateOptions.php
index 7516807654a..8e620c74944 100644
--- a/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/CreateOptions.php
+++ b/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/CreateOptions.php
@@ -52,7 +52,7 @@ class CreateOptions extends Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->getResponse()->representJson($this->jsonHelper->jsonEncode($this->saveAttributeOptions()));
     }
diff --git a/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/GetAttributes.php b/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/GetAttributes.php
index 39bee40024e..b0e66aba601 100644
--- a/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/GetAttributes.php
+++ b/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/GetAttributes.php
@@ -60,7 +60,7 @@ class GetAttributes extends Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->storeManager->setCurrentStore(\Magento\Store\Model\Store::ADMIN_CODE);
         $collection = $this->collectionFactory->create();
diff --git a/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/SuggestConfigurableAttributes.php b/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/SuggestConfigurableAttributes.php
index 4135ea97ab6..1fabe24b05b 100644
--- a/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/SuggestConfigurableAttributes.php
+++ b/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/SuggestConfigurableAttributes.php
@@ -61,7 +61,7 @@ class SuggestConfigurableAttributes extends Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->storeManager->setCurrentStore(\Magento\Store\Model\Store::ADMIN_CODE);
 
diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Controller/Adminhtml/Product/AddAttributeTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Controller/Adminhtml/Product/AddAttributeTest.php
index f37d40eccf0..228f44a9a50 100644
--- a/app/code/Magento/ConfigurableProduct/Test/Unit/Controller/Adminhtml/Product/AddAttributeTest.php
+++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Controller/Adminhtml/Product/AddAttributeTest.php
@@ -102,6 +102,6 @@ class AddAttributeTest extends \PHPUnit_Framework_TestCase
         $layout->expects($this->once())->method('setChild')->willReturnSelf();
         $this->view->expects($this->any())->method('renderLayout')->willReturnSelf();
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Controller/Adminhtml/Product/Attribute/SuggestConfigurableAttributesTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Controller/Adminhtml/Product/Attribute/SuggestConfigurableAttributesTest.php
index d8b1fc5a051..24ace68cf47 100644
--- a/app/code/Magento/ConfigurableProduct/Test/Unit/Controller/Adminhtml/Product/Attribute/SuggestConfigurableAttributesTest.php
+++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Controller/Adminhtml/Product/Attribute/SuggestConfigurableAttributesTest.php
@@ -86,6 +86,6 @@ class SuggestConfigurableAttributesTest extends \PHPUnit_Framework_TestCase
             $this->returnValue('body')
         );
         $this->responseMock->expects($this->once())->method('representJson')->with('body');
-        $this->suggestAttributes->execute();
+        $this->suggestAttributes->executeInternal();
     }
 }
diff --git a/app/code/Magento/Contact/Controller/Index.php b/app/code/Magento/Contact/Controller/Index.php
index 8a04b5b7b1d..28272b87d0c 100644
--- a/app/code/Magento/Contact/Controller/Index.php
+++ b/app/code/Magento/Contact/Controller/Index.php
@@ -82,11 +82,11 @@ abstract class Index extends \Magento\Framework\App\Action\Action
      * @return \Magento\Framework\App\ResponseInterface
      * @throws \Magento\Framework\Exception\NotFoundException
      */
-    public function dispatch(RequestInterface $request)
+    public function execute(RequestInterface $request)
     {
         if (!$this->scopeConfig->isSetFlag(self::XML_PATH_ENABLED, ScopeInterface::SCOPE_STORE)) {
             throw new NotFoundException(__('Page not found.'));
         }
-        return parent::dispatch($request);
+        return parent::execute($request);
     }
 }
diff --git a/app/code/Magento/Contact/Controller/Index/Index.php b/app/code/Magento/Contact/Controller/Index/Index.php
index 247728f63f8..c1ff54c71f7 100644
--- a/app/code/Magento/Contact/Controller/Index/Index.php
+++ b/app/code/Magento/Contact/Controller/Index/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Contact\Controller\Index
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $this->_view->renderLayout();
diff --git a/app/code/Magento/Contact/Controller/Index/Post.php b/app/code/Magento/Contact/Controller/Index/Post.php
index f5114cd6f68..854a2e15610 100644
--- a/app/code/Magento/Contact/Controller/Index/Post.php
+++ b/app/code/Magento/Contact/Controller/Index/Post.php
@@ -14,7 +14,7 @@ class Post extends \Magento\Contact\Controller\Index
      * @return void
      * @throws \Exception
      */
-    public function execute()
+    public function executeInternal()
     {
         $post = $this->getRequest()->getPostValue();
         if (!$post) {
diff --git a/app/code/Magento/Contact/Test/Unit/Controller/Index/IndexTest.php b/app/code/Magento/Contact/Test/Unit/Controller/Index/IndexTest.php
index a914cf698e3..9a980ca0b7c 100644
--- a/app/code/Magento/Contact/Test/Unit/Controller/Index/IndexTest.php
+++ b/app/code/Magento/Contact/Test/Unit/Controller/Index/IndexTest.php
@@ -99,6 +99,6 @@ class IndexTest extends \PHPUnit_Framework_TestCase
         $this->_view->expects($this->once())
             ->method('renderLayout');
 
-        $this->_controller->execute();
+        $this->_controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Contact/Test/Unit/Controller/Index/PostTest.php b/app/code/Magento/Contact/Test/Unit/Controller/Index/PostTest.php
index a508c25a445..d062bb7ad9c 100644
--- a/app/code/Magento/Contact/Test/Unit/Controller/Index/PostTest.php
+++ b/app/code/Magento/Contact/Test/Unit/Controller/Index/PostTest.php
@@ -135,7 +135,7 @@ class PostTest extends \PHPUnit_Framework_TestCase
     {
         $this->_request->expects($this->once())->method('getPostValue')->will($this->returnValue([]));
         $this->_redirect->expects($this->once())->method('redirect');
-        $this->_controller->execute();
+        $this->_controller->executeInternal();
     }
 
     /**
@@ -157,7 +157,7 @@ class PostTest extends \PHPUnit_Framework_TestCase
         $this->_inlineTranslation->expects($this->once())
             ->method('suspend');
 
-        $this->_controller->execute();
+        $this->_controller->executeInternal();
     }
 
     public function testPostDataProvider()
@@ -224,6 +224,6 @@ class PostTest extends \PHPUnit_Framework_TestCase
         $this->_inlineTranslation->expects($this->once())
             ->method('suspend');
 
-        $this->_controller->execute();
+        $this->_controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Contact/Test/Unit/Controller/IndexTest.php b/app/code/Magento/Contact/Test/Unit/Controller/IndexTest.php
index 93f055f4d0a..b27d4db46d4 100644
--- a/app/code/Magento/Contact/Test/Unit/Controller/IndexTest.php
+++ b/app/code/Magento/Contact/Test/Unit/Controller/IndexTest.php
@@ -78,7 +78,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
             )
             ->will($this->returnValue(false));
 
-        $this->_controller->dispatch(
+        $this->_controller->execute(
             $this->getMockForAbstractClass('\Magento\Framework\App\RequestInterface', [], '', false)
         );
     }
diff --git a/app/code/Magento/Contact/Test/Unit/Controller/Stub/IndexStub.php b/app/code/Magento/Contact/Test/Unit/Controller/Stub/IndexStub.php
index 4d4320d4acb..4966ddd26be 100644
--- a/app/code/Magento/Contact/Test/Unit/Controller/Stub/IndexStub.php
+++ b/app/code/Magento/Contact/Test/Unit/Controller/Stub/IndexStub.php
@@ -8,7 +8,7 @@ namespace Magento\Contact\Test\Unit\Controller\Stub;
 
 class IndexStub extends \Magento\Contact\Controller\Index
 {
-    protected function execute()
+    protected function executeInternal()
     {
         // Empty method stub for test
     }
diff --git a/app/code/Magento/Cookie/Controller/Index/NoCookies.php b/app/code/Magento/Cookie/Controller/Index/NoCookies.php
index c8ce45e0a38..edf4949fb0b 100644
--- a/app/code/Magento/Cookie/Controller/Index/NoCookies.php
+++ b/app/code/Magento/Cookie/Controller/Index/NoCookies.php
@@ -13,7 +13,7 @@ class NoCookies extends \Magento\Framework\App\Action\Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $redirect = new \Magento\Framework\DataObject();
         $this->_eventManager->dispatch(
diff --git a/app/code/Magento/Cookie/Test/Unit/Controller/Index/NoCookiesTest.php b/app/code/Magento/Cookie/Test/Unit/Controller/Index/NoCookiesTest.php
index 7e2db7aeaf5..0d9c3439eda 100644
--- a/app/code/Magento/Cookie/Test/Unit/Controller/Index/NoCookiesTest.php
+++ b/app/code/Magento/Cookie/Test/Unit/Controller/Index/NoCookiesTest.php
@@ -95,7 +95,7 @@ class NoCookiesTest extends \PHPUnit_Framework_TestCase
         $this->requestMock->expects($this->once())->method('setDispatched')->with($this->isTrue());
 
         // Make the call to test
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     public function testExecuteRedirectPath()
@@ -126,7 +126,7 @@ class NoCookiesTest extends \PHPUnit_Framework_TestCase
         $this->requestMock->expects($this->once())->method('setDispatched')->with($this->isTrue());
 
         // Make the call to test
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     public function testExecuteDefault()
@@ -139,6 +139,6 @@ class NoCookiesTest extends \PHPUnit_Framework_TestCase
         $this->requestMock->expects($this->once())->method('setDispatched')->with($this->isTrue());
 
         // Make the call to test
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/FetchRates.php b/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/FetchRates.php
index 08cb0511025..9cc52750b3d 100644
--- a/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/FetchRates.php
+++ b/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/FetchRates.php
@@ -16,7 +16,7 @@ class FetchRates extends \Magento\CurrencySymbol\Controller\Adminhtml\System\Cur
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\Session $backendSession */
         $backendSession = $this->_objectManager->get('Magento\Backend\Model\Session');
diff --git a/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/Index.php b/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/Index.php
index 751020010a7..1646068a7c4 100644
--- a/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/Index.php
+++ b/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\CurrencySymbol\Controller\Adminhtml\System\Currency
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $this->_setActiveMenu('Magento_CurrencySymbol::system_currency_rates');
diff --git a/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/SaveRates.php b/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/SaveRates.php
index 01ba604f110..06e2a760d25 100644
--- a/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/SaveRates.php
+++ b/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/SaveRates.php
@@ -16,7 +16,7 @@ class SaveRates extends \Magento\CurrencySymbol\Controller\Adminhtml\System\Curr
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $data = $this->getRequest()->getParam('rate');
         if (is_array($data)) {
diff --git a/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currencysymbol/Index.php b/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currencysymbol/Index.php
index 12ae3374a88..fdc897735d1 100644
--- a/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currencysymbol/Index.php
+++ b/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currencysymbol/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\CurrencySymbol\Controller\Adminhtml\System\Currency
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         // set active menu and breadcrumbs
         $this->_view->loadLayout();
diff --git a/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currencysymbol/Save.php b/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currencysymbol/Save.php
index 716ca26e493..86cb38a43a2 100644
--- a/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currencysymbol/Save.php
+++ b/app/code/Magento/CurrencySymbol/Controller/Adminhtml/System/Currencysymbol/Save.php
@@ -13,7 +13,7 @@ class Save extends \Magento\CurrencySymbol\Controller\Adminhtml\System\Currencys
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $symbolsDataArray = $this->getRequest()->getParam('custom_currency_symbol', null);
         if (is_array($symbolsDataArray)) {
diff --git a/app/code/Magento/CurrencySymbol/Test/Unit/Controller/Adminhtml/System/Currencysymbol/IndexTest.php b/app/code/Magento/CurrencySymbol/Test/Unit/Controller/Adminhtml/System/Currencysymbol/IndexTest.php
index b75df9bce15..5584c064d30 100644
--- a/app/code/Magento/CurrencySymbol/Test/Unit/Controller/Adminhtml/System/Currencysymbol/IndexTest.php
+++ b/app/code/Magento/CurrencySymbol/Test/Unit/Controller/Adminhtml/System/Currencysymbol/IndexTest.php
@@ -106,6 +106,6 @@ class IndexTest extends \PHPUnit_Framework_TestCase
         $this->viewMock->expects($this->atLeastOnce())->method('getLayout')->willReturn($this->layoutMock);
         $this->viewMock->expects($this->atLeastOnce())->method('getPage')->willReturn($this->pageMock);
 
-        $this->action->execute();
+        $this->action->executeInternal();
     }
 }
diff --git a/app/code/Magento/CurrencySymbol/Test/Unit/Controller/Adminhtml/System/Currencysymbol/SaveTest.php b/app/code/Magento/CurrencySymbol/Test/Unit/Controller/Adminhtml/System/Currencysymbol/SaveTest.php
index 5d6b9d997fc..7e730e7da55 100644
--- a/app/code/Magento/CurrencySymbol/Test/Unit/Controller/Adminhtml/System/Currencysymbol/SaveTest.php
+++ b/app/code/Magento/CurrencySymbol/Test/Unit/Controller/Adminhtml/System/Currencysymbol/SaveTest.php
@@ -143,6 +143,6 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             ->method('addSuccess')
             ->with(__('You applied the custom currency symbols.'));
 
-        $this->action->execute();
+        $this->action->executeInternal();
     }
 }
diff --git a/app/code/Magento/Customer/Controller/Account/Confirm.php b/app/code/Magento/Customer/Controller/Account/Confirm.php
index 24037307539..26fcce39f20 100644
--- a/app/code/Magento/Customer/Controller/Account/Confirm.php
+++ b/app/code/Magento/Customer/Controller/Account/Confirm.php
@@ -86,7 +86,7 @@ class Confirm extends Action implements AccountInterface
      *
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
diff --git a/app/code/Magento/Customer/Controller/Account/Confirmation.php b/app/code/Magento/Customer/Controller/Account/Confirmation.php
index 6f050098deb..a1da7d92d79 100644
--- a/app/code/Magento/Customer/Controller/Account/Confirmation.php
+++ b/app/code/Magento/Customer/Controller/Account/Confirmation.php
@@ -59,7 +59,7 @@ class Confirmation extends Action implements AccountInterface
      *
      * @return \Magento\Framework\Controller\Result\Redirect|\Magento\Framework\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->session->isLoggedIn()) {
             /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/Customer/Controller/Account/Create.php b/app/code/Magento/Customer/Controller/Account/Create.php
index 51e1c151ea8..fa910d2fbad 100644
--- a/app/code/Magento/Customer/Controller/Account/Create.php
+++ b/app/code/Magento/Customer/Controller/Account/Create.php
@@ -51,7 +51,7 @@ class Create extends Action implements AccountInterface
      *
      * @return \Magento\Framework\Controller\Result\Redirect|\Magento\Framework\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->session->isLoggedIn() || !$this->registration->isAllowed()) {
             /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/Customer/Controller/Account/CreatePassword.php b/app/code/Magento/Customer/Controller/Account/CreatePassword.php
index f0288b1f2b4..889b2538eca 100644
--- a/app/code/Magento/Customer/Controller/Account/CreatePassword.php
+++ b/app/code/Magento/Customer/Controller/Account/CreatePassword.php
@@ -51,7 +51,7 @@ class CreatePassword extends Action implements AccountInterface
      *
      * @return \Magento\Framework\Controller\Result\Redirect|\Magento\Framework\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $resetPasswordToken = (string)$this->getRequest()->getParam('token');
         $customerId = (int)$this->getRequest()->getParam('id');
diff --git a/app/code/Magento/Customer/Controller/Account/CreatePost.php b/app/code/Magento/Customer/Controller/Account/CreatePost.php
index 8d2c5b81fa4..3bd8c5bacf8 100644
--- a/app/code/Magento/Customer/Controller/Account/CreatePost.php
+++ b/app/code/Magento/Customer/Controller/Account/CreatePost.php
@@ -201,7 +201,7 @@ class CreatePost extends Action implements AccountInterface
      * @return void
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultRedirectFactory->create();
diff --git a/app/code/Magento/Customer/Controller/Account/Edit.php b/app/code/Magento/Customer/Controller/Account/Edit.php
index 3f035bdcdf1..4c862f9509e 100644
--- a/app/code/Magento/Customer/Controller/Account/Edit.php
+++ b/app/code/Magento/Customer/Controller/Account/Edit.php
@@ -58,7 +58,7 @@ class Edit extends Action implements AccountInterface
      *
      * @return \Magento\Framework\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/Customer/Controller/Account/EditPost.php b/app/code/Magento/Customer/Controller/Account/EditPost.php
index a61c551b171..8fbc85dac02 100644
--- a/app/code/Magento/Customer/Controller/Account/EditPost.php
+++ b/app/code/Magento/Customer/Controller/Account/EditPost.php
@@ -69,7 +69,7 @@ class EditPost extends Action implements AccountInterface
      * @return \Magento\Framework\Controller\Result\Redirect
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultRedirectFactory->create();
diff --git a/app/code/Magento/Customer/Controller/Account/ForgotPassword.php b/app/code/Magento/Customer/Controller/Account/ForgotPassword.php
index daeb13e1eae..53139df7a1e 100644
--- a/app/code/Magento/Customer/Controller/Account/ForgotPassword.php
+++ b/app/code/Magento/Customer/Controller/Account/ForgotPassword.php
@@ -44,7 +44,7 @@ class ForgotPassword extends Action implements AccountInterface
      *
      * @return \Magento\Framework\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/Customer/Controller/Account/ForgotPasswordPost.php b/app/code/Magento/Customer/Controller/Account/ForgotPasswordPost.php
index be1d15b56e3..e40689ea1e5 100644
--- a/app/code/Magento/Customer/Controller/Account/ForgotPasswordPost.php
+++ b/app/code/Magento/Customer/Controller/Account/ForgotPasswordPost.php
@@ -51,7 +51,7 @@ class ForgotPasswordPost extends Action implements AccountInterface
      *
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultRedirectFactory->create();
diff --git a/app/code/Magento/Customer/Controller/Account/Index.php b/app/code/Magento/Customer/Controller/Account/Index.php
index c99d8dd199e..db90eec8363 100644
--- a/app/code/Magento/Customer/Controller/Account/Index.php
+++ b/app/code/Magento/Customer/Controller/Account/Index.php
@@ -35,7 +35,7 @@ class Index extends Action implements AccountInterface
      *
      * @return \Magento\Framework\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/Customer/Controller/Account/Login.php b/app/code/Magento/Customer/Controller/Account/Login.php
index ca404047dd2..72511c59423 100644
--- a/app/code/Magento/Customer/Controller/Account/Login.php
+++ b/app/code/Magento/Customer/Controller/Account/Login.php
@@ -44,7 +44,7 @@ class Login extends Action implements AccountInterface
      *
      * @return \Magento\Framework\Controller\Result\Redirect|\Magento\Framework\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->session->isLoggedIn()) {
             /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/Customer/Controller/Account/LoginPost.php b/app/code/Magento/Customer/Controller/Account/LoginPost.php
index 7b6191eb255..b1b3a8b020c 100644
--- a/app/code/Magento/Customer/Controller/Account/LoginPost.php
+++ b/app/code/Magento/Customer/Controller/Account/LoginPost.php
@@ -67,7 +67,7 @@ class LoginPost extends Action implements AccountInterface
      * @return \Magento\Framework\Controller\Result\Redirect
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->session->isLoggedIn() || !$this->formKeyValidator->validate($this->getRequest())) {
             /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/Customer/Controller/Account/Logout.php b/app/code/Magento/Customer/Controller/Account/Logout.php
index be0dcd6ba5e..4d070b401ce 100644
--- a/app/code/Magento/Customer/Controller/Account/Logout.php
+++ b/app/code/Magento/Customer/Controller/Account/Logout.php
@@ -35,7 +35,7 @@ class Logout extends Action implements AccountInterface
      *
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $lastCustomerId = $this->session->getId();
         $this->session->logout()->setBeforeAuthUrl($this->_redirect->getRefererUrl())
diff --git a/app/code/Magento/Customer/Controller/Account/LogoutSuccess.php b/app/code/Magento/Customer/Controller/Account/LogoutSuccess.php
index 77eb5314990..8185c93a60c 100644
--- a/app/code/Magento/Customer/Controller/Account/LogoutSuccess.php
+++ b/app/code/Magento/Customer/Controller/Account/LogoutSuccess.php
@@ -35,7 +35,7 @@ class LogoutSuccess extends Action implements AccountInterface
      *
      * @return \Magento\Framework\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         return $this->resultPageFactory->create();
     }
diff --git a/app/code/Magento/Customer/Controller/Account/ResetPasswordPost.php b/app/code/Magento/Customer/Controller/Account/ResetPasswordPost.php
index 0e996ea9a80..1044c71379f 100644
--- a/app/code/Magento/Customer/Controller/Account/ResetPasswordPost.php
+++ b/app/code/Magento/Customer/Controller/Account/ResetPasswordPost.php
@@ -51,7 +51,7 @@ class ResetPasswordPost extends Action implements AccountInterface
      *
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultRedirectFactory->create();
diff --git a/app/code/Magento/Customer/Controller/Address.php b/app/code/Magento/Customer/Controller/Address.php
index b527db41ac0..f4ffb6c9dac 100644
--- a/app/code/Magento/Customer/Controller/Address.php
+++ b/app/code/Magento/Customer/Controller/Address.php
@@ -120,12 +120,12 @@ abstract class Address extends \Magento\Framework\App\Action\Action
      * @param RequestInterface $request
      * @return \Magento\Framework\App\ResponseInterface
      */
-    public function dispatch(RequestInterface $request)
+    public function execute(RequestInterface $request)
     {
         if (!$this->_getSession()->authenticate()) {
             $this->_actionFlag->set('', 'no-dispatch', true);
         }
-        return parent::dispatch($request);
+        return parent::execute($request);
     }
 
     /**
diff --git a/app/code/Magento/Customer/Controller/Address/Delete.php b/app/code/Magento/Customer/Controller/Address/Delete.php
index 6dfa17be32b..6c736e3fcdf 100644
--- a/app/code/Magento/Customer/Controller/Address/Delete.php
+++ b/app/code/Magento/Customer/Controller/Address/Delete.php
@@ -11,7 +11,7 @@ class Delete extends \Magento\Customer\Controller\Address
     /**
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $addressId = $this->getRequest()->getParam('id', false);
 
diff --git a/app/code/Magento/Customer/Controller/Address/Edit.php b/app/code/Magento/Customer/Controller/Address/Edit.php
index 0691ffd8ad5..5857b0c64b2 100644
--- a/app/code/Magento/Customer/Controller/Address/Edit.php
+++ b/app/code/Magento/Customer/Controller/Address/Edit.php
@@ -13,7 +13,7 @@ class Edit extends \Magento\Customer\Controller\Address
      *
      * @return \Magento\Framework\Controller\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Forward $resultForward */
         $resultForward = $this->resultForwardFactory->create();
diff --git a/app/code/Magento/Customer/Controller/Address/Form.php b/app/code/Magento/Customer/Controller/Address/Form.php
index b30d453dce8..6699bf27d5e 100644
--- a/app/code/Magento/Customer/Controller/Address/Form.php
+++ b/app/code/Magento/Customer/Controller/Address/Form.php
@@ -13,7 +13,7 @@ class Form extends \Magento\Customer\Controller\Address
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/Customer/Controller/Address/FormPost.php b/app/code/Magento/Customer/Controller/Address/FormPost.php
index 9360ca0f7d6..eb3e6817dd0 100644
--- a/app/code/Magento/Customer/Controller/Address/FormPost.php
+++ b/app/code/Magento/Customer/Controller/Address/FormPost.php
@@ -176,7 +176,7 @@ class FormPost extends \Magento\Customer\Controller\Address
      *
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $redirectUrl = null;
         if (!$this->_formKeyValidator->validate($this->getRequest())) {
diff --git a/app/code/Magento/Customer/Controller/Address/Index.php b/app/code/Magento/Customer/Controller/Address/Index.php
index b445fa6fbfa..1d5c09e317b 100644
--- a/app/code/Magento/Customer/Controller/Address/Index.php
+++ b/app/code/Magento/Customer/Controller/Address/Index.php
@@ -68,7 +68,7 @@ class Index extends \Magento\Customer\Controller\Address
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $addresses = $this->customerRepository->getById($this->_getSession()->getCustomerId())->getAddresses();
         if (count($addresses)) {
diff --git a/app/code/Magento/Customer/Controller/Address/NewAction.php b/app/code/Magento/Customer/Controller/Address/NewAction.php
index 4bfdabbbd5e..9bd9402d5e2 100644
--- a/app/code/Magento/Customer/Controller/Address/NewAction.php
+++ b/app/code/Magento/Customer/Controller/Address/NewAction.php
@@ -11,7 +11,7 @@ class NewAction extends \Magento\Customer\Controller\Address
     /**
      * @return \Magento\Framework\Controller\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Forward $resultForward */
         $resultForward = $this->resultForwardFactory->create();
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/Cart/Configure.php b/app/code/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/Cart/Configure.php
index c74520cb965..ea8a214c16a 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/Cart/Configure.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/Cart/Configure.php
@@ -13,7 +13,7 @@ class Configure extends \Magento\Customer\Controller\Adminhtml\Cart\Product\Comp
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $configureResult = new \Magento\Framework\DataObject();
         try {
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/Cart/Update.php b/app/code/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/Cart/Update.php
index 42f9ee513a8..7daaa2cc9ec 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/Cart/Update.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/Cart/Update.php
@@ -13,7 +13,7 @@ class Update extends \Magento\Customer\Controller\Adminhtml\Cart\Product\Composi
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $updateResult = new \Magento\Framework\DataObject();
         try {
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Customer/InvalidateToken.php b/app/code/Magento/Customer/Controller/Adminhtml/Customer/InvalidateToken.php
index 92961f2a0d4..f4f788c61b7 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Customer/InvalidateToken.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Customer/InvalidateToken.php
@@ -125,7 +125,7 @@ class InvalidateToken extends \Magento\Customer\Controller\Adminhtml\Index
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultRedirect = $this->resultRedirectFactory->create();
         if ($customerId = $this->getRequest()->getParam('customer_id')) {
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Group/Delete.php b/app/code/Magento/Customer/Controller/Adminhtml/Group/Delete.php
index 17af771114f..5b3b91fcf05 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Group/Delete.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Group/Delete.php
@@ -15,7 +15,7 @@ class Delete extends \Magento\Customer\Controller\Adminhtml\Group
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = $this->getRequest()->getParam('id');
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Group/Edit.php b/app/code/Magento/Customer/Controller/Adminhtml/Group/Edit.php
index 303d2f4f1af..838cf9b940a 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Group/Edit.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Group/Edit.php
@@ -13,7 +13,7 @@ class Edit extends \Magento\Customer\Controller\Adminhtml\Group
      *
      * @return \Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         return $this->resultForwardFactory->create()->forward('new');
     }
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Group/Index.php b/app/code/Magento/Customer/Controller/Adminhtml/Group/Index.php
index 290e77238ff..f80a6fcaa27 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Group/Index.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Group/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Customer\Controller\Adminhtml\Group
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Group/NewAction.php b/app/code/Magento/Customer/Controller/Adminhtml/Group/NewAction.php
index 0750422cd94..383af26a037 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Group/NewAction.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Group/NewAction.php
@@ -28,7 +28,7 @@ class NewAction extends \Magento\Customer\Controller\Adminhtml\Group
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $groupId = $this->_initGroup();
 
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Group/Save.php b/app/code/Magento/Customer/Controller/Adminhtml/Group/Save.php
index a842d8653b3..a775194f12e 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Group/Save.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Group/Save.php
@@ -67,7 +67,7 @@ class Save extends \Magento\Customer\Controller\Adminhtml\Group
      *
      * @return \Magento\Backend\Model\View\Result\Redirect|\Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         $taxClass = (int)$this->getRequest()->getParam('tax_class');
 
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/AbstractMassAction.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/AbstractMassAction.php
index 9a3ca5645f5..096efc640be 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/AbstractMassAction.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/AbstractMassAction.php
@@ -51,7 +51,7 @@ abstract class AbstractMassAction extends \Magento\Backend\App\Action
      * @return \Magento\Backend\Model\View\Result\Redirect
      * @throws \Magento\Framework\Exception\LocalizedException|\Exception
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $collection = $this->filter->getCollection($this->collectionFactory->create());
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/Cart.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/Cart.php
index e1c4dd68c9c..ff39bf28ac3 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/Cart.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/Cart.php
@@ -14,7 +14,7 @@ class Cart extends \Magento\Customer\Controller\Adminhtml\Index
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $customerId = $this->initCurrentCustomer();
         $websiteId = $this->getRequest()->getParam('website_id');
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/Carts.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/Carts.php
index 4c4cb77fa3b..fc4c0c0aeca 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/Carts.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/Carts.php
@@ -12,7 +12,7 @@ class Carts extends \Magento\Customer\Controller\Adminhtml\Index
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->initCurrentCustomer();
         $resultLayout = $this->resultLayoutFactory->create();
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/Delete.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/Delete.php
index 503969226aa..c8a0615408f 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/Delete.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/Delete.php
@@ -14,7 +14,7 @@ class Delete extends \Magento\Customer\Controller\Adminhtml\Index
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultRedirect = $this->resultRedirectFactory->create();
         $formKeyIsValid = $this->_formKeyValidator->validate($this->getRequest());
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/Edit.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/Edit.php
index 64af44a9bb8..0820fbea962 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/Edit.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/Edit.php
@@ -18,7 +18,7 @@ class Edit extends \Magento\Customer\Controller\Adminhtml\Index
      * @SuppressWarnings(PHPMD.NPathComplexity)
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
-    public function execute()
+    public function executeInternal()
     {
         $customerId = $this->initCurrentCustomer();
 
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/Index.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/Index.php
index b238a8287e7..fa9dfbd5529 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/Index.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/Index.php
@@ -12,7 +12,7 @@ class Index extends \Magento\Customer\Controller\Adminhtml\Index
      *
      * @return \Magento\Backend\Model\View\Result\Page|\Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->getRequest()->getQuery('ajax')) {
             $resultForward = $this->resultForwardFactory->create();
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/InlineEdit.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/InlineEdit.php
index f97c48b0ebc..4cbc90e88a5 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/InlineEdit.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/InlineEdit.php
@@ -60,7 +60,7 @@ class InlineEdit extends \Magento\Backend\App\Action
     /**
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Json $resultJson */
         $resultJson = $this->resultJsonFactory->create();
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/LastOrders.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/LastOrders.php
index fa0dcca712a..4711b9e2b18 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/LastOrders.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/LastOrders.php
@@ -12,7 +12,7 @@ class LastOrders extends \Magento\Customer\Controller\Adminhtml\Index
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->initCurrentCustomer();
         $resultLayout = $this->resultLayoutFactory->create();
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/NewAction.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/NewAction.php
index d3bdd1eadfd..bdb7a8b79a6 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/NewAction.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/NewAction.php
@@ -12,7 +12,7 @@ class NewAction extends \Magento\Customer\Controller\Adminhtml\Index
      *
      * @return \Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultForward = $this->resultForwardFactory->create();
         $resultForward->forward('edit');
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/Newsletter.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/Newsletter.php
index 6c27c0a46bd..6918cf84954 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/Newsletter.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/Newsletter.php
@@ -12,7 +12,7 @@ class Newsletter extends \Magento\Customer\Controller\Adminhtml\Index
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $customerId = $this->initCurrentCustomer();
         /** @var  \Magento\Newsletter\Model\Subscriber $subscriber */
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/Orders.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/Orders.php
index c825e5c24a8..1964c958428 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/Orders.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/Orders.php
@@ -12,7 +12,7 @@ class Orders extends \Magento\Customer\Controller\Adminhtml\Index
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->initCurrentCustomer();
         $resultLayout = $this->resultLayoutFactory->create();
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/ProductReviews.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/ProductReviews.php
index effaa2618f2..3a8f93a1c30 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/ProductReviews.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/ProductReviews.php
@@ -12,7 +12,7 @@ class ProductReviews extends \Magento\Customer\Controller\Adminhtml\Index
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $customerId = $this->initCurrentCustomer();
         $resultLayout = $this->resultLayoutFactory->create();
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/ResetPassword.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/ResetPassword.php
index c330eedde0f..43c2d474843 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/ResetPassword.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/ResetPassword.php
@@ -14,7 +14,7 @@ class ResetPassword extends \Magento\Customer\Controller\Adminhtml\Index
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultRedirect = $this->resultRedirectFactory->create();
         $customerId = (int)$this->getRequest()->getParam('customer_id', 0);
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/Save.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/Save.php
index 2cbe283339d..b4aa639c817 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/Save.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/Save.php
@@ -176,7 +176,7 @@ class Save extends \Magento\Customer\Controller\Adminhtml\Index
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         $returnToEdit = false;
         $originalRequestData = $this->getRequest()->getPostValue();
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/Validate.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/Validate.php
index bd7230f1aa1..001726280a4 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/Validate.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/Validate.php
@@ -107,7 +107,7 @@ class Validate extends \Magento\Customer\Controller\Adminhtml\Index
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         $response = new \Magento\Framework\DataObject();
         $response->setError(0);
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/ViewCart.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/ViewCart.php
index ee95065596c..cda5a37bc0e 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/ViewCart.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/ViewCart.php
@@ -12,7 +12,7 @@ class ViewCart extends \Magento\Customer\Controller\Adminhtml\Index
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->initCurrentCustomer();
         $resultLayout = $this->resultLayoutFactory->create();
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/ViewWishlist.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/ViewWishlist.php
index 34fa6b66a11..2f201d26028 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/ViewWishlist.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/ViewWishlist.php
@@ -12,7 +12,7 @@ class ViewWishlist extends \Magento\Customer\Controller\Adminhtml\Index
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->initCurrentCustomer();
         $resultLayout = $this->resultLayoutFactory->create();
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/Viewfile.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/Viewfile.php
index 52a8ea95f94..75341af2d6a 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/Viewfile.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/Viewfile.php
@@ -129,7 +129,7 @@ class Viewfile extends \Magento\Customer\Controller\Adminhtml\Index
      *
      * @SuppressWarnings(PHPMD.ExitExpression)
      */
-    public function execute()
+    public function executeInternal()
     {
         $file = null;
         $plain = false;
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/Wishlist.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/Wishlist.php
index 6f7e0e3bfbd..c550f125dc7 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/Wishlist.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/Wishlist.php
@@ -12,7 +12,7 @@ class Wishlist extends \Magento\Customer\Controller\Adminhtml\Index
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $customerId = $this->initCurrentCustomer();
         $itemId = (int)$this->getRequest()->getParam('delete');
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Online/Index.php b/app/code/Magento/Customer/Controller/Adminhtml/Online/Index.php
index 8bd9ce97c34..172622ac176 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Online/Index.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Online/Index.php
@@ -43,7 +43,7 @@ class Index extends \Magento\Backend\App\Action
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/System/Config/Validatevat/Validate.php b/app/code/Magento/Customer/Controller/Adminhtml/System/Config/Validatevat/Validate.php
index f1f638a852e..e8a7b96b4bb 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/System/Config/Validatevat/Validate.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/System/Config/Validatevat/Validate.php
@@ -31,7 +31,7 @@ class Validate extends \Magento\Customer\Controller\Adminhtml\System\Config\Vali
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         $result = $this->_validate();
 
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/System/Config/Validatevat/ValidateAdvanced.php b/app/code/Magento/Customer/Controller/Adminhtml/System/Config/Validatevat/ValidateAdvanced.php
index b3df87ed9ff..8d8d3408687 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/System/Config/Validatevat/ValidateAdvanced.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/System/Config/Validatevat/ValidateAdvanced.php
@@ -30,7 +30,7 @@ class ValidateAdvanced extends \Magento\Customer\Controller\Adminhtml\System\Con
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         $result = $this->_validate();
         $valid = $result->getIsValid();
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Wishlist/Product/Composite/Wishlist/Configure.php b/app/code/Magento/Customer/Controller/Adminhtml/Wishlist/Product/Composite/Wishlist/Configure.php
index 6101483eb98..31038f2bd08 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Wishlist/Product/Composite/Wishlist/Configure.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Wishlist/Product/Composite/Wishlist/Configure.php
@@ -15,7 +15,7 @@ class Configure extends \Magento\Customer\Controller\Adminhtml\Wishlist\Product\
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $configureResult = new \Magento\Framework\DataObject();
         try {
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Wishlist/Product/Composite/Wishlist/Update.php b/app/code/Magento/Customer/Controller/Adminhtml/Wishlist/Product/Composite/Wishlist/Update.php
index cb895085d7f..8e098708fb9 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Wishlist/Product/Composite/Wishlist/Update.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Wishlist/Product/Composite/Wishlist/Update.php
@@ -15,7 +15,7 @@ class Update extends \Magento\Customer\Controller\Adminhtml\Wishlist\Product\Com
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         // Update wishlist item
         $updateResult = new \Magento\Framework\DataObject();
diff --git a/app/code/Magento/Customer/Controller/Ajax/Login.php b/app/code/Magento/Customer/Controller/Ajax/Login.php
index 4258ebf1ef0..08b72b1e3ec 100644
--- a/app/code/Magento/Customer/Controller/Ajax/Login.php
+++ b/app/code/Magento/Customer/Controller/Ajax/Login.php
@@ -76,7 +76,7 @@ class Login extends \Magento\Framework\App\Action\Action
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $credentials = null;
         $httpBadRequestCode = 400;
diff --git a/app/code/Magento/Customer/Controller/Ajax/Logout.php b/app/code/Magento/Customer/Controller/Ajax/Logout.php
index 69ce4693b03..4d90a7ae39a 100644
--- a/app/code/Magento/Customer/Controller/Ajax/Logout.php
+++ b/app/code/Magento/Customer/Controller/Ajax/Logout.php
@@ -47,7 +47,7 @@ class Logout extends \Magento\Framework\App\Action\Action
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         $lastCustomerId = $this->customerSession->getId();
         $this->customerSession->logout()
diff --git a/app/code/Magento/Customer/Controller/Review.php b/app/code/Magento/Customer/Controller/Review.php
index 2a667e4c3e7..396ad3da692 100644
--- a/app/code/Magento/Customer/Controller/Review.php
+++ b/app/code/Magento/Customer/Controller/Review.php
@@ -30,7 +30,7 @@ class Review extends \Magento\Framework\App\Action\Action
     /**
      * @return \Magento\Framework\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         return $this->resultPageFactory->create();
     }
diff --git a/app/code/Magento/Customer/Controller/Section/Load.php b/app/code/Magento/Customer/Controller/Section/Load.php
index df4abe308ba..503c075d9bf 100644
--- a/app/code/Magento/Customer/Controller/Section/Load.php
+++ b/app/code/Magento/Customer/Controller/Section/Load.php
@@ -51,7 +51,7 @@ class Load extends \Magento\Framework\App\Action\Action
     /**
      * @return \Magento\Framework\Controller\Result\Json|\Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Json $resultJson */
         $resultJson = $this->resultJsonFactory->create();
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Account/ConfirmTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Account/ConfirmTest.php
index f3dee06b411..0a0d2dbbefd 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Account/ConfirmTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Account/ConfirmTest.php
@@ -190,7 +190,7 @@ class ConfirmTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/')
             ->willReturnSelf();
 
-        $this->assertInstanceOf('Magento\Framework\Controller\Result\Redirect', $this->model->execute());
+        $this->assertInstanceOf('Magento\Framework\Controller\Result\Redirect', $this->model->executeInternal());
     }
 
     /**
@@ -232,7 +232,7 @@ class ConfirmTest extends \PHPUnit_Framework_TestCase
             ->with($this->equalTo($testUrl))
             ->willReturnSelf();
 
-        $this->assertInstanceOf('Magento\Framework\Controller\Result\Redirect', $this->model->execute());
+        $this->assertInstanceOf('Magento\Framework\Controller\Result\Redirect', $this->model->executeInternal());
     }
 
     /**
@@ -307,7 +307,7 @@ class ConfirmTest extends \PHPUnit_Framework_TestCase
             ->method('getStore')
             ->will($this->returnValue($this->storeMock));
 
-        $this->model->execute();
+        $this->model->executeInternal();
     }
 
     /**
@@ -404,7 +404,7 @@ class ConfirmTest extends \PHPUnit_Framework_TestCase
             )
             ->willReturn($isSetFlag);
 
-        $this->model->execute();
+        $this->model->executeInternal();
     }
 
     /**
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Account/CreatePasswordTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Account/CreatePasswordTest.php
index 3a1172d0953..6ef1faa6378 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Account/CreatePasswordTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Account/CreatePasswordTest.php
@@ -108,7 +108,7 @@ class CreatePasswordTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/createpassword', [])
             ->willReturnSelf();
 
-        $this->assertEquals($redirectMock, $this->model->execute());
+        $this->assertEquals($redirectMock, $this->model->executeInternal());
     }
 
     public function testExecuteWithSession()
@@ -176,7 +176,7 @@ class CreatePasswordTest extends \PHPUnit_Framework_TestCase
             ->with($token)
             ->willReturnSelf();
 
-        $this->assertEquals($pageMock, $this->model->execute());
+        $this->assertEquals($pageMock, $this->model->executeInternal());
     }
 
     public function testExecuteWithException()
@@ -225,6 +225,6 @@ class CreatePasswordTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/forgotpassword', [])
             ->willReturnSelf();
 
-        $this->assertEquals($redirectMock, $this->model->execute());
+        $this->assertEquals($redirectMock, $this->model->executeInternal());
     }
 }
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Account/CreatePostTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Account/CreatePostTest.php
index c765dc83939..d8815ba253b 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Account/CreatePostTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Account/CreatePostTest.php
@@ -270,7 +270,7 @@ class CreatePostTest extends \PHPUnit_Framework_TestCase
         $this->customerRepository->expects($this->never())
             ->method('save');
 
-        $this->model->execute();
+        $this->model->executeInternal();
     }
 
     public function testRegenerateIdOnExecution()
@@ -297,7 +297,7 @@ class CreatePostTest extends \PHPUnit_Framework_TestCase
         $this->storeManagerMock->expects($this->once())
             ->method('getStore')
             ->willReturn($this->storeMock);
-        $this->model->execute();
+        $this->model->executeInternal();
     }
 
     /**
@@ -391,7 +391,7 @@ class CreatePostTest extends \PHPUnit_Framework_TestCase
             ->method('getTaxCalculationAddressType')
             ->will($this->returnValue($addressType));
 
-        $this->model->execute();
+        $this->model->executeInternal();
     }
 
     /**
@@ -539,7 +539,7 @@ class CreatePostTest extends \PHPUnit_Framework_TestCase
             ->method('getStore')
             ->will($this->returnValue($this->storeMock));
 
-        $this->model->execute();
+        $this->model->executeInternal();
     }
 
     public function getSuccessRedirectDataProvider()
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Account/CreateTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Account/CreateTest.php
index 0706355a39f..894582be4b3 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Account/CreateTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Account/CreateTest.php
@@ -116,7 +116,7 @@ class CreateTest extends \PHPUnit_Framework_TestCase
         $this->resultPageMock->expects($this->never())
             ->method('getLayout');
 
-        $this->object->execute();
+        $this->object->executeInternal();
     }
 
     /**
@@ -139,6 +139,6 @@ class CreateTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->willReturn($this->resultPageMock);
 
-        $this->object->execute();
+        $this->object->executeInternal();
     }
 }
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Account/EditPostTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Account/EditPostTest.php
index 991a4b17eca..acd413d0006 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Account/EditPostTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Account/EditPostTest.php
@@ -131,7 +131,7 @@ class EditPostTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/edit')
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirect, $this->model->execute());
+        $this->assertSame($this->resultRedirect, $this->model->executeInternal());
     }
 
     public function testNoPostValues()
@@ -150,7 +150,7 @@ class EditPostTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/edit')
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirect, $this->model->execute());
+        $this->assertSame($this->resultRedirect, $this->model->executeInternal());
     }
 
     public function testGeneralSave()
@@ -211,7 +211,7 @@ class EditPostTest extends \PHPUnit_Framework_TestCase
             ->with('customer/account')
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirect, $this->model->execute());
+        $this->assertSame($this->resultRedirect, $this->model->executeInternal());
     }
 
     /**
@@ -311,7 +311,7 @@ class EditPostTest extends \PHPUnit_Framework_TestCase
             ->willReturn($errors['counter']);
 
 
-        $this->assertSame($this->resultRedirect, $this->model->execute());
+        $this->assertSame($this->resultRedirect, $this->model->executeInternal());
     }
 
     /**
@@ -443,7 +443,7 @@ class EditPostTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/edit')
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirect, $this->model->execute());
+        $this->assertSame($this->resultRedirect, $this->model->executeInternal());
     }
 
     /**
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Account/ForgotPasswordPostTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Account/ForgotPasswordPostTest.php
index 8f060f2dd3b..0cf693299fe 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Account/ForgotPasswordPostTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Account/ForgotPasswordPostTest.php
@@ -107,7 +107,7 @@ class ForgotPasswordPostTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/forgotpassword')
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirect, $this->controller->execute());
+        $this->assertSame($this->resultRedirect, $this->controller->executeInternal());
     }
 
     public function testExecute()
@@ -143,7 +143,7 @@ class ForgotPasswordPostTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/')
             ->willReturnSelf();
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     public function testExecuteNoSuchEntityException()
@@ -179,7 +179,7 @@ class ForgotPasswordPostTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/')
             ->willReturnSelf();
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     public function testExecuteException()
@@ -207,7 +207,7 @@ class ForgotPasswordPostTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/forgotpassword')
             ->willReturnSelf();
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     protected function prepareContext()
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Account/LoginPostTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Account/LoginPostTest.php
index e71e413d7e1..ca9a975b7cd 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Account/LoginPostTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Account/LoginPostTest.php
@@ -133,7 +133,7 @@ class LoginPostTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/')
             ->willReturnSelf();
 
-        $this->assertSame($this->redirect, $this->controller->execute());
+        $this->assertSame($this->redirect, $this->controller->executeInternal());
     }
 
     /**
@@ -176,7 +176,7 @@ class LoginPostTest extends \PHPUnit_Framework_TestCase
             ->method('getRedirect')
             ->willReturn($this->redirect);
 
-        $this->assertSame($this->redirect, $this->controller->execute());
+        $this->assertSame($this->redirect, $this->controller->executeInternal());
     }
 
     public function testExecuteEmptyLoginData()
@@ -207,7 +207,7 @@ class LoginPostTest extends \PHPUnit_Framework_TestCase
             ->method('getRedirect')
             ->willReturn($this->redirect);
 
-        $this->assertSame($this->redirect, $this->controller->execute());
+        $this->assertSame($this->redirect, $this->controller->executeInternal());
     }
 
     public function testExecuteSuccess()
@@ -255,7 +255,7 @@ class LoginPostTest extends \PHPUnit_Framework_TestCase
             ->method('getRedirect')
             ->willReturn($this->redirect);
 
-        $this->assertSame($this->redirect, $this->controller->execute());
+        $this->assertSame($this->redirect, $this->controller->executeInternal());
     }
 
     /**
@@ -303,7 +303,7 @@ class LoginPostTest extends \PHPUnit_Framework_TestCase
             ->method('getRedirect')
             ->willReturn($this->redirect);
 
-        $this->assertSame($this->redirect, $this->controller->execute());
+        $this->assertSame($this->redirect, $this->controller->executeInternal());
     }
 
     /**
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Account/ResetPasswordPostTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Account/ResetPasswordPostTest.php
index 6cb488a07c6..5581be2e75a 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Account/ResetPasswordPostTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Account/ResetPasswordPostTest.php
@@ -142,7 +142,7 @@ class ResetPasswordPostTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/login', [])
             ->willReturnSelf();
 
-        $this->assertEquals($redirectMock, $this->model->execute());
+        $this->assertEquals($redirectMock, $this->model->executeInternal());
     }
 
     public function testExecuteWithException()
@@ -208,7 +208,7 @@ class ResetPasswordPostTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/createPassword', ['id' => $customerId, 'token' => $token])
             ->willReturnSelf();
 
-        $this->assertEquals($redirectMock, $this->model->execute());
+        $this->assertEquals($redirectMock, $this->model->executeInternal());
     }
 
     public function testExecuteWithWrongConfirmation()
@@ -255,7 +255,7 @@ class ResetPasswordPostTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/createPassword', ['id' => $customerId, 'token' => $token])
             ->willReturnSelf();
 
-        $this->assertEquals($redirectMock, $this->model->execute());
+        $this->assertEquals($redirectMock, $this->model->executeInternal());
     }
 
     public function testExecuteWithEmptyPassword()
@@ -302,6 +302,6 @@ class ResetPasswordPostTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/createPassword', ['id' => $customerId, 'token' => $token])
             ->willReturnSelf();
 
-        $this->assertEquals($redirectMock, $this->model->execute());
+        $this->assertEquals($redirectMock, $this->model->executeInternal());
     }
 }
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Address/FormPostTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Address/FormPostTest.php
index 39fa2018cff..e082233b6e2 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Address/FormPostTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Address/FormPostTest.php
@@ -342,7 +342,7 @@ class FormPostTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/')
             ->willReturnSelf();
 
-        $this->assertEquals($this->resultRedirect, $this->model->execute());
+        $this->assertEquals($this->resultRedirect, $this->model->executeInternal());
     }
 
     public function testExecuteNoPostData()
@@ -389,7 +389,7 @@ class FormPostTest extends \PHPUnit_Framework_TestCase
             ->with($url)
             ->willReturnSelf();
 
-        $this->assertEquals($this->resultRedirect, $this->model->execute());
+        $this->assertEquals($this->resultRedirect, $this->model->executeInternal());
     }
 
     /**
@@ -575,7 +575,7 @@ class FormPostTest extends \PHPUnit_Framework_TestCase
             ->with($url)
             ->willReturnSelf();
 
-        $this->assertEquals($this->resultRedirect, $this->model->execute());
+        $this->assertEquals($this->resultRedirect, $this->model->executeInternal());
     }
 
     public function dataProviderTestExecute()
@@ -668,7 +668,7 @@ class FormPostTest extends \PHPUnit_Framework_TestCase
             ->with($url)
             ->willReturnSelf();
 
-        $this->assertEquals($this->resultRedirect, $this->model->execute());
+        $this->assertEquals($this->resultRedirect, $this->model->executeInternal());
     }
 
     public function testExecuteException()
@@ -731,6 +731,6 @@ class FormPostTest extends \PHPUnit_Framework_TestCase
             ->with($url)
             ->willReturnSelf();
 
-        $this->assertEquals($this->resultRedirect, $this->model->execute());
+        $this->assertEquals($this->resultRedirect, $this->model->executeInternal());
     }
 }
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/IndexTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/IndexTest.php
index 38d6e7d53ef..17c90338031 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/IndexTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/IndexTest.php
@@ -108,7 +108,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Customer\Controller\Adminhtml\Index\Index::execute
+     * @covers \Magento\Customer\Controller\Adminhtml\Index\Index::executeInternal
      */
     public function testExecute()
     {
@@ -140,12 +140,12 @@ class IndexTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Framework\View\Result\Page',
-            $this->indexController->execute()
+            $this->indexController->executeInternal()
         );
     }
 
     /**
-     * @covers \Magento\Customer\Controller\Adminhtml\Index\Index::execute
+     * @covers \Magento\Customer\Controller\Adminhtml\Index\Index::executeInternal
      */
     public function testExecuteAjax()
     {
@@ -161,7 +161,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Forward',
-            $this->indexController->execute()
+            $this->indexController->executeInternal()
         );
     }
 
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/InlineEditTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/InlineEditTest.php
index e806e302013..181b8dbab6e 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/InlineEditTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/InlineEditTest.php
@@ -259,7 +259,7 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase
             ->method('save')
             ->with($this->customerData);
         $this->prepareMocksForErrorMessagesProcessing();
-        $this->assertSame($this->resultJson, $this->controller->execute());
+        $this->assertSame($this->resultJson, $this->controller->executeInternal());
     }
 
     public function testExecuteWithoutItems()
@@ -283,7 +283,7 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase
                 'error' => true,
             ])
             ->willReturnSelf();
-        $this->assertSame($this->resultJson, $this->controller->execute());
+        $this->assertSame($this->resultJson, $this->controller->executeInternal());
     }
 
     public function testExecuteLocalizedException()
@@ -305,7 +305,7 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase
             ->with($exception);
 
         $this->prepareMocksForErrorMessagesProcessing();
-        $this->assertSame($this->resultJson, $this->controller->execute());
+        $this->assertSame($this->resultJson, $this->controller->executeInternal());
     }
 
     public function testExecuteException()
@@ -327,6 +327,6 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase
             ->with($exception);
 
         $this->prepareMocksForErrorMessagesProcessing();
-        $this->assertSame($this->resultJson, $this->controller->execute());
+        $this->assertSame($this->resultJson, $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassAssignGroupTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassAssignGroupTest.php
index 4cbd57be538..f78e202b884 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassAssignGroupTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassAssignGroupTest.php
@@ -172,7 +172,7 @@ class MassAssignGroupTest extends \PHPUnit_Framework_TestCase
             ->with('customer/*/index')
             ->willReturnSelf();
 
-        $this->massAction->execute();
+        $this->massAction->executeInternal();
     }
 
     public function testExecuteWithException()
@@ -191,6 +191,6 @@ class MassAssignGroupTest extends \PHPUnit_Framework_TestCase
             ->method('addError')
             ->with('Some message.');
 
-        $this->massAction->execute();
+        $this->massAction->executeInternal();
     }
 }
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassDeleteTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassDeleteTest.php
index de91d73d10a..dcfc2084e26 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassDeleteTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassDeleteTest.php
@@ -172,7 +172,7 @@ class MassDeleteTest extends \PHPUnit_Framework_TestCase
             ->with('customer/*/index')
             ->willReturnSelf();
 
-        $this->massAction->execute();
+        $this->massAction->executeInternal();
     }
 
     public function testExecuteWithException()
@@ -191,6 +191,6 @@ class MassDeleteTest extends \PHPUnit_Framework_TestCase
             ->method('addError')
             ->with('Some message.');
 
-        $this->massAction->execute();
+        $this->massAction->executeInternal();
     }
 }
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassSubscribeTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassSubscribeTest.php
index 8aff6b96313..6e288583c1c 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassSubscribeTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassSubscribeTest.php
@@ -188,7 +188,7 @@ class MassSubscribeTest extends \PHPUnit_Framework_TestCase
             ->with('customer/*/index')
             ->willReturnSelf();
 
-        $this->massAction->execute();
+        $this->massAction->executeInternal();
     }
 
     public function testExecuteWithException()
@@ -207,6 +207,6 @@ class MassSubscribeTest extends \PHPUnit_Framework_TestCase
             ->method('addError')
             ->with('Some message.');
 
-        $this->massAction->execute();
+        $this->massAction->executeInternal();
     }
 }
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassUnsubscribeTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassUnsubscribeTest.php
index 00eaa7546e7..9129be9c89f 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassUnsubscribeTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassUnsubscribeTest.php
@@ -188,7 +188,7 @@ class MassUnsubscribeTest extends \PHPUnit_Framework_TestCase
             ->with('customer/*/index')
             ->willReturnSelf();
 
-        $this->massAction->execute();
+        $this->massAction->executeInternal();
     }
 
     public function testExecuteWithException()
@@ -207,6 +207,6 @@ class MassUnsubscribeTest extends \PHPUnit_Framework_TestCase
             ->method('addError')
             ->with('Some message.');
 
-        $this->massAction->execute();
+        $this->massAction->executeInternal();
     }
 }
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/NewsletterTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/NewsletterTest.php
index 97599618c34..36c3ff14267 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/NewsletterTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/NewsletterTest.php
@@ -256,7 +256,7 @@ class NewsletterTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Framework\View\Result\Layout',
-            $this->_testedObject->execute()
+            $this->_testedObject->executeInternal()
         );
     }
 }
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/ResetPasswordTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/ResetPasswordTest.php
index a4a9df750dc..416f8055bec 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/ResetPasswordTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/ResetPasswordTest.php
@@ -236,7 +236,7 @@ class ResetPasswordTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Redirect',
-            $this->_testedObject->execute()
+            $this->_testedObject->executeInternal()
         );
     }
 
@@ -290,7 +290,7 @@ class ResetPasswordTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Redirect',
-            $this->_testedObject->execute()
+            $this->_testedObject->executeInternal()
         );
     }
 
@@ -329,7 +329,7 @@ class ResetPasswordTest extends \PHPUnit_Framework_TestCase
             ->method('addMessage')
             ->with($error);
 
-        $this->_testedObject->execute();
+        $this->_testedObject->executeInternal();
     }
 
     public function testResetPasswordActionCoreExceptionWarn()
@@ -358,7 +358,7 @@ class ResetPasswordTest extends \PHPUnit_Framework_TestCase
             ->method('addMessage')
             ->with(new \Magento\Framework\Message\Error($warningText));
 
-        $this->_testedObject->execute();
+        $this->_testedObject->executeInternal();
     }
 
     public function testResetPasswordActionException()
@@ -399,7 +399,7 @@ class ResetPasswordTest extends \PHPUnit_Framework_TestCase
             $this->equalTo('Something went wrong while resetting customer password.')
         );
 
-        $this->_testedObject->execute();
+        $this->_testedObject->executeInternal();
     }
 
     public function testResetPasswordActionSendEmail()
@@ -479,7 +479,7 @@ class ResetPasswordTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Redirect',
-            $this->_testedObject->execute()
+            $this->_testedObject->executeInternal()
         );
     }
 }
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/SaveTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/SaveTest.php
index 95c875393ed..dee2600fb33 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/SaveTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/SaveTest.php
@@ -239,7 +239,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Customer\Controller\Adminhtml\Index\Index::execute
+     * @covers \Magento\Customer\Controller\Adminhtml\Index\Index::executeInternal
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
     public function testExecuteWithExistentCustomer()
@@ -512,11 +512,11 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             ->with('customer/*/edit', ['id' => $customerId, '_current' => true])
             ->willReturn(true);
 
-        $this->assertEquals($redirectMock, $this->model->execute());
+        $this->assertEquals($redirectMock, $this->model->executeInternal());
     }
 
     /**
-     * @covers \Magento\Customer\Controller\Adminhtml\Index\Index::execute
+     * @covers \Magento\Customer\Controller\Adminhtml\Index\Index::executeInternal
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
     public function testExecuteWithNewCustomer()
@@ -760,11 +760,11 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             ->with('customer/index', [])
             ->willReturnSelf();
 
-        $this->assertEquals($redirectMock, $this->model->execute());
+        $this->assertEquals($redirectMock, $this->model->executeInternal());
     }
 
     /**
-     * @covers \Magento\Customer\Controller\Adminhtml\Index\Index::execute
+     * @covers \Magento\Customer\Controller\Adminhtml\Index\Index::executeInternal
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
     public function testExecuteWithNewCustomerAndValidationException()
@@ -900,11 +900,11 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             ->with('customer/*/new', ['_current' => true])
             ->willReturn(true);
 
-        $this->assertEquals($redirectMock, $this->model->execute());
+        $this->assertEquals($redirectMock, $this->model->executeInternal());
     }
 
     /**
-     * @covers \Magento\Customer\Controller\Adminhtml\Index\Index::execute
+     * @covers \Magento\Customer\Controller\Adminhtml\Index\Index::executeInternal
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
     public function testExecuteWithNewCustomerAndLocalizedException()
@@ -1040,11 +1040,11 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             ->with('customer/*/new', ['_current' => true])
             ->willReturn(true);
 
-        $this->assertEquals($redirectMock, $this->model->execute());
+        $this->assertEquals($redirectMock, $this->model->executeInternal());
     }
 
     /**
-     * @covers \Magento\Customer\Controller\Adminhtml\Index\Index::execute
+     * @covers \Magento\Customer\Controller\Adminhtml\Index\Index::executeInternal
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
     public function testExecuteWithNewCustomerAndException()
@@ -1181,6 +1181,6 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             ->with('customer/*/new', ['_current' => true])
             ->willReturn(true);
 
-        $this->assertEquals($redirectMock, $this->model->execute());
+        $this->assertEquals($redirectMock, $this->model->executeInternal());
     }
 }
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/ValidateTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/ValidateTest.php
index f4065cc205e..c7abdf3bb46 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/ValidateTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/ValidateTest.php
@@ -186,7 +186,7 @@ class ValidateTest extends \PHPUnit_Framework_TestCase
             ->method('validate')
             ->willReturn($validationResult);
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     public function testExecuteWithoutAddresses()
@@ -225,7 +225,7 @@ class ValidateTest extends \PHPUnit_Framework_TestCase
             ->method('validate')
             ->willReturn($validationResult);
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     public function testExecuteWithException()
@@ -271,6 +271,6 @@ class ValidateTest extends \PHPUnit_Framework_TestCase
             ->method('validate')
             ->willReturn($validationResult);
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/ViewfileTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/ViewfileTest.php
index afa437c58ac..3b838c369b0 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/ViewfileTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/ViewfileTest.php
@@ -107,7 +107,7 @@ class ViewfileTest extends \PHPUnit_Framework_TestCase
     {
         /** @var \Magento\Customer\Controller\Adminhtml\Index\Viewfile $controller */
         $controller = $this->objectManager->getObject('Magento\Customer\Controller\Adminhtml\Index\Viewfile');
-        $controller->execute();
+        $controller->executeInternal();
     }
 
     public function testExecuteParamFile()
@@ -154,7 +154,7 @@ class ViewfileTest extends \PHPUnit_Framework_TestCase
                 'fileFactory' => $fileFactoryMock
             ]
         );
-        $controller->execute();
+        $controller->executeInternal();
     }
 
     public function testExecuteGetParamImage()
@@ -217,6 +217,6 @@ class ViewfileTest extends \PHPUnit_Framework_TestCase
                 'resultRawFactory' => $this->resultRawFactoryMock
             ]
         );
-        $this->assertSame($this->resultRawMock, $controller->execute());
+        $this->assertSame($this->resultRawMock, $controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/System/Config/Validatevat/ValidateTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/System/Config/Validatevat/ValidateTest.php
index ac5625eadef..377f7d331a6 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/System/Config/Validatevat/ValidateTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/System/Config/Validatevat/ValidateTest.php
@@ -104,7 +104,7 @@ class ValidateTest extends \PHPUnit_Framework_TestCase
             ])
             ->willReturn($json);
 
-        $this->assertEquals($json, $this->controller->execute());
+        $this->assertEquals($json, $this->controller->executeInternal());
     }
 
     /**
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Ajax/LoginTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Ajax/LoginTest.php
index 77260f56c58..e1ec62d3537 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Ajax/LoginTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Ajax/LoginTest.php
@@ -204,7 +204,7 @@ class LoginTest extends \PHPUnit_Framework_TestCase
             ->method('setData')
             ->with($result)
             ->willReturn($loginSuccessResponse);
-        $this->assertEquals($loginSuccessResponse, $this->object->execute());
+        $this->assertEquals($loginSuccessResponse, $this->object->executeInternal());
     }
 
     public function testLoginFailure()
@@ -260,6 +260,6 @@ class LoginTest extends \PHPUnit_Framework_TestCase
             ->with($result)
             ->willReturn($loginFailureResponse);
 
-        $this->assertEquals($loginFailureResponse, $this->object->execute());
+        $this->assertEquals($loginFailureResponse, $this->object->executeInternal());
     }
 }
diff --git a/app/code/Magento/CustomerImportExport/Controller/Adminhtml/Index/ExportCsv.php b/app/code/Magento/CustomerImportExport/Controller/Adminhtml/Index/ExportCsv.php
index d078bd13b33..8afd580c5b4 100644
--- a/app/code/Magento/CustomerImportExport/Controller/Adminhtml/Index/ExportCsv.php
+++ b/app/code/Magento/CustomerImportExport/Controller/Adminhtml/Index/ExportCsv.php
@@ -37,7 +37,7 @@ class ExportCsv extends \Magento\Backend\App\Action
      *
      * @return \Magento\Framework\App\ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $fileName = 'customers.csv';
diff --git a/app/code/Magento/CustomerImportExport/Controller/Adminhtml/Index/ExportXml.php b/app/code/Magento/CustomerImportExport/Controller/Adminhtml/Index/ExportXml.php
index 7a5edb1d278..686e829e3c5 100644
--- a/app/code/Magento/CustomerImportExport/Controller/Adminhtml/Index/ExportXml.php
+++ b/app/code/Magento/CustomerImportExport/Controller/Adminhtml/Index/ExportXml.php
@@ -37,7 +37,7 @@ class ExportXml extends \Magento\Backend\App\Action
      *
      * @return \Magento\Framework\App\ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $fileName = 'customers.xml';
diff --git a/app/code/Magento/Directory/Controller/Adminhtml/Json/CountryRegion.php b/app/code/Magento/Directory/Controller/Adminhtml/Json/CountryRegion.php
index 412028bdd8f..b8006ccfd07 100644
--- a/app/code/Magento/Directory/Controller/Adminhtml/Json/CountryRegion.php
+++ b/app/code/Magento/Directory/Controller/Adminhtml/Json/CountryRegion.php
@@ -13,7 +13,7 @@ class CountryRegion extends \Magento\Backend\App\Action
      *
      * @return string
      */
-    public function execute()
+    public function executeInternal()
     {
         $arrRes = [];
 
diff --git a/app/code/Magento/Directory/Controller/Currency/SwitchAction.php b/app/code/Magento/Directory/Controller/Currency/SwitchAction.php
index b8aada56cf7..1a30600ef8a 100644
--- a/app/code/Magento/Directory/Controller/Currency/SwitchAction.php
+++ b/app/code/Magento/Directory/Controller/Currency/SwitchAction.php
@@ -11,7 +11,7 @@ class SwitchAction extends \Magento\Framework\App\Action\Action
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Store\Model\StoreManagerInterface $storeManager */
         $storeManager = $this->_objectManager->get('Magento\Store\Model\StoreManagerInterface');
diff --git a/app/code/Magento/Downloadable/Controller/Adminhtml/Downloadable/File/Upload.php b/app/code/Magento/Downloadable/Controller/Adminhtml/Downloadable/File/Upload.php
index 6e056ee9e45..a762b2d52c2 100644
--- a/app/code/Magento/Downloadable/Controller/Adminhtml/Downloadable/File/Upload.php
+++ b/app/code/Magento/Downloadable/Controller/Adminhtml/Downloadable/File/Upload.php
@@ -69,7 +69,7 @@ class Upload extends \Magento\Downloadable\Controller\Adminhtml\Downloadable\Fil
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $type = $this->getRequest()->getParam('type');
         $tmpPath = '';
diff --git a/app/code/Magento/Downloadable/Controller/Adminhtml/Downloadable/Product/Edit/Form.php b/app/code/Magento/Downloadable/Controller/Adminhtml/Downloadable/Product/Edit/Form.php
index 926491e0735..1d966b22bfb 100644
--- a/app/code/Magento/Downloadable/Controller/Adminhtml/Downloadable/Product/Edit/Form.php
+++ b/app/code/Magento/Downloadable/Controller/Adminhtml/Downloadable/Product/Edit/Form.php
@@ -13,7 +13,7 @@ class Form extends \Magento\Catalog\Controller\Adminhtml\Product\Edit
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initProduct();
         $this->getResponse()->setBody(
diff --git a/app/code/Magento/Downloadable/Controller/Adminhtml/Downloadable/Product/Edit/Link.php b/app/code/Magento/Downloadable/Controller/Adminhtml/Downloadable/Product/Edit/Link.php
index 0da0cf5fb96..9cc1bb7b00f 100644
--- a/app/code/Magento/Downloadable/Controller/Adminhtml/Downloadable/Product/Edit/Link.php
+++ b/app/code/Magento/Downloadable/Controller/Adminhtml/Downloadable/Product/Edit/Link.php
@@ -77,7 +77,7 @@ class Link extends \Magento\Catalog\Controller\Adminhtml\Product\Edit
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $linkId = $this->getRequest()->getParam('id', 0);
         $type = $this->getRequest()->getParam('type', 0);
diff --git a/app/code/Magento/Downloadable/Controller/Adminhtml/Downloadable/Product/Edit/Sample.php b/app/code/Magento/Downloadable/Controller/Adminhtml/Downloadable/Product/Edit/Sample.php
index 746b5242d5c..3176cb802ca 100644
--- a/app/code/Magento/Downloadable/Controller/Adminhtml/Downloadable/Product/Edit/Sample.php
+++ b/app/code/Magento/Downloadable/Controller/Adminhtml/Downloadable/Product/Edit/Sample.php
@@ -31,7 +31,7 @@ class Sample extends \Magento\Downloadable\Controller\Adminhtml\Downloadable\Pro
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $sampleId = $this->getRequest()->getParam('id', 0);
         /** @var \Magento\Downloadable\Model\Sample $sample */
diff --git a/app/code/Magento/Downloadable/Controller/Customer/Products.php b/app/code/Magento/Downloadable/Controller/Customer/Products.php
index 78e865dd8c3..b05852738e1 100644
--- a/app/code/Magento/Downloadable/Controller/Customer/Products.php
+++ b/app/code/Magento/Downloadable/Controller/Customer/Products.php
@@ -34,14 +34,14 @@ class Products extends \Magento\Framework\App\Action\Action
      * @param RequestInterface $request
      * @return \Magento\Framework\App\ResponseInterface
      */
-    public function dispatch(RequestInterface $request)
+    public function execute(RequestInterface $request)
     {
         $loginUrl = $this->_objectManager->get('Magento\Customer\Model\Url')->getLoginUrl();
 
         if (!$this->_customerSession->authenticate($loginUrl)) {
             $this->_actionFlag->set('', self::FLAG_NO_DISPATCH, true);
         }
-        return parent::dispatch($request);
+        return parent::execute($request);
     }
 
     /**
@@ -49,7 +49,7 @@ class Products extends \Magento\Framework\App\Action\Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         if ($block = $this->_view->getLayout()->getBlock('downloadable_customer_products_list')) {
diff --git a/app/code/Magento/Downloadable/Controller/Download/Link.php b/app/code/Magento/Downloadable/Controller/Download/Link.php
index c2cd4b91b92..59f49533c9e 100644
--- a/app/code/Magento/Downloadable/Controller/Download/Link.php
+++ b/app/code/Magento/Downloadable/Controller/Download/Link.php
@@ -31,7 +31,7 @@ class Link extends \Magento\Downloadable\Controller\Download
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      * @SuppressWarnings(PHPMD.ExitExpression)
      */
-    public function execute()
+    public function executeInternal()
     {
         $session = $this->_getCustomerSession();
 
diff --git a/app/code/Magento/Downloadable/Controller/Download/LinkSample.php b/app/code/Magento/Downloadable/Controller/Download/LinkSample.php
index 351fc26c55c..46747905711 100644
--- a/app/code/Magento/Downloadable/Controller/Download/LinkSample.php
+++ b/app/code/Magento/Downloadable/Controller/Download/LinkSample.php
@@ -17,7 +17,7 @@ class LinkSample extends \Magento\Downloadable\Controller\Download
      * @return ResponseInterface
      * @SuppressWarnings(PHPMD.ExitExpression)
      */
-    public function execute()
+    public function executeInternal()
     {
         $linkId = $this->getRequest()->getParam('link_id', 0);
         /** @var \Magento\Downloadable\Model\Link $link */
diff --git a/app/code/Magento/Downloadable/Controller/Download/Sample.php b/app/code/Magento/Downloadable/Controller/Download/Sample.php
index a8cecbc48bd..c6715dbf90c 100644
--- a/app/code/Magento/Downloadable/Controller/Download/Sample.php
+++ b/app/code/Magento/Downloadable/Controller/Download/Sample.php
@@ -17,7 +17,7 @@ class Sample extends \Magento\Downloadable\Controller\Download
      * @return ResponseInterface
      * @SuppressWarnings(PHPMD.ExitExpression)
      */
-    public function execute()
+    public function executeInternal()
     {
         $sampleId = $this->getRequest()->getParam('sample_id', 0);
         /** @var \Magento\Downloadable\Model\Sample $sample */
diff --git a/app/code/Magento/Downloadable/Test/Unit/Controller/Adminhtml/Downloadable/File/UploadTest.php b/app/code/Magento/Downloadable/Test/Unit/Controller/Adminhtml/Downloadable/File/UploadTest.php
index 7c1040876e8..1a900b56c3f 100644
--- a/app/code/Magento/Downloadable/Test/Unit/Controller/Adminhtml/Downloadable/File/UploadTest.php
+++ b/app/code/Magento/Downloadable/Test/Unit/Controller/Adminhtml/Downloadable/File/UploadTest.php
@@ -165,6 +165,6 @@ class UploadTest extends \PHPUnit_Framework_TestCase
         $this->resultFactory->expects($this->once())->method('create')->willReturn($resultJson);
         $resultJson->expects($this->once())->method('setData')->willReturnSelf();
 
-        $this->assertEquals($resultJson, $this->upload->execute());
+        $this->assertEquals($resultJson, $this->upload->executeInternal());
     }
 }
diff --git a/app/code/Magento/Downloadable/Test/Unit/Controller/Adminhtml/Downloadable/Product/Edit/LinkTest.php b/app/code/Magento/Downloadable/Test/Unit/Controller/Adminhtml/Downloadable/Product/Edit/LinkTest.php
index 5e8c472595f..887e35d8b11 100644
--- a/app/code/Magento/Downloadable/Test/Unit/Controller/Adminhtml/Downloadable/Product/Edit/LinkTest.php
+++ b/app/code/Magento/Downloadable/Test/Unit/Controller/Adminhtml/Downloadable/Product/Edit/LinkTest.php
@@ -171,7 +171,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
         $this->objectManager->expects($this->once())->method('create')
             ->will($this->returnValue($this->linkModel));
 
-        $this->link->execute();
+        $this->link->executeInternal();
     }
 
     /**
@@ -217,7 +217,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
         $this->objectManager->expects($this->once())->method('create')
             ->will($this->returnValue($this->linkModel));
 
-        $this->link->execute();
+        $this->link->executeInternal();
     }
 
     /**
diff --git a/app/code/Magento/Downloadable/Test/Unit/Controller/Adminhtml/Downloadable/Product/Edit/SampleTest.php b/app/code/Magento/Downloadable/Test/Unit/Controller/Adminhtml/Downloadable/Product/Edit/SampleTest.php
index 88f7b2a301c..e2de4bde347 100644
--- a/app/code/Magento/Downloadable/Test/Unit/Controller/Adminhtml/Downloadable/Product/Edit/SampleTest.php
+++ b/app/code/Magento/Downloadable/Test/Unit/Controller/Adminhtml/Downloadable/Product/Edit/SampleTest.php
@@ -164,7 +164,7 @@ class SampleTest extends \PHPUnit_Framework_TestCase
         $this->objectManager->expects($this->once())->method('create')
             ->will($this->returnValue($this->sampleModel));
 
-        $this->sample->execute();
+        $this->sample->executeInternal();
     }
 
     /**
@@ -205,6 +205,6 @@ class SampleTest extends \PHPUnit_Framework_TestCase
         $this->objectManager->expects($this->once())->method('create')
             ->will($this->returnValue($this->sampleModel));
 
-        $this->sample->execute();
+        $this->sample->executeInternal();
     }
 }
diff --git a/app/code/Magento/Downloadable/Test/Unit/Controller/Download/LinkSampleTest.php b/app/code/Magento/Downloadable/Test/Unit/Controller/Download/LinkSampleTest.php
index 110ce5fe279..9d58bbd27ef 100644
--- a/app/code/Magento/Downloadable/Test/Unit/Controller/Download/LinkSampleTest.php
+++ b/app/code/Magento/Downloadable/Test/Unit/Controller/Download/LinkSampleTest.php
@@ -191,7 +191,7 @@ class LinkSampleTest extends \PHPUnit_Framework_TestCase
         $this->redirect->expects($this->once())->method('getRedirectUrl')->willReturn('redirect_url');
         $this->response->expects($this->once())->method('setRedirect')->with('redirect_url')->willReturnSelf();
 
-        $this->assertEquals($this->response, $this->linkSample->execute());
+        $this->assertEquals($this->response, $this->linkSample->executeInternal());
     }
 
     public function testExecuteLinkTypeFile()
@@ -238,6 +238,6 @@ class LinkSampleTest extends \PHPUnit_Framework_TestCase
         $this->redirect->expects($this->once())->method('getRedirectUrl')->willReturn('redirect_url');
         $this->response->expects($this->once())->method('setRedirect')->with('redirect_url')->willReturnSelf();
 
-        $this->assertEquals($this->response, $this->linkSample->execute());
+        $this->assertEquals($this->response, $this->linkSample->executeInternal());
     }
 }
diff --git a/app/code/Magento/Downloadable/Test/Unit/Controller/Download/LinkTest.php b/app/code/Magento/Downloadable/Test/Unit/Controller/Download/LinkTest.php
index 7801f285941..939b3786f12 100644
--- a/app/code/Magento/Downloadable/Test/Unit/Controller/Download/LinkTest.php
+++ b/app/code/Magento/Downloadable/Test/Unit/Controller/Download/LinkTest.php
@@ -236,7 +236,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
             ->with("We can't find the link you requested.");
         $this->redirect->expects($this->once())->method('redirect')->with($this->response, '*/customer/products', []);
 
-        $this->assertEquals($this->response, $this->link->execute());
+        $this->assertEquals($this->response, $this->link->executeInternal());
     }
 
     public function testGetLinkForGuestCustomer()
@@ -287,7 +287,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
             ->willReturn('before_auth_url');
         $this->session->expects($this->once())->method('setBeforeAuthUrl')->with('before_auth_url')->willReturnSelf();
 
-        $this->assertNull($this->link->execute());
+        $this->assertNull($this->link->executeInternal());
     }
 
     public function testGetLinkForWrongCustomer()
@@ -327,7 +327,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
             ->with("We can't find the link you requested.");
         $this->redirect->expects($this->once())->method('redirect')->with($this->response, '*/customer/products', []);
 
-        $this->assertEquals($this->response, $this->link->execute());
+        $this->assertEquals($this->response, $this->link->executeInternal());
     }
 
     public function testExceptionInUpdateLinkStatus()
@@ -371,7 +371,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
             ->willReturnSelf();
         $this->redirect->expects($this->once())->method('redirect')->with($this->response, '*/customer/products', []);
 
-        $this->assertEquals($this->response, $this->link->execute());
+        $this->assertEquals($this->response, $this->link->executeInternal());
     }
 
     private function processDownload($resource, $resourceType)
@@ -448,7 +448,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
         $this->linkPurchasedItem->expects($this->once())->method('getStatus')->willReturn($status);
         $this->messageManager->expects($this->once())->method($messageType)->with($notice)->willReturnSelf();
 
-        $this->assertEquals($this->response, $this->link->execute());
+        $this->assertEquals($this->response, $this->link->executeInternal());
     }
 
     /**
diff --git a/app/code/Magento/Downloadable/Test/Unit/Controller/Download/SampleTest.php b/app/code/Magento/Downloadable/Test/Unit/Controller/Download/SampleTest.php
index 7366846899d..42933e534d0 100644
--- a/app/code/Magento/Downloadable/Test/Unit/Controller/Download/SampleTest.php
+++ b/app/code/Magento/Downloadable/Test/Unit/Controller/Download/SampleTest.php
@@ -191,7 +191,7 @@ class SampleTest extends \PHPUnit_Framework_TestCase
         $this->redirect->expects($this->once())->method('getRedirectUrl')->willReturn('redirect_url');
         $this->response->expects($this->once())->method('setRedirect')->with('redirect_url')->willReturnSelf();
 
-        $this->assertEquals($this->response, $this->sample->execute());
+        $this->assertEquals($this->response, $this->sample->executeInternal());
     }
 
     public function testExecuteLinkTypeFile()
@@ -234,6 +234,6 @@ class SampleTest extends \PHPUnit_Framework_TestCase
         $this->redirect->expects($this->once())->method('getRedirectUrl')->willReturn('redirect_url');
         $this->response->expects($this->once())->method('setRedirect')->with('redirect_url')->willReturnSelf();
 
-        $this->assertEquals($this->response, $this->sample->execute());
+        $this->assertEquals($this->response, $this->sample->executeInternal());
     }
 }
diff --git a/app/code/Magento/Email/Controller/Adminhtml/Email/Template/DefaultTemplate.php b/app/code/Magento/Email/Controller/Adminhtml/Email/Template/DefaultTemplate.php
index 116d8871017..3ffb0528e23 100644
--- a/app/code/Magento/Email/Controller/Adminhtml/Email/Template/DefaultTemplate.php
+++ b/app/code/Magento/Email/Controller/Adminhtml/Email/Template/DefaultTemplate.php
@@ -32,7 +32,7 @@ class DefaultTemplate extends \Magento\Email\Controller\Adminhtml\Email\Template
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $template = $this->_initTemplate('id');
diff --git a/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Delete.php b/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Delete.php
index 7022d18ff3c..04127a7c311 100644
--- a/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Delete.php
+++ b/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Delete.php
@@ -13,7 +13,7 @@ class Delete extends \Magento\Email\Controller\Adminhtml\Email\Template
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $template = $this->_initTemplate('id');
         if ($template->getId()) {
diff --git a/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Edit.php b/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Edit.php
index 017f05898d9..653094a7baf 100644
--- a/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Edit.php
+++ b/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Edit.php
@@ -13,7 +13,7 @@ class Edit extends \Magento\Email\Controller\Adminhtml\Email\Template
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $template = $this->_initTemplate('id');
diff --git a/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Grid.php b/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Grid.php
index 8205fa3e7df..0a63dad7192 100644
--- a/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Grid.php
+++ b/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Grid.php
@@ -13,7 +13,7 @@ class Grid extends \Magento\Email\Controller\Adminhtml\Email\Template
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout(false);
         $this->_view->renderLayout();
diff --git a/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Index.php b/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Index.php
index 39f16849345..892affd8da8 100644
--- a/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Index.php
+++ b/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Email\Controller\Adminhtml\Email\Template
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->getRequest()->getQuery('ajax')) {
             $this->_forward('grid');
diff --git a/app/code/Magento/Email/Controller/Adminhtml/Email/Template/NewAction.php b/app/code/Magento/Email/Controller/Adminhtml/Email/Template/NewAction.php
index 4e405353acf..b92f01f12bf 100644
--- a/app/code/Magento/Email/Controller/Adminhtml/Email/Template/NewAction.php
+++ b/app/code/Magento/Email/Controller/Adminhtml/Email/Template/NewAction.php
@@ -13,7 +13,7 @@ class NewAction extends \Magento\Email\Controller\Adminhtml\Email\Template
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_forward('edit');
     }
diff --git a/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Preview.php b/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Preview.php
index fceea747f03..9ce1e0e4712 100644
--- a/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Preview.php
+++ b/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Preview.php
@@ -13,7 +13,7 @@ class Preview extends \Magento\Email\Controller\Adminhtml\Email\Template
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->_view->loadLayout('systemPreview');
diff --git a/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Save.php b/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Save.php
index ecb8f8c55ad..be2022ffa7e 100644
--- a/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Save.php
+++ b/app/code/Magento/Email/Controller/Adminhtml/Email/Template/Save.php
@@ -15,7 +15,7 @@ class Save extends \Magento\Email\Controller\Adminhtml\Email\Template
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $request = $this->getRequest();
         $id = $this->getRequest()->getParam('id');
diff --git a/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/EditTest.php b/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/EditTest.php
index 905318c274a..6838b1ba1b1 100644
--- a/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/EditTest.php
+++ b/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/EditTest.php
@@ -184,7 +184,7 @@ class EditTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Email\Controller\Adminhtml\Email\Template\Edit::execute
+     * @covers \Magento\Email\Controller\Adminhtml\Email\Template\Edit::executeInternal
      */
     public function testExecuteNewTemplate()
     {
@@ -217,11 +217,11 @@ class EditTest extends \PHPUnit_Framework_TestCase
                 ]
             );
 
-        $this->assertNull($this->editController->execute());
+        $this->assertNull($this->editController->executeInternal());
     }
 
     /**
-     * @covers \Magento\Email\Controller\Adminhtml\Email\Template\Edit::execute
+     * @covers \Magento\Email\Controller\Adminhtml\Email\Template\Edit::executeInternal
      */
     public function testExecuteEdit()
     {
@@ -254,6 +254,6 @@ class EditTest extends \PHPUnit_Framework_TestCase
                 ]
             );
 
-        $this->assertNull($this->editController->execute());
+        $this->assertNull($this->editController->executeInternal());
     }
 }
diff --git a/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/IndexTest.php b/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/IndexTest.php
index c5ada6573f6..974d4c41fc5 100644
--- a/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/IndexTest.php
+++ b/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/IndexTest.php
@@ -118,7 +118,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Email\Controller\Adminhtml\Email\Template\Index::execute
+     * @covers \Magento\Email\Controller\Adminhtml\Email\Template\Index::executeInternal
      */
     public function testExecute()
     {
@@ -157,11 +157,11 @@ class IndexTest extends \PHPUnit_Framework_TestCase
             ->method('addLink')
             ->willReturnSelf();
 
-        $this->assertNull($this->indexController->execute());
+        $this->assertNull($this->indexController->executeInternal());
     }
 
     /**
-     * @covers \Magento\Email\Controller\Adminhtml\Email\Template\Index::execute
+     * @covers \Magento\Email\Controller\Adminhtml\Email\Template\Index::executeInternal
      */
     public function testExecuteAjax()
     {
diff --git a/app/code/Magento/EncryptionKey/Controller/Adminhtml/Crypt/Key/Index.php b/app/code/Magento/EncryptionKey/Controller/Adminhtml/Crypt/Key/Index.php
index 0c2ad5395a9..31b7833485f 100644
--- a/app/code/Magento/EncryptionKey/Controller/Adminhtml/Crypt/Key/Index.php
+++ b/app/code/Magento/EncryptionKey/Controller/Adminhtml/Crypt/Key/Index.php
@@ -16,7 +16,7 @@ class Index extends \Magento\EncryptionKey\Controller\Adminhtml\Crypt\Key
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\App\DeploymentConfig\Writer $writer */
         $writer = $this->_objectManager->get('Magento\Framework\App\DeploymentConfig\Writer');
diff --git a/app/code/Magento/EncryptionKey/Controller/Adminhtml/Crypt/Key/Save.php b/app/code/Magento/EncryptionKey/Controller/Adminhtml/Crypt/Key/Save.php
index b06c18cae6b..6921d482c1d 100644
--- a/app/code/Magento/EncryptionKey/Controller/Adminhtml/Crypt/Key/Save.php
+++ b/app/code/Magento/EncryptionKey/Controller/Adminhtml/Crypt/Key/Save.php
@@ -50,7 +50,7 @@ class Save extends \Magento\EncryptionKey\Controller\Adminhtml\Crypt\Key
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $key = null;
diff --git a/app/code/Magento/EncryptionKey/Test/Unit/Controller/Adminhtml/Crypt/Key/SaveTest.php b/app/code/Magento/EncryptionKey/Test/Unit/Controller/Adminhtml/Crypt/Key/SaveTest.php
index f4f69741834..13f8f772138 100644
--- a/app/code/Magento/EncryptionKey/Test/Unit/Controller/Adminhtml/Crypt/Key/SaveTest.php
+++ b/app/code/Magento/EncryptionKey/Test/Unit/Controller/Adminhtml/Crypt/Key/SaveTest.php
@@ -90,7 +90,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
         $this->cacheMock->expects($this->once())->method('clean');
         $this->responseMock->expects($this->once())->method('setRedirect');
 
-        $this->model->execute();
+        $this->model->executeInternal();
     }
 
     public function testExecuteNonRandomAndWithoutCryptKey()
@@ -108,7 +108,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             ->willReturn($key);
         $this->managerMock->expects($this->once())->method('addErrorMessage');
 
-        $this->model->execute();
+        $this->model->executeInternal();
     }
 
     public function testExecuteRandom()
@@ -125,6 +125,6 @@ class SaveTest extends \PHPUnit_Framework_TestCase
         $this->cacheMock->expects($this->once())->method('clean');
         $this->responseMock->expects($this->once())->method('setRedirect');
 
-        $this->model->execute();
+        $this->model->executeInternal();
     }
 }
diff --git a/app/code/Magento/GroupedProduct/Controller/Adminhtml/Edit/Popup.php b/app/code/Magento/GroupedProduct/Controller/Adminhtml/Edit/Popup.php
index 5a46c44b01f..258c74c4baf 100644
--- a/app/code/Magento/GroupedProduct/Controller/Adminhtml/Edit/Popup.php
+++ b/app/code/Magento/GroupedProduct/Controller/Adminhtml/Edit/Popup.php
@@ -62,7 +62,7 @@ class Popup extends AbstractAction
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $productId = (int)$this->getRequest()->getParam('id');
 
diff --git a/app/code/Magento/GroupedProduct/Test/Unit/Controller/Adminhtml/Edit/PopupTest.php b/app/code/Magento/GroupedProduct/Test/Unit/Controller/Adminhtml/Edit/PopupTest.php
index 4daa62a813c..fab1db70710 100644
--- a/app/code/Magento/GroupedProduct/Test/Unit/Controller/Adminhtml/Edit/PopupTest.php
+++ b/app/code/Magento/GroupedProduct/Test/Unit/Controller/Adminhtml/Edit/PopupTest.php
@@ -118,7 +118,7 @@ class PopupTest extends \PHPUnit_Framework_TestCase
         $this->request->expects($this->at(3))->method('getParam')->with('set')->will($this->returnValue($setId));
         $this->registry->expects($this->once())->method('register')->with('current_product', $product);
 
-        $this->assertSame($this->resultLayoutMock, $this->action->execute());
+        $this->assertSame($this->resultLayoutMock, $this->action->executeInternal());
     }
 
     public function testPopupActionWithProductIdNoSetId()
@@ -155,6 +155,6 @@ class PopupTest extends \PHPUnit_Framework_TestCase
         $this->request->expects($this->at(3))->method('getParam')->with('set')->will($this->returnValue($setId));
         $this->registry->expects($this->once())->method('register')->with('current_product', $product);
 
-        $this->assertSame($this->resultLayoutMock, $this->action->execute());
+        $this->assertSame($this->resultLayoutMock, $this->action->executeInternal());
     }
 }
diff --git a/app/code/Magento/ImportExport/Controller/Adminhtml/Export/Export.php b/app/code/Magento/ImportExport/Controller/Adminhtml/Export/Export.php
index a223c72ccd1..343c24d9104 100644
--- a/app/code/Magento/ImportExport/Controller/Adminhtml/Export/Export.php
+++ b/app/code/Magento/ImportExport/Controller/Adminhtml/Export/Export.php
@@ -37,7 +37,7 @@ class Export extends ExportController
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->getRequest()->getPost(ExportModel::FILTER_ELEMENT_GROUP)) {
             try {
diff --git a/app/code/Magento/ImportExport/Controller/Adminhtml/Export/GetFilter.php b/app/code/Magento/ImportExport/Controller/Adminhtml/Export/GetFilter.php
index 7e50e5fca30..81d0aa4a8e3 100644
--- a/app/code/Magento/ImportExport/Controller/Adminhtml/Export/GetFilter.php
+++ b/app/code/Magento/ImportExport/Controller/Adminhtml/Export/GetFilter.php
@@ -15,7 +15,7 @@ class GetFilter extends ExportController
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $data = $this->getRequest()->getParams();
         if ($this->getRequest()->isXmlHttpRequest() && $data) {
diff --git a/app/code/Magento/ImportExport/Controller/Adminhtml/Export/Index.php b/app/code/Magento/ImportExport/Controller/Adminhtml/Export/Index.php
index 9b1a0c3ecbd..a9f4b02e784 100644
--- a/app/code/Magento/ImportExport/Controller/Adminhtml/Export/Index.php
+++ b/app/code/Magento/ImportExport/Controller/Adminhtml/Export/Index.php
@@ -15,7 +15,7 @@ class Index extends ExportController
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->resultFactory->create(ResultFactory::TYPE_PAGE);
diff --git a/app/code/Magento/ImportExport/Controller/Adminhtml/History/Download.php b/app/code/Magento/ImportExport/Controller/Adminhtml/History/Download.php
index 84d3cb4d59b..64ab7b253d8 100644
--- a/app/code/Magento/ImportExport/Controller/Adminhtml/History/Download.php
+++ b/app/code/Magento/ImportExport/Controller/Adminhtml/History/Download.php
@@ -37,7 +37,7 @@ class Download extends \Magento\ImportExport\Controller\Adminhtml\History
      *
      * @return void|\Magento\Backend\App\Action
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = $this->getRequest()->getParam('filename');
 
diff --git a/app/code/Magento/ImportExport/Controller/Adminhtml/History/Index.php b/app/code/Magento/ImportExport/Controller/Adminhtml/History/Index.php
index 5c88c232807..df70dff2a40 100644
--- a/app/code/Magento/ImportExport/Controller/Adminhtml/History/Index.php
+++ b/app/code/Magento/ImportExport/Controller/Adminhtml/History/Index.php
@@ -15,7 +15,7 @@ class Index extends HistoryController
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->resultFactory->create(ResultFactory::TYPE_PAGE);
diff --git a/app/code/Magento/ImportExport/Controller/Adminhtml/Import/Download.php b/app/code/Magento/ImportExport/Controller/Adminhtml/Import/Download.php
index 005a2b0cde1..240067a4f1f 100644
--- a/app/code/Magento/ImportExport/Controller/Adminhtml/Import/Download.php
+++ b/app/code/Magento/ImportExport/Controller/Adminhtml/Import/Download.php
@@ -65,7 +65,7 @@ class Download extends ImportController
      *
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = $this->getRequest()->getParam('filename') . '.csv';
         $moduleDir = $this->reader->getModuleDir('', self::SAMPLE_FILES_MODULE);
diff --git a/app/code/Magento/ImportExport/Controller/Adminhtml/Import/Index.php b/app/code/Magento/ImportExport/Controller/Adminhtml/Import/Index.php
index ec4f027d4a9..6bf064e6869 100644
--- a/app/code/Magento/ImportExport/Controller/Adminhtml/Import/Index.php
+++ b/app/code/Magento/ImportExport/Controller/Adminhtml/Import/Index.php
@@ -15,7 +15,7 @@ class Index extends ImportController
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->messageManager->addNotice(
             $this->_objectManager->get('Magento\ImportExport\Helper\Data')->getMaxUploadSizeMessage()
diff --git a/app/code/Magento/ImportExport/Controller/Adminhtml/Import/Start.php b/app/code/Magento/ImportExport/Controller/Adminhtml/Import/Start.php
index 54c9049bcc9..d58b1a1f81f 100644
--- a/app/code/Magento/ImportExport/Controller/Adminhtml/Import/Start.php
+++ b/app/code/Magento/ImportExport/Controller/Adminhtml/Import/Start.php
@@ -38,7 +38,7 @@ class Start extends ImportResultController
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $data = $this->getRequest()->getPostValue();
         if ($data) {
diff --git a/app/code/Magento/ImportExport/Controller/Adminhtml/Import/Validate.php b/app/code/Magento/ImportExport/Controller/Adminhtml/Import/Validate.php
index 631966a9a40..bc009302895 100644
--- a/app/code/Magento/ImportExport/Controller/Adminhtml/Import/Validate.php
+++ b/app/code/Magento/ImportExport/Controller/Adminhtml/Import/Validate.php
@@ -19,7 +19,7 @@ class Validate extends ImportResultController
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $data = $this->getRequest()->getPostValue();
         /** @var \Magento\Framework\View\Result\Layout $resultLayout */
diff --git a/app/code/Magento/ImportExport/Test/Unit/Controller/Adminhtml/History/DownloadTest.php b/app/code/Magento/ImportExport/Test/Unit/Controller/Adminhtml/History/DownloadTest.php
index e9661264810..532cf1d718a 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Controller/Adminhtml/History/DownloadTest.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Controller/Adminhtml/History/DownloadTest.php
@@ -172,7 +172,7 @@ class DownloadTest extends \PHPUnit_Framework_TestCase
     {
         $this->reportHelper->expects($this->any())->method('importFileExists')->willReturn(true);
         $this->resultRaw->expects($this->once())->method('setContents');
-        $this->downloadController->execute();
+        $this->downloadController->executeInternal();
     }
 
     /**
@@ -182,6 +182,6 @@ class DownloadTest extends \PHPUnit_Framework_TestCase
     {
         $this->reportHelper->expects($this->any())->method('importFileExists')->willReturn(false);
         $this->resultRaw->expects($this->never())->method('setContents');
-        $this->downloadController->execute();
+        $this->downloadController->executeInternal();
     }
 }
diff --git a/app/code/Magento/ImportExport/Test/Unit/Controller/Adminhtml/History/IndexTest.php b/app/code/Magento/ImportExport/Test/Unit/Controller/Adminhtml/History/IndexTest.php
index 789854701f5..aa9adfde2c2 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Controller/Adminhtml/History/IndexTest.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Controller/Adminhtml/History/IndexTest.php
@@ -75,6 +75,6 @@ class IndexTest extends \PHPUnit_Framework_TestCase
      */
     public function testExecute()
     {
-        $this->indexController->execute();
+        $this->indexController->executeInternal();
     }
 }
diff --git a/app/code/Magento/Indexer/Controller/Adminhtml/Indexer/ListAction.php b/app/code/Magento/Indexer/Controller/Adminhtml/Indexer/ListAction.php
index f76a7d9ca1a..f84c939bf93 100644
--- a/app/code/Magento/Indexer/Controller/Adminhtml/Indexer/ListAction.php
+++ b/app/code/Magento/Indexer/Controller/Adminhtml/Indexer/ListAction.php
@@ -13,7 +13,7 @@ class ListAction extends \Magento\Indexer\Controller\Adminhtml\Indexer
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $this->_setActiveMenu('Magento_Indexer::system_index');
diff --git a/app/code/Magento/Indexer/Controller/Adminhtml/Indexer/MassChangelog.php b/app/code/Magento/Indexer/Controller/Adminhtml/Indexer/MassChangelog.php
index 1ea64de8b75..af4730a6662 100644
--- a/app/code/Magento/Indexer/Controller/Adminhtml/Indexer/MassChangelog.php
+++ b/app/code/Magento/Indexer/Controller/Adminhtml/Indexer/MassChangelog.php
@@ -13,7 +13,7 @@ class MassChangelog extends \Magento\Indexer\Controller\Adminhtml\Indexer
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $indexerIds = $this->getRequest()->getParam('indexer_ids');
         if (!is_array($indexerIds)) {
diff --git a/app/code/Magento/Indexer/Controller/Adminhtml/Indexer/MassOnTheFly.php b/app/code/Magento/Indexer/Controller/Adminhtml/Indexer/MassOnTheFly.php
index fecf0df7a53..7fe6dd3a60b 100644
--- a/app/code/Magento/Indexer/Controller/Adminhtml/Indexer/MassOnTheFly.php
+++ b/app/code/Magento/Indexer/Controller/Adminhtml/Indexer/MassOnTheFly.php
@@ -13,7 +13,7 @@ class MassOnTheFly extends \Magento\Indexer\Controller\Adminhtml\Indexer
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $indexerIds = $this->getRequest()->getParam('indexer_ids');
         if (!is_array($indexerIds)) {
diff --git a/app/code/Magento/Indexer/Test/Unit/Controller/Adminhtml/Indexer/ListActionTest.php b/app/code/Magento/Indexer/Test/Unit/Controller/Adminhtml/Indexer/ListActionTest.php
index 958125477b9..d3817ffe99d 100644
--- a/app/code/Magento/Indexer/Test/Unit/Controller/Adminhtml/Indexer/ListActionTest.php
+++ b/app/code/Magento/Indexer/Test/Unit/Controller/Adminhtml/Indexer/ListActionTest.php
@@ -200,6 +200,6 @@ class ListActionTest extends \PHPUnit_Framework_TestCase
             ->method('renderLayout')
             ->will($this->returnValue(1));
 
-        $this->object->execute();
+        $this->object->executeInternal();
     }
 }
diff --git a/app/code/Magento/Indexer/Test/Unit/Controller/Adminhtml/Indexer/MassChangelogTest.php b/app/code/Magento/Indexer/Test/Unit/Controller/Adminhtml/Indexer/MassChangelogTest.php
index 133a763f831..c08535d2731 100644
--- a/app/code/Magento/Indexer/Test/Unit/Controller/Adminhtml/Indexer/MassChangelogTest.php
+++ b/app/code/Magento/Indexer/Test/Unit/Controller/Adminhtml/Indexer/MassChangelogTest.php
@@ -243,7 +243,7 @@ class MassChangelogTest extends \PHPUnit_Framework_TestCase
         $this->helper->expects($this->any())->method("getUrl")->willReturn("magento.com");
         $this->response->expects($this->any())->method("setRedirect")->willReturn(1);
 
-        $this->model->execute();
+        $this->model->executeInternal();
     }
 
     /**
diff --git a/app/code/Magento/Indexer/Test/Unit/Controller/Adminhtml/Indexer/MassOnTheFlyTest.php b/app/code/Magento/Indexer/Test/Unit/Controller/Adminhtml/Indexer/MassOnTheFlyTest.php
index c535ed59f68..8adaf2d07fe 100644
--- a/app/code/Magento/Indexer/Test/Unit/Controller/Adminhtml/Indexer/MassOnTheFlyTest.php
+++ b/app/code/Magento/Indexer/Test/Unit/Controller/Adminhtml/Indexer/MassOnTheFlyTest.php
@@ -242,7 +242,7 @@ class MassOnTheFlyTest extends \PHPUnit_Framework_TestCase
         $this->helper->expects($this->any())->method("getUrl")->willReturn("magento.com");
         $this->response->expects($this->any())->method("setRedirect")->willReturn(1);
 
-        $this->model->execute();
+        $this->model->executeInternal();
     }
 
     /**
diff --git a/app/code/Magento/Integration/Controller/Adminhtml/Integration/Delete.php b/app/code/Magento/Integration/Controller/Adminhtml/Integration/Delete.php
index 8771947fce6..42409bd208c 100644
--- a/app/code/Magento/Integration/Controller/Adminhtml/Integration/Delete.php
+++ b/app/code/Magento/Integration/Controller/Adminhtml/Integration/Delete.php
@@ -17,7 +17,7 @@ class Delete extends \Magento\Integration\Controller\Adminhtml\Integration
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
diff --git a/app/code/Magento/Integration/Controller/Adminhtml/Integration/Edit.php b/app/code/Magento/Integration/Controller/Adminhtml/Integration/Edit.php
index db23246d371..6c45010bfb2 100644
--- a/app/code/Magento/Integration/Controller/Adminhtml/Integration/Edit.php
+++ b/app/code/Magento/Integration/Controller/Adminhtml/Integration/Edit.php
@@ -17,7 +17,7 @@ class Edit extends \Magento\Integration\Controller\Adminhtml\Integration
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         /** Try to recover integration data from session if it was added during previous request which failed. */
         $integrationId = (int)$this->getRequest()->getParam(self::PARAM_INTEGRATION_ID);
diff --git a/app/code/Magento/Integration/Controller/Adminhtml/Integration/Grid.php b/app/code/Magento/Integration/Controller/Adminhtml/Integration/Grid.php
index 24b4fc3af40..e5750479e09 100644
--- a/app/code/Magento/Integration/Controller/Adminhtml/Integration/Grid.php
+++ b/app/code/Magento/Integration/Controller/Adminhtml/Integration/Grid.php
@@ -13,7 +13,7 @@ class Grid extends \Magento\Integration\Controller\Adminhtml\Integration
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout(false);
         $this->_view->renderLayout();
diff --git a/app/code/Magento/Integration/Controller/Adminhtml/Integration/Index.php b/app/code/Magento/Integration/Controller/Adminhtml/Integration/Index.php
index aa4411b4598..f759279d7f3 100644
--- a/app/code/Magento/Integration/Controller/Adminhtml/Integration/Index.php
+++ b/app/code/Magento/Integration/Controller/Adminhtml/Integration/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Integration\Controller\Adminhtml\Integration
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $unsecureIntegrationsCount = $this->_integrationCollection->addUnsecureUrlsFilter()->getSize();
         if ($unsecureIntegrationsCount > 0) {
diff --git a/app/code/Magento/Integration/Controller/Adminhtml/Integration/LoginSuccessCallback.php b/app/code/Magento/Integration/Controller/Adminhtml/Integration/LoginSuccessCallback.php
index 7b723444420..befdfbedc84 100644
--- a/app/code/Magento/Integration/Controller/Adminhtml/Integration/LoginSuccessCallback.php
+++ b/app/code/Magento/Integration/Controller/Adminhtml/Integration/LoginSuccessCallback.php
@@ -13,7 +13,7 @@ class LoginSuccessCallback extends \Magento\Integration\Controller\Adminhtml\Int
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->getResponse()->setBody('<script>setTimeout("self.close()",1000);</script>');
     }
diff --git a/app/code/Magento/Integration/Controller/Adminhtml/Integration/NewAction.php b/app/code/Magento/Integration/Controller/Adminhtml/Integration/NewAction.php
index 50a97103187..2e32315b5e5 100644
--- a/app/code/Magento/Integration/Controller/Adminhtml/Integration/NewAction.php
+++ b/app/code/Magento/Integration/Controller/Adminhtml/Integration/NewAction.php
@@ -13,7 +13,7 @@ class NewAction extends \Magento\Integration\Controller\Adminhtml\Integration
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $this->_setActiveMenu('Magento_Integration::system_integrations');
diff --git a/app/code/Magento/Integration/Controller/Adminhtml/Integration/PermissionsDialog.php b/app/code/Magento/Integration/Controller/Adminhtml/Integration/PermissionsDialog.php
index 50f6302b49c..d8de19f8d96 100644
--- a/app/code/Magento/Integration/Controller/Adminhtml/Integration/PermissionsDialog.php
+++ b/app/code/Magento/Integration/Controller/Adminhtml/Integration/PermissionsDialog.php
@@ -15,7 +15,7 @@ class PermissionsDialog extends \Magento\Integration\Controller\Adminhtml\Integr
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $integrationId = (int)$this->getRequest()->getParam(self::PARAM_INTEGRATION_ID);
         if ($integrationId) {
diff --git a/app/code/Magento/Integration/Controller/Adminhtml/Integration/Save.php b/app/code/Magento/Integration/Controller/Adminhtml/Integration/Save.php
index 53cccbb46b0..d6581e6004d 100644
--- a/app/code/Magento/Integration/Controller/Adminhtml/Integration/Save.php
+++ b/app/code/Magento/Integration/Controller/Adminhtml/Integration/Save.php
@@ -32,7 +32,7 @@ class Save extends \Magento\Integration\Controller\Adminhtml\Integration
      * @return void
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var array $integrationData */
         $integrationData = [];
diff --git a/app/code/Magento/Integration/Controller/Adminhtml/Integration/TokensDialog.php b/app/code/Magento/Integration/Controller/Adminhtml/Integration/TokensDialog.php
index 1dcff4547e3..8ad72835c71 100644
--- a/app/code/Magento/Integration/Controller/Adminhtml/Integration/TokensDialog.php
+++ b/app/code/Magento/Integration/Controller/Adminhtml/Integration/TokensDialog.php
@@ -35,7 +35,7 @@ class TokensDialog extends \Magento\Integration\Controller\Adminhtml\Integration
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $integrationId = $this->getRequest()->getParam(self::PARAM_INTEGRATION_ID);
diff --git a/app/code/Magento/Integration/Controller/Adminhtml/Integration/TokensExchange.php b/app/code/Magento/Integration/Controller/Adminhtml/Integration/TokensExchange.php
index a6ab708350a..a186dc016a7 100644
--- a/app/code/Magento/Integration/Controller/Adminhtml/Integration/TokensExchange.php
+++ b/app/code/Magento/Integration/Controller/Adminhtml/Integration/TokensExchange.php
@@ -34,7 +34,7 @@ class TokensExchange extends \Magento\Integration\Controller\Adminhtml\Integrati
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $integrationId = $this->getRequest()->getParam(self::PARAM_INTEGRATION_ID);
diff --git a/app/code/Magento/Integration/Controller/Token/Access.php b/app/code/Magento/Integration/Controller/Token/Access.php
index c9c5c7c3124..979a63cbbd9 100644
--- a/app/code/Magento/Integration/Controller/Token/Access.php
+++ b/app/code/Magento/Integration/Controller/Token/Access.php
@@ -58,7 +58,7 @@ class Access extends \Magento\Framework\App\Action\Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $requestUrl = $this->helper->getRequestUrl($this->getRequest());
diff --git a/app/code/Magento/Integration/Controller/Token/Request.php b/app/code/Magento/Integration/Controller/Token/Request.php
index d1ee7d04296..be75117d2c4 100644
--- a/app/code/Magento/Integration/Controller/Token/Request.php
+++ b/app/code/Magento/Integration/Controller/Token/Request.php
@@ -38,7 +38,7 @@ class Request extends \Magento\Framework\App\Action\Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $requestUrl = $this->helper->getRequestUrl($this->getRequest());
diff --git a/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/DeleteTest.php b/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/DeleteTest.php
index f31d3622876..4be5b0c7397 100644
--- a/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/DeleteTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/DeleteTest.php
@@ -60,7 +60,7 @@ class DeleteTest extends \Magento\Integration\Test\Unit\Controller\Adminhtml\Int
             ->method('addSuccess')
             ->with(__('The integration \'%1\' has been deleted.', $intData[Info::DATA_NAME]));
 
-        $this->integrationController->execute();
+        $this->integrationController->executeInternal();
     }
 
     public function testDeleteActionWithConsumer()
@@ -89,7 +89,7 @@ class DeleteTest extends \Magento\Integration\Test\Unit\Controller\Adminhtml\Int
             ->method('addSuccess')
             ->with(__('The integration \'%1\' has been deleted.', $intData[Info::DATA_NAME]));
 
-        $this->integrationController->execute();
+        $this->integrationController->executeInternal();
     }
 
     public function testDeleteActionConfigSetUp()
@@ -117,7 +117,7 @@ class DeleteTest extends \Magento\Integration\Test\Unit\Controller\Adminhtml\Int
         // verify success message
         $this->_messageManager->expects($this->never())->method('addSuccess');
 
-        $this->integrationController->execute();
+        $this->integrationController->executeInternal();
     }
 
     public function testDeleteActionMissingId()
@@ -131,7 +131,7 @@ class DeleteTest extends \Magento\Integration\Test\Unit\Controller\Adminhtml\Int
             ->method('addError')
             ->with(__('Integration ID is not specified or is invalid.'));
 
-        $this->integrationController->execute();
+        $this->integrationController->executeInternal();
     }
 
     public function testDeleteActionForServiceIntegrationException()
@@ -153,7 +153,7 @@ class DeleteTest extends \Magento\Integration\Test\Unit\Controller\Adminhtml\Int
             ->willThrowException($invalidIdException);
         $this->_messageManager->expects($this->once())->method('addError');
 
-        $this->integrationController->execute();
+        $this->integrationController->executeInternal();
     }
 
     public function testDeleteActionForServiceGenericException()
@@ -175,6 +175,6 @@ class DeleteTest extends \Magento\Integration\Test\Unit\Controller\Adminhtml\Int
             ->willThrowException($invalidIdException);
         $this->_messageManager->expects($this->never())->method('addError');
 
-        $this->integrationController->execute();
+        $this->integrationController->executeInternal();
     }
 }
diff --git a/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/EditTest.php b/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/EditTest.php
index 0bd7ab3e466..e4529c88f5f 100644
--- a/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/EditTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/EditTest.php
@@ -53,7 +53,7 @@ class EditTest extends \Magento\Integration\Test\Unit\Controller\Adminhtml\Integ
             ->method('prepend');
         $this->_verifyLoadAndRenderLayout();
         $controller = $this->_createIntegrationController('Edit');
-        $controller->execute();
+        $controller->executeInternal();
     }
 
     public function testEditActionNonExistentIntegration()
@@ -81,7 +81,7 @@ class EditTest extends \Magento\Integration\Test\Unit\Controller\Adminhtml\Integ
             );
         $this->_verifyLoadAndRenderLayout();
         $integrationContr = $this->_createIntegrationController('Edit');
-        $integrationContr->execute();
+        $integrationContr->executeInternal();
     }
 
     public function testEditActionNoDataAdd()
@@ -91,7 +91,7 @@ class EditTest extends \Magento\Integration\Test\Unit\Controller\Adminhtml\Integ
         $this->_messageManager->expects($this->once())->method('addError')->with($this->equalTo($exceptionMessage));
         $this->_verifyLoadAndRenderLayout();
         $integrationContr = $this->_createIntegrationController('Edit');
-        $integrationContr->execute();
+        $integrationContr->executeInternal();
     }
 
     public function testEditException()
@@ -100,6 +100,6 @@ class EditTest extends \Magento\Integration\Test\Unit\Controller\Adminhtml\Integ
         // verify the error
         $this->_messageManager->expects($this->once())->method('addError')->with($this->equalTo($exceptionMessage));
         $this->_controller = $this->_createIntegrationController('Edit');
-        $this->_controller->execute();
+        $this->_controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/IndexTest.php b/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/IndexTest.php
index 8dd1bfd69f5..4adf0966575 100644
--- a/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/IndexTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/IndexTest.php
@@ -14,6 +14,6 @@ class IndexTest extends \Magento\Integration\Test\Unit\Controller\Adminhtml\Inte
         $this->_verifyLoadAndRenderLayout();
         // renderLayout
         $this->_controller = $this->_createIntegrationController('Index');
-        $this->_controller->execute();
+        $this->_controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/NewActionTest.php b/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/NewActionTest.php
index 013857d809f..a24b1787a8e 100644
--- a/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/NewActionTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/NewActionTest.php
@@ -25,6 +25,6 @@ class NewActionTest extends \Magento\Integration\Test\Unit\Controller\Adminhtml\
                 $this->returnValue($this->_requestMock)
             );
         $integrationContr = $this->_createIntegrationController('NewAction');
-        $integrationContr->execute();
+        $integrationContr->executeInternal();
     }
 }
diff --git a/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/PermissionsDialogTest.php b/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/PermissionsDialogTest.php
index 484267a7296..28e3c19b012 100644
--- a/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/PermissionsDialogTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/PermissionsDialogTest.php
@@ -72,6 +72,6 @@ HANDLE;
                 $this->equalTo(['adminhtml_integration_activate_permissions_webapi'])
             );
 
-        $controller->execute();
+        $controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/SaveTest.php b/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/SaveTest.php
index d29767e6091..68526871593 100644
--- a/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/SaveTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/SaveTest.php
@@ -59,7 +59,7 @@ class SaveTest extends \Magento\Integration\Test\Unit\Controller\Adminhtml\Integ
                 __('The integration \'%1\' has been saved.', $intData[Info::DATA_NAME])
             );
         $integrationContr = $this->_createIntegrationController('Save');
-        $integrationContr->execute();
+        $integrationContr->executeInternal();
     }
 
     public function testSaveActionException()
@@ -80,7 +80,7 @@ class SaveTest extends \Magento\Integration\Test\Unit\Controller\Adminhtml\Integ
         // Verify error
         $this->_messageManager->expects($this->once())->method('addError')->with($this->equalTo($exceptionMessage));
         $integrationContr = $this->_createIntegrationController('Save');
-        $integrationContr->execute();
+        $integrationContr->executeInternal();
     }
 
     public function testSaveActionIntegrationException()
@@ -101,7 +101,7 @@ class SaveTest extends \Magento\Integration\Test\Unit\Controller\Adminhtml\Integ
         // Verify error
         $this->_messageManager->expects($this->once())->method('addError')->with($this->equalTo($exceptionMessage));
         $integrationContr = $this->_createIntegrationController('Save');
-        $integrationContr->execute();
+        $integrationContr->executeInternal();
     }
 
     public function testSaveActionNew()
@@ -146,7 +146,7 @@ class SaveTest extends \Magento\Integration\Test\Unit\Controller\Adminhtml\Integ
                 __('The integration \'%1\' has been saved.', $integration->getName())
             );
         $integrationContr = $this->_createIntegrationController('Save');
-        $integrationContr->execute();
+        $integrationContr->executeInternal();
     }
 
     public function testSaveActionExceptionDuringServiceCreation()
@@ -186,6 +186,6 @@ class SaveTest extends \Magento\Integration\Test\Unit\Controller\Adminhtml\Integ
         // Verify success message
         $this->_messageManager->expects($this->once())->method('addError')->with($exceptionMessage);
         $integrationController = $this->_createIntegrationController('Save');
-        $integrationController->execute();
+        $integrationController->executeInternal();
     }
 }
diff --git a/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/TokensDialogTest.php b/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/TokensDialogTest.php
index cb7b484f40b..3db548316f5 100644
--- a/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/TokensDialogTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/Integration/TokensDialogTest.php
@@ -48,7 +48,7 @@ class TokensDialogTest extends \Magento\Integration\Test\Unit\Controller\Adminht
         $this->_viewMock->expects($this->any())->method('loadLayout');
         $this->_viewMock->expects($this->any())->method('renderLayout');
 
-        $controller->execute();
+        $controller->executeInternal();
     }
 
     public function testTokensExchangeReauthorize()
@@ -95,6 +95,6 @@ class TokensDialogTest extends \Magento\Integration\Test\Unit\Controller\Adminht
         $this->_responseMock->expects($this->once())->method('getBody');
         $this->_responseMock->expects($this->once())->method('representJson');
 
-        $controller->execute();
+        $controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Integration/Test/Unit/Controller/Token/AccessTest.php b/app/code/Magento/Integration/Test/Unit/Controller/Token/AccessTest.php
index 121db1fb723..140000c8bfc 100644
--- a/app/code/Magento/Integration/Test/Unit/Controller/Token/AccessTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Controller/Token/AccessTest.php
@@ -178,6 +178,6 @@ class AccessTest extends \PHPUnit_Framework_TestCase
         $this->response->expects($this->once())
             ->method('setBody');
 
-        $this->accessAction->execute();
+        $this->accessAction->executeInternal();
     }
 }
diff --git a/app/code/Magento/Integration/Test/Unit/Controller/Token/RequestTest.php b/app/code/Magento/Integration/Test/Unit/Controller/Token/RequestTest.php
index f387829278f..275e30191f0 100644
--- a/app/code/Magento/Integration/Test/Unit/Controller/Token/RequestTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Controller/Token/RequestTest.php
@@ -142,6 +142,6 @@ class RequestTest extends \PHPUnit_Framework_TestCase
             ->willReturn(['response']);
         $this->response->expects($this->once())
             ->method('setBody');
-        $this->requestAction->execute();
+        $this->requestAction->executeInternal();
     }
 }
diff --git a/app/code/Magento/Marketplace/Controller/Adminhtml/Index/Index.php b/app/code/Magento/Marketplace/Controller/Adminhtml/Index/Index.php
index 8ce0b1b3c10..f808bbbc3f8 100644
--- a/app/code/Magento/Marketplace/Controller/Adminhtml/Index/Index.php
+++ b/app/code/Magento/Marketplace/Controller/Adminhtml/Index/Index.php
@@ -28,7 +28,7 @@ class Index extends \Magento\Marketplace\Controller\Adminhtml\Index
     /**
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->getResultPageFactory()->create();
diff --git a/app/code/Magento/Marketplace/Controller/Adminhtml/Partners/Index.php b/app/code/Magento/Marketplace/Controller/Adminhtml/Partners/Index.php
index 774f80491b1..f1657b4c182 100644
--- a/app/code/Magento/Marketplace/Controller/Adminhtml/Partners/Index.php
+++ b/app/code/Magento/Marketplace/Controller/Adminhtml/Partners/Index.php
@@ -33,7 +33,7 @@ class Index extends \Magento\Marketplace\Controller\Adminhtml\Partners
     /**
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->getRequest()->isAjax()) {
             $output = $this->getLayoutFactory()->create()
diff --git a/app/code/Magento/Marketplace/Test/Unit/Controller/Index/IndexTest.php b/app/code/Magento/Marketplace/Test/Unit/Controller/Index/IndexTest.php
index 4983cd76e0f..ebb9386d3ef 100644
--- a/app/code/Magento/Marketplace/Test/Unit/Controller/Index/IndexTest.php
+++ b/app/code/Magento/Marketplace/Test/Unit/Controller/Index/IndexTest.php
@@ -19,7 +19,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Marketplace\Controller\Adminhtml\Index\Index::execute
+     * @covers \Magento\Marketplace\Controller\Adminhtml\Index\Index::executeInternal
      */
     public function testExecute()
     {
@@ -50,7 +50,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
             ->method('getConfig')
             ->will($this->returnValue($configMock));
 
-        $this->indexControllerMock->execute();
+        $this->indexControllerMock->executeInternal();
     }
 
     /**
diff --git a/app/code/Magento/Marketplace/Test/Unit/Controller/Partners/IndexTest.php b/app/code/Magento/Marketplace/Test/Unit/Controller/Partners/IndexTest.php
index 2a9538a1bb7..c285f31c995 100644
--- a/app/code/Magento/Marketplace/Test/Unit/Controller/Partners/IndexTest.php
+++ b/app/code/Magento/Marketplace/Test/Unit/Controller/Partners/IndexTest.php
@@ -25,7 +25,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Marketplace\Controller\Adminhtml\Partners\Index::execute
+     * @covers \Magento\Marketplace\Controller\Adminhtml\Partners\Index::executeInternal
      */
     public function testExecute()
     {
@@ -65,7 +65,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
             ->method('getResponse')
             ->will($this->returnValue($responseMock));
 
-        $this->partnersControllerMock->execute();
+        $this->partnersControllerMock->executeInternal();
     }
 
     /**
diff --git a/app/code/Magento/MediaStorage/Controller/Adminhtml/System/Config/System/Storage/Status.php b/app/code/Magento/MediaStorage/Controller/Adminhtml/System/Config/System/Storage/Status.php
index 3d2b755575a..469da98b91f 100644
--- a/app/code/Magento/MediaStorage/Controller/Adminhtml/System/Config/System/Storage/Status.php
+++ b/app/code/Magento/MediaStorage/Controller/Adminhtml/System/Config/System/Storage/Status.php
@@ -31,7 +31,7 @@ class Status extends \Magento\MediaStorage\Controller\Adminhtml\System\Config\Sy
      * @return \Magento\Framework\Controller\Result\Json
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         $result = [];
         $flag = $this->_getSyncFlag();
diff --git a/app/code/Magento/MediaStorage/Controller/Adminhtml/System/Config/System/Storage/Synchronize.php b/app/code/Magento/MediaStorage/Controller/Adminhtml/System/Config/System/Storage/Synchronize.php
index 50789292706..af0239448f9 100644
--- a/app/code/Magento/MediaStorage/Controller/Adminhtml/System/Config/System/Storage/Synchronize.php
+++ b/app/code/Magento/MediaStorage/Controller/Adminhtml/System/Config/System/Storage/Synchronize.php
@@ -13,7 +13,7 @@ class Synchronize extends \Magento\MediaStorage\Controller\Adminhtml\System\Conf
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         session_write_close();
 
diff --git a/app/code/Magento/Multishipping/Controller/Checkout.php b/app/code/Magento/Multishipping/Controller/Checkout.php
index f6b391b0d89..1940acf7595 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout.php
@@ -86,11 +86,11 @@ abstract class Checkout extends \Magento\Checkout\Controller\Action implements
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function dispatch(RequestInterface $request)
+    public function execute(RequestInterface $request)
     {
         $this->_request = $request;
         if ($this->_actionFlag->get('', 'redirectLogin')) {
-            return parent::dispatch($request);
+            return parent::execute($request);
         }
 
         $action = $request->getActionName();
@@ -109,7 +109,7 @@ abstract class Checkout extends \Magento\Checkout\Controller\Action implements
         ) {
             $this->_redirect('*/*/index');
             $this->_actionFlag->set('', self::FLAG_NO_DISPATCH, true);
-            return parent::dispatch($request);
+            return parent::execute($request);
         }
 
         if (!in_array($action, ['login', 'register'])) {
@@ -123,7 +123,7 @@ abstract class Checkout extends \Magento\Checkout\Controller\Action implements
                 $this->messageManager->addError($error);
                 $this->getResponse()->setRedirect($this->_getHelper()->getCartUrl());
                 $this->_actionFlag->set('', self::FLAG_NO_DISPATCH, true);
-                return parent::dispatch($request);
+                return parent::execute($request);
             }
         }
 
@@ -142,11 +142,11 @@ abstract class Checkout extends \Magento\Checkout\Controller\Action implements
         ) {
             $this->getResponse()->setRedirect($this->_getHelper()->getCartUrl());
             $this->_actionFlag->set('', self::FLAG_NO_DISPATCH, true);
-            return parent::dispatch($request);
+            return parent::execute($request);
         }
 
         if ($action == 'success' && $this->_getCheckout()->getCheckoutSession()->getDisplaySuccess(true)) {
-            return parent::dispatch($request);
+            return parent::execute($request);
         }
 
         $quote = $this->_getCheckout()->getQuote();
@@ -155,7 +155,7 @@ abstract class Checkout extends \Magento\Checkout\Controller\Action implements
             $this->_actionFlag->set('', self::FLAG_NO_DISPATCH, true);
         }
 
-        return parent::dispatch($request);
+        return parent::execute($request);
     }
 
     /**
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/Address.php b/app/code/Magento/Multishipping/Controller/Checkout/Address.php
index 41f7377c587..ee525003fa7 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/Address.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/Address.php
@@ -13,12 +13,12 @@ abstract class Address extends \Magento\Framework\App\Action\Action
     /**
      * {@inheritdoc}
      */
-    public function dispatch(\Magento\Framework\App\RequestInterface $request)
+    public function execute(\Magento\Framework\App\RequestInterface $request)
     {
         if (!$this->_getCheckout()->getCustomer()->getId()) {
             return $this->_redirect('customer/account/login');
         }
-        return parent::dispatch($request);
+        return parent::execute($request);
     }
 
     /**
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/Address/EditAddress.php b/app/code/Magento/Multishipping/Controller/Checkout/Address/EditAddress.php
index 724226b2e27..919c55c2cc8 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/Address/EditAddress.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/Address/EditAddress.php
@@ -11,7 +11,7 @@ class EditAddress extends \Magento\Multishipping\Controller\Checkout\Address
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         if ($addressForm = $this->_view->getLayout()->getBlock('customer_address_edit')) {
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/Address/EditBilling.php b/app/code/Magento/Multishipping/Controller/Checkout/Address/EditBilling.php
index eaa98e4e7c4..df532c5384b 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/Address/EditBilling.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/Address/EditBilling.php
@@ -11,7 +11,7 @@ class EditBilling extends \Magento\Multishipping\Controller\Checkout\Address
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_getState()->setActiveStep(
             \Magento\Multishipping\Model\Checkout\Type\Multishipping\State::STEP_BILLING
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/Address/EditShipping.php b/app/code/Magento/Multishipping/Controller/Checkout/Address/EditShipping.php
index 8409ed59f36..3d9c8ada633 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/Address/EditShipping.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/Address/EditShipping.php
@@ -11,7 +11,7 @@ class EditShipping extends \Magento\Multishipping\Controller\Checkout\Address
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_getState()->setActiveStep(
             \Magento\Multishipping\Model\Checkout\Type\Multishipping\State::STEP_SHIPPING
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/Address/EditShippingPost.php b/app/code/Magento/Multishipping/Controller/Checkout/Address/EditShippingPost.php
index ff73e374f39..bf62a2dbb56 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/Address/EditShippingPost.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/Address/EditShippingPost.php
@@ -11,7 +11,7 @@ class EditShippingPost extends \Magento\Multishipping\Controller\Checkout\Addres
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($addressId = $this->getRequest()->getParam('id')) {
             $this->_objectManager->create(
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/Address/NewBilling.php b/app/code/Magento/Multishipping/Controller/Checkout/Address/NewBilling.php
index 23b209b60b4..7f7293bdf99 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/Address/NewBilling.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/Address/NewBilling.php
@@ -11,7 +11,7 @@ class NewBilling extends \Magento\Multishipping\Controller\Checkout\Address
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         if ($addressForm = $this->_view->getLayout()->getBlock('customer_address_edit')) {
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/Address/NewShipping.php b/app/code/Magento/Multishipping/Controller/Checkout/Address/NewShipping.php
index 1a05f9cc46c..a0a69c2a216 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/Address/NewShipping.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/Address/NewShipping.php
@@ -13,7 +13,7 @@ class NewShipping extends \Magento\Multishipping\Controller\Checkout\Address
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_getState()->setActiveStep(
             \Magento\Multishipping\Model\Checkout\Type\Multishipping\State::STEP_SELECT_ADDRESSES
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/Address/SaveBilling.php b/app/code/Magento/Multishipping/Controller/Checkout/Address/SaveBilling.php
index f19e427f14b..6e254071ee0 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/Address/SaveBilling.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/Address/SaveBilling.php
@@ -11,7 +11,7 @@ class SaveBilling extends \Magento\Multishipping\Controller\Checkout\Address
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($addressId = $this->getRequest()->getParam('id')) {
             $this->_objectManager->create(
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/Address/SelectBilling.php b/app/code/Magento/Multishipping/Controller/Checkout/Address/SelectBilling.php
index a64e877d586..cb7a1216760 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/Address/SelectBilling.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/Address/SelectBilling.php
@@ -11,7 +11,7 @@ class SelectBilling extends \Magento\Multishipping\Controller\Checkout\Address
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_getState()->setActiveStep(
             \Magento\Multishipping\Model\Checkout\Type\Multishipping\State::STEP_BILLING
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/Address/SetBilling.php b/app/code/Magento/Multishipping/Controller/Checkout/Address/SetBilling.php
index 4781ff1fd8d..60cf5d69887 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/Address/SetBilling.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/Address/SetBilling.php
@@ -11,7 +11,7 @@ class SetBilling extends \Magento\Multishipping\Controller\Checkout\Address
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($addressId = $this->getRequest()->getParam('id')) {
             $this->_objectManager->create(
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/Address/ShippingSaved.php b/app/code/Magento/Multishipping/Controller/Checkout/Address/ShippingSaved.php
index 01187fce181..dc301de3eb2 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/Address/ShippingSaved.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/Address/ShippingSaved.php
@@ -56,7 +56,7 @@ class ShippingSaved extends Address
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $filter = $this->filterBuilder->setField('parent_id')->setValue($this->_getCheckout()->getCustomer()->getId())
             ->setConditionType('eq')->create();
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/Addresses.php b/app/code/Magento/Multishipping/Controller/Checkout/Addresses.php
index 38ae81fadc8..477ca6dbf2a 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/Addresses.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/Addresses.php
@@ -15,7 +15,7 @@ class Addresses extends \Magento\Multishipping\Controller\Checkout
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         // If customer do not have addresses
         if (!$this->_getCheckout()->getCustomerDefaultShippingAddress()) {
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/AddressesPost.php b/app/code/Magento/Multishipping/Controller/Checkout/AddressesPost.php
index e78d126f413..f6c74959e41 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/AddressesPost.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/AddressesPost.php
@@ -15,7 +15,7 @@ class AddressesPost extends \Magento\Multishipping\Controller\Checkout
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->_getCheckout()->getCustomerDefaultShippingAddress()) {
             $this->_redirect('*/checkout_address/newShipping');
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/BackToAddresses.php b/app/code/Magento/Multishipping/Controller/Checkout/BackToAddresses.php
index 9f9e2352e3a..82a1ecce2b0 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/BackToAddresses.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/BackToAddresses.php
@@ -13,7 +13,7 @@ class BackToAddresses extends \Magento\Multishipping\Controller\Checkout
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_getState()->setActiveStep(State::STEP_SELECT_ADDRESSES);
         $this->_getState()->unsCompleteStep(State::STEP_SHIPPING);
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/BackToBilling.php b/app/code/Magento/Multishipping/Controller/Checkout/BackToBilling.php
index 49c98834c67..d2db0277429 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/BackToBilling.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/BackToBilling.php
@@ -15,7 +15,7 @@ class BackToBilling extends \Magento\Multishipping\Controller\Checkout
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_getState()->setActiveStep(State::STEP_BILLING);
         $this->_getState()->unsCompleteStep(State::STEP_OVERVIEW);
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/BackToShipping.php b/app/code/Magento/Multishipping/Controller/Checkout/BackToShipping.php
index dddf2dab0b8..2bc68f69ee2 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/BackToShipping.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/BackToShipping.php
@@ -13,7 +13,7 @@ class BackToShipping extends \Magento\Multishipping\Controller\Checkout
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_getState()->setActiveStep(State::STEP_SHIPPING);
         $this->_getState()->unsCompleteStep(State::STEP_BILLING);
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/Billing.php b/app/code/Magento/Multishipping/Controller/Checkout/Billing.php
index 0f3d9a0103c..7ca829db580 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/Billing.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/Billing.php
@@ -30,7 +30,7 @@ class Billing extends \Magento\Multishipping\Controller\Checkout
      *
      * @return void|ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->_validateBilling()) {
             return;
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/Index.php b/app/code/Magento/Multishipping/Controller/Checkout/Index.php
index c71c54ca8e2..03607155b87 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/Index.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Multishipping\Controller\Checkout
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_getCheckoutSession()->setCartWasUpdated(false);
         $this->_redirect('*/*/addresses');
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/Login.php b/app/code/Magento/Multishipping/Controller/Checkout/Login.php
index 8b68c678010..4c68fd50819 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/Login.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/Login.php
@@ -13,7 +13,7 @@ class Login extends \Magento\Multishipping\Controller\Checkout
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->_objectManager->get('Magento\Customer\Model\Session')->isLoggedIn()) {
             $this->_redirect('*/*/');
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/Overview.php b/app/code/Magento/Multishipping/Controller/Checkout/Overview.php
index 9ab19c70889..cb693c019ff 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/Overview.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/Overview.php
@@ -15,7 +15,7 @@ class Overview extends \Magento\Multishipping\Controller\Checkout
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->_validateMinimumAmount()) {
             return;
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/OverviewPost.php b/app/code/Magento/Multishipping/Controller/Checkout/OverviewPost.php
index fe288a54f74..7e80e00754b 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/OverviewPost.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/OverviewPost.php
@@ -65,7 +65,7 @@ class OverviewPost extends \Magento\Multishipping\Controller\Checkout
      * @return void
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->formKeyValidator->validate($this->getRequest())) {
             $this->_forward('backToAddresses');
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/Register.php b/app/code/Magento/Multishipping/Controller/Checkout/Register.php
index 34aba236980..4033d985801 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/Register.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/Register.php
@@ -13,7 +13,7 @@ class Register extends \Magento\Multishipping\Controller\Checkout
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->_objectManager->get('Magento\Customer\Model\Session')->isLoggedIn()) {
             $this->getResponse()->setRedirect($this->_getHelper()->getMSCheckoutUrl());
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/RemoveItem.php b/app/code/Magento/Multishipping/Controller/Checkout/RemoveItem.php
index 4bba45d3047..1dced5c2360 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/RemoveItem.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/RemoveItem.php
@@ -13,7 +13,7 @@ class RemoveItem extends \Magento\Multishipping\Controller\Checkout
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $itemId = $this->getRequest()->getParam('id');
         $addressId = $this->getRequest()->getParam('address');
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/Shipping.php b/app/code/Magento/Multishipping/Controller/Checkout/Shipping.php
index d8ffd0d2b6a..8d8e9c4643e 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/Shipping.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/Shipping.php
@@ -16,7 +16,7 @@ class Shipping extends \Magento\Multishipping\Controller\Checkout
      *
      * @return  ResponseInterface|void
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->_validateMinimumAmount()) {
             return;
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/ShippingPost.php b/app/code/Magento/Multishipping/Controller/Checkout/ShippingPost.php
index e5c1a001b9e..d3693051344 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/ShippingPost.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/ShippingPost.php
@@ -13,7 +13,7 @@ class ShippingPost extends \Magento\Multishipping\Controller\Checkout
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $shippingMethods = $this->getRequest()->getPost('shipping_method');
         try {
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/Success.php b/app/code/Magento/Multishipping/Controller/Checkout/Success.php
index 52a7de51c18..ea4838ee85f 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/Success.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/Success.php
@@ -15,7 +15,7 @@ class Success extends \Magento\Multishipping\Controller\Checkout
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->_getState()->getCompleteStep(State::STEP_OVERVIEW)) {
             $this->_redirect('*/*/addresses');
diff --git a/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/EditAddressTest.php b/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/EditAddressTest.php
index 54c431ecd3f..4f15a7d7055 100644
--- a/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/EditAddressTest.php
+++ b/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/EditAddressTest.php
@@ -126,7 +126,7 @@ class EditAddressTest extends \PHPUnit_Framework_TestCase
         $this->titleMock->expects($this->once())->method('set')->with('Address title - default_title');
         $this->addressFormMock->expects($this->once())->method('setBackUrl')->with('success/url');
         $this->viewMock->expects($this->once())->method('renderLayout');
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
 
@@ -140,6 +140,6 @@ class EditAddressTest extends \PHPUnit_Framework_TestCase
             ->with('customer_address_edit');
         $this->urlMock->expects($this->never())->method('getUrl');
         $this->viewMock->expects($this->once())->method('renderLayout');
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/EditBillingTest.php b/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/EditBillingTest.php
index e0b516a09e7..232add6bf1e 100644
--- a/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/EditBillingTest.php
+++ b/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/EditBillingTest.php
@@ -153,7 +153,7 @@ class EditBillingTest extends \PHPUnit_Framework_TestCase
         $this->titleMock->expects($this->once())->method('set')->with('Address title - default_title');
         $this->addressFormMock->expects($this->once())->method('setBackUrl')->with('back/address');
         $this->viewMock->expects($this->once())->method('renderLayout');
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     public function testExecuteWhenCustomerAddressBlockNotExist()
@@ -170,7 +170,7 @@ class EditBillingTest extends \PHPUnit_Framework_TestCase
             ->with('customer_address_edit');
         $this->urlMock->expects($this->never())->method('getUrl');
         $this->viewMock->expects($this->once())->method('renderLayout');
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
 }
diff --git a/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/EditShippingTest.php b/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/EditShippingTest.php
index dbe004b62d0..0b9a5fb2f80 100644
--- a/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/EditShippingTest.php
+++ b/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/EditShippingTest.php
@@ -157,7 +157,7 @@ class EditShippingTest extends \PHPUnit_Framework_TestCase
             ->willReturn('shipping_addres');
         $this->addressFormMock->expects($this->once())->method('setBackUrl')->with('back/address');
         $this->viewMock->expects($this->once())->method('renderLayout');
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     public function testExecuteWhenCustomerAddressBlockNotExist()
@@ -174,6 +174,6 @@ class EditShippingTest extends \PHPUnit_Framework_TestCase
             ->with('customer_address_edit');
         $this->urlMock->expects($this->never())->method('getUrl');
         $this->viewMock->expects($this->once())->method('renderLayout');
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/NewBillingTest.php b/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/NewBillingTest.php
index 7afb5d6ee2f..e5c701b3c21 100644
--- a/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/NewBillingTest.php
+++ b/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/NewBillingTest.php
@@ -118,7 +118,7 @@ class NewBillingTest extends \PHPUnit_Framework_TestCase
         $this->titleMock->expects($this->once())->method('set')->with('Address title - default_title');
         $this->addressFormMock->expects($this->once())->method('setBackUrl')->with('success/url');
         $this->viewMock->expects($this->once())->method('renderLayout');
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
 
@@ -132,6 +132,6 @@ class NewBillingTest extends \PHPUnit_Framework_TestCase
             ->with('customer_address_edit');
         $this->urlMock->expects($this->never())->method('getUrl');
         $this->viewMock->expects($this->once())->method('renderLayout');
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/NewShippingTest.php b/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/NewShippingTest.php
index 1f98daffc1d..3b1b76d9c7c 100644
--- a/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/NewShippingTest.php
+++ b/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/NewShippingTest.php
@@ -157,7 +157,7 @@ class NewShippingTest extends \PHPUnit_Framework_TestCase
             ->willReturn($shippingAddress);
         $this->addressFormMock->expects($this->once())->method('setBackUrl')->with($url);
         $this->viewMock->expects($this->once())->method('renderLayout');
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     public function executeDataProvider()
@@ -183,6 +183,6 @@ class NewShippingTest extends \PHPUnit_Framework_TestCase
             ->with('customer_address_edit');
         $this->urlMock->expects($this->never())->method('getUrl');
         $this->viewMock->expects($this->once())->method('renderLayout');
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/ShippingSavedTest.php b/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/ShippingSavedTest.php
index ffb91ebb4e1..23ff549744c 100644
--- a/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/ShippingSavedTest.php
+++ b/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/Address/ShippingSavedTest.php
@@ -100,7 +100,7 @@ class ShippingSavedTest extends \PHPUnit_Framework_TestCase
 
         // check that checkout is reset
         $this->checkoutMock->expects($this->once())->method('reset');
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     public function testExecuteDoesNotResetCheckoutIfCustomerHasMoreThanOneAddress()
@@ -120,7 +120,7 @@ class ShippingSavedTest extends \PHPUnit_Framework_TestCase
 
         // check that checkout is not reset
         $this->checkoutMock->expects($this->never())->method('reset');
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     /**
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Problem/Grid.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Problem/Grid.php
index cf2ae4964f7..e3904f2efad 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Problem/Grid.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Problem/Grid.php
@@ -13,7 +13,7 @@ class Grid extends \Magento\Newsletter\Controller\Adminhtml\Problem
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->getRequest()->getParam('_unsubscribe')) {
             $problems = (array)$this->getRequest()->getParam('problem', []);
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Problem/Index.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Problem/Index.php
index 2b377e93c28..89045ddfa6a 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Problem/Index.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Problem/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Newsletter\Controller\Adminhtml\Problem
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->getRequest()->getQuery('ajax')) {
             $this->_forward('grid');
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Cancel.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Cancel.php
index eda2ee69860..a04519e190e 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Cancel.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Cancel.php
@@ -13,7 +13,7 @@ class Cancel extends \Magento\Newsletter\Controller\Adminhtml\Queue
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $queue = $this->_objectManager->get(
             'Magento\Newsletter\Model\Queue'
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Drop.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Drop.php
index ff410c926fc..af2cc33cca5 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Drop.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Drop.php
@@ -13,7 +13,7 @@ class Drop extends \Magento\Newsletter\Controller\Adminhtml\Queue
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout('newsletter_queue_preview_popup');
         $this->_view->renderLayout();
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Edit.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Edit.php
index ea3cfed3771..d8881fa43ac 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Edit.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Edit.php
@@ -30,7 +30,7 @@ class Edit extends \Magento\Newsletter\Controller\Adminhtml\Queue
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_coreRegistry->register('current_queue', $this->_objectManager->get('Magento\Newsletter\Model\Queue'));
 
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Grid.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Grid.php
index 509b868d29e..33df60e5921 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Grid.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Grid.php
@@ -13,7 +13,7 @@ class Grid extends \Magento\Newsletter\Controller\Adminhtml\Queue
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout(false);
         $this->_view->renderLayout();
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Index.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Index.php
index 412d531b7d4..cd9b39395f7 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Index.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Newsletter\Controller\Adminhtml\Queue
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->getRequest()->getQuery('ajax')) {
             $this->_forward('grid');
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Pause.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Pause.php
index 1e890edcb36..2e2cad6b588 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Pause.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Pause.php
@@ -13,7 +13,7 @@ class Pause extends \Magento\Newsletter\Controller\Adminhtml\Queue
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $queue = $this->_objectManager->get(
             'Magento\Newsletter\Model\Queue'
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Preview.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Preview.php
index 3a6f564f90d..488dc897f8f 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Preview.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Preview.php
@@ -13,7 +13,7 @@ class Preview extends \Magento\Newsletter\Controller\Adminhtml\Queue
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $data = $this->getRequest()->getParams();
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Resume.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Resume.php
index f92ab4bf691..da87317dda9 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Resume.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Resume.php
@@ -13,7 +13,7 @@ class Resume extends \Magento\Newsletter\Controller\Adminhtml\Queue
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $queue = $this->_objectManager->get(
             'Magento\Newsletter\Model\Queue'
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Save.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Save.php
index 33fd2052a42..28990582b66 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Save.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Save.php
@@ -18,7 +18,7 @@ class Save extends \Magento\Newsletter\Controller\Adminhtml\Queue
      * @return void
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             /* @var $queue \Magento\Newsletter\Model\Queue */
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Sending.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Sending.php
index bc6053c67aa..6e5000bbb27 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Sending.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Sending.php
@@ -13,7 +13,7 @@ class Sending extends \Magento\Newsletter\Controller\Adminhtml\Queue
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         // Todo: put it somewhere in config!
         $countOfQueue = 3;
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Start.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Start.php
index 1917681ca21..bda80ec9901 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Start.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Start.php
@@ -13,7 +13,7 @@ class Start extends \Magento\Newsletter\Controller\Adminhtml\Queue
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $queue = $this->_objectManager->create(
             'Magento\Newsletter\Model\Queue'
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/ExportCsv.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/ExportCsv.php
index 8a795384b14..398a7ef8221 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/ExportCsv.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/ExportCsv.php
@@ -16,7 +16,7 @@ class ExportCsv extends \Magento\Newsletter\Controller\Adminhtml\Subscriber
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $fileName = 'subscribers.csv';
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/ExportXml.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/ExportXml.php
index 44b68aa1afe..ac16f90c852 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/ExportXml.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/ExportXml.php
@@ -16,7 +16,7 @@ class ExportXml extends \Magento\Newsletter\Controller\Adminhtml\Subscriber
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $fileName = 'subscribers.xml';
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/Grid.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/Grid.php
index 89aa1b46520..5a06ac05d3c 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/Grid.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/Grid.php
@@ -13,7 +13,7 @@ class Grid extends \Magento\Newsletter\Controller\Adminhtml\Subscriber
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout(false);
         $this->_view->renderLayout();
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/Index.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/Index.php
index 9aed2baed18..a8d7f096b64 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/Index.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Newsletter\Controller\Adminhtml\Subscriber
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->getRequest()->getParam('ajax')) {
             $this->_forward('grid');
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/MassDelete.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/MassDelete.php
index 4ea5f85728e..ebc712cefb7 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/MassDelete.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/MassDelete.php
@@ -13,7 +13,7 @@ class MassDelete extends \Magento\Newsletter\Controller\Adminhtml\Subscriber
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $subscribersIds = $this->getRequest()->getParam('subscriber');
         if (!is_array($subscribersIds)) {
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/MassUnsubscribe.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/MassUnsubscribe.php
index d6b6df7c19a..8a6feb8b349 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/MassUnsubscribe.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Subscriber/MassUnsubscribe.php
@@ -13,7 +13,7 @@ class MassUnsubscribe extends \Magento\Newsletter\Controller\Adminhtml\Subscribe
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $subscribersIds = $this->getRequest()->getParam('subscriber');
         if (!is_array($subscribersIds)) {
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Delete.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Delete.php
index 188e800f3bf..9b1ebaa45ff 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Delete.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Delete.php
@@ -13,7 +13,7 @@ class Delete extends \Magento\Newsletter\Controller\Adminhtml\Template
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $template = $this->_objectManager->create(
             'Magento\Newsletter\Model\Template'
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Drop.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Drop.php
index f96ac80e7f0..bf4ac7d5ff7 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Drop.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Drop.php
@@ -13,7 +13,7 @@ class Drop extends \Magento\Newsletter\Controller\Adminhtml\Template
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout('newsletter_template_preview_popup');
         $this->_view->renderLayout();
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Edit.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Edit.php
index b1030723790..fb52832aca9 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Edit.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Edit.php
@@ -30,7 +30,7 @@ class Edit extends \Magento\Newsletter\Controller\Adminhtml\Template
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $model = $this->_objectManager->create('Magento\Newsletter\Model\Template');
         $id = $this->getRequest()->getParam('id');
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Grid.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Grid.php
index dbd0e7195a5..d3c850e81b4 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Grid.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Grid.php
@@ -13,7 +13,7 @@ class Grid extends \Magento\Newsletter\Controller\Adminhtml\Template
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $grid = $this->_view->getLayout()->createBlock('Magento\Newsletter\Block\Adminhtml\Template\Grid')->toHtml();
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Index.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Index.php
index f4c51a0f590..4647c06de1f 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Index.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Newsletter\Controller\Adminhtml\Template
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->getRequest()->getQuery('ajax')) {
             $this->_forward('grid');
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Template/NewAction.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Template/NewAction.php
index 9409faf0f6a..a03fd5c6f37 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Template/NewAction.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Template/NewAction.php
@@ -13,7 +13,7 @@ class NewAction extends \Magento\Newsletter\Controller\Adminhtml\Template
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_forward('edit');
     }
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Preview.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Preview.php
index 5594435c98d..fc04569de31 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Preview.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Preview.php
@@ -13,7 +13,7 @@ class Preview extends \Magento\Newsletter\Controller\Adminhtml\Template
      *
      * @return void|$this
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
 
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Save.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Save.php
index 4378ac6ba70..7f9c4bdb76e 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Save.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Template/Save.php
@@ -16,7 +16,7 @@ class Save extends \Magento\Newsletter\Controller\Adminhtml\Template
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $request = $this->getRequest();
         if (!$request->isPost()) {
diff --git a/app/code/Magento/Newsletter/Controller/Manage.php b/app/code/Magento/Newsletter/Controller/Manage.php
index 6bc940662ce..16ba747c011 100644
--- a/app/code/Magento/Newsletter/Controller/Manage.php
+++ b/app/code/Magento/Newsletter/Controller/Manage.php
@@ -37,11 +37,11 @@ abstract class Manage extends \Magento\Framework\App\Action\Action
      * @param RequestInterface $request
      * @return \Magento\Framework\App\ResponseInterface
      */
-    public function dispatch(RequestInterface $request)
+    public function execute(RequestInterface $request)
     {
         if (!$this->_customerSession->authenticate()) {
             $this->_actionFlag->set('', 'no-dispatch', true);
         }
-        return parent::dispatch($request);
+        return parent::execute($request);
     }
 }
diff --git a/app/code/Magento/Newsletter/Controller/Manage/Index.php b/app/code/Magento/Newsletter/Controller/Manage/Index.php
index de782a3d3bc..0ef350892c3 100644
--- a/app/code/Magento/Newsletter/Controller/Manage/Index.php
+++ b/app/code/Magento/Newsletter/Controller/Manage/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Newsletter\Controller\Manage
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
 
diff --git a/app/code/Magento/Newsletter/Controller/Manage/Save.php b/app/code/Magento/Newsletter/Controller/Manage/Save.php
index 92ba7f93628..67fe6e4dd2c 100644
--- a/app/code/Magento/Newsletter/Controller/Manage/Save.php
+++ b/app/code/Magento/Newsletter/Controller/Manage/Save.php
@@ -60,7 +60,7 @@ class Save extends \Magento\Newsletter\Controller\Manage
      *
      * @return void|null
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->formKeyValidator->validate($this->getRequest())) {
             return $this->_redirect('customer/account/');
diff --git a/app/code/Magento/Newsletter/Controller/Subscriber/Confirm.php b/app/code/Magento/Newsletter/Controller/Subscriber/Confirm.php
index 91d4f0d2880..785f3ab0185 100644
--- a/app/code/Magento/Newsletter/Controller/Subscriber/Confirm.php
+++ b/app/code/Magento/Newsletter/Controller/Subscriber/Confirm.php
@@ -12,7 +12,7 @@ class Confirm extends \Magento\Newsletter\Controller\Subscriber
      * Subscription confirm action
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = (int)$this->getRequest()->getParam('id');
         $code = (string)$this->getRequest()->getParam('code');
diff --git a/app/code/Magento/Newsletter/Controller/Subscriber/NewAction.php b/app/code/Magento/Newsletter/Controller/Subscriber/NewAction.php
index 5e8850de308..11dcfacb44f 100644
--- a/app/code/Magento/Newsletter/Controller/Subscriber/NewAction.php
+++ b/app/code/Magento/Newsletter/Controller/Subscriber/NewAction.php
@@ -111,7 +111,7 @@ class NewAction extends \Magento\Newsletter\Controller\Subscriber
      * @throws \Magento\Framework\Exception\LocalizedException
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->getRequest()->isPost() && $this->getRequest()->getPost('email')) {
             $email = (string)$this->getRequest()->getPost('email');
diff --git a/app/code/Magento/Newsletter/Controller/Subscriber/Unsubscribe.php b/app/code/Magento/Newsletter/Controller/Subscriber/Unsubscribe.php
index 9fb7575699a..9449f3336f9 100644
--- a/app/code/Magento/Newsletter/Controller/Subscriber/Unsubscribe.php
+++ b/app/code/Magento/Newsletter/Controller/Subscriber/Unsubscribe.php
@@ -12,7 +12,7 @@ class Unsubscribe extends \Magento\Newsletter\Controller\Subscriber
      * Unsubscribe newsletter
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = (int)$this->getRequest()->getParam('id');
         $code = (string)$this->getRequest()->getParam('code');
diff --git a/app/code/Magento/Newsletter/Test/Unit/Controller/Manage/SaveTest.php b/app/code/Magento/Newsletter/Test/Unit/Controller/Manage/SaveTest.php
index f592aafcbc9..99bb1abdfc1 100644
--- a/app/code/Magento/Newsletter/Test/Unit/Controller/Manage/SaveTest.php
+++ b/app/code/Magento/Newsletter/Test/Unit/Controller/Manage/SaveTest.php
@@ -107,7 +107,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             ->method('addSuccess');
         $this->messageManagerMock->expects($this->never())
             ->method('addError');
-        $this->action->execute();
+        $this->action->executeInternal();
     }
 
     public function testSaveActionNoCustomerInSession()
@@ -126,7 +126,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
         $this->messageManagerMock->expects($this->once())
             ->method('addError')
             ->with('Something went wrong while saving your subscription.');
-        $this->action->execute();
+        $this->action->executeInternal();
     }
 
     public function testSaveActionWithException()
@@ -156,6 +156,6 @@ class SaveTest extends \PHPUnit_Framework_TestCase
         $this->messageManagerMock->expects($this->once())
             ->method('addError')
             ->with('Something went wrong while saving your subscription.');
-        $this->action->execute();
+        $this->action->executeInternal();
     }
 }
diff --git a/app/code/Magento/OfflineShipping/Controller/Adminhtml/System/Config/ExportTablerates.php b/app/code/Magento/OfflineShipping/Controller/Adminhtml/System/Config/ExportTablerates.php
index 8f273e49c61..af20ac56ba4 100644
--- a/app/code/Magento/OfflineShipping/Controller/Adminhtml/System/Config/ExportTablerates.php
+++ b/app/code/Magento/OfflineShipping/Controller/Adminhtml/System/Config/ExportTablerates.php
@@ -46,7 +46,7 @@ class ExportTablerates extends \Magento\Config\Controller\Adminhtml\System\Abstr
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'tablerates.csv';
         /** @var $gridBlock \Magento\OfflineShipping\Block\Adminhtml\Carrier\Tablerate\Grid */
diff --git a/app/code/Magento/PageCache/Controller/Adminhtml/PageCache/ExportVarnishConfig.php b/app/code/Magento/PageCache/Controller/Adminhtml/PageCache/ExportVarnishConfig.php
index 6ff33668ae9..36925596918 100644
--- a/app/code/Magento/PageCache/Controller/Adminhtml/PageCache/ExportVarnishConfig.php
+++ b/app/code/Magento/PageCache/Controller/Adminhtml/PageCache/ExportVarnishConfig.php
@@ -40,7 +40,7 @@ class ExportVarnishConfig extends \Magento\Backend\App\Action
      *
      * @return \Magento\Framework\App\ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'varnish.vcl';
         $varnishVersion = $this->getRequest()->getParam('varnish');
diff --git a/app/code/Magento/PageCache/Controller/Block/Esi.php b/app/code/Magento/PageCache/Controller/Block/Esi.php
index e21aabd7cfd..026c0ec4c15 100644
--- a/app/code/Magento/PageCache/Controller/Block/Esi.php
+++ b/app/code/Magento/PageCache/Controller/Block/Esi.php
@@ -13,7 +13,7 @@ class Esi extends \Magento\PageCache\Controller\Block
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $response = $this->getResponse();
         $blocks = $this->_getBlocks();
diff --git a/app/code/Magento/PageCache/Controller/Block/Render.php b/app/code/Magento/PageCache/Controller/Block/Render.php
index 499973ae1e1..b6a95919775 100644
--- a/app/code/Magento/PageCache/Controller/Block/Render.php
+++ b/app/code/Magento/PageCache/Controller/Block/Render.php
@@ -13,7 +13,7 @@ class Render extends \Magento\PageCache\Controller\Block
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->getRequest()->isAjax()) {
             $this->_forward('noroute');
diff --git a/app/code/Magento/PageCache/Test/Unit/Controller/Adminhtml/PageCache/ExportVarnishConfigTest.php b/app/code/Magento/PageCache/Test/Unit/Controller/Adminhtml/PageCache/ExportVarnishConfigTest.php
index d99f597c3e7..4bee20c5f4c 100644
--- a/app/code/Magento/PageCache/Test/Unit/Controller/Adminhtml/PageCache/ExportVarnishConfigTest.php
+++ b/app/code/Magento/PageCache/Test/Unit/Controller/Adminhtml/PageCache/ExportVarnishConfigTest.php
@@ -102,7 +102,7 @@ class ExportVarnishConfigTest extends \PHPUnit_Framework_TestCase
             $this->returnValue($responseMock)
         );
 
-        $result = $this->action->execute();
+        $result = $this->action->executeInternal();
         $this->assertInstanceOf('Magento\Framework\App\ResponseInterface', $result);
     }
 }
diff --git a/app/code/Magento/PageCache/Test/Unit/Controller/Block/EsiTest.php b/app/code/Magento/PageCache/Test/Unit/Controller/Block/EsiTest.php
index bc23f569d17..9bddcbeb778 100644
--- a/app/code/Magento/PageCache/Test/Unit/Controller/Block/EsiTest.php
+++ b/app/code/Magento/PageCache/Test/Unit/Controller/Block/EsiTest.php
@@ -123,7 +123,7 @@ class EsiTest extends \PHPUnit_Framework_TestCase
             ->method('appendBody')
             ->with($this->equalTo($html));
 
-        $this->action->execute();
+        $this->action->executeInternal();
     }
 
     public function executeDataProvider()
@@ -145,6 +145,6 @@ class EsiTest extends \PHPUnit_Framework_TestCase
         $this->requestMock->expects($this->any())->method('getParam')->will($this->returnValueMap($mapData));
         $this->viewMock->expects($this->never())->method('getLayout')->will($this->returnValue($this->layoutMock));
 
-        $this->action->execute();
+        $this->action->executeInternal();
     }
 }
diff --git a/app/code/Magento/PageCache/Test/Unit/Controller/Block/RenderTest.php b/app/code/Magento/PageCache/Test/Unit/Controller/Block/RenderTest.php
index a9493a7a4c3..c419a150fc6 100644
--- a/app/code/Magento/PageCache/Test/Unit/Controller/Block/RenderTest.php
+++ b/app/code/Magento/PageCache/Test/Unit/Controller/Block/RenderTest.php
@@ -79,7 +79,7 @@ class RenderTest extends \PHPUnit_Framework_TestCase
         $this->requestMock->expects($this->once())->method('isAjax')->will($this->returnValue(false));
         $this->requestMock->expects($this->once())->method('setActionName')->will($this->returnValue('noroute'));
         $this->requestMock->expects($this->once())->method('setDispatched')->will($this->returnValue(false));
-        $this->action->execute();
+        $this->action->executeInternal();
     }
 
     /**
@@ -96,7 +96,7 @@ class RenderTest extends \PHPUnit_Framework_TestCase
             ->method('getParam')
             ->with($this->equalTo('handles'), $this->equalTo(''))
             ->will($this->returnValue(''));
-        $this->action->execute();
+        $this->action->executeInternal();
     }
 
     public function testExecute()
@@ -171,6 +171,6 @@ class RenderTest extends \PHPUnit_Framework_TestCase
             ->method('appendBody')
             ->with($this->equalTo(json_encode($expectedData)));
 
-        $this->action->execute();
+        $this->action->executeInternal();
     }
 }
diff --git a/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/Cancel.php b/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/Cancel.php
index 70134fdf282..f26e1c04391 100644
--- a/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/Cancel.php
+++ b/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/Cancel.php
@@ -13,7 +13,7 @@ class Cancel extends \Magento\Paypal\Controller\Adminhtml\Billing\Agreement
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $agreementModel = $this->_initBillingAgreement();
 
diff --git a/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/CustomerGrid.php b/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/CustomerGrid.php
index 0c157101b70..8fe43e3611b 100644
--- a/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/CustomerGrid.php
+++ b/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/CustomerGrid.php
@@ -29,7 +29,7 @@ class CustomerGrid extends \Magento\Paypal\Controller\Adminhtml\Billing\Agreemen
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->initCurrentCustomer();
         $this->_view->loadLayout(false);
diff --git a/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/Delete.php b/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/Delete.php
index 3bc7143a4a1..3351f7dcf7e 100644
--- a/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/Delete.php
+++ b/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/Delete.php
@@ -13,7 +13,7 @@ class Delete extends \Magento\Paypal\Controller\Adminhtml\Billing\Agreement
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $agreementModel = $this->_initBillingAgreement();
 
diff --git a/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/Grid.php b/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/Grid.php
index 2753574d2b4..a84f114d41e 100644
--- a/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/Grid.php
+++ b/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/Grid.php
@@ -13,7 +13,7 @@ class Grid extends \Magento\Paypal\Controller\Adminhtml\Billing\Agreement
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout(false);
         $this->_view->renderLayout();
diff --git a/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/Index.php b/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/Index.php
index f20444f9214..51edf6b55bf 100644
--- a/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/Index.php
+++ b/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Paypal\Controller\Adminhtml\Billing\Agreement
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $this->_setActiveMenu('Magento_Paypal::paypal_billing_agreement');
diff --git a/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/OrdersGrid.php b/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/OrdersGrid.php
index 62208a96b71..10b9b003c84 100644
--- a/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/OrdersGrid.php
+++ b/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/OrdersGrid.php
@@ -13,7 +13,7 @@ class OrdersGrid extends \Magento\Paypal\Controller\Adminhtml\Billing\Agreement
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initBillingAgreement();
         $this->_view->loadLayout(false);
diff --git a/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/View.php b/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/View.php
index 3755d973cac..85c81a77788 100644
--- a/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/View.php
+++ b/app/code/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/View.php
@@ -13,7 +13,7 @@ class View extends \Magento\Paypal\Controller\Adminhtml\Billing\Agreement
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $agreementModel = $this->_initBillingAgreement();
 
diff --git a/app/code/Magento/Paypal/Controller/Adminhtml/Paypal/Reports/Details.php b/app/code/Magento/Paypal/Controller/Adminhtml/Paypal/Reports/Details.php
index 20633c5c585..f48168d33d3 100644
--- a/app/code/Magento/Paypal/Controller/Adminhtml/Paypal/Reports/Details.php
+++ b/app/code/Magento/Paypal/Controller/Adminhtml/Paypal/Reports/Details.php
@@ -13,7 +13,7 @@ class Details extends \Magento\Paypal\Controller\Adminhtml\Paypal\Reports
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $rowId = $this->getRequest()->getParam('id');
         $row = $this->_rowFactory->create()->load($rowId);
diff --git a/app/code/Magento/Paypal/Controller/Adminhtml/Paypal/Reports/Fetch.php b/app/code/Magento/Paypal/Controller/Adminhtml/Paypal/Reports/Fetch.php
index 89ccd4a5f9d..67c4824259e 100644
--- a/app/code/Magento/Paypal/Controller/Adminhtml/Paypal/Reports/Fetch.php
+++ b/app/code/Magento/Paypal/Controller/Adminhtml/Paypal/Reports/Fetch.php
@@ -18,7 +18,7 @@ class Fetch extends \Magento\Paypal\Controller\Adminhtml\Paypal\Reports
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $reports = $this->_settlementFactory->create();
diff --git a/app/code/Magento/Paypal/Controller/Adminhtml/Paypal/Reports/Grid.php b/app/code/Magento/Paypal/Controller/Adminhtml/Paypal/Reports/Grid.php
index 33551753da5..0d3342c2669 100644
--- a/app/code/Magento/Paypal/Controller/Adminhtml/Paypal/Reports/Grid.php
+++ b/app/code/Magento/Paypal/Controller/Adminhtml/Paypal/Reports/Grid.php
@@ -13,7 +13,7 @@ class Grid extends \Magento\Paypal\Controller\Adminhtml\Paypal\Reports
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout(false);
         $this->_view->renderLayout();
diff --git a/app/code/Magento/Paypal/Controller/Adminhtml/Paypal/Reports/Index.php b/app/code/Magento/Paypal/Controller/Adminhtml/Paypal/Reports/Index.php
index 2f2ad28ce19..4bd6de4cdfb 100644
--- a/app/code/Magento/Paypal/Controller/Adminhtml/Paypal/Reports/Index.php
+++ b/app/code/Magento/Paypal/Controller/Adminhtml/Paypal/Reports/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Paypal\Controller\Adminhtml\Paypal\Reports
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initAction();
         $this->_view->renderLayout();
diff --git a/app/code/Magento/Paypal/Controller/Billing/Agreement.php b/app/code/Magento/Paypal/Controller/Billing/Agreement.php
index 8d6f0f0b1e6..01f632dba7f 100644
--- a/app/code/Magento/Paypal/Controller/Billing/Agreement.php
+++ b/app/code/Magento/Paypal/Controller/Billing/Agreement.php
@@ -37,15 +37,15 @@ abstract class Agreement extends \Magento\Framework\App\Action\Action
      * @param RequestInterface $request
      * @return \Magento\Framework\App\ResponseInterface
      */
-    public function dispatch(RequestInterface $request)
+    public function execute(RequestInterface $request)
     {
         if (!$request->isDispatched()) {
-            return parent::dispatch($request);
+            return parent::execute($request);
         }
         if (!$this->_getSession()->authenticate()) {
             $this->_actionFlag->set('', 'no-dispatch', true);
         }
-        return parent::dispatch($request);
+        return parent::execute($request);
     }
 
     /**
diff --git a/app/code/Magento/Paypal/Controller/Billing/Agreement/Cancel.php b/app/code/Magento/Paypal/Controller/Billing/Agreement/Cancel.php
index ee0daf91727..5b8e8f30b75 100644
--- a/app/code/Magento/Paypal/Controller/Billing/Agreement/Cancel.php
+++ b/app/code/Magento/Paypal/Controller/Billing/Agreement/Cancel.php
@@ -14,7 +14,7 @@ class Cancel extends \Magento\Paypal\Controller\Billing\Agreement
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $agreement = $this->_initAgreement();
         if (!$agreement) {
diff --git a/app/code/Magento/Paypal/Controller/Billing/Agreement/CancelWizard.php b/app/code/Magento/Paypal/Controller/Billing/Agreement/CancelWizard.php
index f95b687f576..22394e572ad 100644
--- a/app/code/Magento/Paypal/Controller/Billing/Agreement/CancelWizard.php
+++ b/app/code/Magento/Paypal/Controller/Billing/Agreement/CancelWizard.php
@@ -13,7 +13,7 @@ class CancelWizard extends \Magento\Paypal\Controller\Billing\Agreement
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_redirect('*/*/index');
     }
diff --git a/app/code/Magento/Paypal/Controller/Billing/Agreement/Index.php b/app/code/Magento/Paypal/Controller/Billing/Agreement/Index.php
index 85c21069996..c5ccc5c8afb 100644
--- a/app/code/Magento/Paypal/Controller/Billing/Agreement/Index.php
+++ b/app/code/Magento/Paypal/Controller/Billing/Agreement/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Paypal\Controller\Billing\Agreement
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $this->_view->getPage()->getConfig()->getTitle()->prepend(__('Billing Agreements'));
diff --git a/app/code/Magento/Paypal/Controller/Billing/Agreement/ReturnWizard.php b/app/code/Magento/Paypal/Controller/Billing/Agreement/ReturnWizard.php
index 59040954d0c..f7bd4d4b3a3 100644
--- a/app/code/Magento/Paypal/Controller/Billing/Agreement/ReturnWizard.php
+++ b/app/code/Magento/Paypal/Controller/Billing/Agreement/ReturnWizard.php
@@ -15,7 +15,7 @@ class ReturnWizard extends \Magento\Paypal\Controller\Billing\Agreement
      *
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Paypal\Model\Billing\Agreement $agreement */
         $agreement = $this->_objectManager->create('Magento\Paypal\Model\Billing\Agreement');
diff --git a/app/code/Magento/Paypal/Controller/Billing/Agreement/StartWizard.php b/app/code/Magento/Paypal/Controller/Billing/Agreement/StartWizard.php
index 407240c756b..24364b02e0d 100644
--- a/app/code/Magento/Paypal/Controller/Billing/Agreement/StartWizard.php
+++ b/app/code/Magento/Paypal/Controller/Billing/Agreement/StartWizard.php
@@ -13,7 +13,7 @@ class StartWizard extends \Magento\Paypal\Controller\Billing\Agreement
      *
      * @return \Magento\Framework\App\Response\Http
      */
-    public function execute()
+    public function executeInternal()
     {
         $agreement = $this->_objectManager->create('Magento\Paypal\Model\Billing\Agreement');
         $paymentCode = $this->getRequest()->getParam('payment_method');
diff --git a/app/code/Magento/Paypal/Controller/Billing/Agreement/View.php b/app/code/Magento/Paypal/Controller/Billing/Agreement/View.php
index 31b2dfd759c..2cbe118f4db 100644
--- a/app/code/Magento/Paypal/Controller/Billing/Agreement/View.php
+++ b/app/code/Magento/Paypal/Controller/Billing/Agreement/View.php
@@ -13,7 +13,7 @@ class View extends \Magento\Paypal\Controller\Billing\Agreement
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!($agreement = $this->_initAgreement())) {
             return;
diff --git a/app/code/Magento/Paypal/Controller/Bml/Start.php b/app/code/Magento/Paypal/Controller/Bml/Start.php
index d189c91965e..1fe8cc71700 100644
--- a/app/code/Magento/Paypal/Controller/Bml/Start.php
+++ b/app/code/Magento/Paypal/Controller/Bml/Start.php
@@ -13,7 +13,7 @@ class Start extends \Magento\Framework\App\Action\Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_forward(
             'start',
diff --git a/app/code/Magento/Paypal/Controller/Express/AbstractExpress/Cancel.php b/app/code/Magento/Paypal/Controller/Express/AbstractExpress/Cancel.php
index 05c5dd2b5d1..a6b9079f913 100644
--- a/app/code/Magento/Paypal/Controller/Express/AbstractExpress/Cancel.php
+++ b/app/code/Magento/Paypal/Controller/Express/AbstractExpress/Cancel.php
@@ -15,7 +15,7 @@ class Cancel extends \Magento\Paypal\Controller\Express\AbstractExpress
      *
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->_initToken(false);
diff --git a/app/code/Magento/Paypal/Controller/Express/AbstractExpress/Edit.php b/app/code/Magento/Paypal/Controller/Express/AbstractExpress/Edit.php
index a9e879b5147..c7bca308846 100644
--- a/app/code/Magento/Paypal/Controller/Express/AbstractExpress/Edit.php
+++ b/app/code/Magento/Paypal/Controller/Express/AbstractExpress/Edit.php
@@ -13,7 +13,7 @@ class Edit extends \Magento\Paypal\Controller\Express\AbstractExpress
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->getResponse()->setRedirect($this->_config->getExpressCheckoutEditUrl($this->_initToken()));
diff --git a/app/code/Magento/Paypal/Controller/Express/AbstractExpress/PlaceOrder.php b/app/code/Magento/Paypal/Controller/Express/AbstractExpress/PlaceOrder.php
index 3a723692287..456eb87f65e 100644
--- a/app/code/Magento/Paypal/Controller/Express/AbstractExpress/PlaceOrder.php
+++ b/app/code/Magento/Paypal/Controller/Express/AbstractExpress/PlaceOrder.php
@@ -60,7 +60,7 @@ class PlaceOrder extends \Magento\Paypal\Controller\Express\AbstractExpress
      * @return void
      * @throws \Magento\Framework\Exception\LocalizedException
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             if ($this->isValidationRequired() &&
diff --git a/app/code/Magento/Paypal/Controller/Express/AbstractExpress/ReturnAction.php b/app/code/Magento/Paypal/Controller/Express/AbstractExpress/ReturnAction.php
index 20604c61a1d..a1df0081066 100644
--- a/app/code/Magento/Paypal/Controller/Express/AbstractExpress/ReturnAction.php
+++ b/app/code/Magento/Paypal/Controller/Express/AbstractExpress/ReturnAction.php
@@ -15,7 +15,7 @@ class ReturnAction extends \Magento\Paypal\Controller\Express\AbstractExpress
      *
      * @return void|\Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
diff --git a/app/code/Magento/Paypal/Controller/Express/AbstractExpress/Review.php b/app/code/Magento/Paypal/Controller/Express/AbstractExpress/Review.php
index ec848148b64..f60c2fd7847 100644
--- a/app/code/Magento/Paypal/Controller/Express/AbstractExpress/Review.php
+++ b/app/code/Magento/Paypal/Controller/Express/AbstractExpress/Review.php
@@ -15,7 +15,7 @@ class Review extends \Magento\Paypal\Controller\Express\AbstractExpress
      *
      * @return void|\Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->_initCheckout();
diff --git a/app/code/Magento/Paypal/Controller/Express/AbstractExpress/SaveShippingMethod.php b/app/code/Magento/Paypal/Controller/Express/AbstractExpress/SaveShippingMethod.php
index 311900157b1..befc1615314 100644
--- a/app/code/Magento/Paypal/Controller/Express/AbstractExpress/SaveShippingMethod.php
+++ b/app/code/Magento/Paypal/Controller/Express/AbstractExpress/SaveShippingMethod.php
@@ -13,7 +13,7 @@ class SaveShippingMethod extends \Magento\Paypal\Controller\Express\AbstractExpr
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $isAjax = $this->getRequest()->getParam('isAjax');
diff --git a/app/code/Magento/Paypal/Controller/Express/AbstractExpress/ShippingOptionsCallback.php b/app/code/Magento/Paypal/Controller/Express/AbstractExpress/ShippingOptionsCallback.php
index a66433f346a..ca53012f534 100644
--- a/app/code/Magento/Paypal/Controller/Express/AbstractExpress/ShippingOptionsCallback.php
+++ b/app/code/Magento/Paypal/Controller/Express/AbstractExpress/ShippingOptionsCallback.php
@@ -53,7 +53,7 @@ class ShippingOptionsCallback extends \Magento\Paypal\Controller\Express\Abstrac
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $quoteId = $this->getRequest()->getParam('quote_id');
diff --git a/app/code/Magento/Paypal/Controller/Express/AbstractExpress/Start.php b/app/code/Magento/Paypal/Controller/Express/AbstractExpress/Start.php
index 1ec1c2d96c8..dae43744757 100644
--- a/app/code/Magento/Paypal/Controller/Express/AbstractExpress/Start.php
+++ b/app/code/Magento/Paypal/Controller/Express/AbstractExpress/Start.php
@@ -16,7 +16,7 @@ class Start extends \Magento\Paypal\Controller\Express\AbstractExpress
      * @return void
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->_initCheckout();
diff --git a/app/code/Magento/Paypal/Controller/Express/AbstractExpress/UpdateShippingMethods.php b/app/code/Magento/Paypal/Controller/Express/AbstractExpress/UpdateShippingMethods.php
index 1d0cbdf5481..dc4f01b3f3c 100644
--- a/app/code/Magento/Paypal/Controller/Express/AbstractExpress/UpdateShippingMethods.php
+++ b/app/code/Magento/Paypal/Controller/Express/AbstractExpress/UpdateShippingMethods.php
@@ -13,7 +13,7 @@ class UpdateShippingMethods extends \Magento\Paypal\Controller\Express\AbstractE
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->_initCheckout();
diff --git a/app/code/Magento/Paypal/Controller/Hostedpro/Cancel.php b/app/code/Magento/Paypal/Controller/Hostedpro/Cancel.php
index fab449dc198..0889ae11aa1 100644
--- a/app/code/Magento/Paypal/Controller/Hostedpro/Cancel.php
+++ b/app/code/Magento/Paypal/Controller/Hostedpro/Cancel.php
@@ -48,7 +48,7 @@ class Cancel extends \Magento\Framework\App\Action\Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout(false);
         $gotoSection = $this->_cancelPayment();
diff --git a/app/code/Magento/Paypal/Controller/Hostedpro/Redirect.php b/app/code/Magento/Paypal/Controller/Hostedpro/Redirect.php
index aa3a234d2d2..37c874e14fa 100644
--- a/app/code/Magento/Paypal/Controller/Hostedpro/Redirect.php
+++ b/app/code/Magento/Paypal/Controller/Hostedpro/Redirect.php
@@ -13,7 +13,7 @@ class Redirect extends \Magento\Paypal\Controller\Payflow
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->getResponse()->setRedirect(
             $this->getOrder()->getPayment()->getAdditionalInformation('secure_form_url')
diff --git a/app/code/Magento/Paypal/Controller/Hostedpro/ReturnAction.php b/app/code/Magento/Paypal/Controller/Hostedpro/ReturnAction.php
index 9f0651b3a14..b3f791e5782 100644
--- a/app/code/Magento/Paypal/Controller/Hostedpro/ReturnAction.php
+++ b/app/code/Magento/Paypal/Controller/Hostedpro/ReturnAction.php
@@ -13,7 +13,7 @@ class ReturnAction extends \Magento\Framework\App\Action\Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $session = $this->_objectManager->get('Magento\Checkout\Model\Session');
         //TODO: some actions with order
diff --git a/app/code/Magento/Paypal/Controller/Ipn/Index.php b/app/code/Magento/Paypal/Controller/Ipn/Index.php
index b8078937d32..b3384cba4de 100644
--- a/app/code/Magento/Paypal/Controller/Ipn/Index.php
+++ b/app/code/Magento/Paypal/Controller/Ipn/Index.php
@@ -45,7 +45,7 @@ class Index extends \Magento\Framework\App\Action\Action
      * @return void
      * @SuppressWarnings(PHPMD.ExitExpression)
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->getRequest()->isPost()) {
             return;
diff --git a/app/code/Magento/Paypal/Controller/Payflow/CancelPayment.php b/app/code/Magento/Paypal/Controller/Payflow/CancelPayment.php
index fa59c545b86..7bd94850d9d 100644
--- a/app/code/Magento/Paypal/Controller/Payflow/CancelPayment.php
+++ b/app/code/Magento/Paypal/Controller/Payflow/CancelPayment.php
@@ -13,7 +13,7 @@ class CancelPayment extends \Magento\Paypal\Controller\Payflow
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout(false);
         $gotoSection = $this->_cancelPayment();
diff --git a/app/code/Magento/Paypal/Controller/Payflow/Form.php b/app/code/Magento/Paypal/Controller/Payflow/Form.php
index 47834722d2b..32ca4209659 100644
--- a/app/code/Magento/Paypal/Controller/Payflow/Form.php
+++ b/app/code/Magento/Paypal/Controller/Payflow/Form.php
@@ -17,7 +17,7 @@ class Form extends Payflow
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->getResponse()->setHeader('P3P', 'CP="CAO PSA OUR"');
         $this->_view->loadLayout(false)->renderLayout();
diff --git a/app/code/Magento/Paypal/Controller/Payflow/ReturnUrl.php b/app/code/Magento/Paypal/Controller/Payflow/ReturnUrl.php
index 1907a07045f..1c095d439ee 100644
--- a/app/code/Magento/Paypal/Controller/Payflow/ReturnUrl.php
+++ b/app/code/Magento/Paypal/Controller/Payflow/ReturnUrl.php
@@ -24,7 +24,7 @@ class ReturnUrl extends Payflow
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout(false);
         /** @var \Magento\Checkout\Block\Onepage\Success $redirectBlock */
diff --git a/app/code/Magento/Paypal/Controller/Payflow/SilentPost.php b/app/code/Magento/Paypal/Controller/Payflow/SilentPost.php
index 8b737177ada..9f1aae5624f 100644
--- a/app/code/Magento/Paypal/Controller/Payflow/SilentPost.php
+++ b/app/code/Magento/Paypal/Controller/Payflow/SilentPost.php
@@ -13,7 +13,7 @@ class SilentPost extends \Magento\Paypal\Controller\Payflow
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $data = $this->getRequest()->getPostValue();
         if (isset($data['INVNUM'])) {
diff --git a/app/code/Magento/Paypal/Controller/Payflowbml/Start.php b/app/code/Magento/Paypal/Controller/Payflowbml/Start.php
index 4cd82e11464..8da3b6f2715 100644
--- a/app/code/Magento/Paypal/Controller/Payflowbml/Start.php
+++ b/app/code/Magento/Paypal/Controller/Payflowbml/Start.php
@@ -13,7 +13,7 @@ class Start extends \Magento\Framework\App\Action\Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_forward(
             'start',
diff --git a/app/code/Magento/Paypal/Controller/Transparent/RequestSecureToken.php b/app/code/Magento/Paypal/Controller/Transparent/RequestSecureToken.php
index 2fba2402a5f..923988d12a1 100644
--- a/app/code/Magento/Paypal/Controller/Transparent/RequestSecureToken.php
+++ b/app/code/Magento/Paypal/Controller/Transparent/RequestSecureToken.php
@@ -77,7 +77,7 @@ class RequestSecureToken extends \Magento\Framework\App\Action\Action
      *
      * @return ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var Quote $quote */
         $quote = $this->sessionManager->getQuote();
diff --git a/app/code/Magento/Paypal/Controller/Transparent/Response.php b/app/code/Magento/Paypal/Controller/Transparent/Response.php
index c6c8105cba9..30792f38578 100644
--- a/app/code/Magento/Paypal/Controller/Transparent/Response.php
+++ b/app/code/Magento/Paypal/Controller/Transparent/Response.php
@@ -62,7 +62,7 @@ class Response extends \Magento\Framework\App\Action\Action
     /**
      * @return ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $parameters = [];
         try {
diff --git a/app/code/Magento/Paypal/Test/Unit/Controller/Billing/Agreement/CancelTest.php b/app/code/Magento/Paypal/Test/Unit/Controller/Billing/Agreement/CancelTest.php
index 8d4e0ef4ccf..3a7ae2302c3 100644
--- a/app/code/Magento/Paypal/Test/Unit/Controller/Billing/Agreement/CancelTest.php
+++ b/app/code/Magento/Paypal/Test/Unit/Controller/Billing/Agreement/CancelTest.php
@@ -122,7 +122,7 @@ class CancelTest extends \PHPUnit_Framework_TestCase
             $this->identicalTo($this->_agreement)
         );
 
-        $this->_controller->execute();
+        $this->_controller->executeInternal();
     }
 
     public function testExecuteAgreementDoesNotBelongToCustomer()
@@ -136,7 +136,7 @@ class CancelTest extends \PHPUnit_Framework_TestCase
 
         $this->_registry->expects($this->never())->method('register');
 
-        $this->_controller->execute();
+        $this->_controller->executeInternal();
     }
 
     public function testExecuteAgreementStatusDoesNotAllowToCancel()
@@ -157,6 +157,6 @@ class CancelTest extends \PHPUnit_Framework_TestCase
             $this->identicalTo($this->_agreement)
         );
 
-        $this->_controller->execute();
+        $this->_controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Paypal/Test/Unit/Controller/Payflow/ReturnUrlTest.php b/app/code/Magento/Paypal/Test/Unit/Controller/Payflow/ReturnUrlTest.php
index 96a45ab4cfb..b4ae7940e76 100644
--- a/app/code/Magento/Paypal/Test/Unit/Controller/Payflow/ReturnUrlTest.php
+++ b/app/code/Magento/Paypal/Test/Unit/Controller/Payflow/ReturnUrlTest.php
@@ -202,7 +202,7 @@ class ReturnUrlTest extends \PHPUnit_Framework_TestCase
             ->with('goto_success_page', true)
             ->will($this->returnSelf());
 
-        $this->returnUrl->execute();
+        $this->returnUrl->executeInternal();
     }
 
     /**
@@ -272,6 +272,6 @@ class ReturnUrlTest extends \PHPUnit_Framework_TestCase
             ->with('error_msg', __('Your payment has been declined. Please try again.'))
             ->will($this->returnSelf());
 
-        $this->returnUrl->execute();
+        $this->returnUrl->executeInternal();
     }
 }
diff --git a/app/code/Magento/Paypal/Test/Unit/Controller/Transparent/RequestSecureTokenTest.php b/app/code/Magento/Paypal/Test/Unit/Controller/Transparent/RequestSecureTokenTest.php
index 7285064bcb7..4429f6a9e5d 100644
--- a/app/code/Magento/Paypal/Test/Unit/Controller/Transparent/RequestSecureTokenTest.php
+++ b/app/code/Magento/Paypal/Test/Unit/Controller/Transparent/RequestSecureTokenTest.php
@@ -153,7 +153,7 @@ class RequestSecureTokenTest extends \PHPUnit_Framework_TestCase
             ->with($resultExpectation)
             ->willReturnSelf();
 
-        $this->assertEquals($jsonMock, $this->controller->execute());
+        $this->assertEquals($jsonMock, $this->controller->executeInternal());
     }
 
     public function testExecuteTokenRequestException()
@@ -193,7 +193,7 @@ class RequestSecureTokenTest extends \PHPUnit_Framework_TestCase
             ->with($resultExpectation)
             ->willReturnSelf();
 
-        $this->assertEquals($jsonMock, $this->controller->execute());
+        $this->assertEquals($jsonMock, $this->controller->executeInternal());
     }
 
     public function testExecuteEmptyQuoteError()
@@ -220,6 +220,6 @@ class RequestSecureTokenTest extends \PHPUnit_Framework_TestCase
             ->with($resultExpectation)
             ->willReturnSelf();
 
-        $this->assertEquals($jsonMock, $this->controller->execute());
+        $this->assertEquals($jsonMock, $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Paypal/Test/Unit/Controller/Transparent/ResponseTest.php b/app/code/Magento/Paypal/Test/Unit/Controller/Transparent/ResponseTest.php
index 7cddae94159..b772f2d79bf 100644
--- a/app/code/Magento/Paypal/Test/Unit/Controller/Transparent/ResponseTest.php
+++ b/app/code/Magento/Paypal/Test/Unit/Controller/Transparent/ResponseTest.php
@@ -119,7 +119,7 @@ class ResponseTest extends \PHPUnit_Framework_TestCase
             ->method('getLayout')
             ->willReturn($this->getLayoutMock());
 
-        $this->assertInstanceOf('\Magento\Framework\Controller\ResultInterface', $this->object->execute());
+        $this->assertInstanceOf('\Magento\Framework\Controller\ResultInterface', $this->object->executeInternal());
     }
 
     public function testExecuteWithException()
@@ -144,7 +144,7 @@ class ResponseTest extends \PHPUnit_Framework_TestCase
             ->method('getLayout')
             ->willReturn($this->getLayoutMock());
 
-        $this->assertInstanceOf('\Magento\Framework\Controller\ResultInterface', $this->object->execute());
+        $this->assertInstanceOf('\Magento\Framework\Controller\ResultInterface', $this->object->executeInternal());
     }
 
     /**
diff --git a/app/code/Magento/Persistent/Controller/Index/ExpressCheckout.php b/app/code/Magento/Persistent/Controller/Index/ExpressCheckout.php
index fbe7be4e452..2defce5a718 100644
--- a/app/code/Magento/Persistent/Controller/Index/ExpressCheckout.php
+++ b/app/code/Magento/Persistent/Controller/Index/ExpressCheckout.php
@@ -18,7 +18,7 @@ class ExpressCheckout extends Index
      *
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->messageManager->addNotice(__('Your shopping cart has been updated with new prices.'));
         /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/Persistent/Controller/Index/SaveMethod.php b/app/code/Magento/Persistent/Controller/Index/SaveMethod.php
index 64e32cb9472..e83d6085b07 100644
--- a/app/code/Magento/Persistent/Controller/Index/SaveMethod.php
+++ b/app/code/Magento/Persistent/Controller/Index/SaveMethod.php
@@ -15,7 +15,7 @@ class SaveMethod extends Index
      *
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->sessionHelper->isPersistent()) {
             $this->sessionHelper->getSession()->removePersistentCookie();
diff --git a/app/code/Magento/Persistent/Controller/Index/UnsetCookie.php b/app/code/Magento/Persistent/Controller/Index/UnsetCookie.php
index 369c63f7de8..eb45cfbb176 100644
--- a/app/code/Magento/Persistent/Controller/Index/UnsetCookie.php
+++ b/app/code/Magento/Persistent/Controller/Index/UnsetCookie.php
@@ -15,7 +15,7 @@ class UnsetCookie extends Index
      *
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->sessionHelper->isPersistent()) {
             $this->cleanup();
diff --git a/app/code/Magento/ProductAlert/Controller/Add.php b/app/code/Magento/ProductAlert/Controller/Add.php
index 78ceff1e629..299dedbdbf6 100644
--- a/app/code/Magento/ProductAlert/Controller/Add.php
+++ b/app/code/Magento/ProductAlert/Controller/Add.php
@@ -35,7 +35,7 @@ abstract class Add extends Action
      * @param \Magento\Framework\App\RequestInterface $request
      * @return \Magento\Framework\App\ResponseInterface
      */
-    public function dispatch(RequestInterface $request)
+    public function execute(RequestInterface $request)
     {
         if (!$this->customerSession->authenticate()) {
             $this->_actionFlag->set('', 'no-dispatch', true);
@@ -43,6 +43,6 @@ abstract class Add extends Action
                 $this->customerSession->setBeforeUrl($this->_redirect->getRefererUrl());
             }
         }
-        return parent::dispatch($request);
+        return parent::execute($request);
     }
 }
diff --git a/app/code/Magento/ProductAlert/Controller/Add/Price.php b/app/code/Magento/ProductAlert/Controller/Add/Price.php
index 7ee60ebf799..b6a79a78f46 100644
--- a/app/code/Magento/ProductAlert/Controller/Add/Price.php
+++ b/app/code/Magento/ProductAlert/Controller/Add/Price.php
@@ -63,7 +63,7 @@ class Price extends AddController
     /**
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $backUrl = $this->getRequest()->getParam(Action::PARAM_NAME_URL_ENCODED);
         $productId = (int)$this->getRequest()->getParam('product_id');
diff --git a/app/code/Magento/ProductAlert/Controller/Add/Stock.php b/app/code/Magento/ProductAlert/Controller/Add/Stock.php
index ea0cb55cc15..0756c5168bd 100644
--- a/app/code/Magento/ProductAlert/Controller/Add/Stock.php
+++ b/app/code/Magento/ProductAlert/Controller/Add/Stock.php
@@ -37,7 +37,7 @@ class Stock extends AddController
     /**
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $backUrl = $this->getRequest()->getParam(Action::PARAM_NAME_URL_ENCODED);
         $productId = (int)$this->getRequest()->getParam('product_id');
diff --git a/app/code/Magento/ProductAlert/Controller/Add/TestObserver.php b/app/code/Magento/ProductAlert/Controller/Add/TestObserver.php
index 96a357be0e8..87a3ba10cf9 100644
--- a/app/code/Magento/ProductAlert/Controller/Add/TestObserver.php
+++ b/app/code/Magento/ProductAlert/Controller/Add/TestObserver.php
@@ -13,7 +13,7 @@ class TestObserver extends AddController
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $object = new DataObject();
         /** @var \Magento\ProductAlert\Model\Observer $observer */
diff --git a/app/code/Magento/ProductAlert/Controller/Unsubscribe/Price.php b/app/code/Magento/ProductAlert/Controller/Unsubscribe/Price.php
index 46ba80f4b3a..c0050834b69 100644
--- a/app/code/Magento/ProductAlert/Controller/Unsubscribe/Price.php
+++ b/app/code/Magento/ProductAlert/Controller/Unsubscribe/Price.php
@@ -36,7 +36,7 @@ class Price extends UnsubscribeController
     /**
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $productId = (int)$this->getRequest()->getParam('product');
         /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/ProductAlert/Controller/Unsubscribe/PriceAll.php b/app/code/Magento/ProductAlert/Controller/Unsubscribe/PriceAll.php
index 1dafba13dd7..0055633db68 100644
--- a/app/code/Magento/ProductAlert/Controller/Unsubscribe/PriceAll.php
+++ b/app/code/Magento/ProductAlert/Controller/Unsubscribe/PriceAll.php
@@ -13,7 +13,7 @@ class PriceAll extends UnsubscribeController
     /**
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->_objectManager->create('Magento\ProductAlert\Model\Price')
diff --git a/app/code/Magento/ProductAlert/Controller/Unsubscribe/Stock.php b/app/code/Magento/ProductAlert/Controller/Unsubscribe/Stock.php
index 3052fcfe0ab..50284d3b04d 100644
--- a/app/code/Magento/ProductAlert/Controller/Unsubscribe/Stock.php
+++ b/app/code/Magento/ProductAlert/Controller/Unsubscribe/Stock.php
@@ -36,7 +36,7 @@ class Stock extends UnsubscribeController
     /**
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $productId = (int)$this->getRequest()->getParam('product');
         /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/ProductAlert/Controller/Unsubscribe/StockAll.php b/app/code/Magento/ProductAlert/Controller/Unsubscribe/StockAll.php
index 63872d2cdd9..7b4eddfc7c0 100644
--- a/app/code/Magento/ProductAlert/Controller/Unsubscribe/StockAll.php
+++ b/app/code/Magento/ProductAlert/Controller/Unsubscribe/StockAll.php
@@ -13,7 +13,7 @@ class StockAll extends UnsubscribeController
     /**
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->_objectManager->create('Magento\ProductAlert\Model\Stock')
diff --git a/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php b/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
index b0cd6ca9b16..623c82edbcb 100644
--- a/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
+++ b/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
@@ -70,7 +70,7 @@ class RetrieveImage extends \Magento\Backend\App\Action
     /**
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $remoteFileUrl = $this->getRequest()->getParam('remote_image');
diff --git a/app/code/Magento/ProductVideo/Test/Unit/Controller/Adminhtml/Product/Gallery/RetrieveImageTest.php b/app/code/Magento/ProductVideo/Test/Unit/Controller/Adminhtml/Product/Gallery/RetrieveImageTest.php
index bd11bb20d4e..70af0519f53 100644
--- a/app/code/Magento/ProductVideo/Test/Unit/Controller/Adminhtml/Product/Gallery/RetrieveImageTest.php
+++ b/app/code/Magento/ProductVideo/Test/Unit/Controller/Adminhtml/Product/Gallery/RetrieveImageTest.php
@@ -128,6 +128,6 @@ class RetrieveImageTest extends \PHPUnit_Framework_TestCase
         $readInterface->expects($this->any())->method('getAbsolutePath')->willReturn('/var/www/application/sample.jpg');
         $this->abstractAdapter->expects($this->any())->method('validateUploadFile')->willReturn('true');
 
-        $this->image->execute();
+        $this->image->executeInternal();
     }
 }
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/Accounts.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/Accounts.php
index b53d9b87461..da8eb394ba5 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/Accounts.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/Accounts.php
@@ -13,7 +13,7 @@ class Accounts extends \Magento\Reports\Controller\Adminhtml\Report\Customer
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initAction()->_setActiveMenu(
             'Magento_Reports::report_customers_accounts'
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportAccountsCsv.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportAccountsCsv.php
index 1fa8340b524..2de1d222650 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportAccountsCsv.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportAccountsCsv.php
@@ -17,7 +17,7 @@ class ExportAccountsCsv extends \Magento\Reports\Controller\Adminhtml\Report\Cus
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $fileName = 'new_accounts.csv';
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportAccountsExcel.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportAccountsExcel.php
index 368c8d06917..b7e565a3f40 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportAccountsExcel.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportAccountsExcel.php
@@ -17,7 +17,7 @@ class ExportAccountsExcel extends \Magento\Reports\Controller\Adminhtml\Report\C
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $fileName = 'new_accounts.xml';
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportOrdersCsv.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportOrdersCsv.php
index d674ff274c2..8e12efa03eb 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportOrdersCsv.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportOrdersCsv.php
@@ -17,7 +17,7 @@ class ExportOrdersCsv extends \Magento\Reports\Controller\Adminhtml\Report\Custo
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $fileName = 'customers_orders.csv';
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportOrdersExcel.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportOrdersExcel.php
index 20510752042..c3f2afa1814 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportOrdersExcel.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportOrdersExcel.php
@@ -17,7 +17,7 @@ class ExportOrdersExcel extends \Magento\Reports\Controller\Adminhtml\Report\Cus
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $fileName = 'customers_orders.xml';
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportTotalsCsv.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportTotalsCsv.php
index 629e25bdf6d..c0b2f87e0fe 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportTotalsCsv.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportTotalsCsv.php
@@ -17,7 +17,7 @@ class ExportTotalsCsv extends \Magento\Reports\Controller\Adminhtml\Report\Custo
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $fileName = 'customer_totals.csv';
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportTotalsExcel.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportTotalsExcel.php
index 8c2800fe6ca..6c33a4a1eef 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportTotalsExcel.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/ExportTotalsExcel.php
@@ -17,7 +17,7 @@ class ExportTotalsExcel extends \Magento\Reports\Controller\Adminhtml\Report\Cus
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $fileName = 'customer_totals.xml';
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/Orders.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/Orders.php
index 5e556d9fe89..bc7363825f2 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/Orders.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/Orders.php
@@ -13,7 +13,7 @@ class Orders extends \Magento\Reports\Controller\Adminhtml\Report\Customer
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initAction()->_setActiveMenu(
             'Magento_Reports::report_customers_orders'
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/Totals.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/Totals.php
index f58bfb2bfc8..b7e3d117467 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/Totals.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Customer/Totals.php
@@ -13,7 +13,7 @@ class Totals extends \Magento\Reports\Controller\Adminhtml\Report\Customer
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initAction()->_setActiveMenu(
             'Magento_Reports::report_customers_totals'
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/Downloads.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/Downloads.php
index 93213f776ec..5776f796be9 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/Downloads.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/Downloads.php
@@ -23,7 +23,7 @@ class Downloads extends \Magento\Reports\Controller\Adminhtml\Report\Product
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initAction()->_setActiveMenu(
             'Magento_Downloadable::report_products_downloads'
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportDownloadsCsv.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportDownloadsCsv.php
index 5c6af987aec..31086ee266b 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportDownloadsCsv.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportDownloadsCsv.php
@@ -25,7 +25,7 @@ class ExportDownloadsCsv extends \Magento\Reports\Controller\Adminhtml\Report\Pr
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'products_downloads.csv';
         $content = $this->_view->getLayout()->createBlock(
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportDownloadsExcel.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportDownloadsExcel.php
index a42c7f09851..20c5715b260 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportDownloadsExcel.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportDownloadsExcel.php
@@ -25,7 +25,7 @@ class ExportDownloadsExcel extends \Magento\Reports\Controller\Adminhtml\Report\
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'products_downloads.xml';
         $content = $this->_view->getLayout()->createBlock(
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportLowstockCsv.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportLowstockCsv.php
index 2b63aa2d4c8..bbbce2b95b1 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportLowstockCsv.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportLowstockCsv.php
@@ -26,7 +26,7 @@ class ExportLowstockCsv extends \Magento\Reports\Controller\Adminhtml\Report\Pro
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout(false);
         $fileName = 'products_lowstock.csv';
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportLowstockExcel.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportLowstockExcel.php
index 0d0ed5e0b85..f8e86a46368 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportLowstockExcel.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportLowstockExcel.php
@@ -26,7 +26,7 @@ class ExportLowstockExcel extends \Magento\Reports\Controller\Adminhtml\Report\P
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout(false);
         $fileName = 'products_lowstock.xml';
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportSoldCsv.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportSoldCsv.php
index f1c02ac7971..7eb7c810ffb 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportSoldCsv.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportSoldCsv.php
@@ -27,7 +27,7 @@ class ExportSoldCsv extends \Magento\Reports\Controller\Adminhtml\Report\Product
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $fileName = 'products_ordered.csv';
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportSoldExcel.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportSoldExcel.php
index 818b7a73c63..8b4e4ed7fa2 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportSoldExcel.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportSoldExcel.php
@@ -27,7 +27,7 @@ class ExportSoldExcel extends \Magento\Reports\Controller\Adminhtml\Report\Produ
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $fileName = 'products_ordered.xml';
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportViewedCsv.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportViewedCsv.php
index a7b42c93992..9c7348d76f2 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportViewedCsv.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportViewedCsv.php
@@ -26,7 +26,7 @@ class ExportViewedCsv extends \Magento\Reports\Controller\Adminhtml\Report\Produ
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'products_mostviewed.csv';
         $grid = $this->_view->getLayout()->createBlock('Magento\Reports\Block\Adminhtml\Product\Viewed\Grid');
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportViewedExcel.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportViewedExcel.php
index b33650eee88..77a5ffff1aa 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportViewedExcel.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/ExportViewedExcel.php
@@ -26,7 +26,7 @@ class ExportViewedExcel extends \Magento\Reports\Controller\Adminhtml\Report\Pro
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'products_mostviewed.xml';
         $grid = $this->_view->getLayout()->createBlock('Magento\Reports\Block\Adminhtml\Product\Viewed\Grid');
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/Lowstock.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/Lowstock.php
index f2734c22fac..14eaafe76b8 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/Lowstock.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/Lowstock.php
@@ -23,7 +23,7 @@ class Lowstock extends \Magento\Reports\Controller\Adminhtml\Report\Product
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initAction()->_setActiveMenu(
             'Magento_Reports::report_products_lowstock'
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/Sold.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/Sold.php
index 2b43c124f83..25445c349e1 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/Sold.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/Sold.php
@@ -23,7 +23,7 @@ class Sold extends \Magento\Reports\Controller\Adminhtml\Report\Product
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initAction()->_setActiveMenu(
             'Magento_Reports::report_products_sold'
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/Viewed.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/Viewed.php
index 4de88db184a..3a370259de9 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/Viewed.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Product/Viewed.php
@@ -25,7 +25,7 @@ class Viewed extends \Magento\Reports\Controller\Adminhtml\Report\Product
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->_showLastExecutionTime(Flag::REPORT_PRODUCT_VIEWED_FLAG_CODE, 'viewed');
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/Customer.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/Customer.php
index f956bf14c1d..18c0961d483 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/Customer.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/Customer.php
@@ -13,7 +13,7 @@ class Customer extends \Magento\Reports\Controller\Adminhtml\Report\Review
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initAction()->_setActiveMenu(
             'Magento_Review::report_review_customer'
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportCustomerCsv.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportCustomerCsv.php
index 1a7f776d00f..473f42a4ca3 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportCustomerCsv.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportCustomerCsv.php
@@ -16,7 +16,7 @@ class ExportCustomerCsv extends \Magento\Reports\Controller\Adminhtml\Report\Rev
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout(false);
         $fileName = 'review_customer.csv';
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportCustomerExcel.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportCustomerExcel.php
index 9744feb1f5e..7dfe0c646d0 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportCustomerExcel.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportCustomerExcel.php
@@ -16,7 +16,7 @@ class ExportCustomerExcel extends \Magento\Reports\Controller\Adminhtml\Report\R
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout(false);
         $fileName = 'review_customer.xml';
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportProductCsv.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportProductCsv.php
index 2c471b80304..15d4d4d6df0 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportProductCsv.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportProductCsv.php
@@ -16,7 +16,7 @@ class ExportProductCsv extends \Magento\Reports\Controller\Adminhtml\Report\Revi
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout(false);
         $fileName = 'review_product.csv';
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportProductDetailCsv.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportProductDetailCsv.php
index 7358396f2aa..d27f3fe37c7 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportProductDetailCsv.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportProductDetailCsv.php
@@ -16,7 +16,7 @@ class ExportProductDetailCsv extends \Magento\Reports\Controller\Adminhtml\Repor
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'review_product_detail.csv';
         $content = $this->_view->getLayout()->createBlock(
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportProductDetailExcel.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportProductDetailExcel.php
index 9e80e2309c1..32abda47b6d 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportProductDetailExcel.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportProductDetailExcel.php
@@ -16,7 +16,7 @@ class ExportProductDetailExcel extends \Magento\Reports\Controller\Adminhtml\Rep
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'review_product_detail.xml';
         $content = $this->_view->getLayout()->createBlock(
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportProductExcel.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportProductExcel.php
index c5b6b33457f..dc04c672a10 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportProductExcel.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ExportProductExcel.php
@@ -16,7 +16,7 @@ class ExportProductExcel extends \Magento\Reports\Controller\Adminhtml\Report\Re
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout(false);
         $fileName = 'review_product.xml';
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/Product.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/Product.php
index fe7364181ea..e5f5aecb69b 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/Product.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/Product.php
@@ -13,7 +13,7 @@ class Product extends \Magento\Reports\Controller\Adminhtml\Report\Review
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initAction()->_setActiveMenu(
             'Magento_Review::report_review_product'
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ProductDetail.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ProductDetail.php
index 4ee32cade01..d4bea33168c 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ProductDetail.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Review/ProductDetail.php
@@ -13,7 +13,7 @@ class ProductDetail extends \Magento\Reports\Controller\Adminhtml\Report\Review
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initAction()->_setActiveMenu(
             'Magento_Review::report_review'
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Bestsellers.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Bestsellers.php
index 5c8247bda64..97be72a935d 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Bestsellers.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Bestsellers.php
@@ -15,7 +15,7 @@ class Bestsellers extends \Magento\Reports\Controller\Adminhtml\Report\Sales
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_showLastExecutionTime(Flag::REPORT_BESTSELLERS_FLAG_CODE, 'bestsellers');
 
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Coupons.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Coupons.php
index 1ccc99988bb..e9ece3ae682 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Coupons.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Coupons.php
@@ -15,7 +15,7 @@ class Coupons extends \Magento\Reports\Controller\Adminhtml\Report\Sales
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_showLastExecutionTime(Flag::REPORT_COUPONS_FLAG_CODE, 'coupons');
 
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportBestsellersCsv.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportBestsellersCsv.php
index e831fc83471..0a531d06068 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportBestsellersCsv.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportBestsellersCsv.php
@@ -16,7 +16,7 @@ class ExportBestsellersCsv extends \Magento\Reports\Controller\Adminhtml\Report\
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'bestsellers.csv';
         $grid = $this->_view->getLayout()->createBlock('Magento\Reports\Block\Adminhtml\Sales\Bestsellers\Grid');
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportBestsellersExcel.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportBestsellersExcel.php
index bba9bbacf88..2d1afc0fac1 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportBestsellersExcel.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportBestsellersExcel.php
@@ -16,7 +16,7 @@ class ExportBestsellersExcel extends \Magento\Reports\Controller\Adminhtml\Repor
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'bestsellers.xml';
         $grid = $this->_view->getLayout()->createBlock('Magento\Reports\Block\Adminhtml\Sales\Bestsellers\Grid');
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportCouponsCsv.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportCouponsCsv.php
index 4b5ed51a45f..ccd04b83482 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportCouponsCsv.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportCouponsCsv.php
@@ -16,7 +16,7 @@ class ExportCouponsCsv extends \Magento\Reports\Controller\Adminhtml\Report\Sale
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'coupons.csv';
         $grid = $this->_view->getLayout()->createBlock('Magento\Reports\Block\Adminhtml\Sales\Coupons\Grid');
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportCouponsExcel.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportCouponsExcel.php
index 54641cd4494..d70457746f8 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportCouponsExcel.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportCouponsExcel.php
@@ -16,7 +16,7 @@ class ExportCouponsExcel extends \Magento\Reports\Controller\Adminhtml\Report\Sa
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'coupons.xml';
         $grid = $this->_view->getLayout()->createBlock('Magento\Reports\Block\Adminhtml\Sales\Coupons\Grid');
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportInvoicedCsv.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportInvoicedCsv.php
index 46f977f4157..e4ad782163c 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportInvoicedCsv.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportInvoicedCsv.php
@@ -16,7 +16,7 @@ class ExportInvoicedCsv extends \Magento\Reports\Controller\Adminhtml\Report\Sal
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'invoiced.csv';
         $grid = $this->_view->getLayout()->createBlock('Magento\Reports\Block\Adminhtml\Sales\Invoiced\Grid');
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportInvoicedExcel.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportInvoicedExcel.php
index 771078bae98..503bc1562ce 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportInvoicedExcel.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportInvoicedExcel.php
@@ -16,7 +16,7 @@ class ExportInvoicedExcel extends \Magento\Reports\Controller\Adminhtml\Report\S
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'invoiced.xml';
         $grid = $this->_view->getLayout()->createBlock('Magento\Reports\Block\Adminhtml\Sales\Invoiced\Grid');
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportRefundedCsv.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportRefundedCsv.php
index 375b63e3600..987b288f934 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportRefundedCsv.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportRefundedCsv.php
@@ -16,7 +16,7 @@ class ExportRefundedCsv extends \Magento\Reports\Controller\Adminhtml\Report\Sal
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'refunded.csv';
         $grid = $this->_view->getLayout()->createBlock('Magento\Reports\Block\Adminhtml\Sales\Refunded\Grid');
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportRefundedExcel.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportRefundedExcel.php
index ca4a842af87..311380659a6 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportRefundedExcel.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportRefundedExcel.php
@@ -16,7 +16,7 @@ class ExportRefundedExcel extends \Magento\Reports\Controller\Adminhtml\Report\S
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'refunded.xml';
         $grid = $this->_view->getLayout()->createBlock('Magento\Reports\Block\Adminhtml\Sales\Refunded\Grid');
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportSalesCsv.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportSalesCsv.php
index 345f809725e..20e4a577b3f 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportSalesCsv.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportSalesCsv.php
@@ -16,7 +16,7 @@ class ExportSalesCsv extends \Magento\Reports\Controller\Adminhtml\Report\Sales
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'sales.csv';
         $grid = $this->_view->getLayout()->createBlock('Magento\Reports\Block\Adminhtml\Sales\Sales\Grid');
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportSalesExcel.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportSalesExcel.php
index b0bc6001d45..0e5b9beaccc 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportSalesExcel.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportSalesExcel.php
@@ -16,7 +16,7 @@ class ExportSalesExcel extends \Magento\Reports\Controller\Adminhtml\Report\Sale
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'sales.xml';
         $grid = $this->_view->getLayout()->createBlock('Magento\Reports\Block\Adminhtml\Sales\Sales\Grid');
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportShippingCsv.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportShippingCsv.php
index 82fe7afbead..c7c699a105f 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportShippingCsv.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportShippingCsv.php
@@ -16,7 +16,7 @@ class ExportShippingCsv extends \Magento\Reports\Controller\Adminhtml\Report\Sal
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'shipping.csv';
         $grid = $this->_view->getLayout()->createBlock('Magento\Reports\Block\Adminhtml\Sales\Shipping\Grid');
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportShippingExcel.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportShippingExcel.php
index 39b7a4676c1..13ae0fe237c 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportShippingExcel.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportShippingExcel.php
@@ -16,7 +16,7 @@ class ExportShippingExcel extends \Magento\Reports\Controller\Adminhtml\Report\S
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'shipping.xml';
         $grid = $this->_view->getLayout()->createBlock('Magento\Reports\Block\Adminhtml\Sales\Shipping\Grid');
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportTaxCsv.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportTaxCsv.php
index ae7ce954bb3..d9496b9f5ee 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportTaxCsv.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportTaxCsv.php
@@ -16,7 +16,7 @@ class ExportTaxCsv extends \Magento\Reports\Controller\Adminhtml\Report\Sales
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'tax.csv';
         $grid = $this->_view->getLayout()->createBlock('Magento\Reports\Block\Adminhtml\Sales\Tax\Grid');
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportTaxExcel.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportTaxExcel.php
index b7648a55d5b..f7737132e9d 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportTaxExcel.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/ExportTaxExcel.php
@@ -16,7 +16,7 @@ class ExportTaxExcel extends \Magento\Reports\Controller\Adminhtml\Report\Sales
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'tax.xml';
         $grid = $this->_view->getLayout()->createBlock('Magento\Reports\Block\Adminhtml\Sales\Tax\Grid');
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Invoiced.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Invoiced.php
index 3a7cd19fef7..242d9c41d27 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Invoiced.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Invoiced.php
@@ -15,7 +15,7 @@ class Invoiced extends \Magento\Reports\Controller\Adminhtml\Report\Sales
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_showLastExecutionTime(Flag::REPORT_INVOICE_FLAG_CODE, 'invoiced');
 
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/RefreshLifetime.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/RefreshLifetime.php
index d093fd273b7..19e3007db7a 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/RefreshLifetime.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/RefreshLifetime.php
@@ -13,7 +13,7 @@ class RefreshLifetime extends \Magento\Reports\Controller\Adminhtml\Report\Sales
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_forward('refreshLifetime', 'report_statistics');
     }
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/RefreshRecent.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/RefreshRecent.php
index 2d4665fe4f4..0b7ccef07bd 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/RefreshRecent.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/RefreshRecent.php
@@ -13,7 +13,7 @@ class RefreshRecent extends \Magento\Reports\Controller\Adminhtml\Report\Sales
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_forward('refreshRecent', 'report_statistics');
     }
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/RefreshStatistics.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/RefreshStatistics.php
index 77c6bfab4db..64ac14d427f 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/RefreshStatistics.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/RefreshStatistics.php
@@ -13,7 +13,7 @@ class RefreshStatistics extends \Magento\Reports\Controller\Adminhtml\Report\Sal
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_forward('index', 'report_statistics');
     }
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Refunded.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Refunded.php
index 5d03937d815..3120ff01236 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Refunded.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Refunded.php
@@ -15,7 +15,7 @@ class Refunded extends \Magento\Reports\Controller\Adminhtml\Report\Sales
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_showLastExecutionTime(Flag::REPORT_REFUNDED_FLAG_CODE, 'refunded');
 
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Sales.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Sales.php
index c54cafb6c0c..3dd5c10bf9f 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Sales.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Sales.php
@@ -15,7 +15,7 @@ class Sales extends \Magento\Reports\Controller\Adminhtml\Report\Sales
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_showLastExecutionTime(Flag::REPORT_ORDER_FLAG_CODE, 'sales');
 
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Shipping.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Shipping.php
index 46aa42db9b1..10685964510 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Shipping.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Shipping.php
@@ -15,7 +15,7 @@ class Shipping extends \Magento\Reports\Controller\Adminhtml\Report\Sales
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_showLastExecutionTime(Flag::REPORT_SHIPPING_FLAG_CODE, 'shipping');
 
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Tax.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Tax.php
index 6fd6555ef09..143140f42b0 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Tax.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Sales/Tax.php
@@ -15,7 +15,7 @@ class Tax extends \Magento\Reports\Controller\Adminhtml\Report\Sales
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_showLastExecutionTime(Flag::REPORT_TAX_FLAG_CODE, 'tax');
 
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/Abandoned.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/Abandoned.php
index 5db3858d004..6c88e443ca5 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/Abandoned.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/Abandoned.php
@@ -13,7 +13,7 @@ class Abandoned extends \Magento\Reports\Controller\Adminhtml\Report\Shopcart
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initAction()->_setActiveMenu(
             'Magento_Reports::report_shopcart_abandoned'
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/Customer.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/Customer.php
index 376d220a795..b8045d003aa 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/Customer.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/Customer.php
@@ -13,7 +13,7 @@ class Customer extends \Magento\Reports\Controller\Adminhtml\Report\Shopcart
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initAction()->_setActiveMenu(
             'Magento_Reports::report_shopcart_customer'
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportAbandonedCsv.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportAbandonedCsv.php
index 6023236b82c..aff71b76b37 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportAbandonedCsv.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportAbandonedCsv.php
@@ -16,7 +16,7 @@ class ExportAbandonedCsv extends \Magento\Reports\Controller\Adminhtml\Report\Sh
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'shopcart_abandoned.csv';
         $content = $this->_view->getLayout()->createBlock(
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportAbandonedExcel.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportAbandonedExcel.php
index 6118c9fb20a..71aae22568e 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportAbandonedExcel.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportAbandonedExcel.php
@@ -16,7 +16,7 @@ class ExportAbandonedExcel extends \Magento\Reports\Controller\Adminhtml\Report\
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'shopcart_abandoned.xml';
         $content = $this->_view->getLayout()->createBlock(
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportCustomerCsv.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportCustomerCsv.php
index 30218563edd..4405cfc9614 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportCustomerCsv.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportCustomerCsv.php
@@ -15,7 +15,7 @@ class ExportCustomerCsv extends \Magento\Reports\Controller\Adminhtml\Report\Sho
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'shopcart_customer.csv';
         $content = $this->_view->getLayout()->createBlock(
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportCustomerExcel.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportCustomerExcel.php
index 2c017142a18..f20fcb9c20f 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportCustomerExcel.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportCustomerExcel.php
@@ -15,7 +15,7 @@ class ExportCustomerExcel extends \Magento\Reports\Controller\Adminhtml\Report\S
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'shopcart_customer.xml';
         $content = $this->_view->getLayout()->createBlock(
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportProductCsv.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportProductCsv.php
index c244aee2574..9ad9dd030d3 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportProductCsv.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportProductCsv.php
@@ -16,7 +16,7 @@ class ExportProductCsv extends \Magento\Reports\Controller\Adminhtml\Report\Shop
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'shopcart_product.csv';
         $content = $this->_view->getLayout()->createBlock(
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportProductExcel.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportProductExcel.php
index 1b844291864..43ed6690d3b 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportProductExcel.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/ExportProductExcel.php
@@ -16,7 +16,7 @@ class ExportProductExcel extends \Magento\Reports\Controller\Adminhtml\Report\Sh
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $fileName = 'shopcart_product.xml';
         $content = $this->_view->getLayout()->createBlock(
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/Product.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/Product.php
index c257a751084..d8035545af1 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/Product.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Shopcart/Product.php
@@ -13,7 +13,7 @@ class Product extends \Magento\Reports\Controller\Adminhtml\Report\Shopcart
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initAction()->_setActiveMenu(
             'Magento_Reports::report_shopcart_product'
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Statistics/Index.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Statistics/Index.php
index e4cf01207ad..36e87ff3d7b 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Statistics/Index.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Statistics/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Reports\Controller\Adminhtml\Report\Statistics
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initAction()->_setActiveMenu(
             'Magento_Reports::report_statistics_refresh'
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Statistics/RefreshLifetime.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Statistics/RefreshLifetime.php
index 35222afc53a..016c026abaf 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Statistics/RefreshLifetime.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Statistics/RefreshLifetime.php
@@ -14,7 +14,7 @@ class RefreshLifetime extends \Magento\Reports\Controller\Adminhtml\Report\Stati
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $collectionsNames = $this->_getCollectionNames();
diff --git a/app/code/Magento/Reports/Controller/Adminhtml/Report/Statistics/RefreshRecent.php b/app/code/Magento/Reports/Controller/Adminhtml/Report/Statistics/RefreshRecent.php
index e4e5c4e6510..8864c3401ec 100644
--- a/app/code/Magento/Reports/Controller/Adminhtml/Report/Statistics/RefreshRecent.php
+++ b/app/code/Magento/Reports/Controller/Adminhtml/Report/Statistics/RefreshRecent.php
@@ -14,7 +14,7 @@ class RefreshRecent extends \Magento\Reports\Controller\Adminhtml\Report\Statist
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $collectionsNames = $this->_getCollectionNames();
diff --git a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/AccountsTest.php b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/AccountsTest.php
index baad059fb48..96a1921b295 100644
--- a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/AccountsTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/AccountsTest.php
@@ -70,6 +70,6 @@ class AccountsTest extends \Magento\Reports\Test\Unit\Controller\Adminhtml\Repor
             ->expects($this->at(2))
             ->method('addLink')
             ->with(new Phrase('New Accounts'), new Phrase('New Accounts'));
-        $this->accounts->execute();
+        $this->accounts->executeInternal();
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportAccountsCsvTest.php b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportAccountsCsvTest.php
index c5e9ccccf6d..273574130f1 100644
--- a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportAccountsCsvTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportAccountsCsvTest.php
@@ -45,6 +45,6 @@ class ExportAccountsCsvTest extends \Magento\Reports\Test\Unit\Controller\Adminh
             ->expects($this->once())
             ->method('create')
             ->with('new_accounts.csv', ['export'], \Magento\Framework\App\Filesystem\DirectoryList::VAR_DIR);
-        $this->exportAccountsCsv->execute();
+        $this->exportAccountsCsv->executeInternal();
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportAccountsExcelTest.php b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportAccountsExcelTest.php
index 98134d20ccd..8205201a150 100644
--- a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportAccountsExcelTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportAccountsExcelTest.php
@@ -45,6 +45,6 @@ class ExportAccountsExcelTest extends \Magento\Reports\Test\Unit\Controller\Admi
             ->expects($this->once())
             ->method('create')
             ->with('new_accounts.xml', ['export'], \Magento\Framework\App\Filesystem\DirectoryList::VAR_DIR);
-        $this->exportAccountsExcel->execute();
+        $this->exportAccountsExcel->executeInternal();
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportOrdersCsvTest.php b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportOrdersCsvTest.php
index 573720a1859..50bde9a3f42 100644
--- a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportOrdersCsvTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportOrdersCsvTest.php
@@ -45,6 +45,6 @@ class ExportOrdersCsvTest extends \Magento\Reports\Test\Unit\Controller\Adminhtm
             ->expects($this->once())
             ->method('create')
             ->with('customers_orders.csv', ['export'], \Magento\Framework\App\Filesystem\DirectoryList::VAR_DIR);
-        $this->exportOrdersCsv->execute();
+        $this->exportOrdersCsv->executeInternal();
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportOrdersExcelTest.php b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportOrdersExcelTest.php
index b8273becb2d..8cc84ac980e 100644
--- a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportOrdersExcelTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportOrdersExcelTest.php
@@ -45,6 +45,6 @@ class ExportOrdersExcelTest extends \Magento\Reports\Test\Unit\Controller\Adminh
             ->expects($this->once())
             ->method('create')
             ->with('customers_orders.xml', ['export'], \Magento\Framework\App\Filesystem\DirectoryList::VAR_DIR);
-        $this->exportOrdersExcel->execute();
+        $this->exportOrdersExcel->executeInternal();
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportTotalsCsvTest.php b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportTotalsCsvTest.php
index b4a7a0c68e2..989d05bc651 100644
--- a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportTotalsCsvTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportTotalsCsvTest.php
@@ -45,6 +45,6 @@ class ExportTotalsCsvTest extends \Magento\Reports\Test\Unit\Controller\Adminhtm
             ->expects($this->once())
             ->method('create')
             ->with('customer_totals.csv', ['export'], \Magento\Framework\App\Filesystem\DirectoryList::VAR_DIR);
-        $this->exportTotalsCsv->execute();
+        $this->exportTotalsCsv->executeInternal();
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportTotalsExcelTest.php b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportTotalsExcelTest.php
index 33177c27a18..3c2cb597647 100644
--- a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportTotalsExcelTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/ExportTotalsExcelTest.php
@@ -45,6 +45,6 @@ class ExportTotalsExcelTest extends \Magento\Reports\Test\Unit\Controller\Adminh
             ->expects($this->once())
             ->method('create')
             ->with('customer_totals.xml', ['export'], \Magento\Framework\App\Filesystem\DirectoryList::VAR_DIR);
-        $this->exportTotalsExcel->execute();
+        $this->exportTotalsExcel->executeInternal();
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/OrdersTest.php b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/OrdersTest.php
index 1d960cc8175..c15797a18d9 100644
--- a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/OrdersTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/OrdersTest.php
@@ -70,6 +70,6 @@ class OrdersTest extends \Magento\Reports\Test\Unit\Controller\Adminhtml\Report\
             ->expects($this->at(2))
             ->method('addLink')
             ->with(new Phrase('Customers by Number of Orders'), new Phrase('Customers by Number of Orders'));
-        $this->orders->execute();
+        $this->orders->executeInternal();
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/TotalsTest.php b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/TotalsTest.php
index a479fb53c3a..44d554a10c7 100644
--- a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/TotalsTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Customer/TotalsTest.php
@@ -70,6 +70,6 @@ class TotalsTest extends \Magento\Reports\Test\Unit\Controller\Adminhtml\Report\
             ->expects($this->at(2))
             ->method('addLink')
             ->with(new Phrase('Customers by Orders Total'), new Phrase('Customers by Orders Total'));
-        $this->totals->execute();
+        $this->totals->executeInternal();
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/DownloadsTest.php b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/DownloadsTest.php
index 6bae34a5687..b3e5f9c4725 100644
--- a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/DownloadsTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/DownloadsTest.php
@@ -86,6 +86,6 @@ class DownloadsTest extends \Magento\Reports\Test\Unit\Controller\Adminhtml\Repo
             ->with('Magento\Reports\Block\Adminhtml\Product\Downloads')
             ->willReturn($this->abstractBlockMock);
 
-        $this->downloads->execute();
+        $this->downloads->executeInternal();
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportDownloadsCsvTest.php b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportDownloadsCsvTest.php
index 9c80ef0700b..3b54b2e96fc 100644
--- a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportDownloadsCsvTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportDownloadsCsvTest.php
@@ -70,6 +70,6 @@ class ExportDownloadsCsvTest extends \Magento\Reports\Test\Unit\Controller\Admin
             ->method('create')
             ->with('products_downloads.csv', $content);
 
-        $this->exportDownloadsCsv->execute();
+        $this->exportDownloadsCsv->executeInternal();
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportDownloadsExcelTest.php b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportDownloadsExcelTest.php
index 010e14168b4..864abadb92d 100644
--- a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportDownloadsExcelTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportDownloadsExcelTest.php
@@ -72,6 +72,6 @@ class ExportDownloadsExcelTest extends \Magento\Reports\Test\Unit\Controller\Adm
             ->method('create')
             ->with($fileName, $content);
 
-        $this->exportDownloadsExcel->execute();
+        $this->exportDownloadsExcel->executeInternal();
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportLowstockCsvTest.php b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportLowstockCsvTest.php
index 074c8e88d57..d1897fe6ac3 100644
--- a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportLowstockCsvTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportLowstockCsvTest.php
@@ -65,6 +65,6 @@ class ExportLowstockCsvTest extends \Magento\Reports\Test\Unit\Controller\Adminh
             ->method('create')
             ->with('products_lowstock.csv', $content, \Magento\Framework\App\Filesystem\DirectoryList::VAR_DIR);
 
-        $this->exportLowstockCsv->execute();
+        $this->exportLowstockCsv->executeInternal();
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportLowstockExcelTest.php b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportLowstockExcelTest.php
index 509fc27b170..0b5b2240fab 100644
--- a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportLowstockExcelTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportLowstockExcelTest.php
@@ -65,6 +65,6 @@ class ExportLowstockExcelTest extends \Magento\Reports\Test\Unit\Controller\Admi
             ->method('create')
             ->with('products_lowstock.xml', $content, \Magento\Framework\App\Filesystem\DirectoryList::VAR_DIR);
 
-        $this->exportLowstockExcel->execute();
+        $this->exportLowstockExcel->executeInternal();
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportSoldCsvTest.php b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportSoldCsvTest.php
index b0f76d58049..2c01c8d3eab 100644
--- a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportSoldCsvTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportSoldCsvTest.php
@@ -65,6 +65,6 @@ class ExportSoldCsvTest extends \Magento\Reports\Test\Unit\Controller\Adminhtml\
             ->method('create')
             ->with('products_ordered.csv', $content, \Magento\Framework\App\Filesystem\DirectoryList::VAR_DIR);
 
-        $this->exportSoldCsv->execute();
+        $this->exportSoldCsv->executeInternal();
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportSoldExcelTest.php b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportSoldExcelTest.php
index 21ce5635d33..202252d7f25 100644
--- a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportSoldExcelTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportSoldExcelTest.php
@@ -67,6 +67,6 @@ class ExportSoldExcelTest extends \Magento\Reports\Test\Unit\Controller\Adminhtm
             ->method('create')
             ->with($fileName, $content, \Magento\Framework\App\Filesystem\DirectoryList::VAR_DIR);
 
-        $this->exportSoldExcel->execute();
+        $this->exportSoldExcel->executeInternal();
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportViewedCsvTest.php b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportViewedCsvTest.php
index e31655f1183..f1f060d09f2 100644
--- a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportViewedCsvTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportViewedCsvTest.php
@@ -90,6 +90,6 @@ class ExportViewedCsvTest extends \Magento\Reports\Test\Unit\Controller\Adminhtm
             ->method('create')
             ->with($fileName, $content, \Magento\Framework\App\Filesystem\DirectoryList::VAR_DIR);
 
-        $this->exportViewedCsv->execute();
+        $this->exportViewedCsv->executeInternal();
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportViewedExcelTest.php b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportViewedExcelTest.php
index 43e615c7a9a..4a92d6c8f2f 100644
--- a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportViewedExcelTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ExportViewedExcelTest.php
@@ -91,6 +91,6 @@ class ExportViewedExcelTest extends \Magento\Reports\Test\Unit\Controller\Adminh
             ->method('create')
             ->with($fileName, $content, \Magento\Framework\App\Filesystem\DirectoryList::VAR_DIR);
 
-        $this->exportViewedExcel->execute();
+        $this->exportViewedExcel->executeInternal();
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/LowstockTest.php b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/LowstockTest.php
index 10eaa830d79..0ec6a082b92 100644
--- a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/LowstockTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/LowstockTest.php
@@ -83,6 +83,6 @@ class LowstockTest extends \Magento\Reports\Test\Unit\Controller\Adminhtml\Repor
                 [new Phrase('Low Stock'), new Phrase('Low Stock')]
             );
 
-        $this->lowstock->execute();
+        $this->lowstock->executeInternal();
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/SoldTest.php b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/SoldTest.php
index 34c9e12df2c..82981d6f142 100644
--- a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/SoldTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/SoldTest.php
@@ -83,6 +83,6 @@ class SoldTest extends \Magento\Reports\Test\Unit\Controller\Adminhtml\Report\Ab
                 [new Phrase('Products Ordered'), new Phrase('Products Ordered')]
             );
 
-        $this->sold->execute();
+        $this->sold->executeInternal();
     }
 }
diff --git a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ViewedTest.php b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ViewedTest.php
index 686aed163ec..01cfe44f652 100644
--- a/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ViewedTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Controller/Adminhtml/Report/Product/ViewedTest.php
@@ -151,7 +151,7 @@ class ViewedTest extends \Magento\Reports\Test\Unit\Controller\Adminhtml\Report\
             ->expects($this->once())
             ->method('renderLayout');
 
-        $this->viewed->execute();
+        $this->viewed->executeInternal();
     }
 
     /**
@@ -202,7 +202,7 @@ class ViewedTest extends \Magento\Reports\Test\Unit\Controller\Adminhtml\Report\
             ->method('setActive')
             ->willThrowException(new \Exception());
 
-        $this->viewed->execute();
+        $this->viewed->executeInternal();
     }
 
     /**
@@ -222,6 +222,6 @@ class ViewedTest extends \Magento\Reports\Test\Unit\Controller\Adminhtml\Report\
             ->method('setActive')
             ->willThrowException(new \Magento\Framework\Exception\LocalizedException($errorText));
 
-        $this->viewed->execute();
+        $this->viewed->executeInternal();
     }
 }
diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/Delete.php b/app/code/Magento/Review/Controller/Adminhtml/Product/Delete.php
index ce84f4e9985..f6ea8b9f899 100644
--- a/app/code/Magento/Review/Controller/Adminhtml/Product/Delete.php
+++ b/app/code/Magento/Review/Controller/Adminhtml/Product/Delete.php
@@ -13,7 +13,7 @@ class Delete extends ProductController
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/Edit.php b/app/code/Magento/Review/Controller/Adminhtml/Product/Edit.php
index 10026df39b8..658b798acbf 100644
--- a/app/code/Magento/Review/Controller/Adminhtml/Product/Edit.php
+++ b/app/code/Magento/Review/Controller/Adminhtml/Product/Edit.php
@@ -13,7 +13,7 @@ class Edit extends ProductController
     /**
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->resultFactory->create(ResultFactory::TYPE_PAGE);
diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/Index.php b/app/code/Magento/Review/Controller/Adminhtml/Product/Index.php
index da31a87aa9f..e999732f5ef 100644
--- a/app/code/Magento/Review/Controller/Adminhtml/Product/Index.php
+++ b/app/code/Magento/Review/Controller/Adminhtml/Product/Index.php
@@ -13,7 +13,7 @@ class Index extends ProductController
     /**
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->getRequest()->getParam('ajax')) {
             /** @var \Magento\Backend\Model\View\Result\Forward $resultForward */
diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/JsonProductInfo.php b/app/code/Magento/Review/Controller/Adminhtml/Product/JsonProductInfo.php
index 2f449cfd4ca..acd2b40a78f 100644
--- a/app/code/Magento/Review/Controller/Adminhtml/Product/JsonProductInfo.php
+++ b/app/code/Magento/Review/Controller/Adminhtml/Product/JsonProductInfo.php
@@ -42,7 +42,7 @@ class JsonProductInfo extends ProductController
     /**
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         $response = new DataObject();
         $id = $this->getRequest()->getParam('id');
diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/MassDelete.php b/app/code/Magento/Review/Controller/Adminhtml/Product/MassDelete.php
index 6a64c6cf549..73dfe572ba7 100644
--- a/app/code/Magento/Review/Controller/Adminhtml/Product/MassDelete.php
+++ b/app/code/Magento/Review/Controller/Adminhtml/Product/MassDelete.php
@@ -14,7 +14,7 @@ class MassDelete extends ProductController
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $reviewsIds = $this->getRequest()->getParam('reviews');
         if (!is_array($reviewsIds)) {
diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/MassUpdateStatus.php b/app/code/Magento/Review/Controller/Adminhtml/Product/MassUpdateStatus.php
index 285503a2365..9866a2be76a 100644
--- a/app/code/Magento/Review/Controller/Adminhtml/Product/MassUpdateStatus.php
+++ b/app/code/Magento/Review/Controller/Adminhtml/Product/MassUpdateStatus.php
@@ -14,7 +14,7 @@ class MassUpdateStatus extends ProductController
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $reviewsIds = $this->getRequest()->getParam('reviews');
         if (!is_array($reviewsIds)) {
diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/MassVisibleIn.php b/app/code/Magento/Review/Controller/Adminhtml/Product/MassVisibleIn.php
index 4e65891133a..f9d646d68e6 100644
--- a/app/code/Magento/Review/Controller/Adminhtml/Product/MassVisibleIn.php
+++ b/app/code/Magento/Review/Controller/Adminhtml/Product/MassVisibleIn.php
@@ -14,7 +14,7 @@ class MassVisibleIn extends ProductController
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $reviewsIds = $this->getRequest()->getParam('reviews');
         if (!is_array($reviewsIds)) {
diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/NewAction.php b/app/code/Magento/Review/Controller/Adminhtml/Product/NewAction.php
index e5d2a0e1b31..4cbd60d0342 100644
--- a/app/code/Magento/Review/Controller/Adminhtml/Product/NewAction.php
+++ b/app/code/Magento/Review/Controller/Adminhtml/Product/NewAction.php
@@ -13,7 +13,7 @@ class NewAction extends ProductController
     /**
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->resultFactory->create(ResultFactory::TYPE_PAGE);
diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/Pending.php b/app/code/Magento/Review/Controller/Adminhtml/Product/Pending.php
index 46b341492ab..ddae839c33c 100644
--- a/app/code/Magento/Review/Controller/Adminhtml/Product/Pending.php
+++ b/app/code/Magento/Review/Controller/Adminhtml/Product/Pending.php
@@ -13,7 +13,7 @@ class Pending extends ProductController
     /**
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->getRequest()->getParam('ajax')) {
             $this->coreRegistry->register('usePendingFilter', true);
diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/Post.php b/app/code/Magento/Review/Controller/Adminhtml/Product/Post.php
index f6b7f24bffd..20cc725e3d1 100644
--- a/app/code/Magento/Review/Controller/Adminhtml/Product/Post.php
+++ b/app/code/Magento/Review/Controller/Adminhtml/Product/Post.php
@@ -15,7 +15,7 @@ class Post extends ProductController
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $productId = $this->getRequest()->getParam('product_id', false);
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/ProductGrid.php b/app/code/Magento/Review/Controller/Adminhtml/Product/ProductGrid.php
index afdd87aac5d..43aaf18b473 100644
--- a/app/code/Magento/Review/Controller/Adminhtml/Product/ProductGrid.php
+++ b/app/code/Magento/Review/Controller/Adminhtml/Product/ProductGrid.php
@@ -41,7 +41,7 @@ class ProductGrid extends ProductController
     /**
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         $layout = $this->layoutFactory->create();
         /** @var \Magento\Framework\Controller\Result\Raw $resultRaw */
diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/RatingItems.php b/app/code/Magento/Review/Controller/Adminhtml/Product/RatingItems.php
index f79da2549bf..46a2a19088f 100644
--- a/app/code/Magento/Review/Controller/Adminhtml/Product/RatingItems.php
+++ b/app/code/Magento/Review/Controller/Adminhtml/Product/RatingItems.php
@@ -41,7 +41,7 @@ class RatingItems extends ProductController
     /**
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         $layout = $this->layoutFactory->create();
         /** @var \Magento\Framework\Controller\Result\Raw $resultRaw */
diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/ReviewGrid.php b/app/code/Magento/Review/Controller/Adminhtml/Product/ReviewGrid.php
index 293b958b6ec..7715f73dbff 100644
--- a/app/code/Magento/Review/Controller/Adminhtml/Product/ReviewGrid.php
+++ b/app/code/Magento/Review/Controller/Adminhtml/Product/ReviewGrid.php
@@ -41,7 +41,7 @@ class ReviewGrid extends ProductController
     /**
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         $layout = $this->layoutFactory->create();
         /** @var \Magento\Framework\Controller\Result\Raw $resultRaw */
diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/Reviews/Grid.php b/app/code/Magento/Review/Controller/Adminhtml/Product/Reviews/Grid.php
index 84606cfe8b3..a88025a2755 100644
--- a/app/code/Magento/Review/Controller/Adminhtml/Product/Reviews/Grid.php
+++ b/app/code/Magento/Review/Controller/Adminhtml/Product/Reviews/Grid.php
@@ -34,7 +34,7 @@ class Grid extends Action
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $product = $this->productBuilder->build($this->getRequest());
         /** @var \Magento\Framework\View\Result\Layout $resultLayout */
diff --git a/app/code/Magento/Review/Controller/Adminhtml/Product/Save.php b/app/code/Magento/Review/Controller/Adminhtml/Product/Save.php
index f1121eec6b2..8494e1b5590 100644
--- a/app/code/Magento/Review/Controller/Adminhtml/Product/Save.php
+++ b/app/code/Magento/Review/Controller/Adminhtml/Product/Save.php
@@ -15,7 +15,7 @@ class Save extends ProductController
      * @return \Magento\Backend\Model\View\Result\Redirect
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
diff --git a/app/code/Magento/Review/Controller/Adminhtml/Rating/Delete.php b/app/code/Magento/Review/Controller/Adminhtml/Rating/Delete.php
index 55fc796fc26..818f8bf9351 100644
--- a/app/code/Magento/Review/Controller/Adminhtml/Rating/Delete.php
+++ b/app/code/Magento/Review/Controller/Adminhtml/Rating/Delete.php
@@ -13,7 +13,7 @@ class Delete extends RatingController
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
diff --git a/app/code/Magento/Review/Controller/Adminhtml/Rating/Edit.php b/app/code/Magento/Review/Controller/Adminhtml/Rating/Edit.php
index 54bd62f83a1..e4a4e8808bc 100644
--- a/app/code/Magento/Review/Controller/Adminhtml/Rating/Edit.php
+++ b/app/code/Magento/Review/Controller/Adminhtml/Rating/Edit.php
@@ -13,7 +13,7 @@ class Edit extends RatingController
     /**
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->initEnityId();
         /** @var \Magento\Review\Model\Rating $ratingModel */
diff --git a/app/code/Magento/Review/Controller/Adminhtml/Rating/Index.php b/app/code/Magento/Review/Controller/Adminhtml/Rating/Index.php
index be9bebf78c7..1723d280092 100644
--- a/app/code/Magento/Review/Controller/Adminhtml/Rating/Index.php
+++ b/app/code/Magento/Review/Controller/Adminhtml/Rating/Index.php
@@ -13,7 +13,7 @@ class Index extends RatingController
     /**
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->initEnityId();
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
diff --git a/app/code/Magento/Review/Controller/Adminhtml/Rating/NewAction.php b/app/code/Magento/Review/Controller/Adminhtml/Rating/NewAction.php
index 162f85eac65..ec6190f27de 100644
--- a/app/code/Magento/Review/Controller/Adminhtml/Rating/NewAction.php
+++ b/app/code/Magento/Review/Controller/Adminhtml/Rating/NewAction.php
@@ -13,7 +13,7 @@ class NewAction extends RatingController
     /**
      * @return \Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Forward $resultForward */
         $resultForward = $this->resultFactory->create(ResultFactory::TYPE_FORWARD);
diff --git a/app/code/Magento/Review/Controller/Adminhtml/Rating/Save.php b/app/code/Magento/Review/Controller/Adminhtml/Rating/Save.php
index 6cfaeabfa33..2802b50031d 100644
--- a/app/code/Magento/Review/Controller/Adminhtml/Rating/Save.php
+++ b/app/code/Magento/Review/Controller/Adminhtml/Rating/Save.php
@@ -15,7 +15,7 @@ class Save extends RatingController
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->initEnityId();
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/Review/Controller/Customer.php b/app/code/Magento/Review/Controller/Customer.php
index 0e96a652b72..a1a39d544c2 100644
--- a/app/code/Magento/Review/Controller/Customer.php
+++ b/app/code/Magento/Review/Controller/Customer.php
@@ -40,11 +40,11 @@ abstract class Customer extends Action
      * @param \Magento\Framework\App\RequestInterface $request
      * @return \Magento\Framework\App\ResponseInterface
      */
-    public function dispatch(RequestInterface $request)
+    public function execute(RequestInterface $request)
     {
         if (!$this->customerSession->authenticate()) {
             $this->_actionFlag->set('', self::FLAG_NO_DISPATCH, true);
         }
-        return parent::dispatch($request);
+        return parent::execute($request);
     }
 }
diff --git a/app/code/Magento/Review/Controller/Customer/Index.php b/app/code/Magento/Review/Controller/Customer/Index.php
index 6123c009cdd..e51ca5c5476 100644
--- a/app/code/Magento/Review/Controller/Customer/Index.php
+++ b/app/code/Magento/Review/Controller/Customer/Index.php
@@ -15,7 +15,7 @@ class Index extends CustomerController
      *
      * @return \Magento\Framework\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\View\Result\Page $resultPage */
         $resultPage = $this->resultFactory->create(ResultFactory::TYPE_PAGE);
diff --git a/app/code/Magento/Review/Controller/Customer/View.php b/app/code/Magento/Review/Controller/Customer/View.php
index 92972dce3ae..222f8a0bcb0 100644
--- a/app/code/Magento/Review/Controller/Customer/View.php
+++ b/app/code/Magento/Review/Controller/Customer/View.php
@@ -36,7 +36,7 @@ class View extends CustomerController
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $review = $this->reviewFactory->create()->load($this->getRequest()->getParam('id'));
         if ($review->getCustomerId() != $this->customerSession->getCustomerId()) {
diff --git a/app/code/Magento/Review/Controller/Product.php b/app/code/Magento/Review/Controller/Product.php
index a0137ef07b9..8db2e062706 100644
--- a/app/code/Magento/Review/Controller/Product.php
+++ b/app/code/Magento/Review/Controller/Product.php
@@ -144,11 +144,11 @@ abstract class Product extends \Magento\Framework\App\Action\Action
      * @param RequestInterface $request
      * @return \Magento\Framework\App\ResponseInterface
      */
-    public function dispatch(RequestInterface $request)
+    public function execute(RequestInterface $request)
     {
         $allowGuest = $this->_objectManager->get('Magento\Review\Helper\Data')->getIsGuestAllowToWrite();
         if (!$request->isDispatched()) {
-            return parent::dispatch($request);
+            return parent::execute($request);
         }
 
         if (!$allowGuest && $request->getActionName() == 'post' && $request->isPost()) {
@@ -166,7 +166,7 @@ abstract class Product extends \Magento\Framework\App\Action\Action
             }
         }
 
-        return parent::dispatch($request);
+        return parent::execute($request);
     }
 
     /**
diff --git a/app/code/Magento/Review/Controller/Product/ListAction.php b/app/code/Magento/Review/Controller/Product/ListAction.php
index 3c28379ec4a..910b9232da9 100644
--- a/app/code/Magento/Review/Controller/Product/ListAction.php
+++ b/app/code/Magento/Review/Controller/Product/ListAction.php
@@ -38,7 +38,7 @@ class ListAction extends ProductController
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $product = $this->initProduct();
         if ($product) {
diff --git a/app/code/Magento/Review/Controller/Product/ListAjax.php b/app/code/Magento/Review/Controller/Product/ListAjax.php
index b261971c509..36fa3830a36 100644
--- a/app/code/Magento/Review/Controller/Product/ListAjax.php
+++ b/app/code/Magento/Review/Controller/Product/ListAjax.php
@@ -15,7 +15,7 @@ class ListAjax extends ProductController
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->initProduct();
         /** @var \Magento\Framework\View\Result\Layout $resultLayout */
diff --git a/app/code/Magento/Review/Controller/Product/Post.php b/app/code/Magento/Review/Controller/Product/Post.php
index a68f0d18c3b..9cf199d7f72 100644
--- a/app/code/Magento/Review/Controller/Product/Post.php
+++ b/app/code/Magento/Review/Controller/Product/Post.php
@@ -18,7 +18,7 @@ class Post extends ProductController
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
diff --git a/app/code/Magento/Review/Controller/Product/View.php b/app/code/Magento/Review/Controller/Product/View.php
index f65d1ceb819..fb2a1893ba6 100644
--- a/app/code/Magento/Review/Controller/Product/View.php
+++ b/app/code/Magento/Review/Controller/Product/View.php
@@ -40,7 +40,7 @@ class View extends ProductController
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $review = $this->loadReview((int)$this->getRequest()->getParam('id'));
         /** @var \Magento\Framework\Controller\Result\Forward $resultForward */
diff --git a/app/code/Magento/Review/Test/Unit/Controller/Adminhtml/Product/PostTest.php b/app/code/Magento/Review/Test/Unit/Controller/Adminhtml/Product/PostTest.php
index d20abf31a19..1c6cc30cafb 100644
--- a/app/code/Magento/Review/Test/Unit/Controller/Adminhtml/Product/PostTest.php
+++ b/app/code/Magento/Review/Test/Unit/Controller/Adminhtml/Product/PostTest.php
@@ -209,6 +209,6 @@ class PostTest extends \PHPUnit_Framework_TestCase
             ->method('addOptionVote')
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->postController->execute());
+        $this->assertSame($this->resultRedirectMock, $this->postController->executeInternal());
     }
 }
diff --git a/app/code/Magento/Review/Test/Unit/Controller/Product/PostTest.php b/app/code/Magento/Review/Test/Unit/Controller/Product/PostTest.php
index 9cedb87e15a..f1ccec681b2 100644
--- a/app/code/Magento/Review/Test/Unit/Controller/Product/PostTest.php
+++ b/app/code/Magento/Review/Test/Unit/Controller/Product/PostTest.php
@@ -315,6 +315,6 @@ class PostTest extends \PHPUnit_Framework_TestCase
             ->with(true)
             ->willReturn($redirectUrl);
 
-        $this->assertSame($this->resultRedirectMock, $this->model->execute());
+        $this->assertSame($this->resultRedirectMock, $this->model->executeInternal());
     }
 }
diff --git a/app/code/Magento/Rss/Controller/Adminhtml/Feed/Index.php b/app/code/Magento/Rss/Controller/Adminhtml/Feed/Index.php
index 61da0e27c2e..96b989cdf78 100644
--- a/app/code/Magento/Rss/Controller/Adminhtml/Feed/Index.php
+++ b/app/code/Magento/Rss/Controller/Adminhtml/Feed/Index.php
@@ -20,7 +20,7 @@ class Index extends \Magento\Rss\Controller\Adminhtml\Feed
      * @return void
      * @throws NotFoundException
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->scopeConfig->getValue('rss/config/active', \Magento\Store\Model\ScopeInterface::SCOPE_STORE)) {
             throw new NotFoundException(__('Page not found.'));
diff --git a/app/code/Magento/Rss/Controller/Feed/Index.php b/app/code/Magento/Rss/Controller/Feed/Index.php
index e3679a10021..5f8e58afefd 100644
--- a/app/code/Magento/Rss/Controller/Feed/Index.php
+++ b/app/code/Magento/Rss/Controller/Feed/Index.php
@@ -20,7 +20,7 @@ class Index extends \Magento\Rss\Controller\Feed
      * @return void
      * @throws NotFoundException
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->scopeConfig->getValue('rss/config/active', \Magento\Store\Model\ScopeInterface::SCOPE_STORE)) {
             throw new NotFoundException(__('Page not found.'));
diff --git a/app/code/Magento/Rss/Controller/Index/Index.php b/app/code/Magento/Rss/Controller/Index/Index.php
index 63575ad8e44..0a2096c35d8 100644
--- a/app/code/Magento/Rss/Controller/Index/Index.php
+++ b/app/code/Magento/Rss/Controller/Index/Index.php
@@ -16,7 +16,7 @@ class Index extends \Magento\Rss\Controller\Index
      * @return void
      * @throws NotFoundException
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->_scopeConfig->getValue('rss/config/active', \Magento\Store\Model\ScopeInterface::SCOPE_STORE)) {
             $this->_view->loadLayout();
diff --git a/app/code/Magento/Rss/Test/Unit/Controller/Adminhtml/Feed/IndexTest.php b/app/code/Magento/Rss/Test/Unit/Controller/Adminhtml/Feed/IndexTest.php
index 83126339130..2d58e440902 100644
--- a/app/code/Magento/Rss/Test/Unit/Controller/Adminhtml/Feed/IndexTest.php
+++ b/app/code/Magento/Rss/Test/Unit/Controller/Adminhtml/Feed/IndexTest.php
@@ -93,7 +93,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
         $this->rssFactory->expects($this->once())->method('create')->will($this->returnValue($rssModel));
 
         $this->rssManager->expects($this->once())->method('getProvider')->will($this->returnValue($dataProvider));
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     public function testExecuteWithException()
@@ -110,6 +110,6 @@ class IndexTest extends \PHPUnit_Framework_TestCase
         $this->rssManager->expects($this->once())->method('getProvider')->will($this->returnValue($dataProvider));
 
         $this->setExpectedException('\Zend_Feed_Builder_Exception');
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Rss/Test/Unit/Controller/Feed/IndexTest.php b/app/code/Magento/Rss/Test/Unit/Controller/Feed/IndexTest.php
index 5b209caa274..638f2dc802d 100644
--- a/app/code/Magento/Rss/Test/Unit/Controller/Feed/IndexTest.php
+++ b/app/code/Magento/Rss/Test/Unit/Controller/Feed/IndexTest.php
@@ -81,7 +81,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
         $this->rssFactory->expects($this->once())->method('create')->will($this->returnValue($rssModel));
 
         $this->rssManager->expects($this->once())->method('getProvider')->will($this->returnValue($dataProvider));
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     public function testExecuteWithException()
@@ -98,6 +98,6 @@ class IndexTest extends \PHPUnit_Framework_TestCase
         $this->rssManager->expects($this->once())->method('getProvider')->will($this->returnValue($dataProvider));
 
         $this->setExpectedException('\Zend_Feed_Builder_Exception');
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Sales/Controller/AbstractController/PrintAction.php b/app/code/Magento/Sales/Controller/AbstractController/PrintAction.php
index b011b8f60e5..433e8d38c4d 100644
--- a/app/code/Magento/Sales/Controller/AbstractController/PrintAction.php
+++ b/app/code/Magento/Sales/Controller/AbstractController/PrintAction.php
@@ -41,7 +41,7 @@ abstract class PrintAction extends \Magento\Framework\App\Action\Action
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $result = $this->orderLoader->load($this->_request);
         if ($result instanceof \Magento\Framework\Controller\ResultInterface) {
diff --git a/app/code/Magento/Sales/Controller/AbstractController/PrintCreditmemo.php b/app/code/Magento/Sales/Controller/AbstractController/PrintCreditmemo.php
index 24f13d49d08..bffa469a2ee 100644
--- a/app/code/Magento/Sales/Controller/AbstractController/PrintCreditmemo.php
+++ b/app/code/Magento/Sales/Controller/AbstractController/PrintCreditmemo.php
@@ -58,7 +58,7 @@ abstract class PrintCreditmemo extends \Magento\Framework\App\Action\Action
      *
      * @return \Magento\Framework\Controller\Result\Redirect|\Magento\Framework\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $creditmemoId = (int)$this->getRequest()->getParam('creditmemo_id');
         if ($creditmemoId) {
diff --git a/app/code/Magento/Sales/Controller/AbstractController/PrintInvoice.php b/app/code/Magento/Sales/Controller/AbstractController/PrintInvoice.php
index 04088a9c79c..fffcb6ca4df 100644
--- a/app/code/Magento/Sales/Controller/AbstractController/PrintInvoice.php
+++ b/app/code/Magento/Sales/Controller/AbstractController/PrintInvoice.php
@@ -49,7 +49,7 @@ abstract class PrintInvoice extends \Magento\Framework\App\Action\Action
      *
      * @return \Magento\Framework\Controller\Result\Redirect|\Magento\Framework\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $invoiceId = (int)$this->getRequest()->getParam('invoice_id');
         if ($invoiceId) {
diff --git a/app/code/Magento/Sales/Controller/AbstractController/PrintShipment.php b/app/code/Magento/Sales/Controller/AbstractController/PrintShipment.php
index 74fbb343944..ab17469ccf1 100644
--- a/app/code/Magento/Sales/Controller/AbstractController/PrintShipment.php
+++ b/app/code/Magento/Sales/Controller/AbstractController/PrintShipment.php
@@ -49,7 +49,7 @@ abstract class PrintShipment extends \Magento\Framework\App\Action\Action
      *
      * @return \Magento\Framework\Controller\Result\Redirect|\Magento\Framework\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $shipmentId = (int)$this->getRequest()->getParam('shipment_id');
         if ($shipmentId) {
diff --git a/app/code/Magento/Sales/Controller/AbstractController/Reorder.php b/app/code/Magento/Sales/Controller/AbstractController/Reorder.php
index bf86825d8b4..f589dbabab9 100644
--- a/app/code/Magento/Sales/Controller/AbstractController/Reorder.php
+++ b/app/code/Magento/Sales/Controller/AbstractController/Reorder.php
@@ -41,7 +41,7 @@ abstract class Reorder extends Action\Action
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $result = $this->orderLoader->load($this->_request);
         if ($result instanceof \Magento\Framework\Controller\ResultInterface) {
diff --git a/app/code/Magento/Sales/Controller/AbstractController/View.php b/app/code/Magento/Sales/Controller/AbstractController/View.php
index 987fa30704e..0bef4ed08e0 100644
--- a/app/code/Magento/Sales/Controller/AbstractController/View.php
+++ b/app/code/Magento/Sales/Controller/AbstractController/View.php
@@ -41,7 +41,7 @@ abstract class View extends Action\Action
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $result = $this->orderLoader->load($this->_request);
         if ($result instanceof \Magento\Framework\Controller\ResultInterface) {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Email.php b/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Email.php
index 68fc9d62e85..6a6babfc1b1 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Email.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Email.php
@@ -25,7 +25,7 @@ class Email extends \Magento\Backend\App\Action
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $creditmemoId = $this->getRequest()->getParam('creditmemo_id');
         if (!$creditmemoId) {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Grid.php b/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Grid.php
index 3022cf995e6..209096f62fe 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Grid.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Grid.php
@@ -37,7 +37,7 @@ class Grid extends \Magento\Backend\App\Action
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultLayout = $this->resultLayoutFactory->create();
         return $resultLayout;
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Index.php b/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Index.php
index 4fbd4c7ff5b..5569d131abd 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Index.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Index.php
@@ -51,7 +51,7 @@ class Index extends \Magento\Backend\App\Action
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultPage = $this->_initAction();
         $resultPage->getConfig()->getTitle()->prepend(__('Credit Memos'));
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/PrintAction.php b/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/PrintAction.php
index 83befcc3b58..39137a698fe 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/PrintAction.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/PrintAction.php
@@ -55,7 +55,7 @@ class PrintAction extends \Magento\Backend\App\Action
     /**
      * @return ResponseInterface|\Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @see \Magento\Sales\Controller\Adminhtml\Order\Invoice */
         $creditmemoId = $this->getRequest()->getParam('creditmemo_id');
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/View.php b/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/View.php
index 06e42091731..c70eb6e4cb4 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/View.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/View.php
@@ -37,7 +37,7 @@ class View extends \Magento\Backend\App\Action
      *
      * @return \Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultForward = $this->resultForwardFactory->create();
         if ($this->getRequest()->getParam('creditmemo_id')) {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/Index.php b/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/Index.php
index baa603c9ef5..c7ea617b535 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/Index.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/Index.php
@@ -12,8 +12,8 @@ class Index extends \Magento\Sales\Controller\Adminhtml\Creditmemo\AbstractCredi
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
-        return parent::execute();
+        return parent::executeInternal();
     }
 }
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Email.php b/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Email.php
index c807026addf..8c32e32f478 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Email.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Email.php
@@ -45,7 +45,7 @@ abstract class Email extends \Magento\Backend\App\Action
      *
      * @return \Magento\Backend\Model\View\Result\Forward|\Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $invoiceId = $this->getRequest()->getParam('invoice_id');
         if (!$invoiceId) {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Grid.php b/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Grid.php
index d448d97138f..a01e0ba26f6 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Grid.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Grid.php
@@ -38,7 +38,7 @@ abstract class Grid extends \Magento\Backend\App\Action
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         return $this->resultLayoutFactory->create();
     }
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Index.php b/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Index.php
index e88f6089c48..603ec3258ba 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Index.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Index.php
@@ -53,7 +53,7 @@ abstract class Index extends \Magento\Backend\App\Action
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultPage = $this->_initAction();
         $resultPage->getConfig()->getTitle()->prepend(__('Invoices'));
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/PrintAction.php b/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/PrintAction.php
index ac5c97372b7..b72dc44f2ca 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/PrintAction.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/PrintAction.php
@@ -47,7 +47,7 @@ abstract class PrintAction extends \Magento\Backend\App\Action
     /**
      * @return ResponseInterface|void
      */
-    public function execute()
+    public function executeInternal()
     {
         $invoiceId = $this->getRequest()->getParam('invoice_id');
         if ($invoiceId) {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/View.php b/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/View.php
index e6e49dd0ca6..98fe68a4def 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/View.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/View.php
@@ -49,7 +49,7 @@ abstract class View extends \Magento\Backend\App\Action
      *
      * @return \Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultForward = $this->resultForwardFactory->create();
         if ($this->getRequest()->getParam('invoice_id')) {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/AbstractMassAction.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/AbstractMassAction.php
index badfbc2ad43..225ab0ddd01 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/AbstractMassAction.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/AbstractMassAction.php
@@ -48,7 +48,7 @@ abstract class AbstractMassAction extends \Magento\Backend\App\Action
      * @return \Magento\Backend\Model\View\Result\Redirect
      * @throws \Magento\Framework\Exception\LocalizedException|\Exception
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $collection = $this->filter->getCollection($this->collectionFactory->create());
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/AddComment.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/AddComment.php
index 29729f850bb..f83fb55e218 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/AddComment.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/AddComment.php
@@ -16,7 +16,7 @@ class AddComment extends \Magento\Sales\Controller\Adminhtml\Order
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $order = $this->_initOrder();
         if ($order) {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Address.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Address.php
index 18fdf29cf80..07a49e22fab 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Address.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Address.php
@@ -13,7 +13,7 @@ class Address extends \Magento\Sales\Controller\Adminhtml\Order
      *
      * @return \Magento\Backend\Model\View\Result\Page|\Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $addressId = $this->getRequest()->getParam('address_id');
         $address = $this->_objectManager->create('Magento\Sales\Model\Order\Address')->load($addressId);
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php
index e3d15fd93cd..962b526f4d5 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/AddressSave.php
@@ -13,7 +13,7 @@ class AddressSave extends \Magento\Sales\Controller\Adminhtml\Order
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $addressId = $this->getRequest()->getParam('address_id');
         $address = $this->_objectManager->create('Magento\Sales\Model\Order\Address')->load($addressId);
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Cancel.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Cancel.php
index 959917738db..c4740f7825a 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Cancel.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Cancel.php
@@ -13,7 +13,7 @@ class Cancel extends \Magento\Sales\Controller\Adminhtml\Order
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultRedirect = $this->resultRedirectFactory->create();
         if (!$this->isValidPostRequest()) {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/CommentsHistory.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/CommentsHistory.php
index 54774ec719e..fd6239b4848 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/CommentsHistory.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/CommentsHistory.php
@@ -74,7 +74,7 @@ class CommentsHistory extends \Magento\Sales\Controller\Adminhtml\Order
      *
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initOrder();
         $layout = $this->layoutFactory->create();
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/AddConfigured.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/AddConfigured.php
index b991a11b287..cbc62796bcd 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/AddConfigured.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/AddConfigured.php
@@ -12,7 +12,7 @@ class AddConfigured extends \Magento\Sales\Controller\Adminhtml\Order\Create
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $errorMessage = null;
         try {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/Cancel.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/Cancel.php
index f778a07a85a..7cfd40bda0c 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/Cancel.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/Cancel.php
@@ -12,7 +12,7 @@ class Cancel extends \Magento\Sales\Controller\Adminhtml\Order\Create
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultRedirectFactory->create();
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/ConfigureProductToAdd.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/ConfigureProductToAdd.php
index d8c70e6d63b..07bbc3e479f 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/ConfigureProductToAdd.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/ConfigureProductToAdd.php
@@ -12,7 +12,7 @@ class ConfigureProductToAdd extends \Magento\Sales\Controller\Adminhtml\Order\Cr
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         // Prepare data
         $productId = (int)$this->getRequest()->getParam('id');
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/ConfigureQuoteItems.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/ConfigureQuoteItems.php
index 080d5103c08..10c3432f5c8 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/ConfigureQuoteItems.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/ConfigureQuoteItems.php
@@ -12,7 +12,7 @@ class ConfigureQuoteItems extends \Magento\Sales\Controller\Adminhtml\Order\Crea
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         // Prepare data
         $configureResult = new \Magento\Framework\DataObject();
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/Index.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/Index.php
index 055b3fe11f8..2d159a99ee4 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/Index.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/Index.php
@@ -12,7 +12,7 @@ class Index extends \Magento\Sales\Controller\Adminhtml\Order\Create
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initSession();
 
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/LoadBlock.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/LoadBlock.php
index ba4b0e833e2..e5b063280bb 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/LoadBlock.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/LoadBlock.php
@@ -48,7 +48,7 @@ class LoadBlock extends \Magento\Sales\Controller\Adminhtml\Order\Create
      *
      * @return \Magento\Backend\Model\View\Result\Redirect|\Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         $request = $this->getRequest();
         try {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/ProcessData.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/ProcessData.php
index 7d550a7d357..cc2d978556c 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/ProcessData.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/ProcessData.php
@@ -12,7 +12,7 @@ class ProcessData extends \Magento\Sales\Controller\Adminhtml\Order\Create
      *
      * @return \Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initSession();
         $this->_processData();
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/Reorder.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/Reorder.php
index b64cb14c95c..8c91da215ca 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/Reorder.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/Reorder.php
@@ -10,7 +10,7 @@ class Reorder extends \Magento\Sales\Controller\Adminhtml\Order\Create
     /**
      * @return \Magento\Backend\Model\View\Result\Forward|\Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_getSession()->clearStorage();
         $orderId = $this->getRequest()->getParam('order_id');
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/Save.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/Save.php
index 3f48e6cf067..087e6311cb6 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/Save.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/Save.php
@@ -16,7 +16,7 @@ class Save extends \Magento\Sales\Controller\Adminhtml\Order\Create
      *
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultRedirectFactory->create();
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/ShowUpdateResult.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/ShowUpdateResult.php
index a3546de1fa6..9cd5b4d5245 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/ShowUpdateResult.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/ShowUpdateResult.php
@@ -49,7 +49,7 @@ class ShowUpdateResult extends \Magento\Sales\Controller\Adminhtml\Order\Create
      *
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Raw $resultRaw */
         $resultRaw = $this->resultRawFactory->create();
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/Start.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/Start.php
index d9fd5c50f5b..acc80e97426 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/Start.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Create/Start.php
@@ -14,7 +14,7 @@ class Start extends \Magento\Sales\Controller\Adminhtml\Order\Create
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_getSession()->clearStorage();
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/AddComment.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/AddComment.php
index a3cf6e6a308..d404c6a16aa 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/AddComment.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/AddComment.php
@@ -72,7 +72,7 @@ class AddComment extends \Magento\Backend\App\Action
      *
      * @return \Magento\Framework\Controller\Result\Raw|\Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->getRequest()->setParam('creditmemo_id', $this->getRequest()->getParam('id'));
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Cancel.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Cancel.php
index ce4652929c7..935eca652b3 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Cancel.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Cancel.php
@@ -40,7 +40,7 @@ class Cancel extends \Magento\Backend\App\Action
      *
      * @return \Magento\Backend\Model\View\Result\Redirect|\Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         $creditmemoId = $this->getRequest()->getParam('creditmemo_id');
         if ($creditmemoId) {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/NewAction.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/NewAction.php
index a9760a20fda..e1c7b8d9cc2 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/NewAction.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/NewAction.php
@@ -55,7 +55,7 @@ class NewAction extends \Magento\Backend\App\Action
      *
      * @return \Magento\Backend\Model\View\Result\Page|\Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->creditmemoLoader->setOrderId($this->getRequest()->getParam('order_id'));
         $this->creditmemoLoader->setCreditmemoId($this->getRequest()->getParam('creditmemo_id'));
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/PrintAction.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/PrintAction.php
index b5bb3333ac3..a848506b900 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/PrintAction.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/PrintAction.php
@@ -49,13 +49,13 @@ class PrintAction extends \Magento\Sales\Controller\Adminhtml\Creditmemo\Abstrac
      *
      * @return ResponseInterface|\Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->creditmemoLoader->setOrderId($this->getRequest()->getParam('order_id'));
         $this->creditmemoLoader->setCreditmemoId($this->getRequest()->getParam('creditmemo_id'));
         $this->creditmemoLoader->setCreditmemo($this->getRequest()->getParam('creditmemo'));
         $this->creditmemoLoader->setInvoiceId($this->getRequest()->getParam('invoice_id'));
         $this->creditmemoLoader->load();
-        return parent::execute();
+        return parent::executeInternal();
     }
 }
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Save.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Save.php
index 24d74e2177f..c66532f3aa5 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Save.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Save.php
@@ -61,7 +61,7 @@ class Save extends \Magento\Backend\App\Action
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultRedirect = $this->resultRedirectFactory->create();
         $data = $this->getRequest()->getPost('creditmemo');
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Start.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Start.php
index 4305bef4930..a60433a2e03 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Start.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Start.php
@@ -20,7 +20,7 @@ class Start extends \Magento\Backend\App\Action
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         /**
          * Clear old values for creditmemo qty's
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/UpdateQty.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/UpdateQty.php
index 38068b10918..d1f400c84fb 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/UpdateQty.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/UpdateQty.php
@@ -63,7 +63,7 @@ class UpdateQty extends \Magento\Backend\App\Action
      *
      * @return \Magento\Framework\Controller\Result\Json|\Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->creditmemoLoader->setOrderId($this->getRequest()->getParam('order_id'));
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/View.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/View.php
index 486b041554a..fe8808c559f 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/View.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/View.php
@@ -55,7 +55,7 @@ class View extends \Magento\Backend\App\Action
      *
      * @return \Magento\Backend\Model\View\Result\Page|\Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->creditmemoLoader->setOrderId($this->getRequest()->getParam('order_id'));
         $this->creditmemoLoader->setCreditmemoId($this->getRequest()->getParam('creditmemo_id'));
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Void.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Void.php
index 23bd5f1ccdb..fcc978d5ddd 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Void.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Void.php
@@ -47,7 +47,7 @@ class Void extends \Magento\Backend\App\Action
      *
      * @return \Magento\Backend\Model\View\Result\Redirect|\Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->creditmemoLoader->setOrderId($this->getRequest()->getParam('order_id'));
         $this->creditmemoLoader->setCreditmemoId($this->getRequest()->getParam('creditmemo_id'));
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemos.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemos.php
index 46571b222f3..9fb23be0820 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemos.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemos.php
@@ -12,7 +12,7 @@ class Creditmemos extends \Magento\Sales\Controller\Adminhtml\Order
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initOrder();
         $resultLayout = $this->resultLayoutFactory->create();
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Edit/Index.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Edit/Index.php
index a40e61cfa89..f2384d10884 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Edit/Index.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Edit/Index.php
@@ -22,7 +22,7 @@ class Index extends \Magento\Sales\Controller\Adminhtml\Order\Create\Index
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initSession();
 
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Edit/Start.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Edit/Start.php
index 22bcb5a6212..c216968a893 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Edit/Start.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Edit/Start.php
@@ -22,7 +22,7 @@ class Start extends \Magento\Sales\Controller\Adminhtml\Order\Create\Start
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_getSession()->clearStorage();
         $orderId = $this->getRequest()->getParam('order_id');
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Email.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Email.php
index ae1763485bd..95e845bce78 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Email.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Email.php
@@ -12,7 +12,7 @@ class Email extends \Magento\Sales\Controller\Adminhtml\Order
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $order = $this->_initOrder();
         if ($order) {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Grid.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Grid.php
index d16a0ea8cd1..c2017647e88 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Grid.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Grid.php
@@ -12,7 +12,7 @@ class Grid extends \Magento\Sales\Controller\Adminhtml\Order
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultLayout = $this->resultLayoutFactory->create();
         return $resultLayout;
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Hold.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Hold.php
index 881ba0c98c9..fd5f07df5e9 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Hold.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Hold.php
@@ -12,7 +12,7 @@ class Hold extends \Magento\Sales\Controller\Adminhtml\Order
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultRedirect = $this->resultRedirectFactory->create();
         if (!$this->isValidPostRequest()) {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Index.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Index.php
index 9fc67fd2754..3aac062e01b 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Index.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Index.php
@@ -12,7 +12,7 @@ class Index extends \Magento\Sales\Controller\Adminhtml\Order
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultPage = $this->_initAction();
         $resultPage->getConfig()->getTitle()->prepend(__('Orders'));
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/AddComment.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/AddComment.php
index 2be526b2129..f4a48a14568 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/AddComment.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/AddComment.php
@@ -68,7 +68,7 @@ class AddComment extends \Magento\Sales\Controller\Adminhtml\Invoice\AbstractInv
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->getRequest()->setParam('invoice_id', $this->getRequest()->getParam('id'));
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Cancel.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Cancel.php
index a717843c7e9..d79599efb94 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Cancel.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Cancel.php
@@ -13,7 +13,7 @@ class Cancel extends \Magento\Sales\Controller\Adminhtml\Invoice\AbstractInvoice
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $invoice = $this->getInvoice();
         if (!$invoice) {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Capture.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Capture.php
index 50ab1d8a9f2..3f8b12d19fc 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Capture.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Capture.php
@@ -13,7 +13,7 @@ class Capture extends \Magento\Sales\Controller\Adminhtml\Invoice\AbstractInvoic
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $invoice = $this->getInvoice();
         if (!$invoice) {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/NewAction.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/NewAction.php
index 306518b16ed..4c52db5ff57 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/NewAction.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/NewAction.php
@@ -73,7 +73,7 @@ class NewAction extends \Magento\Backend\App\Action
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $orderId = $this->getRequest()->getParam('order_id');
         $invoiceData = $this->getRequest()->getParam('invoice', []);
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Save.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Save.php
index 1ffa64f0100..5a822770fe5 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Save.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Save.php
@@ -110,7 +110,7 @@ class Save extends \Magento\Backend\App\Action
      * @SuppressWarnings(PHPMD.NPathComplexity)
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultRedirectFactory->create();
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Start.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Start.php
index 8db329dad08..594a437c653 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Start.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Start.php
@@ -13,7 +13,7 @@ class Start extends \Magento\Sales\Controller\Adminhtml\Invoice\AbstractInvoice\
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         /**
          * Clear old values for invoice qty's
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/UpdateQty.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/UpdateQty.php
index 3b30dbde11f..cfee5ad1ff2 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/UpdateQty.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/UpdateQty.php
@@ -71,7 +71,7 @@ class UpdateQty extends \Magento\Sales\Controller\Adminhtml\Invoice\AbstractInvo
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $orderId = $this->getRequest()->getParam('order_id');
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/View.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/View.php
index b6f4ae27b44..9e01376261e 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/View.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/View.php
@@ -39,7 +39,7 @@ class View extends \Magento\Sales\Controller\Adminhtml\Invoice\AbstractInvoice\V
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $invoice = $this->getInvoice();
         if (!$invoice) {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Void.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Void.php
index 841d517037b..005c3cdbc47 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Void.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Void.php
@@ -13,7 +13,7 @@ class Void extends \Magento\Sales\Controller\Adminhtml\Invoice\AbstractInvoice\V
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $invoice = $this->getInvoice();
         if (!$invoice) {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoices.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoices.php
index 08354deb668..cfb8841f41c 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoices.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoices.php
@@ -12,7 +12,7 @@ class Invoices extends \Magento\Sales\Controller\Adminhtml\Order
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initOrder();
         $resultLayout = $this->resultLayoutFactory->create();
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/ReviewPayment.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/ReviewPayment.php
index 8a0d64c9bcb..a2d72953eb4 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/ReviewPayment.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/ReviewPayment.php
@@ -16,7 +16,7 @@ class ReviewPayment extends \Magento\Sales\Controller\Adminhtml\Order
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultRedirect = $this->resultRedirectFactory->create();
         try {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Shipments.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Shipments.php
index 98683c76017..84efbffee9d 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Shipments.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Shipments.php
@@ -12,7 +12,7 @@ class Shipments extends \Magento\Sales\Controller\Adminhtml\Order
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initOrder();
         $resultLayout = $this->resultLayoutFactory->create();
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Assign.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Assign.php
index 04e05fc348e..7a2abd381e1 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Assign.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Assign.php
@@ -36,7 +36,7 @@ class Assign extends \Magento\Sales\Controller\Adminhtml\Order\Status
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/AssignPost.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/AssignPost.php
index a77c6dc3cc6..a103fbf4175 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/AssignPost.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/AssignPost.php
@@ -13,7 +13,7 @@ class AssignPost extends \Magento\Sales\Controller\Adminhtml\Order\Status
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $data = $this->getRequest()->getPostValue();
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Edit.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Edit.php
index 26ee0651e36..0f5f2e720b8 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Edit.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Edit.php
@@ -36,7 +36,7 @@ class Edit extends \Magento\Sales\Controller\Adminhtml\Order\Status
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $status = $this->_initStatus();
         if ($status) {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Index.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Index.php
index 3bafba19372..65f3dd3f164 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Index.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Index.php
@@ -36,7 +36,7 @@ class Index extends \Magento\Sales\Controller\Adminhtml\Order\Status
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/NewAction.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/NewAction.php
index f9668e83258..57e8e0b852e 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/NewAction.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/NewAction.php
@@ -36,7 +36,7 @@ class NewAction extends \Magento\Sales\Controller\Adminhtml\Order\Status
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $data = $this->_getSession()->getFormData(true);
         if ($data) {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Save.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Save.php
index efd73d7a2b3..79efd7eede6 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Save.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Save.php
@@ -13,7 +13,7 @@ class Save extends \Magento\Sales\Controller\Adminhtml\Order\Status
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $data = $this->getRequest()->getPostValue();
         $isNew = $this->getRequest()->getParam('is_new');
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Unassign.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Unassign.php
index e44b4f5e48e..e84ac0bc45b 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Unassign.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Status/Unassign.php
@@ -11,7 +11,7 @@ class Unassign extends \Magento\Sales\Controller\Adminhtml\Order\Status
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $state = $this->getRequest()->getParam('state');
         $status = $this->_initStatus();
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Transactions.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Transactions.php
index f41824df84b..9801ada2f82 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Transactions.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Transactions.php
@@ -14,7 +14,7 @@ class Transactions extends \Magento\Sales\Controller\Adminhtml\Order
      *
      * @return \Magento\Framework\View\Result\Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initOrder();
         $resultLayout = $this->resultLayoutFactory->create();
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Unhold.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Unhold.php
index 6cedb1e60b9..83fc8808df3 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Unhold.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Unhold.php
@@ -12,7 +12,7 @@ class Unhold extends \Magento\Sales\Controller\Adminhtml\Order
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultRedirect = $this->resultRedirectFactory->create();
         if (!$this->isValidPostRequest()) {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/View.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/View.php
index 831538fa21d..011056eac14 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/View.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/View.php
@@ -14,7 +14,7 @@ class View extends \Magento\Sales\Controller\Adminhtml\Order
      *
      * @return \Magento\Backend\Model\View\Result\Page|\Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $order = $this->_initOrder();
         $resultRedirect = $this->resultRedirectFactory->create();
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/View/Giftmessage/Save.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/View/Giftmessage/Save.php
index 554935ed551..13ced62a888 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/View/Giftmessage/Save.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/View/Giftmessage/Save.php
@@ -11,7 +11,7 @@ class Save extends \Magento\Sales\Controller\Adminhtml\Order\View\Giftmessage
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->_getGiftmessageSaveModel()->setGiftmessages(
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/VoidPayment.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/VoidPayment.php
index 03b870d71ca..3a10f5684c6 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/VoidPayment.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/VoidPayment.php
@@ -12,7 +12,7 @@ class VoidPayment extends \Magento\Sales\Controller\Adminhtml\Order
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $order = $this->_initOrder();
         $resultRedirect = $this->resultRedirectFactory->create();
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/Index.php b/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/Index.php
index 1a800be5b93..c393c2b1a1c 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/Index.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/Index.php
@@ -41,7 +41,7 @@ abstract class Index extends \Magento\Backend\App\Action
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/PrintAction.php b/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/PrintAction.php
index 633cf071b93..6a72dfe0ebc 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/PrintAction.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/PrintAction.php
@@ -50,7 +50,7 @@ abstract class PrintAction extends \Magento\Backend\App\Action
     /**
      * @return ResponseInterface|\Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         $shipmentId = $this->getRequest()->getParam('shipment_id');
         if ($shipmentId) {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/View.php b/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/View.php
index 150f98e597b..926a46c14c4 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/View.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/View.php
@@ -41,7 +41,7 @@ abstract class View extends \Magento\Backend\App\Action
      *
      * @return \Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Forward $resultForward */
         $resultForward = $this->resultForwardFactory->create();
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Transactions/Fetch.php b/app/code/Magento/Sales/Controller/Adminhtml/Transactions/Fetch.php
index df3a48ca4a7..a2ac001589d 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Transactions/Fetch.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Transactions/Fetch.php
@@ -17,7 +17,7 @@ class Fetch extends \Magento\Sales\Controller\Adminhtml\Transactions
      *
      * @return Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $txn = $this->_initTransaction();
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Transactions/Grid.php b/app/code/Magento/Sales/Controller/Adminhtml/Transactions/Grid.php
index 0b4579d1810..d65bba3d004 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Transactions/Grid.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Transactions/Grid.php
@@ -16,7 +16,7 @@ class Grid extends \Magento\Sales\Controller\Adminhtml\Transactions
      *
      * @return Layout
      */
-    public function execute()
+    public function executeInternal()
     {
         return $this->resultLayoutFactory->create();
     }
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Transactions/Index.php b/app/code/Magento/Sales/Controller/Adminhtml/Transactions/Index.php
index 6125b244d29..2d39c91638e 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Transactions/Index.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Transactions/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Sales\Controller\Adminhtml\Transactions
     /**
      * @return Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Transactions/View.php b/app/code/Magento/Sales/Controller/Adminhtml/Transactions/View.php
index 867d700cb41..df25ccba4a9 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Transactions/View.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Transactions/View.php
@@ -16,7 +16,7 @@ class View extends \Magento\Sales\Controller\Adminhtml\Transactions
      *
      * @return Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $txn = $this->_initTransaction();
         if (!$txn) {
diff --git a/app/code/Magento/Sales/Controller/Download/DownloadCustomOption.php b/app/code/Magento/Sales/Controller/Download/DownloadCustomOption.php
index 991ac197d78..d0e7ca016d0 100644
--- a/app/code/Magento/Sales/Controller/Download/DownloadCustomOption.php
+++ b/app/code/Magento/Sales/Controller/Download/DownloadCustomOption.php
@@ -54,7 +54,7 @@ class DownloadCustomOption extends \Magento\Framework\App\Action\Action
      *
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         $quoteItemOptionId = $this->getRequest()->getParam('id');
         /** @var $option \Magento\Quote\Model\Quote\Item\Option */
diff --git a/app/code/Magento/Sales/Controller/Guest/Form.php b/app/code/Magento/Sales/Controller/Guest/Form.php
index c9f87d44e79..03f56609495 100644
--- a/app/code/Magento/Sales/Controller/Guest/Form.php
+++ b/app/code/Magento/Sales/Controller/Guest/Form.php
@@ -30,7 +30,7 @@ class Form extends \Magento\Framework\App\Action\Action
      *
      * @return \Magento\Framework\Controller\Result\Redirect|\Magento\Framework\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->_objectManager->get('Magento\Customer\Model\Session')->isLoggedIn()) {
             return $this->resultRedirectFactory->create()->setPath('customer/account/');
diff --git a/app/code/Magento/Sales/Controller/Guest/PrintCreditmemo.php b/app/code/Magento/Sales/Controller/Guest/PrintCreditmemo.php
index 5b6fd6c5a6a..cc62bfa7047 100644
--- a/app/code/Magento/Sales/Controller/Guest/PrintCreditmemo.php
+++ b/app/code/Magento/Sales/Controller/Guest/PrintCreditmemo.php
@@ -52,7 +52,7 @@ class PrintCreditmemo extends \Magento\Sales\Controller\AbstractController\Print
     /**
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $result = $this->orderLoader->load($this->_request);
         if ($result instanceof \Magento\Framework\Controller\ResultInterface) {
diff --git a/app/code/Magento/Sales/Controller/Guest/PrintInvoice.php b/app/code/Magento/Sales/Controller/Guest/PrintInvoice.php
index ddd943b3246..d8c30fe056d 100644
--- a/app/code/Magento/Sales/Controller/Guest/PrintInvoice.php
+++ b/app/code/Magento/Sales/Controller/Guest/PrintInvoice.php
@@ -42,7 +42,7 @@ class PrintInvoice extends \Magento\Sales\Controller\AbstractController\PrintInv
     /**
      * {@inheritdoc}
      */
-    public function execute()
+    public function executeInternal()
     {
         $result = $this->orderLoader->load($this->_request);
         if ($result instanceof \Magento\Framework\Controller\ResultInterface) {
diff --git a/app/code/Magento/Sales/Controller/Guest/PrintShipment.php b/app/code/Magento/Sales/Controller/Guest/PrintShipment.php
index 8dcbfe4ef73..8a1ad2b803e 100644
--- a/app/code/Magento/Sales/Controller/Guest/PrintShipment.php
+++ b/app/code/Magento/Sales/Controller/Guest/PrintShipment.php
@@ -42,7 +42,7 @@ class PrintShipment extends \Magento\Sales\Controller\AbstractController\PrintSh
     /**
      * {@inheritdoc}
      */
-    public function execute()
+    public function executeInternal()
     {
         $result = $this->orderLoader->load($this->_request);
         if ($result instanceof \Magento\Framework\Controller\ResultInterface) {
diff --git a/app/code/Magento/Sales/Controller/Guest/View.php b/app/code/Magento/Sales/Controller/Guest/View.php
index 93de3cab2db..500d1d30d08 100644
--- a/app/code/Magento/Sales/Controller/Guest/View.php
+++ b/app/code/Magento/Sales/Controller/Guest/View.php
@@ -40,7 +40,7 @@ class View extends Action\Action
     /**
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $result = $this->guestHelper->loadValidOrder($this->getRequest());
         if ($result instanceof ResultInterface) {
diff --git a/app/code/Magento/Sales/Controller/Order/History.php b/app/code/Magento/Sales/Controller/Order/History.php
index 5a87a8b9442..8dd70bfbe33 100644
--- a/app/code/Magento/Sales/Controller/Order/History.php
+++ b/app/code/Magento/Sales/Controller/Order/History.php
@@ -34,7 +34,7 @@ class History extends \Magento\Framework\App\Action\Action implements OrderInter
      *
      * @return \Magento\Framework\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\View\Result\Page $resultPage */
         $resultPage = $this->resultPageFactory->create();
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/EmailTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/EmailTest.php
index 6a78aef9bcf..b35968afc83 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/EmailTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/EmailTest.php
@@ -163,7 +163,7 @@ class EmailTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Redirect',
-            $this->creditmemoEmail->execute()
+            $this->creditmemoEmail->executeInternal()
         );
         $this->assertEquals($this->response, $this->creditmemoEmail->getResponse());
     }
@@ -175,7 +175,7 @@ class EmailTest extends \PHPUnit_Framework_TestCase
             ->with('creditmemo_id')
             ->will($this->returnValue(null));
 
-        $this->assertNull($this->creditmemoEmail->execute());
+        $this->assertNull($this->creditmemoEmail->executeInternal());
     }
 
     /**
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Invoice/AbstractInvoice/EmailTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Invoice/AbstractInvoice/EmailTest.php
index 4e5bd8e7472..0566645df83 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Invoice/AbstractInvoice/EmailTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Invoice/AbstractInvoice/EmailTest.php
@@ -206,7 +206,7 @@ class EmailTest extends \PHPUnit_Framework_TestCase
             ->method('setPath')
             ->with('sales/invoice/view', ['order_id' => $orderId, 'invoice_id' => $invoiceId])
             ->willReturnSelf();
-        $this->assertInstanceOf('Magento\Backend\Model\View\Result\Redirect', $this->invoiceEmail->execute());
+        $this->assertInstanceOf('Magento\Backend\Model\View\Result\Redirect', $this->invoiceEmail->executeInternal());
     }
 
     public function testEmailNoInvoiceId()
@@ -223,7 +223,7 @@ class EmailTest extends \PHPUnit_Framework_TestCase
             ->with('noroute')
             ->willReturnSelf();
 
-        $this->assertInstanceOf('Magento\Backend\Model\View\Result\Forward', $this->invoiceEmail->execute());
+        $this->assertInstanceOf('Magento\Backend\Model\View\Result\Forward', $this->invoiceEmail->executeInternal());
     }
 
     public function testEmailNoInvoice()
@@ -253,6 +253,6 @@ class EmailTest extends \PHPUnit_Framework_TestCase
             ->with('noroute')
             ->willReturnSelf();
 
-        $this->assertInstanceOf('Magento\Backend\Model\View\Result\Forward', $this->invoiceEmail->execute());
+        $this->assertInstanceOf('Magento\Backend\Model\View\Result\Forward', $this->invoiceEmail->executeInternal());
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/CancelTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/CancelTest.php
index 186a40730f9..fe34c10eb4f 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/CancelTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/CancelTest.php
@@ -137,6 +137,6 @@ class CancelTest extends \PHPUnit_Framework_TestCase
             ->with('sales/*/')
             ->willReturnSelf();
 
-        $this->assertEquals($this->resultRedirect, $this->controller->execute());
+        $this->assertEquals($this->resultRedirect, $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Create/ProcessDataTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Create/ProcessDataTest.php
index 805edbea1ea..c0763bf80d8 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Create/ProcessDataTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Create/ProcessDataTest.php
@@ -233,7 +233,7 @@ class ProcessDataTest extends \PHPUnit_Framework_TestCase
             ->method('forward')
             ->with('index')
             ->willReturnSelf();
-        $this->assertInstanceOf('Magento\Backend\Model\View\Result\Forward', $this->processData->execute());
+        $this->assertInstanceOf('Magento\Backend\Model\View\Result\Forward', $this->processData->executeInternal());
     }
 
     public function isApplyDiscountDataProvider()
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/AddCommentTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/AddCommentTest.php
index b96f2254501..f7f6a0db9dc 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/AddCommentTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/AddCommentTest.php
@@ -173,7 +173,7 @@ class AddCommentTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Framework\Controller\Result\Json',
-            $this->controller->execute()
+            $this->controller->executeInternal()
         );
     }
 
@@ -201,7 +201,7 @@ class AddCommentTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Framework\Controller\Result\Json',
-            $this->controller->execute()
+            $this->controller->executeInternal()
         );
     }
 
@@ -230,7 +230,7 @@ class AddCommentTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Framework\Controller\Result\Json',
-            $this->controller->execute()
+            $this->controller->executeInternal()
         );
     }
 
@@ -294,7 +294,7 @@ class AddCommentTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Framework\Controller\Result\Raw',
-            $this->controller->execute()
+            $this->controller->executeInternal()
         );
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/CancelTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/CancelTest.php
index 223b5a9753b..5b8749215aa 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/CancelTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/CancelTest.php
@@ -200,7 +200,7 @@ class CancelTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Redirect',
-            $this->controller->execute()
+            $this->controller->executeInternal()
         );
     }
 
@@ -235,7 +235,7 @@ class CancelTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Redirect',
-            $this->controller->execute()
+            $this->controller->executeInternal()
         );
     }
 
@@ -258,7 +258,7 @@ class CancelTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Forward',
-            $this->controller->execute()
+            $this->controller->executeInternal()
         );
     }
 
@@ -293,7 +293,7 @@ class CancelTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Redirect',
-            $this->controller->execute()
+            $this->controller->executeInternal()
         );
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/NewActionTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/NewActionTest.php
index 68726f2894c..99abeba2695 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/NewActionTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/NewActionTest.php
@@ -238,7 +238,7 @@ class NewActionTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Page',
-            $this->controller->execute()
+            $this->controller->executeInternal()
         );
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/PrintActionTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/PrintActionTest.php
index 7f2ae31af7e..753ed02380d 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/PrintActionTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/PrintActionTest.php
@@ -152,7 +152,7 @@ class PrintActionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Sales\Controller\Adminhtml\Order\Creditmemo\PrintAction::execute
+     * @covers \Magento\Sales\Controller\Adminhtml\Order\Creditmemo\PrintAction::executeInternal
      */
     public function testExecute()
     {
@@ -201,12 +201,12 @@ class PrintActionTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Framework\App\ResponseInterface',
-            $this->printAction->execute()
+            $this->printAction->executeInternal()
         );
     }
 
     /**
-     * @covers \Magento\Sales\Controller\Adminhtml\Order\Creditmemo\PrintAction::execute
+     * @covers \Magento\Sales\Controller\Adminhtml\Order\Creditmemo\PrintAction::executeInternal
      */
     public function testExecuteNoCreditmemoId()
     {
@@ -222,7 +222,7 @@ class PrintActionTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Forward',
-            $this->printAction->execute()
+            $this->printAction->executeInternal()
         );
     }
 
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/UpdateQtyTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/UpdateQtyTest.php
index 9e02c98b1c3..30534fcacfd 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/UpdateQtyTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/UpdateQtyTest.php
@@ -221,7 +221,7 @@ class UpdateQtyTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Framework\Controller\Result\Json',
-            $this->controller->execute()
+            $this->controller->executeInternal()
         );
     }
 
@@ -252,7 +252,7 @@ class UpdateQtyTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Framework\Controller\Result\Json',
-            $this->controller->execute()
+            $this->controller->executeInternal()
         );
     }
 
@@ -300,7 +300,7 @@ class UpdateQtyTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Framework\Controller\Result\Raw',
-            $this->controller->execute()
+            $this->controller->executeInternal()
         );
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/ViewTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/ViewTest.php
index fb87393407d..1b455624725 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/ViewTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/ViewTest.php
@@ -223,7 +223,7 @@ class ViewTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Forward',
-            $this->controller->execute()
+            $this->controller->executeInternal()
         );
     }
 
@@ -269,7 +269,7 @@ class ViewTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Page',
-            $this->controller->execute()
+            $this->controller->executeInternal()
         );
     }
 
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/VoidTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/VoidTest.php
index 6d2d02861be..efd4d5b4355 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/VoidTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/VoidTest.php
@@ -207,7 +207,7 @@ class VoidTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Forward',
-            $this->controller->execute()
+            $this->controller->executeInternal()
         );
     }
 
@@ -243,7 +243,7 @@ class VoidTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Redirect',
-            $this->controller->execute()
+            $this->controller->executeInternal()
         );
     }
 
@@ -279,7 +279,7 @@ class VoidTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Redirect',
-            $this->controller->execute()
+            $this->controller->executeInternal()
         );
     }
 
@@ -333,7 +333,7 @@ class VoidTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Redirect',
-            $this->controller->execute()
+            $this->controller->executeInternal()
         );
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/EmailTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/EmailTest.php
index 73396196f97..578f64454d5 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/EmailTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/EmailTest.php
@@ -196,7 +196,7 @@ class EmailTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Redirect',
-            $this->orderEmail->execute()
+            $this->orderEmail->executeInternal()
         );
         $this->assertEquals($this->response, $this->orderEmail->getResponse());
     }
@@ -228,7 +228,7 @@ class EmailTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Redirect',
-            $this->orderEmail->execute()
+            $this->orderEmail->executeInternal()
         );
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/HoldTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/HoldTest.php
index 18dd6a8c8b3..2ddc7d1d212 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/HoldTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/HoldTest.php
@@ -137,6 +137,6 @@ class HoldTest extends \PHPUnit_Framework_TestCase
             ->with('sales/*/')
             ->willReturnSelf();
 
-        $this->assertEquals($this->resultRedirect, $this->controller->execute());
+        $this->assertEquals($this->resultRedirect, $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/AddCommentTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/AddCommentTest.php
index f8b5c3f44b1..a72cf068a00 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/AddCommentTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/AddCommentTest.php
@@ -265,7 +265,7 @@ class AddCommentTest extends \PHPUnit_Framework_TestCase
         $resultRaw->expects($this->once())->method('setContents')->with($response);
 
         $this->resultRawFactoryMock->expects($this->once())->method('create')->will($this->returnValue($resultRaw));
-        $this->assertSame($resultRaw, $this->controller->execute());
+        $this->assertSame($resultRaw, $this->controller->executeInternal());
     }
 
     /**
@@ -288,7 +288,7 @@ class AddCommentTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue($this->resultJsonMock));
 
         $this->resultJsonMock->expects($this->once())->method('setData')->with($response);
-        $this->assertSame($this->resultJsonMock, $this->controller->execute());
+        $this->assertSame($this->resultJsonMock, $this->controller->executeInternal());
     }
 
     /**
@@ -310,6 +310,6 @@ class AddCommentTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue($this->resultJsonMock));
 
         $this->resultJsonMock->expects($this->once())->method('setData')->with($response);
-        $this->assertSame($this->resultJsonMock, $this->controller->execute());
+        $this->assertSame($this->resultJsonMock, $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/CancelTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/CancelTest.php
index 689d7efa270..9190aefc128 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/CancelTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/CancelTest.php
@@ -226,7 +226,7 @@ class CancelTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($resultRedirect));
 
-        $this->assertSame($resultRedirect, $this->controller->execute());
+        $this->assertSame($resultRedirect, $this->controller->executeInternal());
     }
 
     /**
@@ -263,7 +263,7 @@ class CancelTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($resultForward));
 
-        $this->assertSame($resultForward, $this->controller->execute());
+        $this->assertSame($resultForward, $this->controller->executeInternal());
     }
 
     /**
@@ -319,7 +319,7 @@ class CancelTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($resultRedirect));
 
-        $this->assertSame($resultRedirect, $this->controller->execute());
+        $this->assertSame($resultRedirect, $this->controller->executeInternal());
     }
 
     /**
@@ -375,6 +375,6 @@ class CancelTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($resultRedirect));
 
-        $this->assertSame($resultRedirect, $this->controller->execute());
+        $this->assertSame($resultRedirect, $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/CaptureTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/CaptureTest.php
index c0e86d79f34..e1e759a8cdd 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/CaptureTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/CaptureTest.php
@@ -244,7 +244,7 @@ class CaptureTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($resultRedirect));
 
-        $this->assertSame($resultRedirect, $this->controller->execute());
+        $this->assertSame($resultRedirect, $this->controller->executeInternal());
     }
 
     /**
@@ -280,7 +280,7 @@ class CaptureTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($resultForward));
 
-        $this->assertSame($resultForward, $this->controller->execute());
+        $this->assertSame($resultForward, $this->controller->executeInternal());
     }
 
     /**
@@ -339,7 +339,7 @@ class CaptureTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($resultRedirect));
 
-        $this->assertSame($resultRedirect, $this->controller->execute());
+        $this->assertSame($resultRedirect, $this->controller->executeInternal());
     }
 
     /**
@@ -399,6 +399,6 @@ class CaptureTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($resultRedirect));
 
-        $this->assertSame($resultRedirect, $this->controller->execute());
+        $this->assertSame($resultRedirect, $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/NewActionTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/NewActionTest.php
index 5beb118dda9..7ddb6084b1d 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/NewActionTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/NewActionTest.php
@@ -285,7 +285,7 @@ class NewActionTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($this->resultPageMock));
 
-        $this->assertSame($this->resultPageMock, $this->controller->execute());
+        $this->assertSame($this->resultPageMock, $this->controller->executeInternal());
     }
 
     public function testExecuteNoOrder()
@@ -329,6 +329,6 @@ class NewActionTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($resultRedirect));
 
-        $this->assertSame($resultRedirect, $this->controller->execute());
+        $this->assertSame($resultRedirect, $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/PrintActionTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/PrintActionTest.php
index 223e5e4311e..4ac90b4c26b 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/PrintActionTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/PrintActionTest.php
@@ -147,6 +147,6 @@ class PrintActionTest extends \PHPUnit_Framework_TestCase
             ->with('Magento\Framework\Stdlib\DateTime\DateTime')
             ->willReturn($dateTimeMock);
 
-        $this->assertNull($this->controller->execute());
+        $this->assertNull($this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/SaveTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/SaveTest.php
index 619b6b0bbba..9d21a5e3027 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/SaveTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/SaveTest.php
@@ -128,6 +128,6 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             ->with('sales/order/index')
             ->willReturnSelf();
 
-        $this->assertEquals($redirectMock, $this->controller->execute());
+        $this->assertEquals($redirectMock, $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/UpdateQtyTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/UpdateQtyTest.php
index 2be9749e0c7..b3356c971a9 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/UpdateQtyTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/UpdateQtyTest.php
@@ -257,7 +257,7 @@ class UpdateQtyTest extends \PHPUnit_Framework_TestCase
 
         $this->resultRawFactoryMock->expects($this->once())->method('create')->will($this->returnValue($resultRaw));
 
-        $this->assertSame($resultRaw, $this->controller->execute());
+        $this->assertSame($resultRaw, $this->controller->executeInternal());
     }
 
     /**
@@ -300,7 +300,7 @@ class UpdateQtyTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($resultJsonMock));
 
-        $this->assertSame($resultJsonMock, $this->controller->execute());
+        $this->assertSame($resultJsonMock, $this->controller->executeInternal());
     }
 
     /**
@@ -343,6 +343,6 @@ class UpdateQtyTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($resultJsonMock));
 
-        $this->assertSame($resultJsonMock, $this->controller->execute());
+        $this->assertSame($resultJsonMock, $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/ViewTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/ViewTest.php
index edb47e37f44..af2d51618d9 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/ViewTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/ViewTest.php
@@ -244,7 +244,7 @@ class ViewTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($this->resultPageMock));
 
-        $this->assertSame($this->resultPageMock, $this->controller->execute());
+        $this->assertSame($this->resultPageMock, $this->controller->executeInternal());
     }
 
     public function testExecuteNoInvoice()
@@ -278,6 +278,6 @@ class ViewTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($resultForward));
 
-        $this->assertSame($resultForward, $this->controller->execute());
+        $this->assertSame($resultForward, $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/VoidTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/VoidTest.php
index c2bfc012aa6..a4b63898457 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/VoidTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/VoidTest.php
@@ -255,7 +255,7 @@ class VoidTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($resultRedirect));
 
-        $this->assertSame($resultRedirect, $this->controller->execute());
+        $this->assertSame($resultRedirect, $this->controller->executeInternal());
     }
 
     /**
@@ -297,7 +297,7 @@ class VoidTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($resultForward));
 
-        $this->assertSame($resultForward, $this->controller->execute());
+        $this->assertSame($resultForward, $this->controller->executeInternal());
     }
 
     /**
@@ -354,6 +354,6 @@ class VoidTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($resultRedirect));
 
-        $this->assertSame($resultRedirect, $this->controller->execute());
+        $this->assertSame($resultRedirect, $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassCancelTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassCancelTest.php
index 40a5b450f04..aa9ed541fad 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassCancelTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassCancelTest.php
@@ -215,7 +215,7 @@ class MassCancelTest extends \PHPUnit_Framework_TestCase
             ->with('sales/*/')
             ->willReturnSelf();
 
-        $this->massAction->execute();
+        $this->massAction->executeInternal();
     }
 
     /**
@@ -259,7 +259,7 @@ class MassCancelTest extends \PHPUnit_Framework_TestCase
             ->with('sales/*/')
             ->willReturnSelf();
 
-        $this->massAction->execute();
+        $this->massAction->executeInternal();
     }
 
     /**
@@ -287,6 +287,6 @@ class MassCancelTest extends \PHPUnit_Framework_TestCase
             ->method('addError')
             ->with('Can not cancel');
 
-        $this->massAction->execute();
+        $this->massAction->executeInternal();
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassHoldTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassHoldTest.php
index 5c4d7870685..440d0dda48f 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassHoldTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassHoldTest.php
@@ -217,7 +217,7 @@ class MassHoldTest extends \PHPUnit_Framework_TestCase
             ->with('sales/*/')
             ->willReturnSelf();
 
-        $this->massAction->execute();
+        $this->massAction->executeInternal();
     }
 
     public function testExecuteNoOrdersPutOnHold()
@@ -257,6 +257,6 @@ class MassHoldTest extends \PHPUnit_Framework_TestCase
             ->with('sales/*/')
             ->willReturnSelf();
 
-        $this->massAction->execute();
+        $this->massAction->executeInternal();
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassUnholdTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassUnholdTest.php
index 127ccc343ae..781834d3a1b 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassUnholdTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassUnholdTest.php
@@ -212,7 +212,7 @@ class MassUnholdTest extends \PHPUnit_Framework_TestCase
             ->with('sales/*/')
             ->willReturnSelf();
 
-        $this->massAction->execute();
+        $this->massAction->executeInternal();
     }
 
     public function testExecuteNoReleasedOrderFromHold()
@@ -251,6 +251,6 @@ class MassUnholdTest extends \PHPUnit_Framework_TestCase
             ->with('sales/*/')
             ->willReturnSelf();
 
-        $this->massAction->execute();
+        $this->massAction->executeInternal();
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/ReviewPaymentTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/ReviewPaymentTest.php
index 866c083c049..2fd32794370 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/ReviewPaymentTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/ReviewPaymentTest.php
@@ -163,7 +163,7 @@ class ReviewPaymentTest extends \PHPUnit_Framework_TestCase
             ->with('sales/order/view')
             ->willReturnSelf();
 
-        $result = $this->reviewPayment->execute();
+        $result = $this->reviewPayment->executeInternal();
         $this->assertEquals($this->resultRedirectMock, $result);
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/UnholdTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/UnholdTest.php
index 1dbf1baafa6..e25884e837a 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/UnholdTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/UnholdTest.php
@@ -137,6 +137,6 @@ class UnholdTest extends \PHPUnit_Framework_TestCase
             ->with('sales/*/')
             ->willReturnSelf();
 
-        $this->assertEquals($this->resultRedirect, $this->controller->execute());
+        $this->assertEquals($this->resultRedirect, $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/ViewTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/ViewTest.php
index 3037e323da0..fdbd6bf306e 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/ViewTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/ViewTest.php
@@ -167,7 +167,7 @@ class ViewTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Sales\Controller\Adminhtml\Order\View::execute
+     * @covers \Magento\Sales\Controller\Adminhtml\Order\View::executeInternal
      */
     public function testExecute()
     {
@@ -197,12 +197,12 @@ class ViewTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Page',
-            $this->viewAction->execute()
+            $this->viewAction->executeInternal()
         );
     }
 
     /**
-     * @covers \Magento\Sales\Controller\Adminhtml\Order\View::execute
+     * @covers \Magento\Sales\Controller\Adminhtml\Order\View::executeInternal
      */
     public function testExecuteNoOrder()
     {
@@ -224,12 +224,12 @@ class ViewTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Redirect',
-            $this->viewAction->execute()
+            $this->viewAction->executeInternal()
         );
     }
 
     /**
-     * @covers \Magento\Sales\Controller\Adminhtml\Order\View::execute
+     * @covers \Magento\Sales\Controller\Adminhtml\Order\View::executeInternal
      */
     public function testGlobalException()
     {
@@ -253,7 +253,7 @@ class ViewTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Redirect',
-            $this->viewAction->execute()
+            $this->viewAction->executeInternal()
         );
     }
 
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Download/DownloadCustomOptionTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Download/DownloadCustomOptionTest.php
index 629cb0ce5eb..0299f484176 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Download/DownloadCustomOptionTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Download/DownloadCustomOptionTest.php
@@ -209,7 +209,7 @@ class DownloadCustomOptionTest extends \PHPUnit_Framework_TestCase
 
             $this->objectMock->expects($this->once())->method('endExecute')->willReturn(true);
         }
-        $this->objectMock->execute();
+        $this->objectMock->executeInternal();
     }
 
     public function executeDataProvider()
@@ -329,6 +329,6 @@ class DownloadCustomOptionTest extends \PHPUnit_Framework_TestCase
 
         $this->resultForwardMock->expects($this->once())->method('forward')->with('noroute')->willReturn(true);
 
-        $this->objectMock->execute();
+        $this->objectMock->executeInternal();
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Guest/ViewTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Guest/ViewTest.php
index 78aa59f9eed..dbe89bc0533 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Guest/ViewTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Guest/ViewTest.php
@@ -103,7 +103,7 @@ class ViewTest extends \PHPUnit_Framework_TestCase
             ->method('getBreadcrumbs')
             ->with($this->resultPageMock);
 
-        $this->assertSame($this->resultPageMock, $this->viewController->execute());
+        $this->assertSame($this->resultPageMock, $this->viewController->executeInternal());
     }
 
     /**
@@ -116,6 +116,6 @@ class ViewTest extends \PHPUnit_Framework_TestCase
             ->with($this->requestMock)
             ->willReturn($this->resultRedirectMock);
 
-        $this->assertSame($this->resultRedirectMock, $this->viewController->execute());
+        $this->assertSame($this->resultRedirectMock, $this->viewController->executeInternal());
     }
 }
diff --git a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/ApplyRules.php b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/ApplyRules.php
index 9e694ab9ea0..28d6a8eb392 100644
--- a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/ApplyRules.php
+++ b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/ApplyRules.php
@@ -13,7 +13,7 @@ class ApplyRules extends \Magento\SalesRule\Controller\Adminhtml\Promo\Quote
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initAction();
         $this->_view->renderLayout();
diff --git a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Chooser.php b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Chooser.php
index f88d58097f2..0a7563e34a9 100644
--- a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Chooser.php
+++ b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Chooser.php
@@ -13,7 +13,7 @@ class Chooser extends \Magento\SalesRule\Controller\Adminhtml\Promo\Quote
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $uniqId = $this->getRequest()->getParam('uniq_id');
         $chooserBlock = $this->_view->getLayout()->createBlock(
diff --git a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/CouponsGrid.php b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/CouponsGrid.php
index 565e1d7d8ca..3ce01abaf9b 100644
--- a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/CouponsGrid.php
+++ b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/CouponsGrid.php
@@ -13,7 +13,7 @@ class CouponsGrid extends \Magento\SalesRule\Controller\Adminhtml\Promo\Quote
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initRule();
         $this->_view->loadLayout();
diff --git a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/CouponsMassDelete.php b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/CouponsMassDelete.php
index 623dedb6ae1..d938f67a30f 100644
--- a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/CouponsMassDelete.php
+++ b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/CouponsMassDelete.php
@@ -13,7 +13,7 @@ class CouponsMassDelete extends \Magento\SalesRule\Controller\Adminhtml\Promo\Qu
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initRule();
         $rule = $this->_coreRegistry->registry('current_promo_quote_rule');
diff --git a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Delete.php b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Delete.php
index c88dc7494f8..a8e5ca176cd 100644
--- a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Delete.php
+++ b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Delete.php
@@ -13,7 +13,7 @@ class Delete extends \Magento\SalesRule\Controller\Adminhtml\Promo\Quote
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = $this->getRequest()->getParam('id');
         if ($id) {
diff --git a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Edit.php b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Edit.php
index 6138a59b95a..636e0d548c3 100644
--- a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Edit.php
+++ b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Edit.php
@@ -14,7 +14,7 @@ class Edit extends \Magento\SalesRule\Controller\Adminhtml\Promo\Quote
      * @return void
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = $this->getRequest()->getParam('id');
         $model = $this->_objectManager->create('Magento\SalesRule\Model\Rule');
diff --git a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/ExportCouponsCsv.php b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/ExportCouponsCsv.php
index bcbfee10495..3d06d95e630 100644
--- a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/ExportCouponsCsv.php
+++ b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/ExportCouponsCsv.php
@@ -15,7 +15,7 @@ class ExportCouponsCsv extends \Magento\SalesRule\Controller\Adminhtml\Promo\Quo
      *
      * @return \Magento\Framework\App\ResponseInterface|null
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initRule();
         $rule = $this->_coreRegistry->registry('current_promo_quote_rule');
diff --git a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/ExportCouponsXml.php b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/ExportCouponsXml.php
index 22172e206f5..717dc7246c6 100644
--- a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/ExportCouponsXml.php
+++ b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/ExportCouponsXml.php
@@ -15,7 +15,7 @@ class ExportCouponsXml extends \Magento\SalesRule\Controller\Adminhtml\Promo\Quo
      *
      * @return \Magento\Framework\App\ResponseInterface|null
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initRule();
         $rule = $this->_coreRegistry->registry('current_promo_quote_rule');
diff --git a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Generate.php b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Generate.php
index 437f2573bc2..0bf21e978cf 100644
--- a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Generate.php
+++ b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Generate.php
@@ -13,7 +13,7 @@ class Generate extends \Magento\SalesRule\Controller\Adminhtml\Promo\Quote
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->getRequest()->isAjax()) {
             $this->_forward('noroute');
diff --git a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Index.php b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Index.php
index b27554f7fc6..8921d7c461b 100644
--- a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Index.php
+++ b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\SalesRule\Controller\Adminhtml\Promo\Quote
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initAction()->_addBreadcrumb(__('Catalog'), __('Catalog'));
         $this->_view->getPage()->getConfig()->getTitle()->prepend(__('Cart Price Rules'));
diff --git a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/NewAction.php b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/NewAction.php
index dc8b49e02e2..324d2d07b6b 100644
--- a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/NewAction.php
+++ b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/NewAction.php
@@ -13,7 +13,7 @@ class NewAction extends \Magento\SalesRule\Controller\Adminhtml\Promo\Quote
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_forward('edit');
     }
diff --git a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/NewActionHtml.php b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/NewActionHtml.php
index cf383bfed2d..422ee2a38a6 100644
--- a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/NewActionHtml.php
+++ b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/NewActionHtml.php
@@ -13,7 +13,7 @@ class NewActionHtml extends \Magento\SalesRule\Controller\Adminhtml\Promo\Quote
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = $this->getRequest()->getParam('id');
         $typeArr = explode('|', str_replace('-', '/', $this->getRequest()->getParam('type')));
diff --git a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/NewConditionHtml.php b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/NewConditionHtml.php
index fb0c502a37e..48d05829f32 100644
--- a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/NewConditionHtml.php
+++ b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/NewConditionHtml.php
@@ -13,7 +13,7 @@ class NewConditionHtml extends \Magento\SalesRule\Controller\Adminhtml\Promo\Quo
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = $this->getRequest()->getParam('id');
         $typeArr = explode('|', str_replace('-', '/', $this->getRequest()->getParam('type')));
diff --git a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php
index 9434b07ed0b..c0d318d3453 100644
--- a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php
+++ b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/Save.php
@@ -15,7 +15,7 @@ class Save extends \Magento\SalesRule\Controller\Adminhtml\Promo\Quote
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->getRequest()->getPostValue()) {
             try {
diff --git a/app/code/Magento/Search/Controller/Adminhtml/Term/Delete.php b/app/code/Magento/Search/Controller/Adminhtml/Term/Delete.php
index 78a24106294..e3dc4e5a7a8 100644
--- a/app/code/Magento/Search/Controller/Adminhtml/Term/Delete.php
+++ b/app/code/Magento/Search/Controller/Adminhtml/Term/Delete.php
@@ -13,7 +13,7 @@ class Delete extends TermController
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = $this->getRequest()->getParam('id');
         /** @var \Magento\Backend\Model\View\Result\Redirect $redirectResult */
diff --git a/app/code/Magento/Search/Controller/Adminhtml/Term/Edit.php b/app/code/Magento/Search/Controller/Adminhtml/Term/Edit.php
index ad6502e18ad..df5c08a4693 100644
--- a/app/code/Magento/Search/Controller/Adminhtml/Term/Edit.php
+++ b/app/code/Magento/Search/Controller/Adminhtml/Term/Edit.php
@@ -35,7 +35,7 @@ class Edit extends TermController
      * @return \Magento\Framework\Controller\ResultInterface
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = $this->getRequest()->getParam('id');
         $model = $this->_objectManager->create('Magento\Search\Model\Query');
diff --git a/app/code/Magento/Search/Controller/Adminhtml/Term/ExportSearchCsv.php b/app/code/Magento/Search/Controller/Adminhtml/Term/ExportSearchCsv.php
index da777ec44e4..34fe89f51be 100644
--- a/app/code/Magento/Search/Controller/Adminhtml/Term/ExportSearchCsv.php
+++ b/app/code/Magento/Search/Controller/Adminhtml/Term/ExportSearchCsv.php
@@ -35,7 +35,7 @@ class ExportSearchCsv extends TermController
      *
      * @return \Magento\Framework\App\ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\View\Result\Layout $resultLayout */
         $resultLayout = $this->resultFactory->create(ResultFactory::TYPE_LAYOUT);
diff --git a/app/code/Magento/Search/Controller/Adminhtml/Term/ExportSearchExcel.php b/app/code/Magento/Search/Controller/Adminhtml/Term/ExportSearchExcel.php
index b287a1f6ea8..2a89f2fb339 100644
--- a/app/code/Magento/Search/Controller/Adminhtml/Term/ExportSearchExcel.php
+++ b/app/code/Magento/Search/Controller/Adminhtml/Term/ExportSearchExcel.php
@@ -35,7 +35,7 @@ class ExportSearchExcel extends TermController
      *
      * @return \Magento\Framework\App\ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\View\Result\Layout $resultLayout */
         $resultLayout = $this->resultFactory->create(ResultFactory::TYPE_LAYOUT);
diff --git a/app/code/Magento/Search/Controller/Adminhtml/Term/Index.php b/app/code/Magento/Search/Controller/Adminhtml/Term/Index.php
index 6bce708278a..54e3a4b11c2 100644
--- a/app/code/Magento/Search/Controller/Adminhtml/Term/Index.php
+++ b/app/code/Magento/Search/Controller/Adminhtml/Term/Index.php
@@ -12,7 +12,7 @@ class Index extends TermController
     /**
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultPage = $this->createPage();
         $resultPage->getConfig()->getTitle()->prepend(__('Search Terms'));
diff --git a/app/code/Magento/Search/Controller/Adminhtml/Term/MassDelete.php b/app/code/Magento/Search/Controller/Adminhtml/Term/MassDelete.php
index 97586e38d64..a10b869a24c 100644
--- a/app/code/Magento/Search/Controller/Adminhtml/Term/MassDelete.php
+++ b/app/code/Magento/Search/Controller/Adminhtml/Term/MassDelete.php
@@ -13,7 +13,7 @@ class MassDelete extends TermController
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $searchIds = $this->getRequest()->getParam('search');
         if (!is_array($searchIds)) {
diff --git a/app/code/Magento/Search/Controller/Adminhtml/Term/NewAction.php b/app/code/Magento/Search/Controller/Adminhtml/Term/NewAction.php
index 35f6d63e637..f049f45d9a0 100644
--- a/app/code/Magento/Search/Controller/Adminhtml/Term/NewAction.php
+++ b/app/code/Magento/Search/Controller/Adminhtml/Term/NewAction.php
@@ -13,7 +13,7 @@ class NewAction extends TermController
     /**
      * @return \Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Forward $resultForward */
         $resultForward = $this->resultFactory->create(ResultFactory::TYPE_FORWARD);
diff --git a/app/code/Magento/Search/Controller/Adminhtml/Term/Report.php b/app/code/Magento/Search/Controller/Adminhtml/Term/Report.php
index 1c512961e58..f0e9c4dc098 100644
--- a/app/code/Magento/Search/Controller/Adminhtml/Term/Report.php
+++ b/app/code/Magento/Search/Controller/Adminhtml/Term/Report.php
@@ -15,7 +15,7 @@ class Report extends ReportsIndexController
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_eventManager->dispatch('on_view_report', ['report' => 'search']);
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
diff --git a/app/code/Magento/Search/Controller/Adminhtml/Term/Save.php b/app/code/Magento/Search/Controller/Adminhtml/Term/Save.php
index 3a31a0555a7..e50d11a84de 100644
--- a/app/code/Magento/Search/Controller/Adminhtml/Term/Save.php
+++ b/app/code/Magento/Search/Controller/Adminhtml/Term/Save.php
@@ -36,7 +36,7 @@ class Save extends TermController
      * @return \Magento\Backend\Model\View\Result\Redirect
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         $data = $this->getRequest()->getPostValue();
         if ($this->getRequest()->isPost() && $data) {
diff --git a/app/code/Magento/Search/Controller/Ajax/Suggest.php b/app/code/Magento/Search/Controller/Ajax/Suggest.php
index f39c7bf708b..ca49bc1ccee 100644
--- a/app/code/Magento/Search/Controller/Ajax/Suggest.php
+++ b/app/code/Magento/Search/Controller/Ajax/Suggest.php
@@ -32,7 +32,7 @@ class Suggest extends Action
     /**
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->getRequest()->getParam('q', false)) {
             /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/Search/Controller/Term/Popular.php b/app/code/Magento/Search/Controller/Term/Popular.php
index 687e17f62ab..bcad10e4a1e 100644
--- a/app/code/Magento/Search/Controller/Term/Popular.php
+++ b/app/code/Magento/Search/Controller/Term/Popular.php
@@ -35,7 +35,7 @@ class Popular extends Action
      * @param \Magento\Framework\App\RequestInterface $request
      * @return \Magento\Framework\App\ResponseInterface
      */
-    public function dispatch(RequestInterface $request)
+    public function execute(RequestInterface $request)
     {
         $searchTerms = $this->scopeConfig->getValue(
             'catalog/seo/search_terms',
@@ -45,13 +45,13 @@ class Popular extends Action
             $this->_redirect('noroute');
             $this->_actionFlag->set('', self::FLAG_NO_DISPATCH, true);
         }
-        return parent::dispatch($request);
+        return parent::execute($request);
     }
 
     /**
      * @return \Magento\Framework\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\View\Result\Page $resultPage */
         $resultPage = $this->resultFactory->create(ResultFactory::TYPE_PAGE);
diff --git a/app/code/Magento/Search/Test/Unit/Controller/Adminhtml/Ajax/SuggestTest.php b/app/code/Magento/Search/Test/Unit/Controller/Adminhtml/Ajax/SuggestTest.php
index c8493a32a6b..1b097fb97a8 100644
--- a/app/code/Magento/Search/Test/Unit/Controller/Adminhtml/Ajax/SuggestTest.php
+++ b/app/code/Magento/Search/Test/Unit/Controller/Adminhtml/Ajax/SuggestTest.php
@@ -126,7 +126,7 @@ class SuggestTest extends \PHPUnit_Framework_TestCase
             ->method('setData')
             ->willReturnSelf();
 
-        $this->assertSame($this->resultJsonMock, $this->controller->execute());
+        $this->assertSame($this->resultJsonMock, $this->controller->executeInternal());
     }
 
     public function testExecuteEmptyQuery()
@@ -146,6 +146,6 @@ class SuggestTest extends \PHPUnit_Framework_TestCase
             ->with($url)
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->controller->execute());
+        $this->assertSame($this->resultRedirectMock, $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Search/Test/Unit/Controller/Adminhtml/Term/MassDeleteTest.php b/app/code/Magento/Search/Test/Unit/Controller/Adminhtml/Term/MassDeleteTest.php
index fd0e5f83a25..8642f19bb47 100644
--- a/app/code/Magento/Search/Test/Unit/Controller/Adminhtml/Term/MassDeleteTest.php
+++ b/app/code/Magento/Search/Test/Unit/Controller/Adminhtml/Term/MassDeleteTest.php
@@ -114,7 +114,7 @@ class MassDeleteTest extends \PHPUnit_Framework_TestCase
             ->with('search/*/')
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->controller->execute());
+        $this->assertSame($this->resultRedirectMock, $this->controller->executeInternal());
     }
 
     /**
diff --git a/app/code/Magento/Search/Test/Unit/Controller/Adminhtml/Term/SaveTest.php b/app/code/Magento/Search/Test/Unit/Controller/Adminhtml/Term/SaveTest.php
index 5197e7d83e4..3d17abf4677 100644
--- a/app/code/Magento/Search/Test/Unit/Controller/Adminhtml/Term/SaveTest.php
+++ b/app/code/Magento/Search/Test/Unit/Controller/Adminhtml/Term/SaveTest.php
@@ -120,7 +120,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
         $this->request->expects($this->at(0))->method('getPostValue')->willReturn($data);
         $this->request->expects($this->at(1))->method('isPost')->willReturn($isPost);
         $this->redirect->expects($this->once())->method('setPath')->willReturnSelf();
-        $this->assertSame($this->redirect, $this->controller->execute());
+        $this->assertSame($this->redirect, $this->controller->executeInternal());
     }
 
     /**
@@ -146,7 +146,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
         $this->messageManager->expects($this->once())->method('addSuccess');
 
         $this->redirect->expects($this->once())->method('setPath')->willReturnSelf();
-        $this->assertSame($this->redirect, $this->controller->execute());
+        $this->assertSame($this->redirect, $this->controller->executeInternal());
     }
 
     public function testExecuteLoadQueryQueryIdQueryText()
@@ -164,7 +164,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
         $this->messageManager->expects($this->once())->method('addSuccess');
 
         $this->redirect->expects($this->once())->method('setPath')->willReturnSelf();
-        $this->assertSame($this->redirect, $this->controller->execute());
+        $this->assertSame($this->redirect, $this->controller->executeInternal());
     }
 
     public function testExecuteLoadQueryQueryIdQueryText2()
@@ -183,7 +183,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
         $this->messageManager->expects($this->once())->method('addSuccess');
 
         $this->redirect->expects($this->once())->method('setPath')->willReturnSelf();
-        $this->assertSame($this->redirect, $this->controller->execute());
+        $this->assertSame($this->redirect, $this->controller->executeInternal());
     }
 
     public function testExecuteLoadQueryQueryIdQueryTextException()
@@ -202,7 +202,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
         $this->messageManager->expects($this->once())->method('addError');
         $this->session->expects($this->once())->method('setPageData');
         $this->redirect->expects($this->once())->method('setPath')->willReturnSelf();
-        $this->assertSame($this->redirect, $this->controller->execute());
+        $this->assertSame($this->redirect, $this->controller->executeInternal());
     }
 
     public function testExecuteException()
@@ -219,7 +219,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
         $this->messageManager->expects($this->once())->method('addException');
         $this->session->expects($this->once())->method('setPageData');
         $this->redirect->expects($this->once())->method('setPath')->willReturnSelf();
-        $this->assertSame($this->redirect, $this->controller->execute());
+        $this->assertSame($this->redirect, $this->controller->executeInternal());
     }
 
     /**
diff --git a/app/code/Magento/SendFriend/Controller/Product.php b/app/code/Magento/SendFriend/Controller/Product.php
index 73a227ce32c..0532108e6e7 100644
--- a/app/code/Magento/SendFriend/Controller/Product.php
+++ b/app/code/Magento/SendFriend/Controller/Product.php
@@ -65,7 +65,7 @@ abstract class Product extends \Magento\Framework\App\Action\Action
      * @return \Magento\Framework\App\ResponseInterface
      * @throws \Magento\Framework\Exception\NotFoundException
      */
-    public function dispatch(RequestInterface $request)
+    public function execute(RequestInterface $request)
     {
         /* @var $helper \Magento\SendFriend\Helper\Data */
         $helper = $this->_objectManager->get('Magento\SendFriend\Helper\Data');
@@ -84,7 +84,7 @@ abstract class Product extends \Magento\Framework\App\Action\Action
                     ->setSendfriendFormData($request->getPostValue());
             }
         }
-        return parent::dispatch($request);
+        return parent::execute($request);
     }
 
     /**
diff --git a/app/code/Magento/SendFriend/Controller/Product/Send.php b/app/code/Magento/SendFriend/Controller/Product/Send.php
index c6d7f3b05dd..99e0f911710 100644
--- a/app/code/Magento/SendFriend/Controller/Product/Send.php
+++ b/app/code/Magento/SendFriend/Controller/Product/Send.php
@@ -45,7 +45,7 @@ class Send extends \Magento\SendFriend\Controller\Product
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $product = $this->_initProduct();
 
diff --git a/app/code/Magento/SendFriend/Controller/Product/Sendmail.php b/app/code/Magento/SendFriend/Controller/Product/Sendmail.php
index 048ce1060d8..aa34eefa5b2 100644
--- a/app/code/Magento/SendFriend/Controller/Product/Sendmail.php
+++ b/app/code/Magento/SendFriend/Controller/Product/Sendmail.php
@@ -50,7 +50,7 @@ class Sendmail extends \Magento\SendFriend\Controller\Product
      * @return \Magento\Framework\Controller\ResultInterface
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
diff --git a/app/code/Magento/SendFriend/Test/Unit/Controller/Product/SendTest.php b/app/code/Magento/SendFriend/Test/Unit/Controller/Product/SendTest.php
index 090dc47f19b..bc981416c84 100644
--- a/app/code/Magento/SendFriend/Test/Unit/Controller/Product/SendTest.php
+++ b/app/code/Magento/SendFriend/Test/Unit/Controller/Product/SendTest.php
@@ -175,7 +175,7 @@ class SendTest extends \PHPUnit_Framework_TestCase
             ->with($formData)
             ->willReturnSelf();
 
-        $this->assertEquals($pageMock, $this->model->execute());
+        $this->assertEquals($pageMock, $this->model->executeInternal());
     }
 
     /**
@@ -254,7 +254,7 @@ class SendTest extends \PHPUnit_Framework_TestCase
             ->with('sendfriend.send')
             ->willReturn(false);
 
-        $this->assertEquals($pageMock, $this->model->execute());
+        $this->assertEquals($pageMock, $this->model->executeInternal());
     }
 
     public function testExecuteWithNoticeAndNoData()
@@ -320,7 +320,7 @@ class SendTest extends \PHPUnit_Framework_TestCase
         $pageMock->expects($this->never())
             ->method('getLayout');
 
-        $this->assertEquals($pageMock, $this->model->execute());
+        $this->assertEquals($pageMock, $this->model->executeInternal());
     }
 
     public function testExecuteWithoutParam()
@@ -345,7 +345,7 @@ class SendTest extends \PHPUnit_Framework_TestCase
             ->with('noroute')
             ->willReturnSelf();
 
-        $this->assertEquals($forwardMock, $this->model->execute());
+        $this->assertEquals($forwardMock, $this->model->executeInternal());
     }
 
     public function testExecuteWithoutProduct()
@@ -377,7 +377,7 @@ class SendTest extends \PHPUnit_Framework_TestCase
             ->with('noroute')
             ->willReturnSelf();
 
-        $this->assertEquals($forwardMock, $this->model->execute());
+        $this->assertEquals($forwardMock, $this->model->executeInternal());
     }
 
     public function testExecuteWithNonVisibleProduct()
@@ -418,6 +418,6 @@ class SendTest extends \PHPUnit_Framework_TestCase
             ->with('noroute')
             ->willReturnSelf();
 
-        $this->assertEquals($forwardMock, $this->model->execute());
+        $this->assertEquals($forwardMock, $this->model->executeInternal());
     }
 }
diff --git a/app/code/Magento/SendFriend/Test/Unit/Controller/Product/SendmailTest.php b/app/code/Magento/SendFriend/Test/Unit/Controller/Product/SendmailTest.php
index 807cb8adf04..f6df2bc39b0 100644
--- a/app/code/Magento/SendFriend/Test/Unit/Controller/Product/SendmailTest.php
+++ b/app/code/Magento/SendFriend/Test/Unit/Controller/Product/SendmailTest.php
@@ -234,7 +234,7 @@ class SendmailTest extends \PHPUnit_Framework_TestCase
             ->with($productUrl)
             ->willReturnSelf();
 
-        $this->assertEquals($redirectMock, $this->model->execute());
+        $this->assertEquals($redirectMock, $this->model->executeInternal());
     }
 
     /**
@@ -361,7 +361,7 @@ class SendmailTest extends \PHPUnit_Framework_TestCase
             ->with($redirectUrl)
             ->willReturnSelf();
 
-        $this->assertEquals($redirectMock, $this->model->execute());
+        $this->assertEquals($redirectMock, $this->model->executeInternal());
     }
 
     /**
@@ -488,7 +488,7 @@ class SendmailTest extends \PHPUnit_Framework_TestCase
             ->with($redirectUrl)
             ->willReturnSelf();
 
-        $this->assertEquals($redirectMock, $this->model->execute());
+        $this->assertEquals($redirectMock, $this->model->executeInternal());
     }
 
     /**
@@ -615,7 +615,7 @@ class SendmailTest extends \PHPUnit_Framework_TestCase
             ->with($redirectUrl)
             ->willReturnSelf();
 
-        $this->assertEquals($redirectMock, $this->model->execute());
+        $this->assertEquals($redirectMock, $this->model->executeInternal());
     }
 
     /**
@@ -743,7 +743,7 @@ class SendmailTest extends \PHPUnit_Framework_TestCase
             ->with($redirectUrl)
             ->willReturnSelf();
 
-        $this->assertEquals($redirectMock, $this->model->execute());
+        $this->assertEquals($redirectMock, $this->model->executeInternal());
     }
 
     /**
@@ -799,7 +799,7 @@ class SendmailTest extends \PHPUnit_Framework_TestCase
             ->with('noroute')
             ->willReturnSelf();
 
-        $this->assertEquals($forwardMock, $this->model->execute());
+        $this->assertEquals($forwardMock, $this->model->executeInternal());
     }
 
     /**
@@ -873,7 +873,7 @@ class SendmailTest extends \PHPUnit_Framework_TestCase
             ->with('noroute')
             ->willReturnSelf();
 
-        $this->assertEquals($forwardMock, $this->model->execute());
+        $this->assertEquals($forwardMock, $this->model->executeInternal());
     }
 
     public function testExecuteWithoutFormKey()
@@ -901,6 +901,6 @@ class SendmailTest extends \PHPUnit_Framework_TestCase
             ->with('sendfriend/product/send', ['_current' => true])
             ->willReturnSelf();
 
-        $this->assertEquals($redirectMock, $this->model->execute());
+        $this->assertEquals($redirectMock, $this->model->executeInternal());
     }
 }
diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/AddComment.php b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/AddComment.php
index fb24a2a3258..d012a1d1ece 100644
--- a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/AddComment.php
+++ b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/AddComment.php
@@ -58,7 +58,7 @@ class AddComment extends \Magento\Backend\App\Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->getRequest()->setParam('shipment_id', $this->getRequest()->getParam('id'));
diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/AddTrack.php b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/AddTrack.php
index ea5ab1d9677..8a47ed1ddae 100644
--- a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/AddTrack.php
+++ b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/AddTrack.php
@@ -41,7 +41,7 @@ class AddTrack extends \Magento\Backend\App\Action
      * @return void
      * @throws \Magento\Framework\Exception\LocalizedException
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $carrier = $this->getRequest()->getPost('carrier');
diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/CreateLabel.php b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/CreateLabel.php
index facbc5192d7..faac42d270f 100644
--- a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/CreateLabel.php
+++ b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/CreateLabel.php
@@ -48,7 +48,7 @@ class CreateLabel extends \Magento\Backend\App\Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $response = new \Magento\Framework\DataObject();
         try {
diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/Email.php b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/Email.php
index 6d3bb9a49ed..e0ea65f65fd 100644
--- a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/Email.php
+++ b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/Email.php
@@ -48,7 +48,7 @@ class Email extends \Magento\Backend\App\Action
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->shipmentLoader->setOrderId($this->getRequest()->getParam('order_id'));
diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/GetShippingItemsGrid.php b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/GetShippingItemsGrid.php
index 26b2df96cb6..3c4dc9f49ee 100644
--- a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/GetShippingItemsGrid.php
+++ b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/GetShippingItemsGrid.php
@@ -41,7 +41,7 @@ class GetShippingItemsGrid extends \Magento\Backend\App\Action
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->shipmentLoader->setOrderId($this->getRequest()->getParam('order_id'));
         $this->shipmentLoader->setShipmentId($this->getRequest()->getParam('shipment_id'));
diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/NewAction.php b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/NewAction.php
index a0917b813d1..06e97644dfd 100644
--- a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/NewAction.php
+++ b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/NewAction.php
@@ -40,7 +40,7 @@ class NewAction extends \Magento\Backend\App\Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->shipmentLoader->setOrderId($this->getRequest()->getParam('order_id'));
         $this->shipmentLoader->setShipmentId($this->getRequest()->getParam('shipment_id'));
diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/PrintLabel.php b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/PrintLabel.php
index 8cf58bc151f..fb3889761fa 100644
--- a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/PrintLabel.php
+++ b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/PrintLabel.php
@@ -58,7 +58,7 @@ class PrintLabel extends \Magento\Backend\App\Action
      *
      * @return ResponseInterface|void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->shipmentLoader->setOrderId($this->getRequest()->getParam('order_id'));
diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/PrintPackage.php b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/PrintPackage.php
index d931e1e1006..db6903544d0 100644
--- a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/PrintPackage.php
+++ b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/PrintPackage.php
@@ -50,7 +50,7 @@ class PrintPackage extends \Magento\Backend\App\Action
      *
      * @return ResponseInterface|void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->shipmentLoader->setOrderId($this->getRequest()->getParam('order_id'));
         $this->shipmentLoader->setShipmentId($this->getRequest()->getParam('shipment_id'));
diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/RemoveTrack.php b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/RemoveTrack.php
index 4b85739acc0..7ef4f99eef2 100644
--- a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/RemoveTrack.php
+++ b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/RemoveTrack.php
@@ -40,7 +40,7 @@ class RemoveTrack extends \Magento\Backend\App\Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $trackId = $this->getRequest()->getParam('track_id');
         /** @var \Magento\Sales\Model\Order\Shipment\Track $track */
diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/Save.php b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/Save.php
index 0704ac04041..3e5e9a3ac2d 100644
--- a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/Save.php
+++ b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/Save.php
@@ -81,7 +81,7 @@ class Save extends \Magento\Backend\App\Action
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultRedirectFactory->create();
diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/Start.php b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/Start.php
index d4c6015870b..e5511173323 100644
--- a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/Start.php
+++ b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/Start.php
@@ -21,7 +21,7 @@ class Start extends \Magento\Backend\App\Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         /**
          * Clear old values for shipment qty's
diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/View.php b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/View.php
index 980486e3bc2..ebd8a6b111e 100644
--- a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/View.php
+++ b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/View.php
@@ -56,7 +56,7 @@ class View extends \Magento\Backend\App\Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->shipmentLoader->setOrderId($this->getRequest()->getParam('order_id'));
         $this->shipmentLoader->setShipmentId($this->getRequest()->getParam('shipment_id'));
diff --git a/app/code/Magento/Shipping/Controller/Tracking/Popup.php b/app/code/Magento/Shipping/Controller/Tracking/Popup.php
index 9ae7590bdb4..d3fb5dbe349 100644
--- a/app/code/Magento/Shipping/Controller/Tracking/Popup.php
+++ b/app/code/Magento/Shipping/Controller/Tracking/Popup.php
@@ -52,7 +52,7 @@ class Popup extends \Magento\Framework\App\Action\Action
      * @return void
      * @throws NotFoundException
      */
-    public function execute()
+    public function executeInternal()
     {
         $shippingInfoModel = $this->_shippingInfoFactory->create()->loadByHash($this->getRequest()->getParam('hash'));
         $this->_coreRegistry->register('current_shipping_info', $shippingInfoModel);
diff --git a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/AddCommentTest.php b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/AddCommentTest.php
index 6a60d69bdfe..9ab7b4844e4 100644
--- a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/AddCommentTest.php
+++ b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/AddCommentTest.php
@@ -223,7 +223,7 @@ class AddCommentTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue($resultLayoutMock));
         $this->responseMock->expects($this->once())->method('setBody')->with($result);
 
-        $this->assertNull($this->controller->execute());
+        $this->assertNull($this->controller->executeInternal());
     }
 
     /**
@@ -261,7 +261,7 @@ class AddCommentTest extends \PHPUnit_Framework_TestCase
             ->willThrowException(new \Magento\Framework\Exception\LocalizedException(__('message')));
         $this->exceptionResponse();
 
-        $this->assertNull($this->controller->execute());
+        $this->assertNull($this->controller->executeInternal());
     }
 
     /**
@@ -278,7 +278,7 @@ class AddCommentTest extends \PHPUnit_Framework_TestCase
         $this->requestMock->expects($this->once())->method('getPost')->with('comment')->will($this->returnValue([]));
         $this->exceptionResponse();
 
-        $this->assertNull($this->controller->execute());
+        $this->assertNull($this->controller->executeInternal());
     }
 
     /**
@@ -322,6 +322,6 @@ class AddCommentTest extends \PHPUnit_Framework_TestCase
         $this->shipmentMock->expects($this->once())->method('save')->will($this->throwException(new \Exception()));
         $this->exceptionResponse();
 
-        $this->assertNull($this->controller->execute());
+        $this->assertNull($this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/AddTrackTest.php b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/AddTrackTest.php
index 1abeb9d3dac..d078e532031 100644
--- a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/AddTrackTest.php
+++ b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/AddTrackTest.php
@@ -254,6 +254,6 @@ class AddTrackTest extends \PHPUnit_Framework_TestCase
         $this->response->expects($this->once())
             ->method('setBody')
             ->with($html);
-        $this->assertNull($this->controller->execute());
+        $this->assertNull($this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/CreateLabelTest.php b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/CreateLabelTest.php
index d96ba639824..a8cc7c8a3ac 100644
--- a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/CreateLabelTest.php
+++ b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/CreateLabelTest.php
@@ -179,7 +179,7 @@ class CreateLabelTest extends \PHPUnit_Framework_TestCase
         $this->messageManagerMock->expects($this->once())->method('addSuccess');
         $this->responseMock->expects($this->once())->method('representJson');
 
-        $this->assertNull($this->controller->execute());
+        $this->assertNull($this->controller->executeInternal());
     }
 
     /**
@@ -192,7 +192,7 @@ class CreateLabelTest extends \PHPUnit_Framework_TestCase
             ->willThrowException(new \Magento\Framework\Exception\LocalizedException(__('message')));
         $this->responseMock->expects($this->once())->method('representJson');
 
-        $this->assertNull($this->controller->execute());
+        $this->assertNull($this->controller->executeInternal());
     }
 
     /**
@@ -217,7 +217,7 @@ class CreateLabelTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue($logerMock));
         $this->responseMock->expects($this->once())->method('representJson');
 
-        $this->assertNull($this->controller->execute());
+        $this->assertNull($this->controller->executeInternal());
     }
 
     /**
@@ -236,6 +236,6 @@ class CreateLabelTest extends \PHPUnit_Framework_TestCase
             );
         $this->responseMock->expects($this->once())->method('representJson');
 
-        $this->assertNull($this->controller->execute());
+        $this->assertNull($this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/EmailTest.php b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/EmailTest.php
index edcdbd764a1..793763607ab 100644
--- a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/EmailTest.php
+++ b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/EmailTest.php
@@ -235,7 +235,7 @@ class EmailTest extends \PHPUnit_Framework_TestCase
         $arguments = ['shipment_id' => $shipmentId];
         $this->prepareRedirect($path, $arguments, 0);
 
-        $this->shipmentEmail->execute();
+        $this->shipmentEmail->executeInternal();
         $this->assertEquals($this->response, $this->shipmentEmail->getResponse());
     }
 
diff --git a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/GetShippingItemsGridTest.php b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/GetShippingItemsGridTest.php
index c62c9109a26..71239d0a1be 100644
--- a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/GetShippingItemsGridTest.php
+++ b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/GetShippingItemsGridTest.php
@@ -152,6 +152,6 @@ class GetShippingItemsGridTest extends \PHPUnit_Framework_TestCase
             ->method('toHtml')
             ->will($this->returnValue($result));
 
-        $this->assertNotEmpty('result-html', $this->controller->execute());
+        $this->assertNotEmpty('result-html', $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/NewActionTest.php b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/NewActionTest.php
index df9cc23823b..6179fb4eac6 100644
--- a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/NewActionTest.php
+++ b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/NewActionTest.php
@@ -282,6 +282,6 @@ class NewActionTest extends \PHPUnit_Framework_TestCase
             ->with('menu')
             ->will($this->returnValue($menuBlock));
 
-        $this->assertNull($this->newAction->execute());
+        $this->assertNull($this->newAction->executeInternal());
     }
 }
diff --git a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/PrintLabelTest.php b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/PrintLabelTest.php
index 6548503fbee..1effd8c699b 100644
--- a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/PrintLabelTest.php
+++ b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/PrintLabelTest.php
@@ -250,7 +250,7 @@ class PrintLabelTest extends \PHPUnit_Framework_TestCase
             ->method('getShippingLabel')
             ->will($this->returnValue($labelContent));
 
-        $this->assertEquals($this->fileCreate(), $this->controller->execute());
+        $this->assertEquals($this->fileCreate(), $this->controller->executeInternal());
     }
 
     /**
@@ -291,7 +291,7 @@ class PrintLabelTest extends \PHPUnit_Framework_TestCase
             ->method('getObject')
             ->will($this->returnSelf());
 
-        $this->assertEquals($this->fileCreate(), $this->controller->execute());
+        $this->assertEquals($this->fileCreate(), $this->controller->executeInternal());
     }
 
     /**
@@ -337,7 +337,7 @@ class PrintLabelTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue(1));
         $this->redirectSection();
 
-        $this->assertNull($this->controller->execute());
+        $this->assertNull($this->controller->executeInternal());
     }
 
     /**
@@ -351,6 +351,6 @@ class PrintLabelTest extends \PHPUnit_Framework_TestCase
         $this->messageManagerMock->expects($this->once())->method('addError')->will($this->returnSelf());
         $this->redirectSection();
 
-        $this->assertNull($this->controller->execute());
+        $this->assertNull($this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/PrintPackageTest.php b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/PrintPackageTest.php
index 4c6b9608d3b..05487808f92 100644
--- a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/PrintPackageTest.php
+++ b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/PrintPackageTest.php
@@ -193,7 +193,7 @@ class PrintPackageTest extends \PHPUnit_Framework_TestCase
                 'application/pdf'
             )->will($this->returnValue('result-pdf-content'));
 
-        $this->assertEquals('result-pdf-content', $this->controller->execute());
+        $this->assertEquals('result-pdf-content', $this->controller->executeInternal());
     }
 
     /**
@@ -215,6 +215,6 @@ class PrintPackageTest extends \PHPUnit_Framework_TestCase
             ->method('setIsUrlNotice')
             ->with(true);
 
-        $this->assertNull($this->controller->execute());
+        $this->assertNull($this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/RemoveTrackTest.php b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/RemoveTrackTest.php
index bb0b1d21202..37d4634c0da 100644
--- a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/RemoveTrackTest.php
+++ b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/RemoveTrackTest.php
@@ -255,7 +255,7 @@ class RemoveTrackTest extends \PHPUnit_Framework_TestCase
             ->method('setBody')
             ->with($response);
 
-        $this->assertNull($this->controller->execute());
+        $this->assertNull($this->controller->executeInternal());
     }
 
     /**
@@ -275,7 +275,7 @@ class RemoveTrackTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue($trackId));
         $this->representJson($errors);
 
-        $this->assertNull($this->controller->execute());
+        $this->assertNull($this->controller->executeInternal());
     }
 
     /**
@@ -294,7 +294,7 @@ class RemoveTrackTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue(null));
         $this->representJson($errors);
 
-        $this->assertNull($this->controller->execute());
+        $this->assertNull($this->controller->executeInternal());
     }
 
     /**
@@ -313,6 +313,6 @@ class RemoveTrackTest extends \PHPUnit_Framework_TestCase
             ->will($this->throwException(new \Exception()));
         $this->representJson($errors);
 
-        $this->assertNull($this->controller->execute());
+        $this->assertNull($this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/SaveTest.php b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/SaveTest.php
index fad9df01c37..954714bbd9a 100644
--- a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/SaveTest.php
+++ b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/SaveTest.php
@@ -249,7 +249,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             $this->shipmentLoader->expects($this->never())
                 ->method('load');
 
-            $this->assertEquals($this->resultRedirect, $this->saveAction->execute());
+            $this->assertEquals($this->resultRedirect, $this->saveAction->executeInternal());
         } else {
             $shipmentId = 1000012;
             $orderId = 10003;
@@ -345,7 +345,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
                 ->will($this->returnValue($orderId));
             $this->prepareRedirect($path, $arguments);
 
-            $this->saveAction->execute();
+            $this->saveAction->executeInternal();
             $this->assertEquals($this->response, $this->saveAction->getResponse());
         }
     }
diff --git a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/ViewTest.php b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/ViewTest.php
index 1dbf6369422..0f6aad7610e 100644
--- a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/ViewTest.php
+++ b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/ViewTest.php
@@ -187,7 +187,7 @@ class ViewTest extends \PHPUnit_Framework_TestCase
             )
             ->willReturnSelf();
 
-        $this->assertEquals($this->resultPageMock, $this->controller->execute());
+        $this->assertEquals($this->resultPageMock, $this->controller->executeInternal());
     }
 
     /**
@@ -209,7 +209,7 @@ class ViewTest extends \PHPUnit_Framework_TestCase
             ->with('noroute')
             ->willReturnSelf();
 
-        $this->assertEquals($this->resultForwardMock, $this->controller->execute());
+        $this->assertEquals($this->resultForwardMock, $this->controller->executeInternal());
     }
 
     protected function loadShipment($orderId, $shipmentId, $shipment, $tracking, $comeFrom, $returnShipment)
diff --git a/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/Delete.php b/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/Delete.php
index 70f12719c16..bdc70c0f8f8 100644
--- a/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/Delete.php
+++ b/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/Delete.php
@@ -16,7 +16,7 @@ class Delete extends \Magento\Sitemap\Controller\Adminhtml\Sitemap
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Filesystem\Directory\Write $directory */
         $directory = $this->_objectManager->get(
diff --git a/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/Edit.php b/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/Edit.php
index 47cf66a319c..87441bc1585 100644
--- a/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/Edit.php
+++ b/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/Edit.php
@@ -31,7 +31,7 @@ class Edit extends \Magento\Sitemap\Controller\Adminhtml\Sitemap
      * @return void
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         // 1. Get ID and create model
         $id = $this->getRequest()->getParam('sitemap_id');
diff --git a/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/Generate.php b/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/Generate.php
index b5a7e40d5a0..c162942061d 100644
--- a/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/Generate.php
+++ b/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/Generate.php
@@ -14,7 +14,7 @@ class Generate extends \Magento\Sitemap\Controller\Adminhtml\Sitemap
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         // init and load sitemap model
         $id = $this->getRequest()->getParam('sitemap_id');
diff --git a/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/Index.php b/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/Index.php
index 83aeca5ef8f..11b84772e32 100644
--- a/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/Index.php
+++ b/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/Index.php
@@ -15,7 +15,7 @@ class Index extends \Magento\Sitemap\Controller\Adminhtml\Sitemap
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initAction();
         $this->_view->getPage()->getConfig()->getTitle()->prepend(__('Site Map'));
diff --git a/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/NewAction.php b/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/NewAction.php
index abfba8929a0..309c00a840d 100644
--- a/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/NewAction.php
+++ b/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/NewAction.php
@@ -14,7 +14,7 @@ class NewAction extends \Magento\Sitemap\Controller\Adminhtml\Sitemap
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         // the same form is used to create and edit
         $this->_forward('edit');
diff --git a/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/Save.php b/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/Save.php
index 2f28cf98183..dd96a60dfce 100644
--- a/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/Save.php
+++ b/app/code/Magento/Sitemap/Controller/Adminhtml/Sitemap/Save.php
@@ -133,7 +133,7 @@ class Save extends \Magento\Sitemap\Controller\Adminhtml\Sitemap
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         // check if data sent
         $data = $this->getRequest()->getPostValue();
diff --git a/app/code/Magento/Sitemap/Test/Unit/Controller/Adminhtml/Sitemap/SaveTest.php b/app/code/Magento/Sitemap/Test/Unit/Controller/Adminhtml/Sitemap/SaveTest.php
index e067bf20598..c59e5ff6631 100644
--- a/app/code/Magento/Sitemap/Test/Unit/Controller/Adminhtml/Sitemap/SaveTest.php
+++ b/app/code/Magento/Sitemap/Test/Unit/Controller/Adminhtml/Sitemap/SaveTest.php
@@ -100,7 +100,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             ->with('adminhtml/*/')
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->saveController->execute());
+        $this->assertSame($this->resultRedirectMock, $this->saveController->executeInternal());
     }
 
     public function testTryToSaveInvalidDataShouldFailWithErrors()
@@ -166,6 +166,6 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             ->with('adminhtml/*/edit', ['sitemap_id' => $siteMapId])
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->saveController->execute());
+        $this->assertSame($this->resultRedirectMock, $this->saveController->executeInternal());
     }
 }
diff --git a/app/code/Magento/Store/Controller/Store/SwitchAction.php b/app/code/Magento/Store/Controller/Store/SwitchAction.php
index b527b7ad4fe..052a8fc25fb 100644
--- a/app/code/Magento/Store/Controller/Store/SwitchAction.php
+++ b/app/code/Magento/Store/Controller/Store/SwitchAction.php
@@ -68,7 +68,7 @@ class SwitchAction extends Action
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $storeCode = $this->_request->getParam(
             StoreResolver::PARAM_NAME,
diff --git a/app/code/Magento/Swagger/Controller/Index/Index.php b/app/code/Magento/Swagger/Controller/Index/Index.php
index b898836ccf3..64cd2888984 100644
--- a/app/code/Magento/Swagger/Controller/Index/Index.php
+++ b/app/code/Magento/Swagger/Controller/Index/Index.php
@@ -35,7 +35,7 @@ class Index extends \Magento\Framework\App\Action\Action
     /**
      * @return \Magento\Framework\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->pageConfig->addBodyClass('swagger-section');
         return $this->pageFactory->create();
diff --git a/app/code/Magento/Swatches/Controller/Adminhtml/Iframe/Show.php b/app/code/Magento/Swatches/Controller/Adminhtml/Iframe/Show.php
index 180a777d166..362e2c7a6c5 100644
--- a/app/code/Magento/Swatches/Controller/Adminhtml/Iframe/Show.php
+++ b/app/code/Magento/Swatches/Controller/Adminhtml/Iframe/Show.php
@@ -68,7 +68,7 @@ class Show extends \Magento\Backend\App\Action
      *
      * @return string
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $uploader = $this->uploaderFactory->create(['fileId' => 'datafile']);
diff --git a/app/code/Magento/Swatches/Controller/Ajax/Media.php b/app/code/Magento/Swatches/Controller/Ajax/Media.php
index 8827f6f4652..a487115bbc0 100644
--- a/app/code/Magento/Swatches/Controller/Ajax/Media.php
+++ b/app/code/Magento/Swatches/Controller/Ajax/Media.php
@@ -50,7 +50,7 @@ class Media extends \Magento\Framework\App\Action\Action
      *
      * @return string
      */
-    public function execute()
+    public function executeInternal()
     {
         $productMedia = [];
         if ($productId = (int)$this->getRequest()->getParam('product_id')) {
diff --git a/app/code/Magento/Swatches/Test/Unit/Controller/Adminhtml/Iframe/ShowTest.php b/app/code/Magento/Swatches/Test/Unit/Controller/Adminhtml/Iframe/ShowTest.php
index 18ec75cb966..72099cb930f 100644
--- a/app/code/Magento/Swatches/Test/Unit/Controller/Adminhtml/Iframe/ShowTest.php
+++ b/app/code/Magento/Swatches/Test/Unit/Controller/Adminhtml/Iframe/ShowTest.php
@@ -96,7 +96,7 @@ class ShowTest extends \PHPUnit_Framework_TestCase
             ->expects($this->once())
             ->method('create')
             ->will($this->throwException(new \Exception));
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     /**
@@ -132,7 +132,7 @@ class ShowTest extends \PHPUnit_Framework_TestCase
 
         $this->responseMock->expects($this->once())->method('setBody')->willReturn(json_encode($expectedResult));
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     public function dataForExecute()
diff --git a/app/code/Magento/Swatches/Test/Unit/Controller/Ajax/MediaTest.php b/app/code/Magento/Swatches/Test/Unit/Controller/Ajax/MediaTest.php
index 6358b2d5ccf..83466261a61 100644
--- a/app/code/Magento/Swatches/Test/Unit/Controller/Ajax/MediaTest.php
+++ b/app/code/Magento/Swatches/Test/Unit/Controller/Ajax/MediaTest.php
@@ -137,7 +137,7 @@ class MediaTest extends \PHPUnit_Framework_TestCase
             ->with($this->mediaGallery)
             ->will($this->returnSelf());
 
-        $result = $this->controller->execute();
+        $result = $this->controller->executeInternal();
 
         $this->assertInstanceOf('\Magento\Framework\Controller\Result\Json', $result);
     }
@@ -179,7 +179,7 @@ class MediaTest extends \PHPUnit_Framework_TestCase
             ->with($this->mediaGallery)
             ->will($this->returnSelf());
 
-        $result = $this->controller->execute();
+        $result = $this->controller->executeInternal();
 
         $this->assertInstanceOf('\Magento\Framework\Controller\Result\Json', $result);
     }
diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rate/Add.php b/app/code/Magento/Tax/Controller/Adminhtml/Rate/Add.php
index 2fe8a5b1572..a7f555a1706 100644
--- a/app/code/Magento/Tax/Controller/Adminhtml/Rate/Add.php
+++ b/app/code/Magento/Tax/Controller/Adminhtml/Rate/Add.php
@@ -15,7 +15,7 @@ class Add extends \Magento\Tax\Controller\Adminhtml\Rate
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_coreRegistry->register(
             RegistryConstants::CURRENT_TAX_RATE_FORM_DATA,
diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxDelete.php b/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxDelete.php
index 5f58a4147ac..f8a99e226f7 100644
--- a/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxDelete.php
+++ b/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxDelete.php
@@ -15,7 +15,7 @@ class AjaxDelete extends \Magento\Tax\Controller\Adminhtml\Rate
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         $rateId = (int)$this->getRequest()->getParam('tax_calculation_rate_id');
         try {
diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php b/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php
index 673ea280bab..e824a8185ac 100644
--- a/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php
+++ b/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxLoad.php
@@ -16,7 +16,7 @@ class AjaxLoad extends \Magento\Tax\Controller\Adminhtml\Rate
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $rateId = (int)$this->getRequest()->getParam('id');
         try {
diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php b/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php
index 8dd31f2ca5b..635d116a31d 100644
--- a/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php
+++ b/app/code/Magento/Tax/Controller/Adminhtml/Rate/AjaxSave.php
@@ -15,7 +15,7 @@ class AjaxSave extends \Magento\Tax\Controller\Adminhtml\Rate
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $rateData = $this->_processRateData($this->getRequest()->getPostValue());
diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rate/Delete.php b/app/code/Magento/Tax/Controller/Adminhtml/Rate/Delete.php
index c11f420db32..c6794eaf0ab 100644
--- a/app/code/Magento/Tax/Controller/Adminhtml/Rate/Delete.php
+++ b/app/code/Magento/Tax/Controller/Adminhtml/Rate/Delete.php
@@ -16,7 +16,7 @@ class Delete extends \Magento\Tax\Controller\Adminhtml\Rate
      *
      * @return \Magento\Backend\Model\View\Result\Redirect|void
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($rateId = $this->getRequest()->getParam('rate')) {
             /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rate/Edit.php b/app/code/Magento/Tax/Controller/Adminhtml/Rate/Edit.php
index e13ae2293e6..a5e2fbf1a05 100644
--- a/app/code/Magento/Tax/Controller/Adminhtml/Rate/Edit.php
+++ b/app/code/Magento/Tax/Controller/Adminhtml/Rate/Edit.php
@@ -17,7 +17,7 @@ class Edit extends \Magento\Tax\Controller\Adminhtml\Rate
      *
      * @return \Magento\Backend\Model\View\Result\Page|\Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $rateId = (int)$this->getRequest()->getParam('rate');
         $this->_coreRegistry->register(RegistryConstants::CURRENT_TAX_RATE_ID, $rateId);
diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rate/Index.php b/app/code/Magento/Tax/Controller/Adminhtml/Rate/Index.php
index d38d6ddd9af..145341f4f20 100644
--- a/app/code/Magento/Tax/Controller/Adminhtml/Rate/Index.php
+++ b/app/code/Magento/Tax/Controller/Adminhtml/Rate/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Tax\Controller\Adminhtml\Rate
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultPage = $this->initResultPage();
         $resultPage->addBreadcrumb(__('Manage Tax Rates'), __('Manage Tax Rates'));
diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rate/Save.php b/app/code/Magento/Tax/Controller/Adminhtml/Rate/Save.php
index 442940fdfc5..85cf89a9e85 100644
--- a/app/code/Magento/Tax/Controller/Adminhtml/Rate/Save.php
+++ b/app/code/Magento/Tax/Controller/Adminhtml/Rate/Save.php
@@ -16,7 +16,7 @@ class Save extends \Magento\Tax\Controller\Adminhtml\Rate
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rule/Delete.php b/app/code/Magento/Tax/Controller/Adminhtml/Rule/Delete.php
index 9d862df7d5a..7dd9f40e4df 100644
--- a/app/code/Magento/Tax/Controller/Adminhtml/Rule/Delete.php
+++ b/app/code/Magento/Tax/Controller/Adminhtml/Rule/Delete.php
@@ -13,7 +13,7 @@ class Delete extends \Magento\Tax\Controller\Adminhtml\Rule
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rule/Edit.php b/app/code/Magento/Tax/Controller/Adminhtml/Rule/Edit.php
index ebbabcf833a..89b49f16feb 100644
--- a/app/code/Magento/Tax/Controller/Adminhtml/Rule/Edit.php
+++ b/app/code/Magento/Tax/Controller/Adminhtml/Rule/Edit.php
@@ -13,7 +13,7 @@ class Edit extends \Magento\Tax\Controller\Adminhtml\Rule
     /**
      * @return \Magento\Backend\Model\View\Result\Page|\Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $taxRuleId = $this->getRequest()->getParam('rule');
         $this->_coreRegistry->register('tax_rule_id', $taxRuleId);
diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rule/Index.php b/app/code/Magento/Tax/Controller/Adminhtml/Rule/Index.php
index b3ea7586cf9..e3aab07b459 100644
--- a/app/code/Magento/Tax/Controller/Adminhtml/Rule/Index.php
+++ b/app/code/Magento/Tax/Controller/Adminhtml/Rule/Index.php
@@ -12,7 +12,7 @@ class Index extends \Magento\Tax\Controller\Adminhtml\Rule
     /**
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultPage = $this->initResultPage();
         $resultPage->getConfig()->getTitle()->prepend(__('Tax Rules'));
diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rule/NewAction.php b/app/code/Magento/Tax/Controller/Adminhtml/Rule/NewAction.php
index 79f4fa7d752..74bd5b1c57a 100644
--- a/app/code/Magento/Tax/Controller/Adminhtml/Rule/NewAction.php
+++ b/app/code/Magento/Tax/Controller/Adminhtml/Rule/NewAction.php
@@ -13,7 +13,7 @@ class NewAction extends \Magento\Tax\Controller\Adminhtml\Rule
     /**
      * @return \Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Forward $resultForward */
         $resultForward = $this->resultFactory->create(ResultFactory::TYPE_FORWARD);
diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Rule/Save.php b/app/code/Magento/Tax/Controller/Adminhtml/Rule/Save.php
index 27e75cf819b..d050cbd6773 100644
--- a/app/code/Magento/Tax/Controller/Adminhtml/Rule/Save.php
+++ b/app/code/Magento/Tax/Controller/Adminhtml/Rule/Save.php
@@ -13,7 +13,7 @@ class Save extends \Magento\Tax\Controller\Adminhtml\Rule
     /**
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Tax/AjaxDelete.php b/app/code/Magento/Tax/Controller/Adminhtml/Tax/AjaxDelete.php
index 8e5e003872d..37edd84177d 100644
--- a/app/code/Magento/Tax/Controller/Adminhtml/Tax/AjaxDelete.php
+++ b/app/code/Magento/Tax/Controller/Adminhtml/Tax/AjaxDelete.php
@@ -15,7 +15,7 @@ class AjaxDelete extends \Magento\Tax\Controller\Adminhtml\Tax
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         $classId = (int)$this->getRequest()->getParam('class_id');
         try {
diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Tax/AjaxSave.php b/app/code/Magento/Tax/Controller/Adminhtml/Tax/AjaxSave.php
index 68527988b90..92647155fbe 100644
--- a/app/code/Magento/Tax/Controller/Adminhtml/Tax/AjaxSave.php
+++ b/app/code/Magento/Tax/Controller/Adminhtml/Tax/AjaxSave.php
@@ -15,7 +15,7 @@ class AjaxSave extends \Magento\Tax\Controller\Adminhtml\Tax
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $taxClassId = (int)$this->getRequest()->getPost('class_id') ?: null;
diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Tax/IgnoreTaxNotification.php b/app/code/Magento/Tax/Controller/Adminhtml/Tax/IgnoreTaxNotification.php
index 89ab88a5965..18860dd4891 100644
--- a/app/code/Magento/Tax/Controller/Adminhtml/Tax/IgnoreTaxNotification.php
+++ b/app/code/Magento/Tax/Controller/Adminhtml/Tax/IgnoreTaxNotification.php
@@ -37,7 +37,7 @@ class IgnoreTaxNotification extends \Magento\Tax\Controller\Adminhtml\Tax
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $section = $this->getRequest()->getParam('section');
         if ($section) {
diff --git a/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportCsv.php b/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportCsv.php
index 9f6f1cb8e6b..2b23bd51aa6 100644
--- a/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportCsv.php
+++ b/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportCsv.php
@@ -16,7 +16,7 @@ class ExportCsv extends \Magento\TaxImportExport\Controller\Adminhtml\Rate
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\View\Result\Layout $resultLayout */
         $resultLayout = $this->resultFactory->create(ResultFactory::TYPE_LAYOUT);
diff --git a/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportPost.php b/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportPost.php
index dc4e8987adc..7685d61ee95 100644
--- a/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportPost.php
+++ b/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportPost.php
@@ -15,7 +15,7 @@ class ExportPost extends \Magento\TaxImportExport\Controller\Adminhtml\Rate
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         /** start csv content and set template */
         $headers = new \Magento\Framework\DataObject(
diff --git a/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportXml.php b/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportXml.php
index 38fc277576c..546980d126f 100644
--- a/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportXml.php
+++ b/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportXml.php
@@ -16,7 +16,7 @@ class ExportXml extends \Magento\TaxImportExport\Controller\Adminhtml\Rate
      *
      * @return ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\View\Result\Layout $resultLayout */
         $resultLayout = $this->resultFactory->create(ResultFactory::TYPE_LAYOUT);
diff --git a/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ImportExport.php b/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ImportExport.php
index b37520a99f8..56d479a43cf 100644
--- a/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ImportExport.php
+++ b/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ImportExport.php
@@ -14,7 +14,7 @@ class ImportExport extends \Magento\TaxImportExport\Controller\Adminhtml\Rate
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
         $resultPage = $this->resultFactory->create(ResultFactory::TYPE_PAGE);
diff --git a/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ImportPost.php b/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ImportPost.php
index eb5efff3d5e..db37d19fa26 100644
--- a/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ImportPost.php
+++ b/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ImportPost.php
@@ -14,7 +14,7 @@ class ImportPost extends \Magento\TaxImportExport\Controller\Adminhtml\Rate
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->getRequest()->isPost() && !empty($_FILES['import_rates_file']['tmp_name'])) {
             try {
diff --git a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Delete.php b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Delete.php
index 12fbe2225fa..7f29bfb7016 100644
--- a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Delete.php
+++ b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Delete.php
@@ -15,7 +15,7 @@ class Delete extends \Magento\Theme\Controller\Adminhtml\System\Design\Theme
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $themeId = $this->getRequest()->getParam('id');
         try {
diff --git a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/DownloadCss.php b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/DownloadCss.php
index 0113c1c59a4..badb051def8 100644
--- a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/DownloadCss.php
+++ b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/DownloadCss.php
@@ -16,7 +16,7 @@ class DownloadCss extends \Magento\Theme\Controller\Adminhtml\System\Design\Them
      *
      * @return ResponseInterface|void
      */
-    public function execute()
+    public function executeInternal()
     {
         $themeId = $this->getRequest()->getParam('theme_id');
         $file = $this->getRequest()->getParam('file');
diff --git a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/DownloadCustomCss.php b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/DownloadCustomCss.php
index 8653fa797f1..6432c23db6d 100644
--- a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/DownloadCustomCss.php
+++ b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/DownloadCustomCss.php
@@ -16,7 +16,7 @@ class DownloadCustomCss extends \Magento\Theme\Controller\Adminhtml\System\Desig
      *
      * @return ResponseInterface|void
      */
-    public function execute()
+    public function executeInternal()
     {
         $themeId = $this->getRequest()->getParam('theme_id');
         try {
diff --git a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Edit.php b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Edit.php
index 367958d22fb..2b8f9853de7 100644
--- a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Edit.php
+++ b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Edit.php
@@ -13,7 +13,7 @@ class Edit extends \Magento\Theme\Controller\Adminhtml\System\Design\Theme
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $themeId = (int)$this->getRequest()->getParam('id');
         /** @var $theme \Magento\Framework\View\Design\ThemeInterface */
diff --git a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Grid.php b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Grid.php
index e49cdb3e883..8a8fb29abc4 100644
--- a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Grid.php
+++ b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Grid.php
@@ -13,7 +13,7 @@ class Grid extends \Magento\Theme\Controller\Adminhtml\System\Design\Theme
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout(false);
         $this->_view->renderLayout();
diff --git a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Index.php b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Index.php
index 8216660eab1..599b0127302 100644
--- a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Index.php
+++ b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Theme\Controller\Adminhtml\System\Design\Theme
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $this->_setActiveMenu('Magento_Theme::system_design_theme');
diff --git a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/NewAction.php b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/NewAction.php
index 8e930a8c55d..f699769c615 100644
--- a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/NewAction.php
+++ b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/NewAction.php
@@ -13,7 +13,7 @@ class NewAction extends \Magento\Theme\Controller\Adminhtml\System\Design\Theme
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_forward('edit');
     }
diff --git a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Save.php b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Save.php
index c3fabcb4d02..6bb049c8be3 100644
--- a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Save.php
+++ b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/Save.php
@@ -14,7 +14,7 @@ class Save extends \Magento\Theme\Controller\Adminhtml\System\Design\Theme
      * @return void
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         $redirectBack = (bool)$this->getRequest()->getParam('back', false);
         $themeData = $this->getRequest()->getParam('theme');
diff --git a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/UploadCss.php b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/UploadCss.php
index c201adf38e9..d576899f2dc 100644
--- a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/UploadCss.php
+++ b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/UploadCss.php
@@ -13,7 +13,7 @@ class UploadCss extends \Magento\Theme\Controller\Adminhtml\System\Design\Theme
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var $serviceModel \Magento\Theme\Model\Uploader\Service */
         $serviceModel = $this->_objectManager->get('Magento\Theme\Model\Uploader\Service');
diff --git a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/UploadJs.php b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/UploadJs.php
index 58cf189c86f..84800872fc3 100644
--- a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/UploadJs.php
+++ b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Theme/UploadJs.php
@@ -14,7 +14,7 @@ class UploadJs extends \Magento\Theme\Controller\Adminhtml\System\Design\Theme
      * @return void
      * @throws \Magento\Framework\Exception\LocalizedException
      */
-    public function execute()
+    public function executeInternal()
     {
         $themeId = $this->getRequest()->getParam('id');
         /** @var $serviceModel \Magento\Theme\Model\Uploader\Service */
diff --git a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/Contents.php b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/Contents.php
index abc3ebd705a..21fbd7eaa2b 100644
--- a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/Contents.php
+++ b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/Contents.php
@@ -13,7 +13,7 @@ class Contents extends \Magento\Theme\Controller\Adminhtml\System\Design\Wysiwyg
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->_view->loadLayout('empty');
diff --git a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/DeleteFiles.php b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/DeleteFiles.php
index 2b59d4bba3b..4f3a4fda4ac 100644
--- a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/DeleteFiles.php
+++ b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/DeleteFiles.php
@@ -14,7 +14,7 @@ class DeleteFiles extends \Magento\Theme\Controller\Adminhtml\System\Design\Wysi
      * @return void
      * @throws \Exception
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             if (!$this->getRequest()->isPost()) {
diff --git a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/DeleteFolder.php b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/DeleteFolder.php
index 4958a6b3909..6c6258e7f52 100644
--- a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/DeleteFolder.php
+++ b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/DeleteFolder.php
@@ -13,7 +13,7 @@ class DeleteFolder extends \Magento\Theme\Controller\Adminhtml\System\Design\Wys
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $path = $this->storage->getCurrentPath();
diff --git a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/Index.php b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/Index.php
index 7abdd3ee5ec..7584377ecce 100644
--- a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/Index.php
+++ b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Theme\Controller\Adminhtml\System\Design\Wysiwyg\Fi
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout('overlay_popup');
         $this->_view->renderLayout();
diff --git a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/NewFolder.php b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/NewFolder.php
index 018e8194f37..119a5b8b9ca 100644
--- a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/NewFolder.php
+++ b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/NewFolder.php
@@ -13,7 +13,7 @@ class NewFolder extends \Magento\Theme\Controller\Adminhtml\System\Design\Wysiwy
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $name = $this->getRequest()->getPost('name');
         try {
diff --git a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/OnInsert.php b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/OnInsert.php
index 92ef5e7bdc5..32ff7003905 100644
--- a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/OnInsert.php
+++ b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/OnInsert.php
@@ -13,7 +13,7 @@ class OnInsert extends \Magento\Theme\Controller\Adminhtml\System\Design\Wysiwyg
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var $helperStorage \Magento\Theme\Helper\Storage */
         $helperStorage = $this->_objectManager->get('Magento\Theme\Helper\Storage');
diff --git a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/PreviewImage.php b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/PreviewImage.php
index d8f050d8d3f..cab5e4b78d6 100644
--- a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/PreviewImage.php
+++ b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/PreviewImage.php
@@ -16,7 +16,7 @@ class PreviewImage extends \Magento\Theme\Controller\Adminhtml\System\Design\Wys
      *
      * @return ResponseInterface|void
      */
-    public function execute()
+    public function executeInternal()
     {
         $file = $this->getRequest()->getParam('file');
         /** @var $helper \Magento\Theme\Helper\Storage */
diff --git a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/TreeJson.php b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/TreeJson.php
index d3d8a244e73..3e789134e26 100644
--- a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/TreeJson.php
+++ b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/TreeJson.php
@@ -13,7 +13,7 @@ class TreeJson extends \Magento\Theme\Controller\Adminhtml\System\Design\Wysiwyg
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->getResponse()->representJson(
diff --git a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/Upload.php b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/Upload.php
index 877b0fc83d9..420083086ed 100644
--- a/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/Upload.php
+++ b/app/code/Magento/Theme/Controller/Adminhtml/System/Design/Wysiwyg/Files/Upload.php
@@ -13,7 +13,7 @@ class Upload extends \Magento\Theme\Controller\Adminhtml\System\Design\Wysiwyg\F
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $path = $this->storage->getCurrentPath();
diff --git a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/DeleteTest.php b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/DeleteTest.php
index 4323967aa47..86f88c71aee 100644
--- a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/DeleteTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/DeleteTest.php
@@ -147,7 +147,7 @@ class DeleteTest extends \PHPUnit_Framework_TestCase
             ->with($path)
             ->willReturnSelf();
 
-        $this->assertInstanceOf('Magento\Framework\Controller\Result\Redirect', $this->controller->execute());
+        $this->assertInstanceOf('Magento\Framework\Controller\Result\Redirect', $this->controller->executeInternal());
     }
 
     /**
@@ -218,7 +218,7 @@ class DeleteTest extends \PHPUnit_Framework_TestCase
         $logger->expects($this->once())
             ->method('critical');
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     /**
@@ -255,6 +255,6 @@ class DeleteTest extends \PHPUnit_Framework_TestCase
         $this->messageManager->expects($this->once())
             ->method('addError');
 
-        $this->assertInstanceOf('Magento\Framework\Controller\Result\Redirect', $this->controller->execute());
+        $this->assertInstanceOf('Magento\Framework\Controller\Result\Redirect', $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/DownloadCssTest.php b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/DownloadCssTest.php
index 5beef00b2ae..e9b058c7bdf 100644
--- a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/DownloadCssTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/DownloadCssTest.php
@@ -186,7 +186,7 @@ class DownloadCssTest extends \PHPUnit_Framework_TestCase
             ->with($relPath, ['type' => 'filename', 'value' => $relPath], DirectoryList::ROOT)
             ->willReturn($this->getMockBuilder('Magento\Framework\App\ResponseInterface')->getMock());
 
-        $this->assertInstanceOf('Magento\Framework\App\ResponseInterface', $this->controller->execute());
+        $this->assertInstanceOf('Magento\Framework\App\ResponseInterface', $this->controller->executeInternal());
     }
 
     public function testExecuteInvalidArgument()
@@ -243,6 +243,6 @@ class DownloadCssTest extends \PHPUnit_Framework_TestCase
             ->method('setRedirect')
             ->with($refererUrl);
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/DownloadCustomCssTest.php b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/DownloadCustomCssTest.php
index 891f455ee1d..04f013fb5e3 100644
--- a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/DownloadCustomCssTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/DownloadCustomCssTest.php
@@ -173,7 +173,7 @@ class DownloadCustomCssTest extends \PHPUnit_Framework_TestCase
             ->with($fileName, ['type' => 'filename', 'value' => $fullPath], DirectoryList::ROOT)
             ->willReturn($this->getMockBuilder('Magento\Framework\App\ResponseInterface')->getMock());
 
-        $this->assertInstanceOf('Magento\Framework\App\ResponseInterface', $this->controller->execute());
+        $this->assertInstanceOf('Magento\Framework\App\ResponseInterface', $this->controller->executeInternal());
     }
 
     public function testExecuteInvalidArgument()
@@ -213,6 +213,6 @@ class DownloadCustomCssTest extends \PHPUnit_Framework_TestCase
             ->method('setRedirect')
             ->with($refererUrl);
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/EditTest.php b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/EditTest.php
index eac3f24f2fe..d9481c4ccc2 100644
--- a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/EditTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/EditTest.php
@@ -59,7 +59,7 @@ class EditTest extends \Magento\Theme\Test\Unit\Controller\Adminhtml\System\Desi
             ->method('getUrl')
             ->willReturn('http://return.url');
 
-        $this->_model->execute();
+        $this->_model->executeInternal();
     }
 
     public function testExecuteWithException()
@@ -125,7 +125,7 @@ class EditTest extends \Magento\Theme\Test\Unit\Controller\Adminhtml\System\Desi
             ->method('getUrl')
             ->willReturn('http://return.url');
 
-        $this->_model->execute();
+        $this->_model->executeInternal();
     }
 
     /**
@@ -245,6 +245,6 @@ class EditTest extends \Magento\Theme\Test\Unit\Controller\Adminhtml\System\Desi
         $this->view->expects($this->once())
             ->method('renderLayout');
 
-        $this->_model->execute();
+        $this->_model->executeInternal();
     }
 }
diff --git a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/IndexTest.php b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/IndexTest.php
index d504277d57f..a3cf13f6fd4 100644
--- a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/IndexTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/IndexTest.php
@@ -40,6 +40,6 @@ class IndexTest extends \Magento\Theme\Test\Unit\Controller\Adminhtml\System\Des
             ->method('getLayout')
             ->will($this->returnValue($layout));
 
-        $this->_model->execute();
+        $this->_model->executeInternal();
     }
 }
diff --git a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/SaveTest.php b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/SaveTest.php
index 524dad54b8c..c260a330d23 100644
--- a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/SaveTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/SaveTest.php
@@ -85,6 +85,6 @@ class SaveTest extends \Magento\Theme\Test\Unit\Controller\Adminhtml\System\Desi
             ->with('Magento\Theme\Model\Theme\SingleFile')
             ->will($this->returnValue(null));
 
-        $this->_model->execute();
+        $this->_model->executeInternal();
     }
 }
diff --git a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/UploadCssTest.php b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/UploadCssTest.php
index 1529c56175f..a90289e9062 100644
--- a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/UploadCssTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/UploadCssTest.php
@@ -39,7 +39,7 @@ class UploadCssTest extends \Magento\Theme\Test\Unit\Controller\Adminhtml\System
             ->method('representJson')
             ->with('{"filename":"filename","content":"content"}');
 
-        $this->_model->execute();
+        $this->_model->executeInternal();
     }
 
     public function testExecuteWithLocalizedException()
@@ -67,7 +67,7 @@ class UploadCssTest extends \Magento\Theme\Test\Unit\Controller\Adminhtml\System
             ->with('Magento\Framework\Json\Helper\Data')
             ->willReturn($jsonData);
 
-        $this->_model->execute();
+        $this->_model->executeInternal();
     }
 
     public function testExecuteWithException()
@@ -103,6 +103,6 @@ class UploadCssTest extends \Magento\Theme\Test\Unit\Controller\Adminhtml\System
             ->with('Magento\Framework\Json\Helper\Data')
             ->willReturn($jsonData);
 
-        $this->_model->execute();
+        $this->_model->executeInternal();
     }
 }
diff --git a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/UploadJsTest.php b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/UploadJsTest.php
index 6dbfdd62e0c..271b084f5f6 100644
--- a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/UploadJsTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/UploadJsTest.php
@@ -99,7 +99,7 @@ class UploadJsTest extends \Magento\Theme\Test\Unit\Controller\Adminhtml\System\
             ->method('representJson')
             ->with('{"error":"true","message":"We cannot find a theme with id "' . $themeId . '"."}');
 
-        $this->_model->execute();
+        $this->_model->executeInternal();
     }
 
     public function testExecuteWithException()
@@ -149,7 +149,7 @@ class UploadJsTest extends \Magento\Theme\Test\Unit\Controller\Adminhtml\System\
             ->method('representJson')
             ->with('{"error":"true","message":"We can\'t upload the JS file right now."}');
 
-        $this->_model->execute();
+        $this->_model->executeInternal();
     }
 
     public function testExecute()
@@ -244,6 +244,6 @@ class UploadJsTest extends \Magento\Theme\Test\Unit\Controller\Adminhtml\System\
             ->method('representJson')
             ->with('{"error":false,"files":{"fileOne":{"name":"name"}}}');
 
-        $this->_model->execute();
+        $this->_model->executeInternal();
     }
 }
diff --git a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Wysiwyg/Files/ContentsTest.php b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Wysiwyg/Files/ContentsTest.php
index 42292699b7d..5251dcc759e 100644
--- a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Wysiwyg/Files/ContentsTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Wysiwyg/Files/ContentsTest.php
@@ -96,6 +96,6 @@ class ContentsTest extends \PHPUnit_Framework_TestCase
         $this->response->expects($this->once())
             ->method('representJson');
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Wysiwyg/Files/DeleteFilesTest.php b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Wysiwyg/Files/DeleteFilesTest.php
index 2a69f64be34..3a34f63df2c 100644
--- a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Wysiwyg/Files/DeleteFilesTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Wysiwyg/Files/DeleteFilesTest.php
@@ -69,7 +69,7 @@ class DeleteFilesTest extends \PHPUnit_Framework_TestCase
             ->method('representJson')
             ->with('{"error":"true","message":"Wrong request"}');
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     public function testExecute()
@@ -99,6 +99,6 @@ class DeleteFilesTest extends \PHPUnit_Framework_TestCase
             ->method('deleteFile')
             ->with('file');
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Wysiwyg/Files/DeleteFolderTest.php b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Wysiwyg/Files/DeleteFolderTest.php
index 9bd042cfe2e..2c6b5f2e642 100644
--- a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Wysiwyg/Files/DeleteFolderTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Wysiwyg/Files/DeleteFolderTest.php
@@ -66,6 +66,6 @@ class DeleteFolderTest extends \PHPUnit_Framework_TestCase
             ->with('Magento\Framework\Json\Helper\Data')
             ->willReturn($jsonData);
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Wysiwyg/Files/IndexTest.php b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Wysiwyg/Files/IndexTest.php
index 63884649f39..cf913494623 100644
--- a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Wysiwyg/Files/IndexTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Wysiwyg/Files/IndexTest.php
@@ -34,6 +34,6 @@ class IndexTest extends \PHPUnit_Framework_TestCase
         $this->view ->expects($this->once())
             ->method('renderLayout');
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Wysiwyg/Files/OnInsertTest.php b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Wysiwyg/Files/OnInsertTest.php
index 0061013ed72..48c23d765c2 100644
--- a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Wysiwyg/Files/OnInsertTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Wysiwyg/Files/OnInsertTest.php
@@ -54,6 +54,6 @@ class OnInsertTest extends \PHPUnit_Framework_TestCase
             ->method('setBody')
             ->with('http://relative.url/');
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Translation/Controller/Ajax/Index.php b/app/code/Magento/Translation/Controller/Ajax/Index.php
index 190b4046b46..08c1fc1bce1 100644
--- a/app/code/Magento/Translation/Controller/Ajax/Index.php
+++ b/app/code/Magento/Translation/Controller/Ajax/Index.php
@@ -31,7 +31,7 @@ class Index extends \Magento\Framework\App\Action\Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $translate = (array)$this->getRequest()->getPost('translate');
 
diff --git a/app/code/Magento/Ui/Controller/Adminhtml/AbstractAction.php b/app/code/Magento/Ui/Controller/Adminhtml/AbstractAction.php
index f6ab7eed8e1..442f875e23a 100644
--- a/app/code/Magento/Ui/Controller/Adminhtml/AbstractAction.php
+++ b/app/code/Magento/Ui/Controller/Adminhtml/AbstractAction.php
@@ -57,7 +57,7 @@ abstract class AbstractAction extends Action implements UiActionInterface
      */
     public function executeAjaxRequest()
     {
-        $this->execute();
+        $this->executeInternal();
     }
 
     /**
diff --git a/app/code/Magento/Ui/Controller/Adminhtml/Bookmark/Delete.php b/app/code/Magento/Ui/Controller/Adminhtml/Bookmark/Delete.php
index 6a2bdccd510..a4192d50134 100644
--- a/app/code/Magento/Ui/Controller/Adminhtml/Bookmark/Delete.php
+++ b/app/code/Magento/Ui/Controller/Adminhtml/Bookmark/Delete.php
@@ -48,7 +48,7 @@ class Delete extends AbstractAction
      *
      * @return void
      */
-    protected function execute()
+    protected function executeInternal()
     {
         $viewIds = explode('.', $this->_request->getParam('data'));
         $bookmark = $this->bookmarkManagement->getByIdentifierNamespace(
diff --git a/app/code/Magento/Ui/Controller/Adminhtml/Bookmark/Save.php b/app/code/Magento/Ui/Controller/Adminhtml/Bookmark/Save.php
index bde48047b77..55568937e97 100644
--- a/app/code/Magento/Ui/Controller/Adminhtml/Bookmark/Save.php
+++ b/app/code/Magento/Ui/Controller/Adminhtml/Bookmark/Save.php
@@ -87,7 +87,7 @@ class Save extends AbstractAction
      *
      * @return void
      */
-    protected function execute()
+    protected function executeInternal()
     {
         $bookmark = $this->bookmarkFactory->create();
         $jsonData = $this->_request->getParam('data');
diff --git a/app/code/Magento/Ui/Controller/Adminhtml/Export/GridToCsv.php b/app/code/Magento/Ui/Controller/Adminhtml/Export/GridToCsv.php
index 158f90512c6..2c0b22699f7 100644
--- a/app/code/Magento/Ui/Controller/Adminhtml/Export/GridToCsv.php
+++ b/app/code/Magento/Ui/Controller/Adminhtml/Export/GridToCsv.php
@@ -46,7 +46,7 @@ class GridToCsv extends Action
      * @throws \Magento\Framework\Exception\LocalizedException
      * @return \Magento\Framework\App\ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         return $this->fileFactory->create('export.csv', $this->converter->getCsvFile(), 'var');
     }
diff --git a/app/code/Magento/Ui/Controller/Adminhtml/Export/GridToXml.php b/app/code/Magento/Ui/Controller/Adminhtml/Export/GridToXml.php
index f4de9d2da2b..c999f3f8fcd 100644
--- a/app/code/Magento/Ui/Controller/Adminhtml/Export/GridToXml.php
+++ b/app/code/Magento/Ui/Controller/Adminhtml/Export/GridToXml.php
@@ -46,7 +46,7 @@ class GridToXml extends Action
      * @throws \Magento\Framework\Exception\LocalizedException
      * @return \Magento\Framework\App\ResponseInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         return $this->fileFactory->create('export.xml', $this->converter->getXmlFile(), 'var');
     }
diff --git a/app/code/Magento/Ui/Controller/Adminhtml/Index/Render.php b/app/code/Magento/Ui/Controller/Adminhtml/Index/Render.php
index bd431cf33f4..f43135b162e 100644
--- a/app/code/Magento/Ui/Controller/Adminhtml/Index/Render.php
+++ b/app/code/Magento/Ui/Controller/Adminhtml/Index/Render.php
@@ -20,7 +20,7 @@ class Render extends AbstractAction
      *
      * @return void
      */
-    protected function execute()
+    protected function executeInternal()
     {
         $component = $this->factory->create($this->_request->getParam('namespace'));
         $this->prepareComponent($component);
diff --git a/app/code/Magento/Ui/Test/Unit/Controller/Adminhtml/Export/GridToCsvTest.php b/app/code/Magento/Ui/Test/Unit/Controller/Adminhtml/Export/GridToCsvTest.php
index ad295672a6c..daf5ba76d67 100644
--- a/app/code/Magento/Ui/Test/Unit/Controller/Adminhtml/Export/GridToCsvTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Controller/Adminhtml/Export/GridToCsvTest.php
@@ -66,6 +66,6 @@ class GridToCsvTest extends \PHPUnit_Framework_TestCase
             ->with('export.csv', $content, 'var')
             ->willReturn($content);
 
-        $this->assertEquals($content, $this->controller->execute());
+        $this->assertEquals($content, $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Ui/Test/Unit/Controller/Adminhtml/Export/GridToXmlTest.php b/app/code/Magento/Ui/Test/Unit/Controller/Adminhtml/Export/GridToXmlTest.php
index 427a14e42dd..c0314e99c13 100644
--- a/app/code/Magento/Ui/Test/Unit/Controller/Adminhtml/Export/GridToXmlTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Controller/Adminhtml/Export/GridToXmlTest.php
@@ -66,6 +66,6 @@ class GridToXmlTest extends \PHPUnit_Framework_TestCase
             ->with('export.xml', $content, 'var')
             ->willReturn($content);
 
-        $this->assertEquals($content, $this->controller->execute());
+        $this->assertEquals($content, $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/CategoriesJson.php b/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/CategoriesJson.php
index 2bc1ea519da..891ee3a1bbd 100644
--- a/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/CategoriesJson.php
+++ b/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/CategoriesJson.php
@@ -13,7 +13,7 @@ class CategoriesJson extends \Magento\UrlRewrite\Controller\Adminhtml\Url\Rewrit
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $categoryId = $this->getRequest()->getParam('id', null);
         $this->getResponse()->setBody(
diff --git a/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/CmsPageGrid.php b/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/CmsPageGrid.php
index d277c5781bd..9d7668e61a0 100644
--- a/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/CmsPageGrid.php
+++ b/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/CmsPageGrid.php
@@ -13,7 +13,7 @@ class CmsPageGrid extends \Magento\UrlRewrite\Controller\Adminhtml\Url\Rewrite
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->getResponse()->setBody(
             $this->_view->getLayout()->createBlock('Magento\UrlRewrite\Block\Cms\Page\Grid')->toHtml()
diff --git a/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/Delete.php b/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/Delete.php
index a0ed60907fd..f916999158d 100644
--- a/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/Delete.php
+++ b/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/Delete.php
@@ -13,7 +13,7 @@ class Delete extends \Magento\UrlRewrite\Controller\Adminhtml\Url\Rewrite
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->_getUrlRewrite()->getId()) {
             try {
diff --git a/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/Edit.php b/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/Edit.php
index 3d172de7402..1a84bdb99d3 100644
--- a/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/Edit.php
+++ b/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/Edit.php
@@ -43,7 +43,7 @@ class Edit extends \Magento\UrlRewrite\Controller\Adminhtml\Url\Rewrite
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $this->_setActiveMenu('Magento_UrlRewrite::urlrewrite');
diff --git a/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/Index.php b/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/Index.php
index 13c87edc4ed..55c42bec9df 100644
--- a/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/Index.php
+++ b/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\UrlRewrite\Controller\Adminhtml\Url\Rewrite
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $this->_setActiveMenu('Magento_UrlRewrite::urlrewrite');
diff --git a/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/ProductGrid.php b/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/ProductGrid.php
index 42c14184066..e6c72584937 100644
--- a/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/ProductGrid.php
+++ b/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/ProductGrid.php
@@ -13,7 +13,7 @@ class ProductGrid extends \Magento\UrlRewrite\Controller\Adminhtml\Url\Rewrite
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->getResponse()->setBody(
             $this->_view->getLayout()->createBlock('Magento\UrlRewrite\Block\Catalog\Product\Grid')->toHtml()
diff --git a/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/Save.php b/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/Save.php
index 951b0885f72..a8da825fc50 100644
--- a/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/Save.php
+++ b/app/code/Magento/UrlRewrite/Controller/Adminhtml/Url/Rewrite/Save.php
@@ -136,7 +136,7 @@ class Save extends \Magento\UrlRewrite\Controller\Adminhtml\Url\Rewrite
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $data = $this->getRequest()->getPostValue();
         if ($data) {
diff --git a/app/code/Magento/User/Controller/Adminhtml/Auth/Forgotpassword.php b/app/code/Magento/User/Controller/Adminhtml/Auth/Forgotpassword.php
index ca30b16916e..82519182fda 100644
--- a/app/code/Magento/User/Controller/Adminhtml/Auth/Forgotpassword.php
+++ b/app/code/Magento/User/Controller/Adminhtml/Auth/Forgotpassword.php
@@ -13,7 +13,7 @@ class Forgotpassword extends \Magento\User\Controller\Adminhtml\Auth
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $email = (string)$this->getRequest()->getParam('email');
         $params = $this->getRequest()->getParams();
diff --git a/app/code/Magento/User/Controller/Adminhtml/Auth/ResetPassword.php b/app/code/Magento/User/Controller/Adminhtml/Auth/ResetPassword.php
index b39d7c84007..b3d5e52303f 100644
--- a/app/code/Magento/User/Controller/Adminhtml/Auth/ResetPassword.php
+++ b/app/code/Magento/User/Controller/Adminhtml/Auth/ResetPassword.php
@@ -15,7 +15,7 @@ class ResetPassword extends \Magento\User\Controller\Adminhtml\Auth
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $passwordResetToken = (string)$this->getRequest()->getQuery('token');
         $userId = (int)$this->getRequest()->getQuery('id');
diff --git a/app/code/Magento/User/Controller/Adminhtml/Auth/ResetPasswordPost.php b/app/code/Magento/User/Controller/Adminhtml/Auth/ResetPasswordPost.php
index bae69c2415f..5e65f610303 100644
--- a/app/code/Magento/User/Controller/Adminhtml/Auth/ResetPasswordPost.php
+++ b/app/code/Magento/User/Controller/Adminhtml/Auth/ResetPasswordPost.php
@@ -15,7 +15,7 @@ class ResetPasswordPost extends \Magento\User\Controller\Adminhtml\Auth
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $passwordResetToken = (string)$this->getRequest()->getQuery('token');
         $userId = (int)$this->getRequest()->getQuery('id');
diff --git a/app/code/Magento/User/Controller/Adminhtml/Locks/Grid.php b/app/code/Magento/User/Controller/Adminhtml/Locks/Grid.php
index 971b87791f6..1eaa4e05d5a 100644
--- a/app/code/Magento/User/Controller/Adminhtml/Locks/Grid.php
+++ b/app/code/Magento/User/Controller/Adminhtml/Locks/Grid.php
@@ -16,7 +16,7 @@ class Grid extends \Magento\User\Controller\Adminhtml\Locks
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout(false);
         $this->_view->renderLayout();
diff --git a/app/code/Magento/User/Controller/Adminhtml/Locks/Index.php b/app/code/Magento/User/Controller/Adminhtml/Locks/Index.php
index b3e9f092fd1..f3ce5beda60 100644
--- a/app/code/Magento/User/Controller/Adminhtml/Locks/Index.php
+++ b/app/code/Magento/User/Controller/Adminhtml/Locks/Index.php
@@ -16,7 +16,7 @@ class Index extends \Magento\User\Controller\Adminhtml\Locks
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $this->_setActiveMenu('Magento_User::system_acl_locks');
diff --git a/app/code/Magento/User/Controller/Adminhtml/Locks/MassUnlock.php b/app/code/Magento/User/Controller/Adminhtml/Locks/MassUnlock.php
index bf515568539..ba0621b1d70 100644
--- a/app/code/Magento/User/Controller/Adminhtml/Locks/MassUnlock.php
+++ b/app/code/Magento/User/Controller/Adminhtml/Locks/MassUnlock.php
@@ -18,7 +18,7 @@ class MassUnlock extends \Magento\User\Controller\Adminhtml\Locks
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             // unlock users
diff --git a/app/code/Magento/User/Controller/Adminhtml/User/Delete.php b/app/code/Magento/User/Controller/Adminhtml/User/Delete.php
index 748e44e4fc2..576138df5cf 100644
--- a/app/code/Magento/User/Controller/Adminhtml/User/Delete.php
+++ b/app/code/Magento/User/Controller/Adminhtml/User/Delete.php
@@ -11,7 +11,7 @@ class Delete extends \Magento\User\Controller\Adminhtml\User
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $currentUser = $this->_objectManager->get('Magento\Backend\Model\Auth\Session')->getUser();
 
diff --git a/app/code/Magento/User/Controller/Adminhtml/User/Edit.php b/app/code/Magento/User/Controller/Adminhtml/User/Edit.php
index 39ac43d5539..c74f350c79f 100644
--- a/app/code/Magento/User/Controller/Adminhtml/User/Edit.php
+++ b/app/code/Magento/User/Controller/Adminhtml/User/Edit.php
@@ -13,7 +13,7 @@ class Edit extends \Magento\User\Controller\Adminhtml\User
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $userId = $this->getRequest()->getParam('user_id');
         /** @var \Magento\User\Model\User $model */
diff --git a/app/code/Magento/User/Controller/Adminhtml/User/Index.php b/app/code/Magento/User/Controller/Adminhtml/User/Index.php
index 875b26fcaf2..214b634c06f 100644
--- a/app/code/Magento/User/Controller/Adminhtml/User/Index.php
+++ b/app/code/Magento/User/Controller/Adminhtml/User/Index.php
@@ -11,7 +11,7 @@ class Index extends \Magento\User\Controller\Adminhtml\User
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initAction();
         $this->_view->getPage()->getConfig()->getTitle()->prepend(__('Users'));
diff --git a/app/code/Magento/User/Controller/Adminhtml/User/InvalidateToken.php b/app/code/Magento/User/Controller/Adminhtml/User/InvalidateToken.php
index adc326644ef..611b2a42890 100644
--- a/app/code/Magento/User/Controller/Adminhtml/User/InvalidateToken.php
+++ b/app/code/Magento/User/Controller/Adminhtml/User/InvalidateToken.php
@@ -40,7 +40,7 @@ class InvalidateToken extends \Magento\User\Controller\Adminhtml\User
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($userId = $this->getRequest()->getParam('user_id')) {
             try {
diff --git a/app/code/Magento/User/Controller/Adminhtml/User/NewAction.php b/app/code/Magento/User/Controller/Adminhtml/User/NewAction.php
index 38cb07dae87..598d3b5c3d3 100644
--- a/app/code/Magento/User/Controller/Adminhtml/User/NewAction.php
+++ b/app/code/Magento/User/Controller/Adminhtml/User/NewAction.php
@@ -11,7 +11,7 @@ class NewAction extends \Magento\User\Controller\Adminhtml\User
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_forward('edit');
     }
diff --git a/app/code/Magento/User/Controller/Adminhtml/User/Role/Delete.php b/app/code/Magento/User/Controller/Adminhtml/User/Role/Delete.php
index 1a8060e1e23..fefed2867c4 100644
--- a/app/code/Magento/User/Controller/Adminhtml/User/Role/Delete.php
+++ b/app/code/Magento/User/Controller/Adminhtml/User/Role/Delete.php
@@ -15,7 +15,7 @@ class Delete extends \Magento\User\Controller\Adminhtml\User\Role
      *
      * @return \Magento\Backend\Model\View\Result\Redirect|void
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
diff --git a/app/code/Magento/User/Controller/Adminhtml/User/Role/EditRole.php b/app/code/Magento/User/Controller/Adminhtml/User/Role/EditRole.php
index 21aef671de9..a8950a9d711 100644
--- a/app/code/Magento/User/Controller/Adminhtml/User/Role/EditRole.php
+++ b/app/code/Magento/User/Controller/Adminhtml/User/Role/EditRole.php
@@ -13,7 +13,7 @@ class EditRole extends \Magento\User\Controller\Adminhtml\User\Role
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $role = $this->_initRole();
         $this->_initAction();
diff --git a/app/code/Magento/User/Controller/Adminhtml/User/Role/Editrolegrid.php b/app/code/Magento/User/Controller/Adminhtml/User/Role/Editrolegrid.php
index ac6cf5350bd..053c65a4dca 100644
--- a/app/code/Magento/User/Controller/Adminhtml/User/Role/Editrolegrid.php
+++ b/app/code/Magento/User/Controller/Adminhtml/User/Role/Editrolegrid.php
@@ -13,7 +13,7 @@ class Editrolegrid extends \Magento\User\Controller\Adminhtml\User\Role
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout();
         $this->_view->renderLayout();
diff --git a/app/code/Magento/User/Controller/Adminhtml/User/Role/Index.php b/app/code/Magento/User/Controller/Adminhtml/User/Role/Index.php
index fe9c5c61382..ce8f462264e 100644
--- a/app/code/Magento/User/Controller/Adminhtml/User/Role/Index.php
+++ b/app/code/Magento/User/Controller/Adminhtml/User/Role/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\User\Controller\Adminhtml\User\Role
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initAction();
         $this->_view->getPage()->getConfig()->getTitle()->prepend(__('Roles'));
diff --git a/app/code/Magento/User/Controller/Adminhtml/User/Role/RoleGrid.php b/app/code/Magento/User/Controller/Adminhtml/User/Role/RoleGrid.php
index 32d360659bd..e771d3dd87b 100644
--- a/app/code/Magento/User/Controller/Adminhtml/User/Role/RoleGrid.php
+++ b/app/code/Magento/User/Controller/Adminhtml/User/Role/RoleGrid.php
@@ -13,7 +13,7 @@ class RoleGrid extends \Magento\User\Controller\Adminhtml\User\Role
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout(false);
         $this->_view->renderLayout();
diff --git a/app/code/Magento/User/Controller/Adminhtml/User/Role/SaveRole.php b/app/code/Magento/User/Controller/Adminhtml/User/Role/SaveRole.php
index e45c6b110db..83aa7ed1f34 100644
--- a/app/code/Magento/User/Controller/Adminhtml/User/Role/SaveRole.php
+++ b/app/code/Magento/User/Controller/Adminhtml/User/Role/SaveRole.php
@@ -55,7 +55,7 @@ class SaveRole extends \Magento\User\Controller\Adminhtml\User\Role
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
diff --git a/app/code/Magento/User/Controller/Adminhtml/User/RoleGrid.php b/app/code/Magento/User/Controller/Adminhtml/User/RoleGrid.php
index 03f19129f6b..5f405efca0f 100644
--- a/app/code/Magento/User/Controller/Adminhtml/User/RoleGrid.php
+++ b/app/code/Magento/User/Controller/Adminhtml/User/RoleGrid.php
@@ -11,7 +11,7 @@ class RoleGrid extends \Magento\User\Controller\Adminhtml\User
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_view->loadLayout(false);
         $this->_view->renderLayout();
diff --git a/app/code/Magento/User/Controller/Adminhtml/User/RolesGrid.php b/app/code/Magento/User/Controller/Adminhtml/User/RolesGrid.php
index 11b1569e9d7..2689f3c9d77 100644
--- a/app/code/Magento/User/Controller/Adminhtml/User/RolesGrid.php
+++ b/app/code/Magento/User/Controller/Adminhtml/User/RolesGrid.php
@@ -11,7 +11,7 @@ class RolesGrid extends \Magento\User\Controller\Adminhtml\User
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $userId = $this->getRequest()->getParam('user_id');
         /** @var \Magento\User\Model\User $model */
diff --git a/app/code/Magento/User/Controller/Adminhtml/User/Save.php b/app/code/Magento/User/Controller/Adminhtml/User/Save.php
index e9e5cad3320..f50ebcacb27 100644
--- a/app/code/Magento/User/Controller/Adminhtml/User/Save.php
+++ b/app/code/Magento/User/Controller/Adminhtml/User/Save.php
@@ -14,7 +14,7 @@ class Save extends \Magento\User\Controller\Adminhtml\User
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         $userId = (int)$this->getRequest()->getParam('user_id');
         $data = $this->getRequest()->getPostValue();
diff --git a/app/code/Magento/User/Controller/Adminhtml/User/Validate.php b/app/code/Magento/User/Controller/Adminhtml/User/Validate.php
index 25b49ff3999..11262b0898c 100644
--- a/app/code/Magento/User/Controller/Adminhtml/User/Validate.php
+++ b/app/code/Magento/User/Controller/Adminhtml/User/Validate.php
@@ -13,7 +13,7 @@ class Validate extends \Magento\User\Controller\Adminhtml\User
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $response = new \Magento\Framework\DataObject();
         $response->setError(0);
diff --git a/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/Delete.php b/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/Delete.php
index 03190d55cac..10b0c13383e 100644
--- a/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/Delete.php
+++ b/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/Delete.php
@@ -13,7 +13,7 @@ class Delete extends \Magento\Variable\Controller\Adminhtml\System\Variable
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $variable = $this->_initVariable();
         /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/Edit.php b/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/Edit.php
index adb7eaa3175..bd6db1b8f37 100644
--- a/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/Edit.php
+++ b/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/Edit.php
@@ -13,7 +13,7 @@ class Edit extends \Magento\Variable\Controller\Adminhtml\System\Variable
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $variable = $this->_initVariable();
 
diff --git a/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/Index.php b/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/Index.php
index 521834f094d..1dc0676e2e5 100644
--- a/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/Index.php
+++ b/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Variable\Controller\Adminhtml\System\Variable
      *
      * @return \Magento\Backend\Model\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         $resultPage = $this->createPage();
         $resultPage->getConfig()->getTitle()->prepend(__('Custom Variables'));
diff --git a/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/NewAction.php b/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/NewAction.php
index efbcf4c062b..465b50bfe44 100644
--- a/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/NewAction.php
+++ b/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/NewAction.php
@@ -13,7 +13,7 @@ class NewAction extends \Magento\Variable\Controller\Adminhtml\System\Variable
      *
      * @return \Magento\Backend\Model\View\Result\Forward
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Backend\Model\View\Result\Forward $resultForward */
         $resultForward = $this->resultForwardFactory->create();
diff --git a/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/Save.php b/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/Save.php
index f3640c3918e..6353e576707 100644
--- a/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/Save.php
+++ b/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/Save.php
@@ -13,7 +13,7 @@ class Save extends \Magento\Variable\Controller\Adminhtml\System\Variable
      *
      * @return \Magento\Backend\Model\View\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $variable = $this->_initVariable();
         $data = $this->getRequest()->getPost('variable');
diff --git a/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/Validate.php b/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/Validate.php
index 75876b96cfe..7867af40068 100644
--- a/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/Validate.php
+++ b/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/Validate.php
@@ -13,7 +13,7 @@ class Validate extends \Magento\Variable\Controller\Adminhtml\System\Variable
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         $response = new \Magento\Framework\DataObject(['error' => false]);
         $variable = $this->_initVariable();
diff --git a/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/WysiwygPlugin.php b/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/WysiwygPlugin.php
index 04b1514cfab..42e801f50a4 100644
--- a/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/WysiwygPlugin.php
+++ b/app/code/Magento/Variable/Controller/Adminhtml/System/Variable/WysiwygPlugin.php
@@ -13,7 +13,7 @@ class WysiwygPlugin extends \Magento\Variable\Controller\Adminhtml\System\Variab
      *
      * @return \Magento\Framework\Controller\Result\Json
      */
-    public function execute()
+    public function executeInternal()
     {
         $customVariables = $this->_objectManager->create('Magento\Variable\Model\Variable')
             ->getVariablesOptionArray(true);
diff --git a/app/code/Magento/Variable/Test/Unit/Controller/Adminhtml/System/Variable/ValidateTest.php b/app/code/Magento/Variable/Test/Unit/Controller/Adminhtml/System/Variable/ValidateTest.php
index cb653d6499d..8da36180eb7 100644
--- a/app/code/Magento/Variable/Test/Unit/Controller/Adminhtml/System/Variable/ValidateTest.php
+++ b/app/code/Magento/Variable/Test/Unit/Controller/Adminhtml/System/Variable/ValidateTest.php
@@ -152,7 +152,7 @@ class ValidateTest extends \PHPUnit_Framework_TestCase
             ->method('setData')
             ->with($responseArray);
 
-        $this->validateMock->execute();
+        $this->validateMock->executeInternal();
     }
 
     /**
diff --git a/app/code/Magento/Version/Controller/Index/Index.php b/app/code/Magento/Version/Controller/Index/Index.php
index 0fe6235bc6c..48feb6eb423 100644
--- a/app/code/Magento/Version/Controller/Index/Index.php
+++ b/app/code/Magento/Version/Controller/Index/Index.php
@@ -37,7 +37,7 @@ class Index extends Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $versionParts = explode('.', $this->productMetadata->getVersion());
         if (!isset($versionParts[0]) || !isset($versionParts[1])) {
diff --git a/app/code/Magento/Widget/Controller/Adminhtml/Widget/BuildWidget.php b/app/code/Magento/Widget/Controller/Adminhtml/Widget/BuildWidget.php
index 9a3459f897f..e29a01447ca 100644
--- a/app/code/Magento/Widget/Controller/Adminhtml/Widget/BuildWidget.php
+++ b/app/code/Magento/Widget/Controller/Adminhtml/Widget/BuildWidget.php
@@ -30,7 +30,7 @@ class BuildWidget extends \Magento\Backend\App\Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $type = $this->getRequest()->getPost('widget_type');
         $params = $this->getRequest()->getPost('parameters', []);
diff --git a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Index.php b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Index.php
index a30ce4a2a84..3b0d39820dc 100644
--- a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Index.php
+++ b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Index.php
@@ -40,7 +40,7 @@ class Index extends \Magento\Backend\App\Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         // save extra params for widgets insertion form
         $skipped = $this->getRequest()->getParam('skip_widgets');
diff --git a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Blocks.php b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Blocks.php
index c97ab7250fe..2783889979c 100644
--- a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Blocks.php
+++ b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Blocks.php
@@ -40,7 +40,7 @@ class Blocks extends \Magento\Widget\Controller\Adminhtml\Widget\Instance
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_objectManager->get(
             'Magento\Framework\App\State'
diff --git a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Categories.php b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Categories.php
index 468a5d1b7de..76f624e2f48 100644
--- a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Categories.php
+++ b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Categories.php
@@ -40,7 +40,7 @@ class Categories extends \Magento\Widget\Controller\Adminhtml\Widget\Instance
      *
      * @return \Magento\Framework\Controller\Result\Raw
      */
-    public function execute()
+    public function executeInternal()
     {
         $selected = $this->getRequest()->getParam('selected', '');
         $isAnchorOnly = $this->getRequest()->getParam('is_anchor_only', 0);
diff --git a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Delete.php b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Delete.php
index 0866ba1fb2e..14e0a85abbd 100644
--- a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Delete.php
+++ b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Delete.php
@@ -13,7 +13,7 @@ class Delete extends \Magento\Widget\Controller\Adminhtml\Widget\Instance
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $widgetInstance = $this->_initWidgetInstance();
         if ($widgetInstance) {
diff --git a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Edit.php b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Edit.php
index 978680baa01..8dfd2a8bc66 100644
--- a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Edit.php
+++ b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Edit.php
@@ -13,7 +13,7 @@ class Edit extends \Magento\Widget\Controller\Adminhtml\Widget\Instance
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $widgetInstance = $this->_initWidgetInstance();
         if (!$widgetInstance) {
diff --git a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Index.php b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Index.php
index 704730f02c5..5b6d3474334 100644
--- a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Index.php
+++ b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Widget\Controller\Adminhtml\Widget\Instance
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_initAction();
         $this->_view->getPage()->getConfig()->getTitle()->prepend(__('Widgets'));
diff --git a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/NewAction.php b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/NewAction.php
index 3beb19c5d1d..289ec1ee1d0 100644
--- a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/NewAction.php
+++ b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/NewAction.php
@@ -13,7 +13,7 @@ class NewAction extends \Magento\Widget\Controller\Adminhtml\Widget\Instance
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_forward('edit');
     }
diff --git a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Products.php b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Products.php
index e750e1f88e5..a651f040b54 100644
--- a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Products.php
+++ b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Products.php
@@ -13,7 +13,7 @@ class Products extends \Magento\Widget\Controller\Adminhtml\Widget\Instance
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $selected = $this->getRequest()->getParam('selected', '');
         $productTypeId = $this->getRequest()->getParam('product_type_id', '');
diff --git a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Save.php b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Save.php
index 5435ef423cb..14657be5478 100644
--- a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Save.php
+++ b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Save.php
@@ -13,7 +13,7 @@ class Save extends \Magento\Widget\Controller\Adminhtml\Widget\Instance
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $widgetInstance = $this->_initWidgetInstance();
         if (!$widgetInstance) {
diff --git a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Template.php b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Template.php
index 4dea5a9f972..e7ad7a9e31b 100644
--- a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Template.php
+++ b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Template.php
@@ -13,7 +13,7 @@ class Template extends \Magento\Widget\Controller\Adminhtml\Widget\Instance
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         /* @var $widgetInstance \Magento\Widget\Model\Widget\Instance */
         $widgetInstance = $this->_initWidgetInstance();
diff --git a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Validate.php b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Validate.php
index fe2bb5aaf69..e37a93e5e61 100644
--- a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Validate.php
+++ b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Validate.php
@@ -13,7 +13,7 @@ class Validate extends \Magento\Widget\Controller\Adminhtml\Widget\Instance
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $response = new \Magento\Framework\DataObject();
         $response->setError(false);
diff --git a/app/code/Magento/Widget/Controller/Adminhtml/Widget/LoadOptions.php b/app/code/Magento/Widget/Controller/Adminhtml/Widget/LoadOptions.php
index 769b2d587cd..10fccc4c724 100644
--- a/app/code/Magento/Widget/Controller/Adminhtml/Widget/LoadOptions.php
+++ b/app/code/Magento/Widget/Controller/Adminhtml/Widget/LoadOptions.php
@@ -13,7 +13,7 @@ class LoadOptions extends \Magento\Backend\App\Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         try {
             $this->_view->loadLayout();
diff --git a/app/code/Magento/Widget/Test/Unit/Controller/Adminhtml/Widget/Instance/CategoriesTest.php b/app/code/Magento/Widget/Test/Unit/Controller/Adminhtml/Widget/Instance/CategoriesTest.php
index 5a03ca57026..0def0e13833 100644
--- a/app/code/Magento/Widget/Test/Unit/Controller/Adminhtml/Widget/Instance/CategoriesTest.php
+++ b/app/code/Magento/Widget/Test/Unit/Controller/Adminhtml/Widget/Instance/CategoriesTest.php
@@ -120,6 +120,6 @@ class CategoriesTest extends \PHPUnit_Framework_TestCase
                     'layout' => $this->layout
                 ]
             );
-        $this->assertSame($this->resultRaw, $this->controller->execute());
+        $this->assertSame($this->resultRaw, $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Wishlist/Controller/Index/Add.php b/app/code/Magento/Wishlist/Controller/Index/Add.php
index 19b893de9f8..36c24b6176f 100644
--- a/app/code/Magento/Wishlist/Controller/Index/Add.php
+++ b/app/code/Magento/Wishlist/Controller/Index/Add.php
@@ -59,7 +59,7 @@ class Add extends Action\Action implements IndexInterface
      * @SuppressWarnings(PHPMD.NPathComplexity)
      * @SuppressWarnings(PHPMD.UnusedLocalVariable)
      */
-    public function execute()
+    public function executeInternal()
     {
         $wishlist = $this->wishlistProvider->getWishlist();
         if (!$wishlist) {
diff --git a/app/code/Magento/Wishlist/Controller/Index/Allcart.php b/app/code/Magento/Wishlist/Controller/Index/Allcart.php
index 7cf5a187a56..e8892270a79 100644
--- a/app/code/Magento/Wishlist/Controller/Index/Allcart.php
+++ b/app/code/Magento/Wishlist/Controller/Index/Allcart.php
@@ -53,7 +53,7 @@ class Allcart extends Action\Action implements IndexInterface
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Forward $resultForward */
         $resultForward = $this->resultFactory->create(ResultFactory::TYPE_FORWARD);
diff --git a/app/code/Magento/Wishlist/Controller/Index/Cart.php b/app/code/Magento/Wishlist/Controller/Index/Cart.php
index 8075c8e6b6e..ca39fbb782b 100644
--- a/app/code/Magento/Wishlist/Controller/Index/Cart.php
+++ b/app/code/Magento/Wishlist/Controller/Index/Cart.php
@@ -107,7 +107,7 @@ class Cart extends Action\Action implements IndexInterface
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         $itemId = (int)$this->getRequest()->getParam('item');
         /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/Wishlist/Controller/Index/Configure.php b/app/code/Magento/Wishlist/Controller/Index/Configure.php
index bc8e001e250..3d1077464d9 100644
--- a/app/code/Magento/Wishlist/Controller/Index/Configure.php
+++ b/app/code/Magento/Wishlist/Controller/Index/Configure.php
@@ -53,7 +53,7 @@ class Configure extends Action\Action implements IndexInterface
      * @return \Magento\Framework\Controller\ResultInterface
      * @throws NotFoundException
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = (int)$this->getRequest()->getParam('id');
         /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/Wishlist/Controller/Index/DownloadCustomOption.php b/app/code/Magento/Wishlist/Controller/Index/DownloadCustomOption.php
index 1edd5e4426e..5dd0ff2c278 100644
--- a/app/code/Magento/Wishlist/Controller/Index/DownloadCustomOption.php
+++ b/app/code/Magento/Wishlist/Controller/Index/DownloadCustomOption.php
@@ -36,7 +36,7 @@ class DownloadCustomOption extends Action\Action implements IndexInterface
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.ExitExpression)
      */
-    public function execute()
+    public function executeInternal()
     {
         $option = $this->_objectManager->create(
             'Magento\Wishlist\Model\Item\Option'
diff --git a/app/code/Magento/Wishlist/Controller/Index/Fromcart.php b/app/code/Magento/Wishlist/Controller/Index/Fromcart.php
index 8ee09cc1d33..443d46f103d 100644
--- a/app/code/Magento/Wishlist/Controller/Index/Fromcart.php
+++ b/app/code/Magento/Wishlist/Controller/Index/Fromcart.php
@@ -78,7 +78,7 @@ class Fromcart extends Action\Action implements IndexInterface
      * @throws NotFoundException
      * @SuppressWarnings(PHPMD.UnusedLocalVariable)
      */
-    public function execute()
+    public function executeInternal()
     {
         $wishlist = $this->wishlistProvider->getWishlist();
         if (!$wishlist) {
diff --git a/app/code/Magento/Wishlist/Controller/Index/Index.php b/app/code/Magento/Wishlist/Controller/Index/Index.php
index dc0c7fcb965..821df44186a 100644
--- a/app/code/Magento/Wishlist/Controller/Index/Index.php
+++ b/app/code/Magento/Wishlist/Controller/Index/Index.php
@@ -35,7 +35,7 @@ class Index extends Action\Action implements IndexInterface
      * @return \Magento\Framework\View\Result\Page
      * @throws NotFoundException
      */
-    public function execute()
+    public function executeInternal()
     {
         if (!$this->wishlistProvider->getWishlist()) {
             throw new NotFoundException(__('Page not found.'));
diff --git a/app/code/Magento/Wishlist/Controller/Index/Remove.php b/app/code/Magento/Wishlist/Controller/Index/Remove.php
index d74487a8f19..66d068fc7f4 100644
--- a/app/code/Magento/Wishlist/Controller/Index/Remove.php
+++ b/app/code/Magento/Wishlist/Controller/Index/Remove.php
@@ -35,7 +35,7 @@ class Remove extends Action\Action implements IndexInterface
      * @return \Magento\Framework\Controller\Result\Redirect
      * @throws NotFoundException
      */
-    public function execute()
+    public function executeInternal()
     {
         $id = (int)$this->getRequest()->getParam('item');
         $item = $this->_objectManager->create('Magento\Wishlist\Model\Item')->load($id);
diff --git a/app/code/Magento/Wishlist/Controller/Index/Send.php b/app/code/Magento/Wishlist/Controller/Index/Send.php
index 6baaa3772cd..9ee4f3cd1b8 100644
--- a/app/code/Magento/Wishlist/Controller/Index/Send.php
+++ b/app/code/Magento/Wishlist/Controller/Index/Send.php
@@ -119,7 +119,7 @@ class Send extends Action\Action implements IndexInterface
      * @SuppressWarnings(PHPMD.NPathComplexity)
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
diff --git a/app/code/Magento/Wishlist/Controller/Index/Share.php b/app/code/Magento/Wishlist/Controller/Index/Share.php
index 502291b5078..4a8c92a3772 100644
--- a/app/code/Magento/Wishlist/Controller/Index/Share.php
+++ b/app/code/Magento/Wishlist/Controller/Index/Share.php
@@ -33,7 +33,7 @@ class Share extends Action\Action implements IndexInterface
      *
      * @return void|\Magento\Framework\View\Result\Page
      */
-    public function execute()
+    public function executeInternal()
     {
         if ($this->customerSession->authenticate()) {
             /** @var \Magento\Framework\View\Result\Page $resultPage */
diff --git a/app/code/Magento/Wishlist/Controller/Index/Update.php b/app/code/Magento/Wishlist/Controller/Index/Update.php
index ccb46f1c44a..863904999a2 100644
--- a/app/code/Magento/Wishlist/Controller/Index/Update.php
+++ b/app/code/Magento/Wishlist/Controller/Index/Update.php
@@ -53,7 +53,7 @@ class Update extends Action\Action implements IndexInterface
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function execute()
+    public function executeInternal()
     {
         /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
         $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
diff --git a/app/code/Magento/Wishlist/Controller/Index/UpdateItemOptions.php b/app/code/Magento/Wishlist/Controller/Index/UpdateItemOptions.php
index 655844d6f11..e1ff89db2c8 100644
--- a/app/code/Magento/Wishlist/Controller/Index/UpdateItemOptions.php
+++ b/app/code/Magento/Wishlist/Controller/Index/UpdateItemOptions.php
@@ -51,7 +51,7 @@ class UpdateItemOptions extends Action\Action implements IndexInterface
      *
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $productId = (int)$this->getRequest()->getParam('product');
         /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */
diff --git a/app/code/Magento/Wishlist/Controller/Shared/Allcart.php b/app/code/Magento/Wishlist/Controller/Shared/Allcart.php
index ffb6e34ea96..2f9208c43e9 100644
--- a/app/code/Magento/Wishlist/Controller/Shared/Allcart.php
+++ b/app/code/Magento/Wishlist/Controller/Shared/Allcart.php
@@ -41,7 +41,7 @@ class Allcart extends \Magento\Framework\App\Action\Action
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $wishlist = $this->wishlistProvider->getWishlist();
         if (!$wishlist) {
diff --git a/app/code/Magento/Wishlist/Controller/Shared/Cart.php b/app/code/Magento/Wishlist/Controller/Shared/Cart.php
index b3ed5a3b330..8f03270d5be 100644
--- a/app/code/Magento/Wishlist/Controller/Shared/Cart.php
+++ b/app/code/Magento/Wishlist/Controller/Shared/Cart.php
@@ -79,7 +79,7 @@ class Cart extends \Magento\Framework\App\Action\Action
      *
      * @return \Magento\Framework\Controller\Result\Redirect
      */
-    public function execute()
+    public function executeInternal()
     {
         $itemId = (int)$this->getRequest()->getParam('item');
 
diff --git a/app/code/Magento/Wishlist/Controller/Shared/Index.php b/app/code/Magento/Wishlist/Controller/Shared/Index.php
index 6f925099159..d54d5283304 100644
--- a/app/code/Magento/Wishlist/Controller/Shared/Index.php
+++ b/app/code/Magento/Wishlist/Controller/Shared/Index.php
@@ -51,7 +51,7 @@ class Index extends Action
      *
      * @return \Magento\Framework\Controller\ResultInterface
      */
-    public function execute()
+    public function executeInternal()
     {
         $wishlist = $this->wishlistProvider->getWishlist();
         $customerId = $this->customerSession->getCustomerId();
diff --git a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/AllcartTest.php b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/AllcartTest.php
index 8d58bf0be75..e72f4c4a42f 100644
--- a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/AllcartTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/AllcartTest.php
@@ -157,7 +157,7 @@ class AllcartTest extends \PHPUnit_Framework_TestCase
             ->willReturnSelf();
 
         $controller = $this->getController();
-        $this->assertSame($this->resultForwardMock, $controller->execute());
+        $this->assertSame($this->resultForwardMock, $controller->executeInternal());
     }
 
     public function testExecuteWithoutWishlist()
@@ -176,7 +176,7 @@ class AllcartTest extends \PHPUnit_Framework_TestCase
             ->with('noroute')
             ->willReturnSelf();
 
-        $this->assertSame($this->resultForwardMock, $this->getController()->execute());
+        $this->assertSame($this->resultForwardMock, $this->getController()->executeInternal());
     }
 
     public function testExecutePassed()
@@ -204,6 +204,6 @@ class AllcartTest extends \PHPUnit_Framework_TestCase
             ->with($url)
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->getController()->execute());
+        $this->assertSame($this->resultRedirectMock, $this->getController()->executeInternal());
     }
 }
diff --git a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/CartTest.php b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/CartTest.php
index cdd8ea3b333..937e5f843fd 100644
--- a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/CartTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/CartTest.php
@@ -259,7 +259,7 @@ class CartTest extends \PHPUnit_Framework_TestCase
             ->with('*/*', [])
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->model->execute());
+        $this->assertSame($this->resultRedirectMock, $this->model->executeInternal());
     }
 
     public function testExecuteWithNoWishlist()
@@ -300,7 +300,7 @@ class CartTest extends \PHPUnit_Framework_TestCase
             ->with('*/*', [])
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->model->execute());
+        $this->assertSame($this->resultRedirectMock, $this->model->executeInternal());
     }
 
     public function testExecuteWithQuantityArray()
@@ -312,7 +312,7 @@ class CartTest extends \PHPUnit_Framework_TestCase
             ->with($refererUrl)
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->model->execute());
+        $this->assertSame($this->resultRedirectMock, $this->model->executeInternal());
     }
 
     public function testExecuteWithQuantityArrayAjax()
@@ -324,7 +324,7 @@ class CartTest extends \PHPUnit_Framework_TestCase
             ->with(['backUrl' => $refererUrl])
             ->willReturnSelf();
 
-        $this->assertSame($this->resultJsonMock, $this->model->execute());
+        $this->assertSame($this->resultJsonMock, $this->model->executeInternal());
     }
 
     /**
@@ -698,7 +698,7 @@ class CartTest extends \PHPUnit_Framework_TestCase
             ->with($indexUrl)
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->model->execute());
+        $this->assertSame($this->resultRedirectMock, $this->model->executeInternal());
     }
 
     /**
@@ -859,6 +859,6 @@ class CartTest extends \PHPUnit_Framework_TestCase
             ->with($configureUrl)
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->model->execute());
+        $this->assertSame($this->resultRedirectMock, $this->model->executeInternal());
     }
 }
diff --git a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/FromcartTest.php b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/FromcartTest.php
index 58109d6dc3d..51afe2756ad 100644
--- a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/FromcartTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/FromcartTest.php
@@ -121,7 +121,7 @@ class FromcartTest extends \PHPUnit_Framework_TestCase
             ->method('getWishlist')
             ->willReturn(null);
 
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 
     public function testExecuteNoCartItem()
@@ -169,7 +169,7 @@ class FromcartTest extends \PHPUnit_Framework_TestCase
             ->with($cartUrl)
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirect, $this->controller->execute());
+        $this->assertSame($this->resultRedirect, $this->controller->executeInternal());
     }
 
     public function testExecute()
@@ -235,7 +235,7 @@ class FromcartTest extends \PHPUnit_Framework_TestCase
             ->with($cartUrl)
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirect, $this->controller->execute());
+        $this->assertSame($this->resultRedirect, $this->controller->executeInternal());
     }
 
     public function testExecuteWithException()
@@ -271,7 +271,7 @@ class FromcartTest extends \PHPUnit_Framework_TestCase
             ->with($cartUrl)
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirect, $this->controller->execute());
+        $this->assertSame($this->resultRedirect, $this->controller->executeInternal());
     }
 
     protected function prepareContext()
diff --git a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/IndexTest.php b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/IndexTest.php
index 12f3de81f38..f49d76cc0a0 100644
--- a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/IndexTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/IndexTest.php
@@ -139,7 +139,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
             ->method('getWishlist')
             ->willReturn(null);
 
-        $this->getController()->execute();
+        $this->getController()->executeInternal();
     }
 
     public function testExecutePassed()
@@ -150,6 +150,6 @@ class IndexTest extends \PHPUnit_Framework_TestCase
             ->method('getWishlist')
             ->willReturn($wishlist);
 
-        $this->assertSame($this->resultPageMock, $this->getController()->execute());
+        $this->assertSame($this->resultPageMock, $this->getController()->executeInternal());
     }
 }
diff --git a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/RemoveTest.php b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/RemoveTest.php
index 6b2a6b9a595..787d6ef272c 100644
--- a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/RemoveTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/RemoveTest.php
@@ -164,7 +164,7 @@ class RemoveTest extends \PHPUnit_Framework_TestCase
             ->with('Magento\Wishlist\Model\Item')
             ->willReturn($item);
 
-        $this->getController()->execute();
+        $this->getController()->executeInternal();
     }
 
     /**
@@ -206,7 +206,7 @@ class RemoveTest extends \PHPUnit_Framework_TestCase
             ->with(2)
             ->willReturn(null);
 
-        $this->getController()->execute();
+        $this->getController()->executeInternal();
     }
 
     public function testExecuteCanNotSaveWishlist()
@@ -291,7 +291,7 @@ class RemoveTest extends \PHPUnit_Framework_TestCase
             ->with($referer)
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->getController()->execute());
+        $this->assertSame($this->resultRedirectMock, $this->getController()->executeInternal());
     }
 
     public function testExecuteCanNotSaveWishlistAndWithRedirect()
@@ -387,6 +387,6 @@ class RemoveTest extends \PHPUnit_Framework_TestCase
             ->with('http://test.com/frontname/module/controller/action')
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->getController()->execute());
+        $this->assertSame($this->resultRedirectMock, $this->getController()->executeInternal());
     }
 }
diff --git a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/SendTest.php b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/SendTest.php
index dd6dca98716..704e5b6fb08 100644
--- a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/SendTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/SendTest.php
@@ -270,7 +270,7 @@ class SendTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/')
             ->willReturnSelf();
 
-        $this->assertEquals($this->resultRedirect, $this->model->execute());
+        $this->assertEquals($this->resultRedirect, $this->model->executeInternal());
     }
 
     /**
@@ -288,7 +288,7 @@ class SendTest extends \PHPUnit_Framework_TestCase
             ->method('getWishlist')
             ->willReturn(null);
 
-        $this->model->execute();
+        $this->model->executeInternal();
     }
 
     /**
@@ -356,7 +356,7 @@ class SendTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/share')
             ->willReturnSelf();
 
-        $this->assertEquals($this->resultRedirect, $this->model->execute());
+        $this->assertEquals($this->resultRedirect, $this->model->executeInternal());
     }
 
     /**
@@ -514,7 +514,7 @@ class SendTest extends \PHPUnit_Framework_TestCase
             ->with('*/*/share')
             ->willReturnSelf();
 
-        $this->assertEquals($this->resultRedirect, $this->model->execute());
+        $this->assertEquals($this->resultRedirect, $this->model->executeInternal());
     }
 
     /**
@@ -693,6 +693,6 @@ class SendTest extends \PHPUnit_Framework_TestCase
             ->with('*/*', ['wishlist_id' => $wishlistId])
             ->willReturnSelf();
 
-        $this->assertEquals($this->resultRedirect, $this->model->execute());
+        $this->assertEquals($this->resultRedirect, $this->model->executeInternal());
     }
 }
diff --git a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/ShareTest.php b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/ShareTest.php
index b65e8d11e43..e53d854cbef 100644
--- a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/ShareTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/ShareTest.php
@@ -53,7 +53,7 @@ class ShareTest extends \PHPUnit_Framework_TestCase
         $this->resultFactoryMock->expects($this->once())->method('create')->with(ResultFactory::TYPE_PAGE)
             ->willReturn($resultMock);
 
-        $this->assertEquals($resultMock, $this->model->execute());
+        $this->assertEquals($resultMock, $this->model->executeInternal());
     }
 
     public function testExecuteAuthenticationFail()
@@ -61,6 +61,6 @@ class ShareTest extends \PHPUnit_Framework_TestCase
         $this->customerSessionMock->expects($this->once())->method('authenticate')
             ->willReturn(false);
 
-        $this->assertEmpty($this->model->execute());
+        $this->assertEmpty($this->model->executeInternal());
     }
 }
diff --git a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/UpdateItemOptionsTest.php b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/UpdateItemOptionsTest.php
index f70306b6025..1f811f79563 100644
--- a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/UpdateItemOptionsTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/UpdateItemOptionsTest.php
@@ -186,7 +186,7 @@ class UpdateItemOptionsTest extends \PHPUnit_Framework_TestCase
             ->with('*/', [])
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->getController()->execute());
+        $this->assertSame($this->resultRedirectMock, $this->getController()->executeInternal());
     }
 
     /**
@@ -218,7 +218,7 @@ class UpdateItemOptionsTest extends \PHPUnit_Framework_TestCase
             ->with('*/', [])
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->getController()->execute());
+        $this->assertSame($this->resultRedirectMock, $this->getController()->executeInternal());
     }
 
     /**
@@ -286,7 +286,7 @@ class UpdateItemOptionsTest extends \PHPUnit_Framework_TestCase
             ->with('*/', [])
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->getController()->execute());
+        $this->assertSame($this->resultRedirectMock, $this->getController()->executeInternal());
     }
 
     /**
@@ -407,7 +407,7 @@ class UpdateItemOptionsTest extends \PHPUnit_Framework_TestCase
             ->with('*/*', ['wishlist_id' => 56])
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->getController()->execute());
+        $this->assertSame($this->resultRedirectMock, $this->getController()->executeInternal());
     }
     /**
      * Test execute add success critical exception
@@ -545,6 +545,6 @@ class UpdateItemOptionsTest extends \PHPUnit_Framework_TestCase
             ->with('*/*', ['wishlist_id' => 56])
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->getController()->execute());
+        $this->assertSame($this->resultRedirectMock, $this->getController()->executeInternal());
     }
 }
diff --git a/app/code/Magento/Wishlist/Test/Unit/Controller/Shared/AllcartTest.php b/app/code/Magento/Wishlist/Test/Unit/Controller/Shared/AllcartTest.php
index 09ea2bb42c7..984c2e70c16 100644
--- a/app/code/Magento/Wishlist/Test/Unit/Controller/Shared/AllcartTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/Controller/Shared/AllcartTest.php
@@ -132,7 +132,7 @@ class AllcartTest extends \PHPUnit_Framework_TestCase
             ->with($url)
             ->willReturnSelf();
 
-        $this->assertSame($this->resultRedirectMock, $this->allcartController->execute());
+        $this->assertSame($this->resultRedirectMock, $this->allcartController->executeInternal());
     }
 
     public function testExecuteWithNoWishlist()
@@ -145,6 +145,6 @@ class AllcartTest extends \PHPUnit_Framework_TestCase
             ->with('noroute')
             ->willReturnSelf();
 
-        $this->assertSame($this->resultForwardMock, $this->allcartController->execute());
+        $this->assertSame($this->resultForwardMock, $this->allcartController->executeInternal());
     }
 }
diff --git a/app/code/Magento/Wishlist/Test/Unit/Controller/Shared/CartTest.php b/app/code/Magento/Wishlist/Test/Unit/Controller/Shared/CartTest.php
index c42e48ba37b..a917ac8b2ba 100644
--- a/app/code/Magento/Wishlist/Test/Unit/Controller/Shared/CartTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/Controller/Shared/CartTest.php
@@ -275,7 +275,7 @@ class CartTest extends \PHPUnit_Framework_TestCase
             ->with($redirectUrl)
             ->willReturnSelf();
 
-        $this->assertEquals($this->resultRedirect, $this->model->execute());
+        $this->assertEquals($this->resultRedirect, $this->model->executeInternal());
     }
 
     /**
@@ -329,7 +329,7 @@ class CartTest extends \PHPUnit_Framework_TestCase
             ->with($productUrl)
             ->willReturnSelf();
 
-        $this->assertEquals($this->resultRedirect, $this->model->execute());
+        $this->assertEquals($this->resultRedirect, $this->model->executeInternal());
     }
 
     public function testExecuteProductException()
@@ -360,7 +360,7 @@ class CartTest extends \PHPUnit_Framework_TestCase
             ->with($refererUrl)
             ->willReturnSelf();
 
-        $this->assertEquals($this->resultRedirect, $this->model->execute());
+        $this->assertEquals($this->resultRedirect, $this->model->executeInternal());
     }
 
     public function testExecuteException()
@@ -391,6 +391,6 @@ class CartTest extends \PHPUnit_Framework_TestCase
             ->with($refererUrl)
             ->willReturnSelf();
 
-        $this->assertEquals($this->resultRedirect, $this->model->execute());
+        $this->assertEquals($this->resultRedirect, $this->model->executeInternal());
     }
 }
diff --git a/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester.php b/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester.php
index 01be1182f2b..906504d782e 100644
--- a/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester.php
+++ b/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester.php
@@ -69,7 +69,7 @@ abstract class CookieTester implements \Magento\Framework\App\ActionInterface
      * @param RequestInterface $request
      * @return \Magento\Framework\App\ResponseInterface
      */
-    public function dispatch(RequestInterface $request)
+    public function execute(RequestInterface $request)
     {
         $result = $this->execute($request);
         return $result ? $result : $this->_response;
diff --git a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/AuthTest.php b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/AuthTest.php
index 6d0b535d0c6..6ae9fb368c2 100644
--- a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/AuthTest.php
+++ b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/AuthTest.php
@@ -58,7 +58,7 @@ class AuthTest extends \Magento\TestFramework\TestCase\AbstractController
 
     /**
      * Check not logged state
-     * @covers \Magento\Backend\Controller\Adminhtml\Auth\Login::execute
+     * @covers \Magento\Backend\Controller\Adminhtml\Auth\Login::executeInternal
      */
     public function testNotLoggedLoginAction()
     {
@@ -72,7 +72,7 @@ class AuthTest extends \Magento\TestFramework\TestCase\AbstractController
 
     /**
      * Check logged state
-     * @covers \Magento\Backend\Controller\Adminhtml\Auth\Login::execute
+     * @covers \Magento\Backend\Controller\Adminhtml\Auth\Login::executeInternal
      * @magentoDbIsolation enabled
      */
     public function testLoggedLoginAction()
@@ -120,7 +120,7 @@ class AuthTest extends \Magento\TestFramework\TestCase\AbstractController
     }
 
     /**
-     * @covers \Magento\Backend\Controller\Adminhtml\Auth\Logout::execute
+     * @covers \Magento\Backend\Controller\Adminhtml\Auth\Logout::executeInternal
      * @magentoDbIsolation enabled
      */
     public function testLogoutAction()
@@ -138,7 +138,7 @@ class AuthTest extends \Magento\TestFramework\TestCase\AbstractController
     }
 
     /**
-     * @covers \Magento\Backend\Controller\Adminhtml\Auth\DeniedJson::execute
+     * @covers \Magento\Backend\Controller\Adminhtml\Auth\DeniedJson::executeInternal
      * @covers \Magento\Backend\Controller\Adminhtml\Auth\DeniedJson::_getDeniedJson
      * @magentoDbIsolation enabled
      */
@@ -158,7 +158,7 @@ class AuthTest extends \Magento\TestFramework\TestCase\AbstractController
     }
 
     /**
-     * @covers \Magento\Backend\Controller\Adminhtml\Auth\DeniedIframe::execute
+     * @covers \Magento\Backend\Controller\Adminhtml\Auth\DeniedIframe::executeInternal
      * @covers \Magento\Backend\Controller\Adminhtml\Auth\DeniedIframe::_getDeniedIframe
      * @magentoDbIsolation enabled
      */
diff --git a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/IndexTest.php b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/IndexTest.php
index 6575448913a..c5c1c1da1a4 100644
--- a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/IndexTest.php
+++ b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/IndexTest.php
@@ -12,7 +12,7 @@ class IndexTest extends \Magento\TestFramework\TestCase\AbstractBackendControlle
 {
     /**
      * Check not logged state
-     * @covers \Magento\Backend\Controller\Adminhtml\Index\Index::execute
+     * @covers \Magento\Backend\Controller\Adminhtml\Index\Index::executeInternal
      */
     public function testNotLoggedIndexAction()
     {
@@ -27,7 +27,7 @@ class IndexTest extends \Magento\TestFramework\TestCase\AbstractBackendControlle
 
     /**
      * Check logged state
-     * @covers \Magento\Backend\Controller\Adminhtml\Index\Index::execute
+     * @covers \Magento\Backend\Controller\Adminhtml\Index\Index::executeInternal
      * @magentoDbIsolation enabled
      */
     public function testLoggedIndexAction()
@@ -37,7 +37,7 @@ class IndexTest extends \Magento\TestFramework\TestCase\AbstractBackendControlle
     }
 
     /**
-     * @covers \Magento\Backend\Controller\Adminhtml\Index\GlobalSearch::execute
+     * @covers \Magento\Backend\Controller\Adminhtml\Index\GlobalSearch::executeInternal
      */
     public function testGlobalSearchAction()
     {
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/Action/AttributeTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/Action/AttributeTest.php
index 276f752779f..9f501e36fef 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/Action/AttributeTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/Action/AttributeTest.php
@@ -11,7 +11,7 @@ namespace Magento\Catalog\Controller\Adminhtml\Product\Action;
 class AttributeTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
-     * @covers \Magento\Catalog\Controller\Adminhtml\Product\Action\Attribute\Save::execute
+     * @covers \Magento\Catalog\Controller\Adminhtml\Product\Action\Attribute\Save::executeInternal
      *
      * @magentoDataFixture Magento/Catalog/_files/product_simple.php
      */
@@ -46,7 +46,7 @@ class AttributeTest extends \Magento\TestFramework\TestCase\AbstractBackendContr
     }
 
     /**
-     * @covers \Magento\Catalog\Controller\Adminhtml\Product\Action\Attribute\Validate::execute
+     * @covers \Magento\Catalog\Controller\Adminhtml\Product\Action\Attribute\Validate::executeInternal
      *
      * @dataProvider validateActionDataProvider
      *
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Helper/Product/Stub/ProductControllerStub.php b/dev/tests/integration/testsuite/Magento/Catalog/Helper/Product/Stub/ProductControllerStub.php
index f4d8df15724..87dc9a7363b 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Helper/Product/Stub/ProductControllerStub.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Helper/Product/Stub/ProductControllerStub.php
@@ -8,7 +8,7 @@ namespace Magento\Catalog\Helper\Product\Stub;
 
 class ProductControllerStub extends \Magento\Catalog\Controller\Product
 {
-    protected function execute()
+    protected function executeInternal()
     {
         // Empty method stub for test
     }
diff --git a/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/FetchRatesTest.php b/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/FetchRatesTest.php
index f170ad50089..7e845870171 100644
--- a/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/FetchRatesTest.php
+++ b/dev/tests/integration/testsuite/Magento/CurrencySymbol/Controller/Adminhtml/System/Currency/FetchRatesTest.php
@@ -121,6 +121,6 @@ class FetchRatesTest extends \Magento\TestFramework\TestCase\AbstractBackendCont
             $context,
             $registry
         );
-        $action->execute();
+        $action->executeInternal();
     }
 }
diff --git a/dev/tests/integration/testsuite/Magento/Paypal/Controller/Billing/AgreementTest.php b/dev/tests/integration/testsuite/Magento/Paypal/Controller/Billing/AgreementTest.php
index 4a606bea53b..1b098debc33 100644
--- a/dev/tests/integration/testsuite/Magento/Paypal/Controller/Billing/AgreementTest.php
+++ b/dev/tests/integration/testsuite/Magento/Paypal/Controller/Billing/AgreementTest.php
@@ -106,7 +106,7 @@ class AgreementTest extends \Magento\TestFramework\TestCase\AbstractController
         $customerSession->setCustomerId($fixtureCustomerId);
 
         /** Execute SUT */
-        $billingAgreementController->execute();
+        $billingAgreementController->executeInternal();
 
         /** Ensure that billing agreement record was created in the DB */
         /** @var \Magento\Paypal\Model\ResourceModel\Billing\Agreement\Collection $billingAgreementCollection */
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/Stub/OrderCreateStub.php b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/Stub/OrderCreateStub.php
index 39153b58370..0169bf3ff26 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/Stub/OrderCreateStub.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/Controller/Adminhtml/Order/Stub/OrderCreateStub.php
@@ -8,7 +8,7 @@ namespace Magento\Sales\Controller\Adminhtml\Order\Stub;
 
 class OrderCreateStub extends \Magento\Sales\Controller\Adminhtml\Order\Create
 {
-    protected function execute()
+    protected function executeInternal()
     {
         // Empty method stub for test
     }
diff --git a/dev/tests/integration/testsuite/Magento/TestFixture/Controller/Adminhtml/Noroute.php b/dev/tests/integration/testsuite/Magento/TestFixture/Controller/Adminhtml/Noroute.php
index 0116aa59ffa..ae88fa63786 100644
--- a/dev/tests/integration/testsuite/Magento/TestFixture/Controller/Adminhtml/Noroute.php
+++ b/dev/tests/integration/testsuite/Magento/TestFixture/Controller/Adminhtml/Noroute.php
@@ -22,7 +22,7 @@ class Noroute implements \Magento\Framework\App\ActionInterface
      *
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function dispatch(RequestInterface $request)
+    public function execute(RequestInterface $request)
     {
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/AuthTest.php b/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/AuthTest.php
index 052030a1552..031bab7ac1e 100644
--- a/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/AuthTest.php
+++ b/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/AuthTest.php
@@ -14,7 +14,7 @@ class AuthTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
      * Test form existence
-     * @covers \Magento\User\Controller\Adminhtml\Auth\Forgotpassword::execute
+     * @covers \Magento\User\Controller\Adminhtml\Auth\Forgotpassword::executeInternal
      */
     public function testFormForgotpasswordAction()
     {
@@ -26,7 +26,7 @@ class AuthTest extends \Magento\TestFramework\TestCase\AbstractBackendController
     /**
      * Test redirection to startup page after success password recovering posting
      *
-     * @covers \Magento\User\Controller\Adminhtml\Auth\Forgotpassword::execute
+     * @covers \Magento\User\Controller\Adminhtml\Auth\Forgotpassword::executeInternal
      */
     public function testForgotpasswordAction()
     {
@@ -44,7 +44,7 @@ class AuthTest extends \Magento\TestFramework\TestCase\AbstractBackendController
     /**
      * Test reset password action
      *
-     * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPassword::execute
+     * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPassword::executeInternal
      * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPassword::_validateResetPasswordLinkToken
      * @magentoDataFixture Magento/User/_files/dummy_user.php
      */
@@ -73,7 +73,7 @@ class AuthTest extends \Magento\TestFramework\TestCase\AbstractBackendController
     }
 
     /**
-     * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPassword::execute
+     * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPassword::executeInternal
      * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPassword::_validateResetPasswordLinkToken
      */
     public function testResetPasswordActionWithDummyToken()
@@ -89,7 +89,7 @@ class AuthTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 
     /**
      * @dataProvider resetPasswordDataProvider
-     * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPasswordPost::execute
+     * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPasswordPost::executeInternal
      * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPasswordPost::_validateResetPasswordLinkToken
      * @magentoDataFixture Magento/User/_files/dummy_user.php
      */
@@ -162,7 +162,7 @@ class AuthTest extends \Magento\TestFramework\TestCase\AbstractBackendController
     }
 
     /**
-     * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPasswordPost::execute
+     * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPasswordPost::executeInternal
      * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPasswordPost::_validateResetPasswordLinkToken
      * @magentoDataFixture Magento/User/_files/dummy_user.php
      */
@@ -184,7 +184,7 @@ class AuthTest extends \Magento\TestFramework\TestCase\AbstractBackendController
     }
 
     /**
-     * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPasswordPost::execute
+     * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPasswordPost::executeInternal
      * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPasswordPost::_validateResetPasswordLinkToken
      * @magentoDataFixture Magento/User/_files/dummy_user.php
      */
diff --git a/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/User/RoleTest.php b/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/User/RoleTest.php
index 932351fb427..384b2e3300e 100644
--- a/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/User/RoleTest.php
+++ b/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/User/RoleTest.php
@@ -27,7 +27,7 @@ class RoleTest extends \Magento\TestFramework\TestCase\AbstractBackendController
     }
 
     /**
-     * @covers \Magento\User\Controller\Adminhtml\User\Role\Editrolegrid::execute
+     * @covers \Magento\User\Controller\Adminhtml\User\Role\Editrolegrid::executeInternal
      */
     public function testEditrolegridAction()
     {
@@ -38,7 +38,7 @@ class RoleTest extends \Magento\TestFramework\TestCase\AbstractBackendController
     }
 
     /**
-     * @covers \Magento\User\Controller\Adminhtml\User\Role\RoleGrid::execute
+     * @covers \Magento\User\Controller\Adminhtml\User\Role\RoleGrid::executeInternal
      */
     public function testRoleGridAction()
     {
diff --git a/lib/internal/Magento/Framework/App/Action/Action.php b/lib/internal/Magento/Framework/App/Action/Action.php
index 310f2f57d4d..da7a42f6122 100644
--- a/lib/internal/Magento/Framework/App/Action/Action.php
+++ b/lib/internal/Magento/Framework/App/Action/Action.php
@@ -83,7 +83,7 @@ abstract class Action extends AbstractAction
      * @return ResponseInterface
      * @throws NotFoundException
      */
-    public function dispatch(RequestInterface $request)
+    public function execute(RequestInterface $request)
     {
         $this->_request = $request;
         $profilerKey = 'CONTROLLER_ACTION:' . $request->getFullActionName();
@@ -99,7 +99,7 @@ abstract class Action extends AbstractAction
         $result = null;
         if ($request->isDispatched() && !$this->_actionFlag->get('', self::FLAG_NO_DISPATCH)) {
             \Magento\Framework\Profiler::start('action_body');
-            $result = $this->execute();
+            $result = $this->executeInternal();
             \Magento\Framework\Profiler::start('postdispatch');
             if (!$this->_actionFlag->get('', self::FLAG_NO_POST_DISPATCH)) {
                 $this->_eventManager->dispatch(
@@ -122,7 +122,7 @@ abstract class Action extends AbstractAction
     /**
      * @return ResultInterface
      */
-    abstract protected function execute();
+    abstract protected function executeInternal();
 
     /**
      * Throw control to different action (control and module if was specified).
diff --git a/lib/internal/Magento/Framework/App/Action/Forward.php b/lib/internal/Magento/Framework/App/Action/Forward.php
index 611b7413b41..db11b6577f3 100644
--- a/lib/internal/Magento/Framework/App/Action/Forward.php
+++ b/lib/internal/Magento/Framework/App/Action/Forward.php
@@ -17,7 +17,7 @@ class Forward extends AbstractAction
      * @return ResponseInterface
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function dispatch(RequestInterface $request)
+    public function execute(RequestInterface $request)
     {
         $request->setDispatched(false);
         return $this->_response;
diff --git a/lib/internal/Magento/Framework/App/Action/Redirect.php b/lib/internal/Magento/Framework/App/Action/Redirect.php
index 5904274e561..23b3cfcb90d 100644
--- a/lib/internal/Magento/Framework/App/Action/Redirect.php
+++ b/lib/internal/Magento/Framework/App/Action/Redirect.php
@@ -19,7 +19,7 @@ class Redirect extends AbstractAction
      * @return ResponseInterface
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function dispatch(RequestInterface $request)
+    public function execute(RequestInterface $request)
     {
         return $this->_response;
     }
diff --git a/lib/internal/Magento/Framework/App/ActionInterface.php b/lib/internal/Magento/Framework/App/ActionInterface.php
index 7e90fc49922..cf740250eb8 100644
--- a/lib/internal/Magento/Framework/App/ActionInterface.php
+++ b/lib/internal/Magento/Framework/App/ActionInterface.php
@@ -26,5 +26,5 @@ interface ActionInterface
      * @return \Magento\Framework\Controller\ResultInterface|ResponseInterface
      * @throws \Magento\Framework\Exception\NotFoundException
      */
-    public function dispatch(RequestInterface $request);
+    public function execute(RequestInterface $request);
 }
diff --git a/lib/internal/Magento/Framework/App/FrontController.php b/lib/internal/Magento/Framework/App/FrontController.php
index c3a9b6b390b..49630bd4e6d 100644
--- a/lib/internal/Magento/Framework/App/FrontController.php
+++ b/lib/internal/Magento/Framework/App/FrontController.php
@@ -51,7 +51,7 @@ class FrontController implements FrontControllerInterface
                     if ($actionInstance) {
                         $request->setDispatched(true);
                         $this->response->setNoCacheHeaders();
-                        $result = $actionInstance->dispatch($request);
+                        $result = $actionInstance->execute($request);
                         break;
                     }
                 } catch (\Magento\Framework\Exception\NotFoundException $e) {
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Action/ActionTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Action/ActionTest.php
index 44a79370181..e7b0a27ab64 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/Action/ActionTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/Action/ActionTest.php
@@ -170,7 +170,7 @@ class ActionTest extends \PHPUnit_Framework_TestCase
             $expectedEventParameters
         );
 
-        $this->assertEquals($this->_responseMock, $this->action->dispatch($this->_requestMock));
+        $this->assertEquals($this->_responseMock, $this->action->execute($this->_requestMock));
     }
 }
 
@@ -179,7 +179,7 @@ class ActionFake extends Action
     /**
      * Fake action to check a method call from a parent
      */
-    public function execute()
+    public function executeInternal()
     {
         $this->_forward(
             ActionTest::ACTION_NAME,
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Action/ForwardTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Action/ForwardTest.php
index 2d15e0a290b..5501546bc59 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/Action/ForwardTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/Action/ForwardTest.php
@@ -62,7 +62,7 @@ class ForwardTest extends \PHPUnit_Framework_TestCase
     public function testDispatch()
     {
         $this->request->expects($this->once())->method('setDispatched')->with(false);
-        $this->actionAbstract->dispatch($this->request);
+        $this->actionAbstract->execute($this->request);
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Action/Stub/ActionStub.php b/lib/internal/Magento/Framework/App/Test/Unit/Action/Stub/ActionStub.php
index a5c6d5cff8e..4c654992ab2 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/Action/Stub/ActionStub.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/Action/Stub/ActionStub.php
@@ -8,7 +8,7 @@ namespace Magento\Framework\App\Test\Unit\Action\Stub;
 
 class ActionStub extends \Magento\Framework\App\Action\Action
 {
-    protected function execute()
+    protected function executeInternal()
     {
         // Empty method stub for test
     }
diff --git a/lib/internal/Magento/Framework/Controller/Index/Index.php b/lib/internal/Magento/Framework/Controller/Index/Index.php
index bc8b9d70810..ad0c9a85ba6 100644
--- a/lib/internal/Magento/Framework/Controller/Index/Index.php
+++ b/lib/internal/Magento/Framework/Controller/Index/Index.php
@@ -11,7 +11,7 @@ class Index extends \Magento\Framework\App\Action\Action
     /**
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
     }
 }
diff --git a/lib/internal/Magento/Framework/Controller/Noroute/Index.php b/lib/internal/Magento/Framework/Controller/Noroute/Index.php
index 34154715366..cce6f4671f9 100644
--- a/lib/internal/Magento/Framework/Controller/Noroute/Index.php
+++ b/lib/internal/Magento/Framework/Controller/Noroute/Index.php
@@ -13,7 +13,7 @@ class Index extends \Magento\Framework\App\Action\Action
      *
      * @return void
      */
-    public function execute()
+    public function executeInternal()
     {
         $status = $this->getRequest()->getParam('__status__');
         if (!$status instanceof \Magento\Framework\DataObject) {
-- 
GitLab


From 7d65c78f9f013208a2369c6801f840e91e4fe5ae Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Fri, 23 Oct 2015 15:57:11 -0500
Subject: [PATCH 270/370] MAGETWO-41954: Eliminate code generatio in production
 mode

---
 .../Module/Di/App/Task/Operation/Interception.php      |  7 +------
 .../Di/App/Task/Operation/RepositoryGenerator.php      | 10 ++--------
 2 files changed, 3 insertions(+), 14 deletions(-)

diff --git a/setup/src/Magento/Setup/Module/Di/App/Task/Operation/Interception.php b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/Interception.php
index 269e65bb48c..0c48cd4f519 100644
--- a/setup/src/Magento/Setup/Module/Di/App/Task/Operation/Interception.php
+++ b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/Interception.php
@@ -5,7 +5,6 @@
  */
 namespace Magento\Setup\Module\Di\App\Task\Operation;
 
-use Magento\Framework\Exception\FileSystemException;
 use Magento\Setup\Module\Di\App\Task\OperationInterface;
 use Magento\Setup\Module\Di\Code\Generator\InterceptionConfigurationBuilder;
 use Magento\Framework\Interception\Code\Generator\Interceptor;
@@ -81,11 +80,7 @@ class Interception implements OperationInterface
                 $paths = (array)$paths;
             }
             foreach ($paths as $path) {
-                try {
-                    $classesList = array_merge($classesList, $this->classesScanner->getList($path));
-                } catch(FileSystemException $e) {
-                    // skip
-                }
+                $classesList = array_merge($classesList, $this->classesScanner->getList($path));
             }
         }
 
diff --git a/setup/src/Magento/Setup/Module/Di/App/Task/Operation/RepositoryGenerator.php b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/RepositoryGenerator.php
index d72b4c932a7..cf3c779a3f7 100644
--- a/setup/src/Magento/Setup/Module/Di/App/Task/Operation/RepositoryGenerator.php
+++ b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/RepositoryGenerator.php
@@ -6,7 +6,6 @@
 
 namespace Magento\Setup\Module\Di\App\Task\Operation;
 
-use Magento\Framework\Exception\FileSystemException;
 use Magento\Setup\Module\Di\App\Task\OperationInterface;
 use Magento\Setup\Module\Di\Code\Scanner;
 use Magento\Setup\Module\Di\Code\Reader\ClassesScanner;
@@ -63,14 +62,9 @@ class RepositoryGenerator implements OperationInterface
             return;
         }
 
-        try {
-            foreach ($this->data['paths'] as $path) {
-                $this->classesScanner->getList($path);
-            }
-        } catch(FileSystemException $e) {
-            // skip
+        foreach ($this->data['paths'] as $path) {
+            $this->classesScanner->getList($path);
         }
-
         $this->repositoryScanner->setUseAutoload(false);
         $files = [];
         foreach ($this->data['paths'] as $path) {
-- 
GitLab


From 369a00bc82b31a9618bdbb394c58c0f19aa83f01 Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Fri, 23 Oct 2015 16:00:09 -0500
Subject: [PATCH 271/370] MAGETWO-41954: Eliminate code generatio in production
 mode

---
 .../Di/App/Task/Operation/ApplicationCodeGenerator.php    | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ApplicationCodeGenerator.php b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ApplicationCodeGenerator.php
index 21254457ddf..dfaf5b99570 100644
--- a/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ApplicationCodeGenerator.php
+++ b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ApplicationCodeGenerator.php
@@ -66,12 +66,8 @@ class ApplicationCodeGenerator implements OperationInterface
             }
             $files = [];
             foreach ($paths as $path) {
-                try {
-                    $this->classesScanner->getList($path);
-                    $files = array_merge_recursive($files, $this->directoryScanner->scan($path, $this->data['filePatterns'], $this->data['excludePatterns']));
-                } catch(FileSystemException $e) {
-                    // skip
-                }
+                $this->classesScanner->getList($path);
+                $files = array_merge_recursive($files, $this->directoryScanner->scan($path, $this->data['filePatterns'], $this->data['excludePatterns']));
             }
             $entities = $this->phpScanner->collectEntities($files['php']);
             foreach ($entities as $entityName) {
-- 
GitLab


From fded3fc769aac401a3869bc8049c87bc9126a22b Mon Sep 17 00:00:00 2001
From: Yu Tang <ytang1@ebay.com>
Date: Fri, 23 Oct 2015 16:06:26 -0500
Subject: [PATCH 272/370] MAGETWO-44491: [TD] ActionInterface has Method
 dispatch() Instead of execute()

    - Changed affected plugins
---
 .../Backend/App/Action/Plugin/Authentication.php |  2 +-
 .../Backend/App/Action/Plugin/MassactionKey.php  |  2 +-
 .../App/Action/Plugin/AuthenticationTest.php     | 10 +++++-----
 .../Unit/App/Action/Plugin/MassactionKeyTest.php | 16 ++++++++--------
 .../Captcha/Model/Customer/Plugin/AjaxLogin.php  |  2 +-
 .../Unit/Model/Customer/Plugin/AjaxLoginTest.php | 16 ++++++++--------
 .../Customer/Controller/Plugin/Account.php       |  2 +-
 .../Customer/Model/App/Action/ContextPlugin.php  |  2 +-
 .../Test/Unit/Controller/Plugin/AccountTest.php  |  8 ++++----
 .../Unit/Model/App/Action/ContextPluginTest.php  |  6 +++---
 .../Multishipping/Controller/Checkout/Plugin.php |  2 +-
 .../Test/Unit/Controller/Checkout/PluginTest.php |  4 ++--
 .../App/Action/Plugin/BackendAuthentication.php  |  6 +++---
 .../Action/Plugin/BackendAuthenticationTest.php  |  4 ++--
 .../Controller/Order/Plugin/Authentication.php   |  2 +-
 .../Magento/Store/App/Action/Plugin/Context.php  |  2 +-
 .../Store/App/Action/Plugin/StoreCheck.php       |  2 +-
 .../Test/Unit/App/Action/Plugin/ContextTest.php  |  8 ++++----
 .../Unit/App/Action/Plugin/StoreCheckTest.php    |  8 ++++----
 .../Adminhtml/Product/Attribute/Plugin/Save.php  |  2 +-
 .../Product/Attribute/Plugin/SaveTest.php        |  4 ++--
 .../Tax/Model/App/Action/ContextPlugin.php       |  2 +-
 .../Test/Unit/App/Action/ContextPluginTest.php   |  8 ++++----
 .../Theme/Model/Theme/Plugin/Registration.php    |  2 +-
 .../Unit/Model/Theme/Plugin/RegistrationTest.php | 12 ++++++------
 .../Weee/Model/App/Action/ContextPlugin.php      |  2 +-
 .../Test/Unit/App/Action/ContextPluginTest.php   | 16 ++++++++--------
 .../Magento/Wishlist/Controller/Index/Plugin.php |  2 +-
 .../Test/Unit/Controller/Index/PluginTest.php    |  4 ++--
 .../Framework/App/Action/Plugin/Design.php       |  2 +-
 .../App/Test/Unit/Action/Plugin/DesignTest.php   |  4 ++--
 31 files changed, 82 insertions(+), 82 deletions(-)

diff --git a/app/code/Magento/Backend/App/Action/Plugin/Authentication.php b/app/code/Magento/Backend/App/Action/Plugin/Authentication.php
index bf8d90b931e..02cc404d4fc 100644
--- a/app/code/Magento/Backend/App/Action/Plugin/Authentication.php
+++ b/app/code/Magento/Backend/App/Action/Plugin/Authentication.php
@@ -101,7 +101,7 @@ class Authentication
      * @return mixed
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function aroundDispatch(
+    public function aroundExecute(
         \Magento\Backend\App\AbstractAction $subject,
         \Closure $proceed,
         \Magento\Framework\App\RequestInterface $request
diff --git a/app/code/Magento/Backend/App/Action/Plugin/MassactionKey.php b/app/code/Magento/Backend/App/Action/Plugin/MassactionKey.php
index 767163afc6d..9e1f5c713ea 100644
--- a/app/code/Magento/Backend/App/Action/Plugin/MassactionKey.php
+++ b/app/code/Magento/Backend/App/Action/Plugin/MassactionKey.php
@@ -19,7 +19,7 @@ class MassactionKey
      * @return mixed
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function aroundDispatch(
+    public function aroundExecute(
         \Magento\Backend\App\AbstractAction $subject,
         \Closure $proceed,
         \Magento\Framework\App\RequestInterface $request
diff --git a/app/code/Magento/Backend/Test/Unit/App/Action/Plugin/AuthenticationTest.php b/app/code/Magento/Backend/Test/Unit/App/Action/Plugin/AuthenticationTest.php
index 476f6ca0310..052db1d9ae9 100644
--- a/app/code/Magento/Backend/Test/Unit/App/Action/Plugin/AuthenticationTest.php
+++ b/app/code/Magento/Backend/Test/Unit/App/Action/Plugin/AuthenticationTest.php
@@ -45,7 +45,7 @@ class AuthenticationTest extends \PHPUnit_Framework_TestCase
         $this->plugin = null;
     }
 
-    public function testAroundDispatchProlongStorage()
+    public function testAroundExecuteProlongStorage()
     {
         $subject = $this->getMock('Magento\Backend\Controller\Adminhtml\Index', [], [], '', false);
         $request = $this->getMock('\Magento\Framework\App\Request\Http', ['getActionName'], [], '', false);
@@ -82,11 +82,11 @@ class AuthenticationTest extends \PHPUnit_Framework_TestCase
             return $expectedResult;
         };
 
-        $this->assertEquals($expectedResult, $this->plugin->aroundDispatch($subject, $proceed, $request));
+        $this->assertEquals($expectedResult, $this->plugin->aroundExecute($subject, $proceed, $request));
     }
 
     /**
-     * Calls aroundDispatch to access protected method _processNotLoggedInUser
+     * Calls aroundExecute to access protected method _processNotLoggedInUser
      *
      * Data provider supplies different possibilities of request parameters and properties
      * @dataProvider processNotLoggedInUserDataProvider
@@ -103,7 +103,7 @@ class AuthenticationTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        // Stubs to control the flow of execution in aroundDispatch
+        // Stubs to control the flow of execution in aroundExecute
         $this->auth->expects($this->any())->method('getAuthStorage')->will($this->returnValue($storage));
         $request->expects($this->once())->method('getActionName')->will($this->returnValue('non/open/action/name'));
         $this->auth->expects($this->any())->method('getUser')->willReturn(false);
@@ -146,7 +146,7 @@ class AuthenticationTest extends \PHPUnit_Framework_TestCase
         $proceed = function ($request) use ($expectedResult) {
             return $expectedResult;
         };
-        $this->assertEquals($expectedResult, $this->plugin->aroundDispatch($subject, $proceed, $request));
+        $this->assertEquals($expectedResult, $this->plugin->aroundExecute($subject, $proceed, $request));
     }
 
     public function processNotLoggedInUserDataProvider()
diff --git a/app/code/Magento/Backend/Test/Unit/App/Action/Plugin/MassactionKeyTest.php b/app/code/Magento/Backend/Test/Unit/App/Action/Plugin/MassactionKeyTest.php
index 87dad8b6edd..48ec3a9a592 100644
--- a/app/code/Magento/Backend/Test/Unit/App/Action/Plugin/MassactionKeyTest.php
+++ b/app/code/Magento/Backend/Test/Unit/App/Action/Plugin/MassactionKeyTest.php
@@ -49,13 +49,13 @@ class MassactionKeyTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Backend\App\Action\Plugin\MassactionKey::aroundDispatch
+     * @covers \Magento\Backend\App\Action\Plugin\MassactionKey::aroundExecute
      *
      * @param $postData array|string
      * @param array $convertedData
-     * @dataProvider aroundDispatchDataProvider
+     * @dataProvider aroundExecuteDataProvider
      */
-    public function testAroundDispatchWhenMassactionPrepareKeyRequestExists($postData, $convertedData)
+    public function testAroundExecuteWhenMassactionPrepareKeyRequestExists($postData, $convertedData)
     {
         $this->requestMock->expects($this->at(0))
             ->method('getPost')
@@ -71,11 +71,11 @@ class MassactionKeyTest extends \PHPUnit_Framework_TestCase
 
         $this->assertEquals(
             'Expected',
-            $this->plugin->aroundDispatch($this->subjectMock, $this->closureMock, $this->requestMock)
+            $this->plugin->aroundExecute($this->subjectMock, $this->closureMock, $this->requestMock)
         );
     }
 
-    public function aroundDispatchDataProvider()
+    public function aroundExecuteDataProvider()
     {
         return [
             'post_data_is_array' => [['key'], ['key']],
@@ -84,9 +84,9 @@ class MassactionKeyTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Backend\App\Action\Plugin\MassactionKey::aroundDispatch
+     * @covers \Magento\Backend\App\Action\Plugin\MassactionKey::aroundExecute
      */
-    public function testAroundDispatchWhenMassactionPrepareKeyRequestNotExists()
+    public function testAroundExecuteWhenMassactionPrepareKeyRequestNotExists()
     {
         $this->requestMock->expects($this->once())
             ->method('getPost')
@@ -97,7 +97,7 @@ class MassactionKeyTest extends \PHPUnit_Framework_TestCase
 
         $this->assertEquals(
             'Expected',
-            $this->plugin->aroundDispatch($this->subjectMock, $this->closureMock, $this->requestMock)
+            $this->plugin->aroundExecute($this->subjectMock, $this->closureMock, $this->requestMock)
         );
     }
 }
diff --git a/app/code/Magento/Captcha/Model/Customer/Plugin/AjaxLogin.php b/app/code/Magento/Captcha/Model/Customer/Plugin/AjaxLogin.php
index 9f1dcff38b6..4cc0d629b01 100644
--- a/app/code/Magento/Captcha/Model/Customer/Plugin/AjaxLogin.php
+++ b/app/code/Magento/Captcha/Model/Customer/Plugin/AjaxLogin.php
@@ -57,7 +57,7 @@ class AjaxLogin
      * @SuppressWarnings(PHPMD.NPathComplexity)
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      */
-    public function aroundExecute(
+    public function aroundExecuteInternal(
         \Magento\Customer\Controller\Ajax\Login $subject,
         \Closure $proceed
     ) {
diff --git a/app/code/Magento/Captcha/Test/Unit/Model/Customer/Plugin/AjaxLoginTest.php b/app/code/Magento/Captcha/Test/Unit/Model/Customer/Plugin/AjaxLoginTest.php
index 7a79969f8ef..3d92086223c 100644
--- a/app/code/Magento/Captcha/Test/Unit/Model/Customer/Plugin/AjaxLoginTest.php
+++ b/app/code/Magento/Captcha/Test/Unit/Model/Customer/Plugin/AjaxLoginTest.php
@@ -82,7 +82,7 @@ class AjaxLoginTest extends \PHPUnit_Framework_TestCase
         );
     }
 
-    public function testAroundExecute()
+    public function testAroundExecuteInternal()
     {
         $username = 'name';
         $captchaString = 'string';
@@ -102,10 +102,10 @@ class AjaxLoginTest extends \PHPUnit_Framework_TestCase
         $closure = function () {
             return 'result';
         };
-        $this->assertEquals('result', $this->model->aroundExecute($this->loginControllerMock, $closure));
+        $this->assertEquals('result', $this->model->aroundExecuteInternal($this->loginControllerMock, $closure));
     }
 
-    public function testAroundExecuteIncorrectCaptcha()
+    public function testAroundExecuteInternalIncorrectCaptcha()
     {
         $username = 'name';
         $captchaString = 'string';
@@ -131,15 +131,15 @@ class AjaxLoginTest extends \PHPUnit_Framework_TestCase
 
         $closure = function () {
         };
-        $this->assertEquals('response', $this->model->aroundExecute($this->loginControllerMock, $closure));
+        $this->assertEquals('response', $this->model->aroundExecuteInternal($this->loginControllerMock, $closure));
     }
 
     /**
-     * @dataProvider aroundExecuteCaptchaIsNotRequired
+     * @dataProvider aroundExecuteInternalCaptchaIsNotRequired
      * @param string $username
      * @param array $requestContent
      */
-    public function testAroundExecuteCaptchaIsNotRequired($username, $requestContent)
+    public function testAroundExecuteInternalCaptchaIsNotRequired($username, $requestContent)
     {
         $this->requestMock->expects($this->once())->method('getContent')->will($this->returnValue($requestContent));
 
@@ -151,13 +151,13 @@ class AjaxLoginTest extends \PHPUnit_Framework_TestCase
         $closure = function () {
             return 'result';
         };
-        $this->assertEquals('result', $this->model->aroundExecute($this->loginControllerMock, $closure));
+        $this->assertEquals('result', $this->model->aroundExecuteInternal($this->loginControllerMock, $closure));
     }
 
     /**
      * @return array
      */
-    public function aroundExecuteCaptchaIsNotRequired()
+    public function aroundExecuteInternalCaptchaIsNotRequired()
     {
         return [
             [
diff --git a/app/code/Magento/Customer/Controller/Plugin/Account.php b/app/code/Magento/Customer/Controller/Plugin/Account.php
index c035c983d80..10f2c8fc15f 100644
--- a/app/code/Magento/Customer/Controller/Plugin/Account.php
+++ b/app/code/Magento/Customer/Controller/Plugin/Account.php
@@ -41,7 +41,7 @@ class Account
      * @param RequestInterface $request
      * @return mixed
      */
-    public function aroundDispatch(
+    public function aroundExecute(
         ActionInterface $subject,
         \Closure $proceed,
         RequestInterface $request
diff --git a/app/code/Magento/Customer/Model/App/Action/ContextPlugin.php b/app/code/Magento/Customer/Model/App/Action/ContextPlugin.php
index a5b268eaa17..8198a70957f 100644
--- a/app/code/Magento/Customer/Model/App/Action/ContextPlugin.php
+++ b/app/code/Magento/Customer/Model/App/Action/ContextPlugin.php
@@ -43,7 +43,7 @@ class ContextPlugin
      * @return mixed
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function aroundDispatch(
+    public function aroundExecute(
         \Magento\Framework\App\ActionInterface $subject,
         \Closure $proceed,
         \Magento\Framework\App\RequestInterface $request
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Plugin/AccountTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Plugin/AccountTest.php
index 8146fce1aa3..2c651155321 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Plugin/AccountTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Plugin/AccountTest.php
@@ -87,9 +87,9 @@ class AccountTest extends \PHPUnit_Framework_TestCase
      * @param boolean $isActionAllowed
      * @param boolean $isAuthenticated
      *
-     * @dataProvider dataProviderAroundDispatch
+     * @dataProvider dataProviderAroundExecute
      */
-    public function testAroundDispatch(
+    public function testAroundExecute(
         $action,
         $allowedActions,
         $isActionAllowed,
@@ -128,11 +128,11 @@ class AccountTest extends \PHPUnit_Framework_TestCase
         $plugin = new Account($this->session, $allowedActions);
         $this->assertEquals(
             self::EXPECTED_VALUE,
-            $plugin->aroundDispatch($this->subject, $this->proceed, $this->request)
+            $plugin->aroundExecute($this->subject, $this->proceed, $this->request)
         );
     }
 
-    public function dataProviderAroundDispatch()
+    public function dataProviderAroundExecute()
     {
         return [
             [
diff --git a/app/code/Magento/Customer/Test/Unit/Model/App/Action/ContextPluginTest.php b/app/code/Magento/Customer/Test/Unit/Model/App/Action/ContextPluginTest.php
index 4d338cef2aa..f246b0e9559 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/App/Action/ContextPluginTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/App/Action/ContextPluginTest.php
@@ -74,9 +74,9 @@ class ContextPluginTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * Test aroundDispatch
+     * Test aroundExecute
      */
-    public function testAroundDispatch()
+    public function testAroundExecute()
     {
         $this->customerSessionMock->expects($this->once())
             ->method('getCustomerGroupId')
@@ -96,7 +96,7 @@ class ContextPluginTest extends \PHPUnit_Framework_TestCase
             );
         $this->assertEquals(
             'ExpectedValue',
-            $this->plugin->aroundDispatch($this->subjectMock, $this->closureMock, $this->requestMock)
+            $this->plugin->aroundExecute($this->subjectMock, $this->closureMock, $this->requestMock)
         );
     }
 }
diff --git a/app/code/Magento/Multishipping/Controller/Checkout/Plugin.php b/app/code/Magento/Multishipping/Controller/Checkout/Plugin.php
index 3467cc8b9a8..4fbd38f1178 100644
--- a/app/code/Magento/Multishipping/Controller/Checkout/Plugin.php
+++ b/app/code/Magento/Multishipping/Controller/Checkout/Plugin.php
@@ -28,7 +28,7 @@ class Plugin
      * @return void
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function beforeExecute(\Magento\Framework\App\Action\Action $subject)
+    public function beforeExecuteInternal(\Magento\Framework\App\Action\Action $subject)
     {
         $this->cart->getQuote()->setIsMultiShipping(0);
     }
diff --git a/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/PluginTest.php b/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/PluginTest.php
index 9cfb6a0c75f..dc9a3056acd 100644
--- a/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/PluginTest.php
+++ b/app/code/Magento/Multishipping/Test/Unit/Controller/Checkout/PluginTest.php
@@ -39,10 +39,10 @@ class PluginTest extends \PHPUnit_Framework_TestCase
         $this->object = new \Magento\Multishipping\Controller\Checkout\Plugin($this->cartMock);
     }
 
-    public function testExecuteTurnsOffMultishippingModeOnQuote()
+    public function testExecuteInternalTurnsOffMultishippingModeOnQuote()
     {
         $subject = $this->getMock('Magento\Checkout\Controller\Index\Index', [], [], '', false);
         $this->quoteMock->expects($this->once())->method('setIsMultiShipping')->with(0);
-        $this->object->beforeExecute($subject);
+        $this->object->beforeExecuteInternal($subject);
     }
 }
diff --git a/app/code/Magento/Rss/App/Action/Plugin/BackendAuthentication.php b/app/code/Magento/Rss/App/Action/Plugin/BackendAuthentication.php
index 5bdb72f7036..f3e450c8c72 100644
--- a/app/code/Magento/Rss/App/Action/Plugin/BackendAuthentication.php
+++ b/app/code/Magento/Rss/App/Action/Plugin/BackendAuthentication.php
@@ -95,7 +95,7 @@ class BackendAuthentication extends \Magento\Backend\App\Action\Plugin\Authentic
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
-    public function aroundDispatch(AbstractAction $subject, \Closure $proceed, RequestInterface $request)
+    public function aroundExecute(AbstractAction $subject, \Closure $proceed, RequestInterface $request)
     {
         $resource = isset($this->aclResources[$request->getControllerName()])
             ? isset($this->aclResources[$request->getControllerName()][$request->getActionName()])
@@ -107,7 +107,7 @@ class BackendAuthentication extends \Magento\Backend\App\Action\Plugin\Authentic
         $resourceType = isset($this->aclResources[$type]) ? $this->aclResources[$type] : null;
 
         if (!$resource || !$resourceType) {
-            return parent::aroundDispatch($subject, $proceed, $request);
+            return parent::aroundExecute($subject, $proceed, $request);
         }
 
         $session = $this->_auth->getAuthStorage();
@@ -129,6 +129,6 @@ class BackendAuthentication extends \Magento\Backend\App\Action\Plugin\Authentic
             return $this->_response;
         }
 
-        return parent::aroundDispatch($subject, $proceed, $request);
+        return parent::aroundExecute($subject, $proceed, $request);
     }
 }
diff --git a/app/code/Magento/Rss/Test/Unit/App/Action/Plugin/BackendAuthenticationTest.php b/app/code/Magento/Rss/Test/Unit/App/Action/Plugin/BackendAuthenticationTest.php
index 79685fb88a3..240da650216 100644
--- a/app/code/Magento/Rss/Test/Unit/App/Action/Plugin/BackendAuthenticationTest.php
+++ b/app/code/Magento/Rss/Test/Unit/App/Action/Plugin/BackendAuthenticationTest.php
@@ -7,7 +7,7 @@ namespace Magento\Rss\Test\Unit\App\Action\Plugin;
 
 class BackendAuthenticationTest extends \PHPUnit_Framework_TestCase
 {
-    public function testAroundDispatch()
+    public function testAroundExecute()
     {
         /** @var \Magento\Backend\App\AbstractAction|\PHPUnit_Framework_MockObject_MockObject $subject */
         $subject = $this->getMock('Magento\Backend\App\AbstractAction', [], [], '', false);
@@ -69,7 +69,7 @@ class BackendAuthenticationTest extends \PHPUnit_Framework_TestCase
             );
         $this->assertSame(
             $response,
-            $plugin->aroundDispatch($subject, $proceed, $request)
+            $plugin->aroundExecute($subject, $proceed, $request)
         );
     }
 }
diff --git a/app/code/Magento/Sales/Controller/Order/Plugin/Authentication.php b/app/code/Magento/Sales/Controller/Order/Plugin/Authentication.php
index e496f13e7a6..fed11efb271 100644
--- a/app/code/Magento/Sales/Controller/Order/Plugin/Authentication.php
+++ b/app/code/Magento/Sales/Controller/Order/Plugin/Authentication.php
@@ -40,7 +40,7 @@ class Authentication
      * @return void
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function beforeDispatch(\Magento\Framework\App\ActionInterface $subject, RequestInterface $request)
+    public function beforeExecute(\Magento\Framework\App\ActionInterface $subject, RequestInterface $request)
     {
         $loginUrl = $this->customerUrl->getLoginUrl();
 
diff --git a/app/code/Magento/Store/App/Action/Plugin/Context.php b/app/code/Magento/Store/App/Action/Plugin/Context.php
index 6e3e3f4e4f5..533104a5689 100644
--- a/app/code/Magento/Store/App/Action/Plugin/Context.php
+++ b/app/code/Magento/Store/App/Action/Plugin/Context.php
@@ -69,7 +69,7 @@ class Context
      * @return mixed
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function aroundDispatch(
+    public function aroundExecute(
         \Magento\Framework\App\ActionInterface $subject,
         \Closure $proceed,
         \Magento\Framework\App\RequestInterface $request
diff --git a/app/code/Magento/Store/App/Action/Plugin/StoreCheck.php b/app/code/Magento/Store/App/Action/Plugin/StoreCheck.php
index 46fa0bc004a..8519652f11b 100644
--- a/app/code/Magento/Store/App/Action/Plugin/StoreCheck.php
+++ b/app/code/Magento/Store/App/Action/Plugin/StoreCheck.php
@@ -31,7 +31,7 @@ class StoreCheck
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      * @throws \Magento\Framework\Exception\State\InitException
      */
-    public function aroundDispatch(
+    public function aroundExecute(
         \Magento\Framework\App\ActionInterface $subject,
         \Closure $proceed,
         \Magento\Framework\App\RequestInterface $request
diff --git a/app/code/Magento/Store/Test/Unit/App/Action/Plugin/ContextTest.php b/app/code/Magento/Store/Test/Unit/App/Action/Plugin/ContextTest.php
index e6c679b2dd4..5614f453839 100644
--- a/app/code/Magento/Store/Test/Unit/App/Action/Plugin/ContextTest.php
+++ b/app/code/Magento/Store/Test/Unit/App/Action/Plugin/ContextTest.php
@@ -185,7 +185,7 @@ class ContextTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue(self::CURRENCY_CURRENT_STORE));
     }
 
-    public function testAroundDispatchCurrencyFromSession()
+    public function testAroundExecuteCurrencyFromSession()
     {
         $this->sessionMock->expects($this->any())
             ->method('getCurrencyCode')
@@ -201,11 +201,11 @@ class ContextTest extends \PHPUnit_Framework_TestCase
 
         $this->assertEquals(
             'ExpectedValue',
-            $this->plugin->aroundDispatch($this->subjectMock, $this->closureMock, $this->requestMock)
+            $this->plugin->aroundExecute($this->subjectMock, $this->closureMock, $this->requestMock)
         );
     }
 
-    public function testDispatchCurrentStoreCurrency()
+    public function testExecuteCurrentStoreCurrency()
     {
         $this->httpContextMock->expects($this->at(0))
             ->method('setValue')
@@ -217,7 +217,7 @@ class ContextTest extends \PHPUnit_Framework_TestCase
 
         $this->assertEquals(
             'ExpectedValue',
-            $this->plugin->aroundDispatch($this->subjectMock, $this->closureMock, $this->requestMock)
+            $this->plugin->aroundExecute($this->subjectMock, $this->closureMock, $this->requestMock)
         );
     }
 }
diff --git a/app/code/Magento/Store/Test/Unit/App/Action/Plugin/StoreCheckTest.php b/app/code/Magento/Store/Test/Unit/App/Action/Plugin/StoreCheckTest.php
index feaca2ad45e..e83d629fb81 100644
--- a/app/code/Magento/Store/Test/Unit/App/Action/Plugin/StoreCheckTest.php
+++ b/app/code/Magento/Store/Test/Unit/App/Action/Plugin/StoreCheckTest.php
@@ -64,21 +64,21 @@ class StoreCheckTest extends \PHPUnit_Framework_TestCase
      * @expectedException \Magento\Framework\Exception\State\InitException
      * @expectedExceptionMessage Current store is not active.
      */
-    public function testAroundDispatchWhenStoreNotActive()
+    public function testAroundExecuteWhenStoreNotActive()
     {
         $this->_storeMock->expects($this->any())->method('isActive')->will($this->returnValue(false));
         $this->assertEquals(
             'Expected',
-            $this->_plugin->aroundDispatch($this->subjectMock, $this->closureMock, $this->requestMock)
+            $this->_plugin->aroundExecute($this->subjectMock, $this->closureMock, $this->requestMock)
         );
     }
 
-    public function testAroundDispatchWhenStoreIsActive()
+    public function testAroundExecuteWhenStoreIsActive()
     {
         $this->_storeMock->expects($this->any())->method('isActive')->will($this->returnValue(true));
         $this->assertEquals(
             'Expected',
-            $this->_plugin->aroundDispatch($this->subjectMock, $this->closureMock, $this->requestMock)
+            $this->_plugin->aroundExecute($this->subjectMock, $this->closureMock, $this->requestMock)
         );
     }
 
diff --git a/app/code/Magento/Swatches/Controller/Adminhtml/Product/Attribute/Plugin/Save.php b/app/code/Magento/Swatches/Controller/Adminhtml/Product/Attribute/Plugin/Save.php
index e9da825c657..1b9259fb0c6 100644
--- a/app/code/Magento/Swatches/Controller/Adminhtml/Product/Attribute/Plugin/Save.php
+++ b/app/code/Magento/Swatches/Controller/Adminhtml/Product/Attribute/Plugin/Save.php
@@ -22,7 +22,7 @@ class Save
      * @return array
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function beforeDispatch(Attribute\Save $subject, RequestInterface $request)
+    public function beforeExecute(Attribute\Save $subject, RequestInterface $request)
     {
         $data = $request->getPostValue();
         if (isset($data['frontend_input'])) {
diff --git a/app/code/Magento/Swatches/Test/Unit/Controller/Adminhtml/Product/Attribute/Plugin/SaveTest.php b/app/code/Magento/Swatches/Test/Unit/Controller/Adminhtml/Product/Attribute/Plugin/SaveTest.php
index c1d0356f66d..ab54e2ceca4 100644
--- a/app/code/Magento/Swatches/Test/Unit/Controller/Adminhtml/Product/Attribute/Plugin/SaveTest.php
+++ b/app/code/Magento/Swatches/Test/Unit/Controller/Adminhtml/Product/Attribute/Plugin/SaveTest.php
@@ -11,7 +11,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
     /**
      * @dataProvider dataRequest
      */
-    public function testBeforeDispatch($dataRequest, $runTimes)
+    public function testBeforeExecute($dataRequest, $runTimes)
     {
         $subject = $this->getMock('\Magento\Catalog\Controller\Adminhtml\Product\Attribute\Save', [], [], '', false);
         $request = $this->getMock(
@@ -40,7 +40,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
         $request->expects($this->once())->method('getPostValue')->willReturn($dataRequest);
         $request->expects($this->exactly($runTimes))->method('setPostValue')->willReturn($this->returnSelf());
 
-        $controller->beforeDispatch($subject, $request);
+        $controller->beforeExecute($subject, $request);
     }
 
     public function dataRequest()
diff --git a/app/code/Magento/Tax/Model/App/Action/ContextPlugin.php b/app/code/Magento/Tax/Model/App/Action/ContextPlugin.php
index 70c1e600071..408cb5aad84 100644
--- a/app/code/Magento/Tax/Model/App/Action/ContextPlugin.php
+++ b/app/code/Magento/Tax/Model/App/Action/ContextPlugin.php
@@ -79,7 +79,7 @@ class ContextPlugin
      * @return mixed
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function aroundDispatch(
+    public function aroundExecute(
         \Magento\Framework\App\ActionInterface $subject,
         \Closure $proceed,
         \Magento\Framework\App\RequestInterface $request
diff --git a/app/code/Magento/Tax/Test/Unit/App/Action/ContextPluginTest.php b/app/code/Magento/Tax/Test/Unit/App/Action/ContextPluginTest.php
index f8ab3eb71e9..7fc90aa1d64 100644
--- a/app/code/Magento/Tax/Test/Unit/App/Action/ContextPluginTest.php
+++ b/app/code/Magento/Tax/Test/Unit/App/Action/ContextPluginTest.php
@@ -111,9 +111,9 @@ class ContextPluginTest extends \PHPUnit_Framework_TestCase
      * @param bool $cache
      * @param bool $taxEnabled
      * @param bool $loggedIn
-     * @dataProvider dataProviderAroundDispatch
+     * @dataProvider dataProviderAroundExecute
      */
-    public function testAroundDispatch($cache, $taxEnabled, $loggedIn)
+    public function testAroundExecute($cache, $taxEnabled, $loggedIn)
     {
         $this->customerSessionMock->expects($this->any())
             ->method('isLoggedIn')
@@ -164,14 +164,14 @@ class ContextPluginTest extends \PHPUnit_Framework_TestCase
             $proceed = function ($request) use ($expectedResult) {
                 return $expectedResult;
             };
-            $this->contextPlugin->aroundDispatch($action, $proceed, $request);
+            $this->contextPlugin->aroundExecute($action, $proceed, $request);
         }
     }
 
     /**
      * @return array
      */
-    public function dataProviderAroundDispatch()
+    public function dataProviderAroundExecute()
     {
         return [
             [false, false, false],
diff --git a/app/code/Magento/Theme/Model/Theme/Plugin/Registration.php b/app/code/Magento/Theme/Model/Theme/Plugin/Registration.php
index 0f469442c15..1e0f900a6ec 100644
--- a/app/code/Magento/Theme/Model/Theme/Plugin/Registration.php
+++ b/app/code/Magento/Theme/Model/Theme/Plugin/Registration.php
@@ -47,7 +47,7 @@ class Registration
      * @return void
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function beforeDispatch(
+    public function beforeExecute(
         AbstractAction $subject,
         RequestInterface $request
     ) {
diff --git a/app/code/Magento/Theme/Test/Unit/Model/Theme/Plugin/RegistrationTest.php b/app/code/Magento/Theme/Test/Unit/Model/Theme/Plugin/RegistrationTest.php
index faf0bdf9838..d9ac94ddbe7 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/Theme/Plugin/RegistrationTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/Theme/Plugin/RegistrationTest.php
@@ -35,30 +35,30 @@ class RegistrationTest extends \PHPUnit_Framework_TestCase
         $this->appState = $this->getMock('Magento\Framework\App\State', [], [], '', false);
     }
 
-    public function testBeforeDispatch()
+    public function testBeforeExecute()
     {
         $this->appState->expects($this->once())->method('getMode')->willReturn('default');
         $this->themeRegistration->expects($this->once())->method('register');
         $this->logger->expects($this->never())->method('critical');
         $object = new Registration($this->themeRegistration, $this->logger, $this->appState);
-        $object->beforeDispatch($this->abstractAction, $this->request);
+        $object->beforeExecute($this->abstractAction, $this->request);
     }
 
-    public function testBeforeDispatchWithProductionMode()
+    public function testBeforeExecuteWithProductionMode()
     {
         $this->appState->expects($this->once())->method('getMode')->willReturn('production');
         $this->themeRegistration->expects($this->never())->method('register');
         $this->logger->expects($this->never())->method('critical');
         $object = new Registration($this->themeRegistration, $this->logger, $this->appState);
-        $object->beforeDispatch($this->abstractAction, $this->request);
+        $object->beforeExecute($this->abstractAction, $this->request);
     }
 
-    public function testBeforeDispatchWithException()
+    public function testBeforeExecuteWithException()
     {
         $exception = new LocalizedException(new Phrase('Phrase'));
         $this->themeRegistration->expects($this->once())->method('register')->willThrowException($exception);
         $this->logger->expects($this->once())->method('critical');
         $object = new Registration($this->themeRegistration, $this->logger, $this->appState);
-        $object->beforeDispatch($this->abstractAction, $this->request);
+        $object->beforeExecute($this->abstractAction, $this->request);
     }
 }
diff --git a/app/code/Magento/Weee/Model/App/Action/ContextPlugin.php b/app/code/Magento/Weee/Model/App/Action/ContextPlugin.php
index 19502e3d794..052e4679027 100644
--- a/app/code/Magento/Weee/Model/App/Action/ContextPlugin.php
+++ b/app/code/Magento/Weee/Model/App/Action/ContextPlugin.php
@@ -100,7 +100,7 @@ class ContextPlugin
      * @SuppressWarnings(PHPMD.NPathComplexity)
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
-    public function aroundDispatch(
+    public function aroundExecute(
         \Magento\Framework\App\ActionInterface $subject,
         \Closure $proceed,
         \Magento\Framework\App\RequestInterface $request
diff --git a/app/code/Magento/Weee/Test/Unit/App/Action/ContextPluginTest.php b/app/code/Magento/Weee/Test/Unit/App/Action/ContextPluginTest.php
index d910384f79e..5f771f2748e 100644
--- a/app/code/Magento/Weee/Test/Unit/App/Action/ContextPluginTest.php
+++ b/app/code/Magento/Weee/Test/Unit/App/Action/ContextPluginTest.php
@@ -123,7 +123,7 @@ class ContextPluginTest extends \PHPUnit_Framework_TestCase
         );
     }
 
-    public function testAroundDispatchBasedOnDefault()
+    public function testAroundExecuteBasedOnDefault()
     {
         $this->customerSessionMock->expects($this->once())
             ->method('isLoggedIn')
@@ -191,10 +191,10 @@ class ContextPluginTest extends \PHPUnit_Framework_TestCase
         $proceed = function ($request) use ($expectedResult) {
             return $expectedResult;
         };
-        $this->contextPlugin->aroundDispatch($action, $proceed, $request);
+        $this->contextPlugin->aroundExecute($action, $proceed, $request);
     }
 
-    public function testAroundDispatchBasedOnOrigin()
+    public function testAroundExecuteBasedOnOrigin()
     {
         $this->customerSessionMock->expects($this->once())
             ->method('isLoggedIn')
@@ -223,10 +223,10 @@ class ContextPluginTest extends \PHPUnit_Framework_TestCase
         $proceed = function ($request) use ($expectedResult) {
             return $expectedResult;
         };
-        $this->contextPlugin->aroundDispatch($action, $proceed, $request);
+        $this->contextPlugin->aroundExecute($action, $proceed, $request);
     }
 
-    public function testAroundDispatchBasedOnBilling()
+    public function testAroundExecuteBasedOnBilling()
     {
         $this->customerSessionMock->expects($this->once())
             ->method('isLoggedIn')
@@ -298,10 +298,10 @@ class ContextPluginTest extends \PHPUnit_Framework_TestCase
         $proceed = function ($request) use ($expectedResult) {
             return $expectedResult;
         };
-        $this->contextPlugin->aroundDispatch($action, $proceed, $request);
+        $this->contextPlugin->aroundExecute($action, $proceed, $request);
     }
 
-    public function testAroundDispatchBasedOnShipping()
+    public function testAroundExecuteBasedOnShipping()
     {
         $this->customerSessionMock->expects($this->once())
             ->method('isLoggedIn')
@@ -373,6 +373,6 @@ class ContextPluginTest extends \PHPUnit_Framework_TestCase
         $proceed = function ($request) use ($expectedResult) {
             return $expectedResult;
         };
-        $this->contextPlugin->aroundDispatch($action, $proceed, $request);
+        $this->contextPlugin->aroundExecute($action, $proceed, $request);
     }
 }
diff --git a/app/code/Magento/Wishlist/Controller/Index/Plugin.php b/app/code/Magento/Wishlist/Controller/Index/Plugin.php
index 3f179a2e9a6..10e6cdd0b0c 100644
--- a/app/code/Magento/Wishlist/Controller/Index/Plugin.php
+++ b/app/code/Magento/Wishlist/Controller/Index/Plugin.php
@@ -60,7 +60,7 @@ class Plugin
      * @return void
      * @throws \Magento\Framework\Exception\NotFoundException
      */
-    public function beforeDispatch(\Magento\Framework\App\ActionInterface $subject, RequestInterface $request)
+    public function beforeExecute(\Magento\Framework\App\ActionInterface $subject, RequestInterface $request)
     {
         if ($this->authenticationState->isEnabled() && !$this->customerSession->authenticate()) {
             $subject->getActionFlag()->set('', 'no-dispatch', true);
diff --git a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/PluginTest.php b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/PluginTest.php
index 4c905abca28..011eb067e36 100644
--- a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/PluginTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/PluginTest.php
@@ -66,7 +66,7 @@ class PluginTest extends \PHPUnit_Framework_TestCase
     /**
      * @expectedException \Magento\Framework\Exception\NotFoundException
      */
-    public function testBeforeDispatch()
+    public function testBeforeExecute()
     {
         $actionFlag = $this->getMock('Magento\Framework\App\ActionFlag', [], [], '', false);
         $indexController = $this->getMock('Magento\Wishlist\Controller\Index\Index', [], [], '', false);
@@ -124,6 +124,6 @@ class PluginTest extends \PHPUnit_Framework_TestCase
             ->with('wishlist/general/active')
             ->willReturn(false);
 
-        $this->getPlugin()->beforeDispatch($indexController, $this->request);
+        $this->getPlugin()->beforeExecute($indexController, $this->request);
     }
 }
diff --git a/lib/internal/Magento/Framework/App/Action/Plugin/Design.php b/lib/internal/Magento/Framework/App/Action/Plugin/Design.php
index 5bb0556fe64..3d2f794ad14 100644
--- a/lib/internal/Magento/Framework/App/Action/Plugin/Design.php
+++ b/lib/internal/Magento/Framework/App/Action/Plugin/Design.php
@@ -30,7 +30,7 @@ class Design
      * @return mixed
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function aroundDispatch(
+    public function aroundExecute(
         \Magento\Framework\App\ActionInterface $subject,
         \Closure $proceed,
         \Magento\Framework\App\RequestInterface $request
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Action/Plugin/DesignTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Action/Plugin/DesignTest.php
index 2e86c5da431..401e9896155 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/Action/Plugin/DesignTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/Action/Plugin/DesignTest.php
@@ -7,7 +7,7 @@ namespace Magento\Framework\App\Test\Unit\Action\Plugin;
 
 class DesignTest extends \PHPUnit_Framework_TestCase
 {
-    public function testAroundDispatch()
+    public function testAroundExecute()
     {
         $subjectMock = $this->getMock('Magento\Framework\App\Action\Action', [], [], '', false);
         $designLoaderMock = $this->getMock('Magento\Framework\View\DesignLoader', [], [], '', false);
@@ -17,6 +17,6 @@ class DesignTest extends \PHPUnit_Framework_TestCase
         $requestMock = $this->getMock('Magento\Framework\App\RequestInterface');
         $plugin = new \Magento\Framework\App\Action\Plugin\Design($designLoaderMock);
         $designLoaderMock->expects($this->once())->method('load');
-        $this->assertEquals('Expected', $plugin->aroundDispatch($subjectMock, $closureMock, $requestMock));
+        $this->assertEquals('Expected', $plugin->aroundExecute($subjectMock, $closureMock, $requestMock));
     }
 }
-- 
GitLab


From 4fda69b73e93e2f044fda1483a68a2a39e0a6f19 Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Fri, 23 Oct 2015 22:59:34 -0500
Subject: [PATCH 273/370] MAGETWO-41954: Eliminate code generatio in production
 mode

---
 .../Module/Di/App/Task/Operation/ApplicationCodeGenerator.php   | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ApplicationCodeGenerator.php b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ApplicationCodeGenerator.php
index dfaf5b99570..b18f413fb68 100644
--- a/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ApplicationCodeGenerator.php
+++ b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ApplicationCodeGenerator.php
@@ -36,6 +36,8 @@ class ApplicationCodeGenerator implements OperationInterface
 
     /**
      * @param ClassesScanner $classesScanner
+     * @param PhpScanner $phpScanner
+     * @param DirectoryScanner $directoryScanner
      * @param array $data
      */
     public function __construct(
-- 
GitLab


From a2b82cc982823bc9d5e122b4c80b4df2841ffeb3 Mon Sep 17 00:00:00 2001
From: Dmytro Aponasenko <daponasenko@ebay.com>
Date: Sat, 24 Oct 2015 10:20:13 +0300
Subject: [PATCH 274/370] MTA-2723: Functional test maintenance. Part 2

---
 .../Constraint/AssertProductAttributeSuccessDeleteMessage.php   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeSuccessDeleteMessage.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeSuccessDeleteMessage.php
index c950b22bff3..c911e7f7b57 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeSuccessDeleteMessage.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Constraint/AssertProductAttributeSuccessDeleteMessage.php
@@ -25,7 +25,7 @@ class AssertProductAttributeSuccessDeleteMessage extends AbstractConstraint
      */
     public function processAssert(CatalogProductAttributeIndex $attributeIndex)
     {
-        $actualMessage = $attributeIndex->getMessagesBlock()->getSuccessMessages();
+        $actualMessage = $attributeIndex->getMessagesBlock()->getSuccessMessage();
         \PHPUnit_Framework_Assert::assertEquals(
             self::SUCCESS_MESSAGE,
             $actualMessage,
-- 
GitLab


From 29e5e06779b431139d2191184ffdd74ef71b4a1c Mon Sep 17 00:00:00 2001
From: Maksym Aposov <maposov@ebay.com>
Date: Sat, 24 Oct 2015 11:18:16 +0300
Subject: [PATCH 275/370] MAGETWO-44516: Provide fix for Functional Tests MX

---
 .../tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php       | 1 +
 1 file changed, 1 insertion(+)

diff --git a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
index 5757bf446e6..00c89a9adbe 100644
--- a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
+++ b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
@@ -139,6 +139,7 @@ class DataGrid extends Grid
         if ($chipsHolder->isVisible()) {
             parent::resetFilter();
         }
+        $this->waitLoader();
     }
 
     /**
-- 
GitLab


From bbdde4b959e62ba8b94b9864bee24ceeaadc69eb Mon Sep 17 00:00:00 2001
From: Maksym Aposov <maposov@ebay.com>
Date: Sat, 24 Oct 2015 12:47:56 +0300
Subject: [PATCH 276/370] MAGETWO-44516: Provide fix for Functional Tests MX

---
 .../Adminhtml/Product/Edit/Tab/Super/Config.php  | 16 ++++++++++++----
 .../Product/Edit/Tab/Super/Config/Attribute.php  |  2 ++
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config.php
index 846c920cd94..4d3ffcde950 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config.php
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config.php
@@ -60,14 +60,21 @@ class Config extends Tab
      *
      * @var string
      */
-    protected $attributeElement = '.entry-edit.have-price';
+    protected $attributeElement = 'tr[data-row-number]';
 
     /**
      * Delete variation button selector.
      *
      * @var string
      */
-    protected $deleteVariationButton = '.action-delete';
+    protected $deleteVariation = '[data-bind*="removeProduct"]';
+
+    /**
+     * Action menu
+     *
+     * @var string
+     */
+    protected $actionMenu = '.action-select';
 
     /**
      * Variations content selector.
@@ -199,9 +206,10 @@ class Config extends Tab
     public function deleteAttributes()
     {
         $attributeElements = $this->_rootElement->getElements($this->attributeElement);
-        $this->_rootElement->find($this->variationsContent)->click();
         foreach (array_reverse($attributeElements) as $element) {
-            $element->find($this->deleteVariationButton)->click();
+            $element->find($this->actionMenu)->hover();
+            $element->find($this->actionMenu)->click();
+            $element->find($this->deleteVariation)->click();
         }
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute.php
index f8bd1fd052c..eefb72a17d6 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute.php
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute.php
@@ -272,6 +272,7 @@ class Attribute extends Form
             $label = isset($option['admin']) ? $option['admin'] : $option['label'];
             $optionContainer = $attributeBlock->find(sprintf($this->attributeOptionByName, $label));
 
+            //Create option
             if (!$optionContainer->isVisible()) {
                 $mapping = $this->dataMapping($option);
                 $attributeBlock->find($this->addOption)->click();
@@ -282,6 +283,7 @@ class Attribute extends Form
                     ->setValue($mapping['label']['value']);
                 $this->getTemplateBlock()->waitLoader();
                 $optionContainer->find('[data-action=save]')->click();
+                $optionContainer = $attributeBlock->find(sprintf($this->attributeOptionByName, $label));
             }
             //Select option
             if (!$optionContainer->find('[type="checkbox"]')->isSelected()) {
-- 
GitLab


From 192144cad4f7291d9002b0faebf5a14f8f1862b5 Mon Sep 17 00:00:00 2001
From: Anton Ohorodnyk <aohorodnyk@ebay.com>
Date: Sat, 24 Oct 2015 14:45:52 +0300
Subject: [PATCH 277/370] MAGETWO-44432: [GITHUB] Manage stock on Product level
 --> Use Config Settings is never checked by default #2141

---
 .../Block/Adminhtml/Form/Field/Stock.php               | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/CatalogInventory/Block/Adminhtml/Form/Field/Stock.php b/app/code/Magento/CatalogInventory/Block/Adminhtml/Form/Field/Stock.php
index 7ae7f318a2f..b65a601444c 100644
--- a/app/code/Magento/CatalogInventory/Block/Adminhtml/Form/Field/Stock.php
+++ b/app/code/Magento/CatalogInventory/Block/Adminhtml/Form/Field/Stock.php
@@ -188,6 +188,7 @@ class Stock extends \Magento\Framework\Data\Form\Element\Select
                                 '{$inStockFieldId}': 'inventory_stock_availability'
                             };
 
+                        var qtyDefaultValue = qty.val();
                         var disabler = function(event) {
                             if (typeof(event) === 'undefined') {
                                 return;
@@ -197,8 +198,13 @@ class Stock extends \Magento\Framework\Data\Form\Element\Select
                             if (stockBeforeDisable.result !== false) {
                                 var manageStockValue = {$isNewProduct}
                                     ? (qty.val() === '' ? 0 : 1)
-                                    : parseInt(manageStockField.val()),
-                                    stockAssociations = $('#' + fieldsAssociations['{$inStockFieldId}']);
+                                    : parseInt(manageStockField.val());
+                                if ({$isNewProduct} && qtyDefaultValue !== null && qtyDefaultValue === qty.val()) {
+                                    manageStockValue = parseInt(manageStockField.val());
+                                } else {
+                                    qtyDefaultValue = null;
+                                }
+                                var stockAssociations = $('#' + fieldsAssociations['{$inStockFieldId}']);
                                 stockAvailabilityField.prop('disabled', !manageStockValue);
                                 stockAssociations.prop('disabled', !manageStockValue);
                                 if ($(event.currentTarget).attr('id') === qty.attr('id') && event.type != 'change') {
-- 
GitLab


From 6a48b921bdf186d548b73cd23991d9b42568b702 Mon Sep 17 00:00:00 2001
From: Maxim Medinskiy <mmedinskiy@ebay.com>
Date: Sat, 24 Oct 2015 14:58:41 +0300
Subject: [PATCH 278/370] MAGETWO-44537: 'Choose a different Product' action
 does not work for Configurable product

---
 .../Catalog/Ui/Component/ColumnFactory.php       | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php b/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php
index 58de2b262c8..ab061a2c756 100644
--- a/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php
+++ b/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php
@@ -55,6 +55,9 @@ class ColumnFactory
             'dataType' => $this->getDataType($attribute),
             'add_field' => true,
             'visible' => $attribute->getIsVisibleInGrid(),
+            'filter' => ($attribute->getIsFilterableInGrid())
+                ? $this->getFilterType($attribute->getFrontendInput())
+                : null,
         ], $config);
 
         if ($attribute->usesSource()) {
@@ -92,4 +95,17 @@ class ColumnFactory
             ? $this->dataTypeMap[$attribute->getFrontendInput()]
             : $this->dataTypeMap['default'];
     }
+
+    /**
+     * Retrieve filter type by $frontendInput
+     *
+     * @param string $frontendInput
+     * @return string
+     */
+    protected function getFilterType($frontendInput)
+    {
+        $filtersMap = ['date' => 'dateRange'];
+        $result = array_replace_recursive($this->dataTypeMap, $filtersMap);
+        return isset($result[$frontendInput]) ? $result[$frontendInput] : $result['default'];
+    }
 }
-- 
GitLab


From 4f8cbe114be3ce22f78e54b5aaeb15187d87d861 Mon Sep 17 00:00:00 2001
From: Oleksandr Karpenko <okarpenko@ebay.com>
Date: Sat, 24 Oct 2015 15:35:58 +0300
Subject: [PATCH 279/370] MAGETWO-40284: Frontend app and unsubscribe link are
 broken in newsletter sent out

---
 .../Model/Queue/TransportBuilder.php          |  17 ++-
 .../Newsletter/Model/Template/Filter.php      |   2 +-
 .../Unit/Model/Queue/TransportBuilderTest.php |  10 +-
 .../Test/Unit/Model/Template/FilterTest.php   | 126 ++++++++++++++++++
 4 files changed, 152 insertions(+), 3 deletions(-)
 create mode 100644 app/code/Magento/Newsletter/Test/Unit/Model/Template/FilterTest.php

diff --git a/app/code/Magento/Newsletter/Model/Queue/TransportBuilder.php b/app/code/Magento/Newsletter/Model/Queue/TransportBuilder.php
index 7ee8fc1c9f6..781c181eb90 100644
--- a/app/code/Magento/Newsletter/Model/Queue/TransportBuilder.php
+++ b/app/code/Magento/Newsletter/Model/Queue/TransportBuilder.php
@@ -5,6 +5,8 @@
  */
 namespace Magento\Newsletter\Model\Queue;
 
+use Magento\Email\Model\AbstractTemplate;
+
 class TransportBuilder extends \Magento\Framework\Mail\Template\TransportBuilder
 {
     /**
@@ -26,17 +28,30 @@ class TransportBuilder extends \Magento\Framework\Mail\Template\TransportBuilder
         return $this;
     }
 
+    /**
+     * @param AbstractTemplate $template
+     * @return void
+     */
+    protected function setTemplateFilter(AbstractTemplate $template)
+    {
+        if (isset($this->templateData['template_filter'])) {
+            $template->setTemplateFilter($this->templateData['template_filter']);
+        }
+    }
+
     /**
      * @inheritdoc
      */
     protected function prepareMessage()
     {
+        /** @var AbstractTemplate $template */
         $template = $this->getTemplate()->setData($this->templateData);
+        $this->setTemplateFilter($template);
 
         $this->message->setMessageType(
             \Magento\Framework\Mail\MessageInterface::TYPE_HTML
         )->setBody(
-            $template->getProcessedTemplate()
+            $template->getProcessedTemplate($this->templateVars)
         )->setSubject(
             $template->getSubject()
         );
diff --git a/app/code/Magento/Newsletter/Model/Template/Filter.php b/app/code/Magento/Newsletter/Model/Template/Filter.php
index 43a68d085bb..0a2abbcacfd 100644
--- a/app/code/Magento/Newsletter/Model/Template/Filter.php
+++ b/app/code/Magento/Newsletter/Model/Template/Filter.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Newsletter\Model\Template;
 
-class Filter extends \Magento\Widget\Model\Template\Filter
+class Filter extends \Magento\Widget\Model\Template\FilterEmulate
 {
     /**
      * Generate widget HTML if template variables are assigned
diff --git a/app/code/Magento/Newsletter/Test/Unit/Model/Queue/TransportBuilderTest.php b/app/code/Magento/Newsletter/Test/Unit/Model/Queue/TransportBuilderTest.php
index 52a501f9ef3..dd7ff0eac5f 100644
--- a/app/code/Magento/Newsletter/Test/Unit/Model/Queue/TransportBuilderTest.php
+++ b/app/code/Magento/Newsletter/Test/Unit/Model/Queue/TransportBuilderTest.php
@@ -32,11 +32,13 @@ class TransportBuilderTest extends \Magento\Framework\Mail\Test\Unit\Template\Tr
         $messageType = MessageInterface::TYPE_HTML,
         $bodyText = '<h1>Html message</h1>'
     ) {
+        $filter = $this->getMock('Magento\Email\Model\Template\Filter', [], [], '', false);
         $data = [
             'template_subject' => 'Email Subject',
             'template_text' => $bodyText,
             'template_styles' => 'Styles',
             'template_type' => $templateType,
+            'template_filter' => $filter,
         ];
         $vars = ['reason' => 'Reason', 'customer' => 'Customer'];
         $options = ['area' => 'frontend', 'store' => 1];
@@ -52,8 +54,14 @@ class TransportBuilderTest extends \Magento\Framework\Mail\Test\Unit\Template\Tr
             $this->returnSelf()
         );
         $template->expects($this->once())->method('getSubject')->will($this->returnValue('Email Subject'));
-        $template->expects($this->once())->method('getProcessedTemplate')->will($this->returnValue($bodyText));
         $template->expects($this->once())->method('setData')->with($this->equalTo($data))->will($this->returnSelf());
+        $template->expects($this->once())
+            ->method('getProcessedTemplate')
+            ->with($vars)
+            ->will($this->returnValue($bodyText));
+        $template->expects($this->once())
+            ->method('setTemplateFilter')
+            ->with($filter);
 
         $this->templateFactoryMock->expects(
             $this->once()
diff --git a/app/code/Magento/Newsletter/Test/Unit/Model/Template/FilterTest.php b/app/code/Magento/Newsletter/Test/Unit/Model/Template/FilterTest.php
new file mode 100644
index 00000000000..bf809df28ef
--- /dev/null
+++ b/app/code/Magento/Newsletter/Test/Unit/Model/Template/FilterTest.php
@@ -0,0 +1,126 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Newsletter\Test\Unit\Model\Template;
+
+class FilterTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Newsletter\Model\Template\Filter
+     */
+    protected $filter;
+
+    /**
+     * @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $storeManager;
+
+    /**
+     * @var \Magento\Framework\App\State|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $appState;
+
+    public function setUp()
+    {
+        $scopeConfig = $this->getMockForAbstractClass(
+            '\Magento\Framework\App\Config\ScopeConfigInterface',
+            [],
+            '',
+            false
+        );
+        $logger = $this->getMockForAbstractClass('\Psr\Log\LoggerInterface', [], '', false);
+        $this->storeManager = $this->getMockForAbstractClass('\Magento\Store\Model\StoreManagerInterface', [], '', false);
+        $layout = $this->getMockForAbstractClass('\Magento\Framework\View\LayoutInterface', [], '', false);
+        $urlModel = $this->getMockForAbstractClass('\Magento\Framework\UrlInterface', [], '', false);
+        $string = $this->getMock('\Magento\Framework\Stdlib\StringUtils', [], [], '', false);
+        $escaper = $this->getMock('\Magento\Framework\Escaper', [], [], '', false);
+        $assetRepo = $this->getMock('\Magento\Framework\View\Asset\Repository', [], [], '', false);
+        $coreVariableFactory = $this->getMock('\Magento\Variable\Model\VariableFactory', ['create'], [], '', false);
+        $layoutFactory = $this->getMock('\Magento\Framework\View\LayoutFactory', ['create'], [], '', false);
+        $this->appState = $this->getMock('\Magento\Framework\App\State', [], [], '', false);
+        $emogrifier = $this->getMock('\Pelago\Emogrifier', [], [], '', false);
+        $configVariables = $this->getMock('\Magento\Email\Model\Source\Variables', [], [], '', false);
+        $widgetResource = $this->getMock('\Magento\Widget\Model\ResourceModel\Widget', [], [], '', false);
+        $widget = $this->getMock('\Magento\Widget\Model\Widget', [], [], '', false);
+
+        $this->filter = new \Magento\Newsletter\Model\Template\Filter(
+            $string,
+            $logger,
+            $escaper,
+            $assetRepo,
+            $scopeConfig,
+            $coreVariableFactory,
+            $this->storeManager,
+            $layout,
+            $layoutFactory,
+            $this->appState,
+            $urlModel,
+            $emogrifier,
+            $configVariables,
+            $widgetResource,
+            $widget
+        );
+
+    }
+
+    public function testWidgetDirective()
+    {
+        $subscriber = $this->getMock('\Magento\Newsletter\Model\Subscriber', [], [], '', false);
+        $this->filter->setVariables(['subscriber' => $subscriber]);
+
+        $construction = '{{widget type="\Magento\Cms\Block\Widget\Page\Link" page_id="1"}}';
+
+        $store = $this->getMockForAbstractClass('Magento\Store\Api\Data\StoreInterface', [], '', false);
+        $store->expects($this->once())
+            ->method('getId')
+            ->willReturn(1);
+        $this->storeManager->expects($this->once())
+            ->method('getStore')
+            ->willReturn($store);
+        $this->appState->expects($this->once())
+            ->method('emulateAreaCode')
+            ->with(
+                'frontend',
+                [$this->filter, 'generateWidget'],
+                [
+                    [
+                        1 => $construction,
+                        2 => 'type="\Magento\Cms\Block\Widget\Page\Link" page_id="1" store_id ="1"'
+                    ]
+                ]
+            )
+            ->willReturn('<div class="widget block block-cms-link-inline">
+    <a href="http://magento.test/">
+        <span>Home page</span>
+    </a>
+</div>');
+
+        $this->filter->widgetDirective(
+            [
+                1 => $construction,
+                2 => 'type="\Magento\Cms\Block\Widget\Page\Link" page_id="1"'
+            ]
+        );
+    }
+
+    public function testWidgetDirectiveWithoutRequiredVariable()
+    {
+        $construction = '{{widget type="\Magento\Cms\Block\Widget\Page\Link" page_id="1"}}';
+
+        $this->storeManager->expects($this->never())
+            ->method('getStore');
+        $result = $this->filter->widgetDirective(
+            [
+                0 => $construction,
+                1 => 'type="\Magento\Cms\Block\Widget\Page\Link" page_id="1"'
+            ]
+        );
+
+        $this->assertEquals($construction, $result);
+    }
+}
+
+
+
-- 
GitLab


From 3b0e30ee16f40f9cffc926f3932c19631af1fd0f Mon Sep 17 00:00:00 2001
From: Yu Tang <ytang1@ebay.com>
Date: Sat, 24 Oct 2015 08:13:31 -0500
Subject: [PATCH 280/370] MAGETWO-44491: [TD] ActionInterface has Method
 dispatch() Instead of execute()

    - Fix unit test failures
---
 .../Directpost/Payment/RedirectTest.php       | 17 +++++++----
 .../Adminhtml/Cache/CleanMediaTest.php        |  5 ++--
 .../Adminhtml/Dashboard/AbstractTestCase.php  |  4 +--
 .../Adminhtml/Dashboard/CustomersMostTest.php |  2 +-
 .../Dashboard/CustomersNewestTest.php         |  2 +-
 .../Dashboard/ProductsViewedTest.php          |  2 +-
 .../Controller/Creditcard/AjaxSaveTest.php    | 11 ++++----
 .../Creditcard/DeleteConfirmTest.php          | 28 +++++++++++--------
 .../Unit/Controller/Creditcard/DeleteTest.php | 23 +++++++--------
 .../Unit/Controller/Creditcard/EditTest.php   | 23 +++++++--------
 .../Controller/Creditcard/GenerateTest.php    | 14 ++++++----
 .../Unit/Controller/Creditcard/IndexTest.php  |  7 +++--
 .../Controller/Creditcard/NewCardTest.php     |  7 +++--
 .../Unit/Controller/Creditcard/SaveTest.php   |  7 +++--
 .../Unit/Controller/MyCreditCardsTest.php     |  8 +++---
 .../Adminhtml/Email/Template/IndexTest.php    |  6 ++--
 .../Test/Unit/Controller/Ipn/IndexTest.php    |  4 +--
 .../Adminhtml/Order/Creditmemo/SaveTest.php   |  6 ++--
 .../Test/Unit/Controller/Index/IndexTest.php  |  5 ++--
 .../Adminhtml/Rate/AjaxLoadTest.php           | 21 ++++++++------
 .../Tax/IgnoreTaxNotificationTest.php         |  7 +++--
 .../System/Design/Theme/GridTest.php          |  6 ++--
 .../App/Test/Unit/FrontControllerTest.php     |  4 +--
 .../App/Test/Unit/Router/ActionListTest.php   |  2 +-
 .../Test/Unit/Controller/Index/IndexTest.php  |  4 +--
 .../Test/Unit/Controller/NorouteTest.php      |  8 +++---
 26 files changed, 128 insertions(+), 105 deletions(-)

diff --git a/app/code/Magento/Authorizenet/Test/Unit/Controller/Adminhtml/Authorizenet/Directpost/Payment/RedirectTest.php b/app/code/Magento/Authorizenet/Test/Unit/Controller/Adminhtml/Authorizenet/Directpost/Payment/RedirectTest.php
index ad7bb7b5c02..ff31be44371 100644
--- a/app/code/Magento/Authorizenet/Test/Unit/Controller/Adminhtml/Authorizenet/Directpost/Payment/RedirectTest.php
+++ b/app/code/Magento/Authorizenet/Test/Unit/Controller/Adminhtml/Authorizenet/Directpost/Payment/RedirectTest.php
@@ -96,6 +96,11 @@ class RedirectTest extends \PHPUnit_Framework_TestCase
      */
     protected $helperMock;
 
+    /**
+     * @var Redirect|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $controller;
+
     protected function setUp()
     {
         $this->directpostSessionMock = $this->getMockBuilder('Magento\Authorizenet\Model\Directpost\Session')
@@ -196,7 +201,7 @@ class RedirectTest extends \PHPUnit_Framework_TestCase
         );
     }
 
-    public function testExecuteErrorMsgWithoutCancelOrder()
+    public function testExecuteInternalErrorMsgWithoutCancelOrder()
     {
         $params = ['success' => 0, 'error_msg' => 'Error message'];
         $incrementId = 1;
@@ -238,10 +243,10 @@ class RedirectTest extends \PHPUnit_Framework_TestCase
             ->method('register')
             ->with(Iframe::REGISTRY_KEY);
 
-        $this->assertInstanceOf('\Magento\Framework\View\Result\Layout', $this->controller->execute());
+        $this->assertInstanceOf('\Magento\Framework\View\Result\Layout', $this->controller->executeInternal());
     }
 
-    public function testExecuteErrorMsgWithCancelOrder()
+    public function testExecuteInternalErrorMsgWithCancelOrder()
     {
         $params = ['success' => 0, 'error_msg' => 'Error message', 'x_invoice_num' => 1];
         $incrementId = 1;
@@ -273,10 +278,10 @@ class RedirectTest extends \PHPUnit_Framework_TestCase
             ->method('register')
             ->with(Iframe::REGISTRY_KEY);
 
-        $this->assertInstanceOf('\Magento\Framework\View\Result\Layout', $this->controller->execute());
+        $this->assertInstanceOf('\Magento\Framework\View\Result\Layout', $this->controller->executeInternal());
     }
 
-    public function testExecuteSuccess()
+    public function testExecuteInternalSuccess()
     {
         $params = ['success' => 1, 'controller_action_name' => 'action', 'x_invoice_num' => 1];
         $this->requestMock->expects($this->once())
@@ -307,6 +312,6 @@ class RedirectTest extends \PHPUnit_Framework_TestCase
             ->method('register')
             ->with(Iframe::REGISTRY_KEY);
 
-        $this->assertInstanceOf('\Magento\Framework\View\Result\Layout', $this->controller->execute());
+        $this->assertInstanceOf('\Magento\Framework\View\Result\Layout', $this->controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Cache/CleanMediaTest.php b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Cache/CleanMediaTest.php
index 36db725f9a9..1e6619c6f8d 100644
--- a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Cache/CleanMediaTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Cache/CleanMediaTest.php
@@ -10,7 +10,7 @@ namespace Magento\Backend\Test\Unit\Controller\Adminhtml\Cache;
 
 class CleanMediaTest extends \PHPUnit_Framework_TestCase
 {
-    public function testExecute()
+    public function testExecuteInternal()
     {
         // Wire object with mocks
         $response = $this->getMock('Magento\Framework\App\Response\Http', [], [], '', false);
@@ -62,6 +62,7 @@ class CleanMediaTest extends \PHPUnit_Framework_TestCase
         $context->expects($this->once())->method('getMessageManager')->willReturn($messageManager);
         $context->expects($this->once())->method('getResultFactory')->willReturn($resultFactory);
 
+        /** @var \Magento\Backend\Controller\Adminhtml\Cache\CleanMedia $controller */
         $controller = $helper->getObject(
             'Magento\Backend\Controller\Adminhtml\Cache\CleanMedia',
             [
@@ -90,6 +91,6 @@ class CleanMediaTest extends \PHPUnit_Framework_TestCase
             ->willReturnSelf();
 
         // Run
-        $controller->execute();
+        $controller->executeInternal();
     }
 }
diff --git a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/AbstractTestCase.php b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/AbstractTestCase.php
index 986658d7153..3e67b831162 100644
--- a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/AbstractTestCase.php
+++ b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/AbstractTestCase.php
@@ -19,7 +19,7 @@ class AbstractTestCase extends \PHPUnit_Framework_TestCase
      * @param $controllerName
      * @param $blockName
      */
-    protected function assertExecute($controllerName, $blockName)
+    protected function assertExecuteInternal($controllerName, $blockName)
     {
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $outPut = "data";
@@ -47,7 +47,7 @@ class AbstractTestCase extends \PHPUnit_Framework_TestCase
                 'layoutFactory' => $layoutFactoryMock
             ]
         );
-        $result = $controller->execute();
+        $result = $controller->executeInternal();
         $this->assertInstanceOf('Magento\Framework\Controller\Result\Raw', $result);
     }
 }
diff --git a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/CustomersMostTest.php b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/CustomersMostTest.php
index bb7cb6ff15e..f60a0fc9307 100644
--- a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/CustomersMostTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/CustomersMostTest.php
@@ -15,7 +15,7 @@ class CustomersMostTest extends AbstractTestCase
 {
     public function testExecute()
     {
-        $this->assertExecute(
+        $this->assertExecuteInternal(
             'Magento\Backend\Controller\Adminhtml\Dashboard\CustomersMost',
             'Magento\Backend\Block\Dashboard\Tab\Customers\Most'
         );
diff --git a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/CustomersNewestTest.php b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/CustomersNewestTest.php
index d9fdd7366ef..6d229559e58 100644
--- a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/CustomersNewestTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/CustomersNewestTest.php
@@ -15,7 +15,7 @@ class CustomersNewestTest extends AbstractTestCase
 {
     public function testExecute()
     {
-        $this->assertExecute(
+        $this->assertExecuteInternal(
             'Magento\Backend\Controller\Adminhtml\Dashboard\CustomersNewest',
             'Magento\Backend\Block\Dashboard\Tab\Customers\Newest'
         );
diff --git a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/ProductsViewedTest.php b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/ProductsViewedTest.php
index 145a8a14077..4efdf2c4edf 100644
--- a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/ProductsViewedTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/ProductsViewedTest.php
@@ -15,7 +15,7 @@ class ProductsViewedTest extends AbstractTestCase
 {
     public function testExecute()
     {
-        $this->assertExecute(
+        $this->assertExecuteInternal(
             'Magento\Backend\Controller\Adminhtml\Dashboard\ProductsViewed',
             'Magento\Backend\Block\Dashboard\Tab\Products\Viewed'
         );
diff --git a/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/AjaxSaveTest.php b/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/AjaxSaveTest.php
index 53e070f5843..ff09bdb9e32 100644
--- a/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/AjaxSaveTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/AjaxSaveTest.php
@@ -88,8 +88,8 @@ class AjaxSaveTest extends \PHPUnit_Framework_TestCase
             ->method('addSuccess')
             ->with($phrase);
 
-
-        $notification = $objectManager->getObject(
+        /** @var \Magento\Braintree\Controller\Creditcard\AjaxSave $controller */
+        $controller = $objectManager->getObject(
             'Magento\Braintree\Controller\Creditcard\AjaxSave',
             [
                 'request' => $this->request,
@@ -98,7 +98,7 @@ class AjaxSaveTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        $this->assertSame($this->resultJson, $notification->execute());
+        $this->assertSame($this->resultJson, $controller->executeInternal());
     }
 
     /**
@@ -124,7 +124,8 @@ class AjaxSaveTest extends \PHPUnit_Framework_TestCase
             ->method('addError')
             ->with($phrase);
 
-        $notification = $objectManager->getObject(
+        /** @var \Magento\Braintree\Controller\Creditcard\AjaxSave $controller */
+        $controller = $objectManager->getObject(
             'Magento\Braintree\Controller\Creditcard\AjaxSave',
             [
                 'request' => $this->request,
@@ -134,6 +135,6 @@ class AjaxSaveTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        $this->assertSame($this->resultJson, $notification->execute());
+        $this->assertSame($this->resultJson, $controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/DeleteConfirmTest.php b/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/DeleteConfirmTest.php
index a3047c7cac4..13029d4d144 100644
--- a/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/DeleteConfirmTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/DeleteConfirmTest.php
@@ -66,7 +66,7 @@ class DeleteConfirmTest extends \PHPUnit_Framework_TestCase
     /**
      * Executes the controller action and asserts successfully deleted
      */
-    public function testExecute()
+    public function testExecuteInternal()
     {
         $objectManager = new ObjectManagerHelper($this);
         $phrase = new \Magento\Framework\Phrase('Credit card successfully deleted');
@@ -93,7 +93,8 @@ class DeleteConfirmTest extends \PHPUnit_Framework_TestCase
             ->method('addSuccess')
             ->with($phrase);
 
-        $notification = $objectManager->getObject(
+        /** @var \Magento\Braintree\Controller\Creditcard\DeleteConfirm $controller */
+        $controller = $objectManager->getObject(
             'Magento\Braintree\Controller\Creditcard\DeleteConfirm',
             [
                 'request' => $this->request,
@@ -103,13 +104,13 @@ class DeleteConfirmTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        $this->assertSame($this->resultRedirect, $notification->execute());
+        $this->assertSame($this->resultRedirect, $controller->executeInternal());
     }
 
     /**
      * Executes the controller action and asserts with redirect for non valid token param
      */
-    public function testExecuteNoTokenRedirect()
+    public function testExecuteInternalNoTokenRedirect()
     {
         $objectManager = new ObjectManagerHelper($this);
 
@@ -128,7 +129,8 @@ class DeleteConfirmTest extends \PHPUnit_Framework_TestCase
             ->method('setPath')
             ->willReturnSelf();
 
-        $notification = $objectManager->getObject(
+        /** @var \Magento\Braintree\Controller\Creditcard\Edit $controller */
+        $controller = $objectManager->getObject(
             'Magento\Braintree\Controller\Creditcard\Edit',
             [
                 'request' => $this->request,
@@ -137,13 +139,13 @@ class DeleteConfirmTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        $this->assertSame($this->resultRedirect, $notification->execute());
+        $this->assertSame($this->resultRedirect, $controller->executeInternal());
     }
 
     /**
      * Executes the controller action and asserts with redirects for can't delete card logic
      */
-    public function testExecuteNonExistingTokenRedirect()
+    public function testExecuteInternalNonExistingTokenRedirect()
     {
         $objectManager = new ObjectManagerHelper($this);
         $phrase = new \Magento\Framework\Phrase('a,b,c');
@@ -172,7 +174,8 @@ class DeleteConfirmTest extends \PHPUnit_Framework_TestCase
             ->method('addError')
             ->with($phrase);
 
-        $notification = $objectManager->getObject(
+        /** @var \Magento\Braintree\Controller\Creditcard\DeleteConfirm $controller */
+        $controller = $objectManager->getObject(
             'Magento\Braintree\Controller\Creditcard\DeleteConfirm',
             [
                 'request' => $this->request,
@@ -182,13 +185,13 @@ class DeleteConfirmTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        $this->assertSame($this->resultRedirect, $notification->execute());
+        $this->assertSame($this->resultRedirect, $controller->executeInternal());
     }
 
     /**
      * Executes the controller action and asserts failed deletion
      */
-    public function testExecuteSaveFail()
+    public function testExecuteInternalSaveFail()
     {
         $objectManager = new ObjectManagerHelper($this);
         $phrase = new \Magento\Framework\Phrase('There was error deleting the credit card');
@@ -214,7 +217,8 @@ class DeleteConfirmTest extends \PHPUnit_Framework_TestCase
             ->method('addError')
             ->with($phrase);
 
-        $notification = $objectManager->getObject(
+        /** @var \Magento\Braintree\Controller\Creditcard\DeleteConfirm $controller */
+        $controller = $objectManager->getObject(
             'Magento\Braintree\Controller\Creditcard\DeleteConfirm',
             [
                 'request' => $this->request,
@@ -224,6 +228,6 @@ class DeleteConfirmTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        $this->assertSame($this->resultRedirect, $notification->execute());
+        $this->assertSame($this->resultRedirect, $controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/DeleteTest.php b/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/DeleteTest.php
index 504c186ad11..76c7fa5b752 100644
--- a/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/DeleteTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/DeleteTest.php
@@ -106,7 +106,7 @@ class DeleteTest extends \PHPUnit_Framework_TestCase
     /**
      * Executes the controller action and asserts non exception logic
      */
-    public function testExecute()
+    public function testExecuteInternal()
     {
         $objectManager = new ObjectManagerHelper($this);
 
@@ -138,8 +138,8 @@ class DeleteTest extends \PHPUnit_Framework_TestCase
             ->method('getConfig')
             ->willReturn($this->pageConfig);
 
-
-        $notification = $objectManager->getObject(
+        /** @var \Magento\Braintree\Controller\Creditcard\Delete $controller */
+        $controller = $objectManager->getObject(
             'Magento\Braintree\Controller\Creditcard\Delete',
             [
                 'request' => $this->request,
@@ -148,13 +148,13 @@ class DeleteTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        $this->assertSame($this->resultPage, $notification->execute());
+        $this->assertSame($this->resultPage, $controller->executeInternal());
     }
 
     /**
      * Executes the controller action and asserts with redirect for non valid token param
      */
-    public function testExecuteNoTokenRedirect()
+    public function testExecuteInternalNoTokenRedirect()
     {
         $objectManager = new ObjectManagerHelper($this);
 
@@ -176,7 +176,8 @@ class DeleteTest extends \PHPUnit_Framework_TestCase
             ->method('setPath')
             ->willReturnSelf();
 
-        $notification = $objectManager->getObject(
+        /** @var \Magento\Braintree\Controller\Creditcard\Delete $controller */
+        $controller = $objectManager->getObject(
             'Magento\Braintree\Controller\Creditcard\Delete',
             [
                 'request' => $this->request,
@@ -186,13 +187,13 @@ class DeleteTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        $this->assertSame($this->resultRedirect, $notification->execute());
+        $this->assertSame($this->resultRedirect, $controller->executeInternal());
     }
 
     /**
      * Executes the controller action and asserts with redirects for non existing logic
      */
-    public function testExecuteNonExistingTokenRedirect()
+    public function testExecuteInternalNonExistingTokenRedirect()
     {
         $objectManager = new ObjectManagerHelper($this);
         $phrase = new \Magento\Framework\Phrase('Credit card does not exist');
@@ -224,8 +225,8 @@ class DeleteTest extends \PHPUnit_Framework_TestCase
             ->method('addError')
             ->with($phrase);
 
-
-        $notification = $objectManager->getObject(
+        /** @var \Magento\Braintree\Controller\Creditcard\Delete $controller */
+        $controller = $objectManager->getObject(
             'Magento\Braintree\Controller\Creditcard\Delete',
             [
                 'request' => $this->request,
@@ -236,6 +237,6 @@ class DeleteTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        $this->assertSame($this->resultRedirect, $notification->execute());
+        $this->assertSame($this->resultRedirect, $controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/EditTest.php b/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/EditTest.php
index cd14d718134..7742f863e16 100644
--- a/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/EditTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/EditTest.php
@@ -106,7 +106,7 @@ class EditTest extends \PHPUnit_Framework_TestCase
     /**
      * Executes the controller action and asserts non exception logic
      */
-    public function testExecute()
+    public function testExecuteInternal()
     {
         $objectManager = new ObjectManagerHelper($this);
 
@@ -138,8 +138,8 @@ class EditTest extends \PHPUnit_Framework_TestCase
             ->method('getConfig')
             ->willReturn($this->pageConfig);
 
-
-        $notification = $objectManager->getObject(
+        /** @var \Magento\Braintree\Controller\Creditcard\Edit $controller */
+        $controller = $objectManager->getObject(
             'Magento\Braintree\Controller\Creditcard\Edit',
             [
                 'request' => $this->request,
@@ -148,13 +148,13 @@ class EditTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        $this->assertSame($this->resultPage, $notification->execute());
+        $this->assertSame($this->resultPage, $controller->executeInternal());
     }
 
     /**
      * Executes the controller action and asserts with redirect for non valid token param
      */
-    public function testExecuteNoTokenRedirect()
+    public function testExecuteInternalNoTokenRedirect()
     {
         $objectManager = new ObjectManagerHelper($this);
 
@@ -176,7 +176,8 @@ class EditTest extends \PHPUnit_Framework_TestCase
             ->method('setPath')
             ->willReturnSelf();
 
-        $notification = $objectManager->getObject(
+        /** @var \Magento\Braintree\Controller\Creditcard\Edit $controller */
+        $controller = $objectManager->getObject(
             'Magento\Braintree\Controller\Creditcard\Edit',
             [
                 'request' => $this->request,
@@ -186,13 +187,13 @@ class EditTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        $this->assertSame($this->resultRedirect, $notification->execute());
+        $this->assertSame($this->resultRedirect, $controller->executeInternal());
     }
 
     /**
      * Executes the controller action and asserts with redirects for non existing logic
      */
-    public function testExecuteNonExistingTokenRedirect()
+    public function testExecuteInternalNonExistingTokenRedirect()
     {
         $objectManager = new ObjectManagerHelper($this);
         $phrase = new \Magento\Framework\Phrase('Credit card does not exist');
@@ -224,8 +225,8 @@ class EditTest extends \PHPUnit_Framework_TestCase
             ->method('addError')
             ->with($phrase);
 
-
-        $notification = $objectManager->getObject(
+        /** @var \Magento\Braintree\Controller\Creditcard\Edit $controller */
+        $controller = $objectManager->getObject(
             'Magento\Braintree\Controller\Creditcard\Edit',
             [
                 'request' => $this->request,
@@ -236,6 +237,6 @@ class EditTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        $this->assertSame($this->resultRedirect, $notification->execute());
+        $this->assertSame($this->resultRedirect, $controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/GenerateTest.php b/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/GenerateTest.php
index 40540bb9da8..8f000251d18 100644
--- a/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/GenerateTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/GenerateTest.php
@@ -72,7 +72,7 @@ class GenerateTest extends \PHPUnit_Framework_TestCase
     /**
      * Executes the controller action and asserts non exception logic
      */
-    public function testExecute()
+    public function testExecuteInternal()
     {
         $objectManager = new ObjectManager($this);
         $this->resultJson->expects($this->once())
@@ -87,7 +87,8 @@ class GenerateTest extends \PHPUnit_Framework_TestCase
             ->method('getParam')
             ->willReturn(true);
 
-        $notification = $objectManager->getObject(
+        /** @var \Magento\Braintree\Controller\Creditcard\Generate $controller */
+        $controller = $objectManager->getObject(
             'Magento\Braintree\Controller\Creditcard\Generate',
             [
                 'request' => $this->request,
@@ -96,13 +97,13 @@ class GenerateTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        $this->assertSame($this->resultJson, $notification->execute());
+        $this->assertSame($this->resultJson, $controller->executeInternal());
     }
 
     /**
      * Executes the controller action and asserts non exception logic
      */
-    public function testExecuteLocalizedException()
+    public function testExecuteInternalLocalizedException()
     {
         $phrase = new \Magento\Framework\Phrase('Something went wrong while processing.');
         $objectManager = new ObjectManager($this);
@@ -126,7 +127,8 @@ class GenerateTest extends \PHPUnit_Framework_TestCase
             ->method('getParam')
             ->willReturn(true);
 
-        $notification = $objectManager->getObject(
+        /** @var \Magento\Braintree\Controller\Creditcard\Generate $controller */
+        $controller = $objectManager->getObject(
             'Magento\Braintree\Controller\Creditcard\Generate',
             [
                 'request' => $this->request,
@@ -136,6 +138,6 @@ class GenerateTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        $this->assertSame($this->resultJson, $notification->execute());
+        $this->assertSame($this->resultJson, $controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/IndexTest.php b/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/IndexTest.php
index 7f8e3861a48..38e88b0586e 100644
--- a/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/IndexTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/IndexTest.php
@@ -86,17 +86,18 @@ class IndexTest extends \PHPUnit_Framework_TestCase
     /**
      * Executes the controller action and asserts non exception logic
      */
-    public function testExecute()
+    public function testExecuteInternal()
     {
         $objectManager = new ObjectManagerHelper($this);
 
-        $notification = $objectManager->getObject(
+        /** @var \Magento\Braintree\Controller\Creditcard\Index $controller */
+        $controller = $objectManager->getObject(
             'Magento\Braintree\Controller\Creditcard\Index',
             [
                 'resultPageFactory' => $this->resultPageFactory,
             ]
         );
 
-        $this->assertSame($this->resultPage, $notification->execute());
+        $this->assertSame($this->resultPage, $controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/NewCardTest.php b/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/NewCardTest.php
index ee655fe49b0..23607cc3839 100644
--- a/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/NewCardTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/NewCardTest.php
@@ -94,7 +94,7 @@ class NewCardTest extends \PHPUnit_Framework_TestCase
     /**
      * Executes the controller action and asserts non exception logic
      */
-    public function testExecute()
+    public function testExecuteInternal()
     {
         $objectManager = new ObjectManagerHelper($this);
         $customerId = 1;
@@ -103,7 +103,8 @@ class NewCardTest extends \PHPUnit_Framework_TestCase
             ->method('getCustomerId')
             ->willReturn($customerId);
 
-        $notification = $objectManager->getObject(
+        /** @var \Magento\Braintree\Controller\Creditcard\NewCard $controller */
+        $controller = $objectManager->getObject(
             'Magento\Braintree\Controller\Creditcard\NewCard',
             [
                 'resultPageFactory' => $this->resultPageFactory,
@@ -111,6 +112,6 @@ class NewCardTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        $this->assertSame($this->resultPage, $notification->execute());
+        $this->assertSame($this->resultPage, $controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/SaveTest.php b/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/SaveTest.php
index ff42e7e7c6e..512dbb4d07c 100644
--- a/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/SaveTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Controller/Creditcard/SaveTest.php
@@ -58,7 +58,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
     /**
      * Executes the controller action
      */
-    public function testExecute()
+    public function testExecuteInternal()
     {
         $objectManager = new ObjectManagerHelper($this);
         $phrase = new \Magento\Framework\Phrase('There was error during saving card data');
@@ -84,7 +84,8 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             ->method('addError')
             ->with($phrase);
 
-        $notification = $objectManager->getObject(
+        /** @var \Magento\Braintree\Controller\Creditcard\Save $controller */
+        $controller = $objectManager->getObject(
             'Magento\Braintree\Controller\Creditcard\Save',
             [
                 'request' => $this->request,
@@ -93,6 +94,6 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        $this->assertSame($this->resultRedirect, $notification->execute());
+        $this->assertSame($this->resultRedirect, $controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Braintree/Test/Unit/Controller/MyCreditCardsTest.php b/app/code/Magento/Braintree/Test/Unit/Controller/MyCreditCardsTest.php
index 39f70eb0ce2..657d83e1f7a 100644
--- a/app/code/Magento/Braintree/Test/Unit/Controller/MyCreditCardsTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Controller/MyCreditCardsTest.php
@@ -113,7 +113,7 @@ class MyCreditCardsTest extends \PHPUnit_Framework_TestCase
         $requestInterface= $this->getMockBuilder('\Magento\Framework\App\RequestInterface')
             ->getMock();
 
-        $notification = $objectManager->getObject(
+        $controller = $objectManager->getObject(
             'Magento\Braintree\Test\Unit\Controller\Stub\MyCreditCardsStub',
             [
                 'customerSession' => $this->customerSession,
@@ -123,7 +123,7 @@ class MyCreditCardsTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        $this->assertSame($this->resultRedirect, $notification->dispatch($requestInterface));
+        $this->assertSame($this->resultRedirect, $controller->execute($requestInterface));
     }
 
     /**
@@ -156,7 +156,7 @@ class MyCreditCardsTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
 
-        $notification = $objectManager->getObject(
+        $controller = $objectManager->getObject(
             'Magento\Braintree\Test\Unit\Controller\Stub\MyCreditCardsStub',
             [
                 'customerSession' => $this->customerSession,
@@ -167,6 +167,6 @@ class MyCreditCardsTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        $this->assertSame($this->_response, $notification->dispatch($requestInterface));
+        $this->assertSame($this->_response, $controller->execute($requestInterface));
     }
 }
diff --git a/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/IndexTest.php b/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/IndexTest.php
index 974d4c41fc5..027e66b1670 100644
--- a/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/IndexTest.php
+++ b/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/IndexTest.php
@@ -120,7 +120,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
     /**
      * @covers \Magento\Email\Controller\Adminhtml\Email\Template\Index::executeInternal
      */
-    public function testExecute()
+    public function testExecuteInternal()
     {
         $this->prepareExecute();
 
@@ -163,7 +163,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
     /**
      * @covers \Magento\Email\Controller\Adminhtml\Email\Template\Index::executeInternal
      */
-    public function testExecuteAjax()
+    public function testExecuteInternalAjax()
     {
         $this->prepareExecute(true);
         $indexController = $this->getMockBuilder('Magento\Email\Controller\Adminhtml\Email\Template\Index')
@@ -176,7 +176,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
         $indexController->expects($this->once())
             ->method('_forward')
             ->with('grid');
-        $this->assertNull($indexController->execute());
+        $this->assertNull($indexController->executeInternal());
     }
 
     /**
diff --git a/app/code/Magento/Paypal/Test/Unit/Controller/Ipn/IndexTest.php b/app/code/Magento/Paypal/Test/Unit/Controller/Ipn/IndexTest.php
index e3c5c9445e4..e34159f711a 100644
--- a/app/code/Magento/Paypal/Test/Unit/Controller/Ipn/IndexTest.php
+++ b/app/code/Magento/Paypal/Test/Unit/Controller/Ipn/IndexTest.php
@@ -8,7 +8,7 @@ namespace Magento\Paypal\Test\Unit\Controller\Ipn;
 
 class IndexTest extends \PHPUnit_Framework_TestCase
 {
-    /** @var Index */
+    /** @var \Magento\Paypal\Controller\Ipn\Index */
     protected $model;
 
     /** @var \Psr\Log\LoggerInterface|\PHPUnit_Framework_MockObject_MockObject */
@@ -44,6 +44,6 @@ class IndexTest extends \PHPUnit_Framework_TestCase
         $this->request->expects($this->once())->method('getPostValue')->will($this->throwException($exception));
         $this->logger->expects($this->once())->method('critical')->with($this->identicalTo($exception));
         $this->response->expects($this->once())->method('setHttpResponseCode')->with(500);
-        $this->model->execute();
+        $this->model->executeInternal();
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/SaveTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/SaveTest.php
index 5549ee7f193..6c0a726a516 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/SaveTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/SaveTest.php
@@ -14,7 +14,7 @@ namespace Magento\Sales\Test\Unit\Controller\Adminhtml\Order\Creditmemo;
 class SaveTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Controller\Adminhtml\Order\Creditmemo
+     * @var \Magento\Sales\Controller\Adminhtml\Order\Creditmemo\Save
      */
     protected $_controller;
 
@@ -190,7 +190,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
 
         $this->assertInstanceOf(
             'Magento\Backend\Model\View\Result\Redirect',
-            $this->_controller->execute()
+            $this->_controller->executeInternal()
         );
     }
 
@@ -237,7 +237,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
 
         $this->_setSaveActionExpectationForMageCoreException($data, 'The credit memo\'s total must be positive.');
 
-        $this->_controller->execute();
+        $this->_controller->executeInternal();
     }
 
     /**
diff --git a/app/code/Magento/Swagger/Test/Unit/Controller/Index/IndexTest.php b/app/code/Magento/Swagger/Test/Unit/Controller/Index/IndexTest.php
index 0143601c899..015064b2642 100644
--- a/app/code/Magento/Swagger/Test/Unit/Controller/Index/IndexTest.php
+++ b/app/code/Magento/Swagger/Test/Unit/Controller/Index/IndexTest.php
@@ -8,7 +8,7 @@ namespace Magento\Swagger\Test\Unit\Controller\Index;
 
 class IndexTest extends \PHPUnit_Framework_TestCase
 {
-    public function testExecute()
+    public function testExecuteInternal()
     {
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
 
@@ -22,6 +22,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
         $pageConfigMock->expects($this->once())->method('addBodyClass')->with('swagger-section');
         $resultPageFactory->expects($this->once())->method('create');
 
+        /** @var \Magento\Swagger\Controller\Index\Index $model */
         $model = $objectManager->getObject(
             'Magento\Swagger\Controller\Index\Index',
             [
@@ -29,6 +30,6 @@ class IndexTest extends \PHPUnit_Framework_TestCase
                 'pageFactory' => $resultPageFactory
             ]
         );
-        $model->execute();
+        $model->executeInternal();
     }
 }
diff --git a/app/code/Magento/Tax/Test/Unit/Controller/Adminhtml/Rate/AjaxLoadTest.php b/app/code/Magento/Tax/Test/Unit/Controller/Adminhtml/Rate/AjaxLoadTest.php
index 6373e5aa514..ffc15219382 100644
--- a/app/code/Magento/Tax/Test/Unit/Controller/Adminhtml/Rate/AjaxLoadTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Controller/Adminhtml/Rate/AjaxLoadTest.php
@@ -52,7 +52,7 @@ class AjaxLoadTest extends \PHPUnit_Framework_TestCase
     /**
      * Executes the controller action and asserts non exception logic
      */
-    public function testExecute()
+    public function testExecuteInternal()
     {
         $taxRateId=1;
         $returnArray=[
@@ -120,7 +120,8 @@ class AjaxLoadTest extends \PHPUnit_Framework_TestCase
             ->with(\Magento\Framework\Controller\ResultFactory::TYPE_JSON)
             ->willReturn($jsonObject);
 
-        $notification = $objectManager->getObject(
+        /** @var \Magento\Tax\Controller\Adminhtml\Rate\AjaxLoad $controller */
+        $controller = $objectManager->getObject(
             'Magento\Tax\Controller\Adminhtml\Rate\AjaxLoad',
             [
                 'taxRateRepository' => $this->taxRateRepository,
@@ -132,14 +133,14 @@ class AjaxLoadTest extends \PHPUnit_Framework_TestCase
 
 
         // No exception thrown
-        $this->assertSame($jsonObject, $notification->execute());
+        $this->assertSame($jsonObject, $controller->executeInternal());
 
     }
 
     /**
      * Check if validation throws a localized catched exception in case of incorrect id
      */
-    public function testExecuteLocalizedException()
+    public function testExecuteInternalLocalizedException()
     {
         $taxRateId=999;
         $exceptionMessage='No such entity with taxRateId = '.$taxRateId;
@@ -173,7 +174,8 @@ class AjaxLoadTest extends \PHPUnit_Framework_TestCase
             ->with(\Magento\Framework\Controller\ResultFactory::TYPE_JSON)
             ->willReturn($jsonObject);
 
-        $notification = $objectManager->getObject(
+        /** @var \Magento\Tax\Controller\Adminhtml\Rate\AjaxLoad $controller */
+        $controller = $objectManager->getObject(
             'Magento\Tax\Controller\Adminhtml\Rate\AjaxLoad',
             [
                 'taxRateRepository' => $this->taxRateRepository,
@@ -183,13 +185,13 @@ class AjaxLoadTest extends \PHPUnit_Framework_TestCase
         );
 
         //exception thrown with catch
-        $this->assertSame($jsonObject, $notification->execute());
+        $this->assertSame($jsonObject, $controller->executeInternal());
     }
 
     /**
      * Check if validation throws a localized catched exception in case of incorrect id
      */
-    public function testExecuteException()
+    public function testExecuteInternalException()
     {
         $taxRateId=999;
         $exceptionMessage=__('An error occurred while loading this tax rate.');
@@ -223,7 +225,8 @@ class AjaxLoadTest extends \PHPUnit_Framework_TestCase
             ->with(\Magento\Framework\Controller\ResultFactory::TYPE_JSON)
             ->willReturn($jsonObject);
 
-        $notification = $objectManager->getObject(
+        /** @var \Magento\Tax\Controller\Adminhtml\Rate\AjaxLoad $controller */
+        $controller = $objectManager->getObject(
             'Magento\Tax\Controller\Adminhtml\Rate\AjaxLoad',
             [
                 'taxRateRepository' => $this->taxRateRepository,
@@ -233,6 +236,6 @@ class AjaxLoadTest extends \PHPUnit_Framework_TestCase
         );
 
         //exception thrown with catch
-        $this->assertSame($jsonObject, $notification->execute());
+        $this->assertSame($jsonObject, $controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Tax/Test/Unit/Controller/Adminhtml/Tax/IgnoreTaxNotificationTest.php b/app/code/Magento/Tax/Test/Unit/Controller/Adminhtml/Tax/IgnoreTaxNotificationTest.php
index cb3b6df2972..88656b9e4da 100644
--- a/app/code/Magento/Tax/Test/Unit/Controller/Adminhtml/Tax/IgnoreTaxNotificationTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Controller/Adminhtml/Tax/IgnoreTaxNotificationTest.php
@@ -10,7 +10,7 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
 class IgnoreTaxNotificationTest extends \PHPUnit_Framework_TestCase
 {
-    public function testExecute()
+    public function testExecuteInternal()
     {
         $objectManager = new ObjectManager($this);
         $cacheTypeList = $this->getMockBuilder('\Magento\Framework\App\Cache\TypeList')
@@ -63,7 +63,8 @@ class IgnoreTaxNotificationTest extends \PHPUnit_Framework_TestCase
             ->method('get')
             ->willReturn($config);
 
-        $notification = $objectManager->getObject(
+        /** @var \Magento\Tax\Controller\Adminhtml\Tax\IgnoreTaxNotification $controller */
+        $controller = $objectManager->getObject(
             'Magento\Tax\Controller\Adminhtml\Tax\IgnoreTaxNotification',
             [
                 'objectManager' => $manager,
@@ -74,6 +75,6 @@ class IgnoreTaxNotificationTest extends \PHPUnit_Framework_TestCase
         );
 
         // No exception thrown
-        $this->assertSame($resultRedirect, $notification->execute());
+        $this->assertSame($resultRedirect, $controller->executeInternal());
     }
 }
diff --git a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/GridTest.php b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/GridTest.php
index 850e4d09d11..e15f4b66d8e 100644
--- a/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/GridTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Controller/Adminhtml/System/Design/Theme/GridTest.php
@@ -35,7 +35,7 @@ class GridTest extends \PHPUnit_Framework_TestCase
     protected $view;
 
     /**
-     * @var Delete
+     * @var Grid
      */
     protected $controller;
 
@@ -70,13 +70,13 @@ class GridTest extends \PHPUnit_Framework_TestCase
         );
     }
 
-    public function testExecute()
+    public function testExecuteInternal()
     {
         $this->view->expects($this->once())
             ->method('loadLayout')
             ->with(false);
         $this->view->expects($this->once())
             ->method('renderLayout');
-        $this->controller->execute();
+        $this->controller->executeInternal();
     }
 }
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/FrontControllerTest.php b/lib/internal/Magento/Framework/App/Test/Unit/FrontControllerTest.php
index c87ab7af120..dc4f0b0c7c3 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/FrontControllerTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/FrontControllerTest.php
@@ -82,7 +82,7 @@ class FrontControllerTest extends \PHPUnit_Framework_TestCase
         $response = $this->getMock('Magento\Framework\App\Response\Http', [], [], '', false);
         $controllerInstance = $this->getMock('Magento\Framework\App\ActionInterface');
         $controllerInstance->expects($this->any())
-            ->method('dispatch')
+            ->method('execute')
             ->with($this->request)
             ->will($this->returnValue($response));
         $this->router->expects($this->at(0))
@@ -114,7 +114,7 @@ class FrontControllerTest extends \PHPUnit_Framework_TestCase
         $response = $this->getMock('Magento\Framework\App\Response\Http', [], [], '', false);
         $controllerInstance = $this->getMock('Magento\Framework\App\ActionInterface');
         $controllerInstance->expects($this->any())
-            ->method('dispatch')
+            ->method('execute')
             ->with($this->request)
             ->will($this->returnValue($response));
         $this->router->expects($this->at(0))
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Router/ActionListTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Router/ActionListTest.php
index adeccfb1701..48c6ad840f3 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/Router/ActionListTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/Router/ActionListTest.php
@@ -112,7 +112,7 @@ class ActionListTest extends \PHPUnit_Framework_TestCase
         $mockClassName = 'Mock_Action_Class';
         $actionClass = $this->getMockClass(
             'Magento\Framework\App\ActionInterface',
-            ['dispatch', 'getResponse'],
+            ['execute', 'getResponse'],
             [],
             $mockClassName
         );
diff --git a/lib/internal/Magento/Framework/Controller/Test/Unit/Controller/Index/IndexTest.php b/lib/internal/Magento/Framework/Controller/Test/Unit/Controller/Index/IndexTest.php
index aac2c071fb0..b1a3be4984b 100644
--- a/lib/internal/Magento/Framework/Controller/Test/Unit/Controller/Index/IndexTest.php
+++ b/lib/internal/Magento/Framework/Controller/Test/Unit/Controller/Index/IndexTest.php
@@ -9,7 +9,7 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
 class IndexTest extends \PHPUnit_Framework_TestCase
 {
-    public function testExecute()
+    public function testExecuteInternal()
     {
         $objectManager = new ObjectManager($this);
         /**
@@ -19,6 +19,6 @@ class IndexTest extends \PHPUnit_Framework_TestCase
 
         // The execute method is empty and returns void, just calling to verify
         // the method exists and does not throw an exception
-        $controller->execute();
+        $controller->executeInternal();
     }
 }
diff --git a/lib/internal/Magento/Framework/Controller/Test/Unit/Controller/NorouteTest.php b/lib/internal/Magento/Framework/Controller/Test/Unit/Controller/NorouteTest.php
index eabedc51f1b..1ad67c8f366 100644
--- a/lib/internal/Magento/Framework/Controller/Test/Unit/Controller/NorouteTest.php
+++ b/lib/internal/Magento/Framework/Controller/Test/Unit/Controller/NorouteTest.php
@@ -8,7 +8,7 @@ namespace Magento\Framework\Controller\Test\Unit\Controller;
 class NorouteTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Controller\Noroute
+     * @var \Magento\Framework\Controller\Noroute\Index
      */
     protected $_controller;
 
@@ -53,7 +53,7 @@ class NorouteTest extends \PHPUnit_Framework_TestCase
         $this->_statusMock->expects($this->any())->method('getLoaded')->will($this->returnValue(false));
         $this->_viewMock->expects($this->once())->method('loadLayout')->with(['default', 'noroute']);
         $this->_viewMock->expects($this->once())->method('renderLayout');
-        $this->_controller->execute();
+        $this->_controller->executeInternal();
     }
 
     public function testIndexActionWhenStatusLoaded()
@@ -77,7 +77,7 @@ class NorouteTest extends \PHPUnit_Framework_TestCase
         )->will(
             $this->returnValue($this->_requestMock)
         );
-        $this->_controller->execute();
+        $this->_controller->executeInternal();
     }
 
     public function testIndexActionWhenStatusNotInstanceofMagentoObject()
@@ -91,6 +91,6 @@ class NorouteTest extends \PHPUnit_Framework_TestCase
         )->will(
             $this->returnValue('string')
         );
-        $this->_controller->execute();
+        $this->_controller->executeInternal();
     }
 }
-- 
GitLab


From 489db080e3b8843d1813d13c32c811cbce34ce1e Mon Sep 17 00:00:00 2001
From: Yu Tang <ytang1@ebay.com>
Date: Sat, 24 Oct 2015 08:17:47 -0500
Subject: [PATCH 281/370] MAGETWO-44491: [TD] ActionInterface has Method
 dispatch() Instead of execute()

    - Fix API tests affected by the change of method names
---
 .../_files/Magento/TestModule1/Controller/CookieTester.php      | 2 +-
 .../TestModule1/Controller/CookieTester/DeleteCookie.php        | 2 +-
 .../TestModule1/Controller/CookieTester/SetPublicCookie.php     | 2 +-
 .../TestModule1/Controller/CookieTester/SetSensitiveCookie.php  | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester.php b/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester.php
index 906504d782e..d95d32a8443 100644
--- a/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester.php
+++ b/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester.php
@@ -61,7 +61,7 @@ abstract class CookieTester implements \Magento\Framework\App\ActionInterface
      * @param RequestInterface $request
      * @return mixed
      */
-    abstract protected function execute(RequestInterface $request);
+    abstract protected function executeInternal(RequestInterface $request);
 
     /**
      * Dispatch request
diff --git a/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester/DeleteCookie.php b/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester/DeleteCookie.php
index 0baf5fdce98..755aae0f061 100644
--- a/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester/DeleteCookie.php
+++ b/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester/DeleteCookie.php
@@ -16,7 +16,7 @@ class DeleteCookie extends \Magento\TestModule1\Controller\CookieTester
      *
      * @return void
      */
-    public function execute(RequestInterface $request)
+    public function executeInternal(RequestInterface $request)
     {
         $cookieName = $request->getParam('cookie_name');
         $this->getCookieManager()->deleteCookie($cookieName);
diff --git a/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester/SetPublicCookie.php b/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester/SetPublicCookie.php
index 6583b3bad16..da6cde29dcd 100644
--- a/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester/SetPublicCookie.php
+++ b/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester/SetPublicCookie.php
@@ -16,7 +16,7 @@ class SetPublicCookie extends \Magento\TestModule1\Controller\CookieTester
      *
      * @return void
      */
-    public function execute(RequestInterface $request)
+    public function executeInternal(RequestInterface $request)
     {
         $publicCookieMetadata = $this->getCookieMetadataFactory()->createPublicCookieMetadata();
 
diff --git a/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester/SetSensitiveCookie.php b/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester/SetSensitiveCookie.php
index 74ea42b69bc..cf8cfd054c4 100644
--- a/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester/SetSensitiveCookie.php
+++ b/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester/SetSensitiveCookie.php
@@ -16,7 +16,7 @@ class SetSensitiveCookie extends \Magento\TestModule1\Controller\CookieTester
      *
      * @return void
      */
-    public function execute(RequestInterface $request)
+    public function executeInternal(RequestInterface $request)
     {
         $sensitiveCookieMetadata = $this->getCookieMetadataFactory()->createSensitiveCookieMetadata();
 
-- 
GitLab


From 649562cb9df4544af1d58ec0a1ef10e8b0ecbdfb Mon Sep 17 00:00:00 2001
From: Oleksandr Karpenko <okarpenko@ebay.com>
Date: Sat, 24 Oct 2015 16:28:10 +0300
Subject: [PATCH 282/370] MAGETWO-40284: Frontend app and unsubscribe link are
 broken in newsletter sent out

---
 .../Test/Unit/Model/Template/FilterTest.php   | 30 ++++++++++---------
 1 file changed, 16 insertions(+), 14 deletions(-)

diff --git a/app/code/Magento/Newsletter/Test/Unit/Model/Template/FilterTest.php b/app/code/Magento/Newsletter/Test/Unit/Model/Template/FilterTest.php
index bf809df28ef..c099b048f07 100644
--- a/app/code/Magento/Newsletter/Test/Unit/Model/Template/FilterTest.php
+++ b/app/code/Magento/Newsletter/Test/Unit/Model/Template/FilterTest.php
@@ -30,8 +30,13 @@ class FilterTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
+        $this->storeManager = $this->getMockForAbstractClass(
+            '\Magento\Store\Model\StoreManagerInterface',
+            [],
+            '',
+            false
+        );
         $logger = $this->getMockForAbstractClass('\Psr\Log\LoggerInterface', [], '', false);
-        $this->storeManager = $this->getMockForAbstractClass('\Magento\Store\Model\StoreManagerInterface', [], '', false);
         $layout = $this->getMockForAbstractClass('\Magento\Framework\View\LayoutInterface', [], '', false);
         $urlModel = $this->getMockForAbstractClass('\Magento\Framework\UrlInterface', [], '', false);
         $string = $this->getMock('\Magento\Framework\Stdlib\StringUtils', [], [], '', false);
@@ -91,18 +96,18 @@ class FilterTest extends \PHPUnit_Framework_TestCase
                     ]
                 ]
             )
-            ->willReturn('<div class="widget block block-cms-link-inline">
-    <a href="http://magento.test/">
-        <span>Home page</span>
-    </a>
-</div>');
-
-        $this->filter->widgetDirective(
-            [
+            ->willReturn(
+                '<div class="widget block block-cms-link-inline">
+                    <a href="http://magento.test/">
+                        <span>Home page</span>
+                    </a>
+                </div>'
+            );
+
+        $this->filter->widgetDirective([
                 1 => $construction,
                 2 => 'type="\Magento\Cms\Block\Widget\Page\Link" page_id="1"'
-            ]
-        );
+            ]);
     }
 
     public function testWidgetDirectiveWithoutRequiredVariable()
@@ -121,6 +126,3 @@ class FilterTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals($construction, $result);
     }
 }
-
-
-
-- 
GitLab


From 45421a5f25fbe26ab79b5cc9cfbd968bb4a25985 Mon Sep 17 00:00:00 2001
From: Igor Miniailo <iminiailo@ebay.com>
Date: Sat, 24 Oct 2015 16:29:40 +0300
Subject: [PATCH 283/370] MAGETWO-44274: SQL error appears if Save & Duplicate
 product with images

---
 .../Model/ResourceModel/Product/Attribute/Backend/Media.php     | 2 --
 1 file changed, 2 deletions(-)

diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php
index 2f8c5e37afe..96fa2009c64 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php
@@ -333,8 +333,6 @@ class Media extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
         );
 
         foreach ($this->getConnection()->fetchAll($select) as $row) {
-            unset($row['record_id']);
-            $row['entity_id'] = $newProductId;
             $row['value_id'] = $valueIdMap[$row['value_id']];
             unset($row['record_id']);
             $this->insertGalleryValueInStore($row);
-- 
GitLab


From ab59b5c21dddad6966e571b8e1e05a7c800537f4 Mon Sep 17 00:00:00 2001
From: Vitalii Zabaznov <vzabaznov@ebay.com>
Date: Sat, 24 Oct 2015 16:40:38 +0300
Subject: [PATCH 284/370] MAGETWO-43505:  Check-boxes are avoided on "create
 Downloadable Product" Admin page

---
 .../Product/Edit/Tab/Downloadable/Links.php   | 22 ++---------
 .../product/edit/downloadable/links.phtml     | 39 ++++++++++++++++---
 2 files changed, 38 insertions(+), 23 deletions(-)

diff --git a/app/code/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.php b/app/code/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.php
index fb92f2bc3ff..dd31516d03a 100644
--- a/app/code/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.php
+++ b/app/code/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.php
@@ -157,27 +157,13 @@ class Links extends \Magento\Backend\Block\Template
     }
 
     /**
-     * Retrieve Purchased Separately HTML select
+     * Get Links can be purchased separately value for current product
      *
-     * @return string
+     * @return bool
      */
-    public function getPurchasedSeparatelySelect()
+    public function getProductLinksCanBePurchasedSeparately()
     {
-        $select = $this->getLayout()->createBlock(
-            'Magento\Framework\View\Element\Html\Select'
-        )->setName(
-            'product[links_purchased_separately]'
-        )->setId(
-            'downloadable_link_purchase_type'
-        )->setOptions(
-            $this->_sourceModel->toOptionArray()
-        )->setValue(
-            $this->getProduct()->getLinksPurchasedSeparately()
-        )->setClass(
-            'admin__control-select'
-        );
-
-        return $select->getHtml();
+        return (bool) $this->getProduct()->getData('links_purchased_separately');
     }
 
     /**
diff --git a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
index cf43aa7d3f4..b47b69f0cb0 100644
--- a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
+++ b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
@@ -34,7 +34,34 @@
     <div class="admin__field" <?php echo !$block->isSingleStoreMode() ? ' data-config-scope="' . __('[GLOBAL]') . '"' : ''; ?>>
         <label class="admin__field-label" for="downloadable_link_purchase_type"><span><?php /* @escapeNotVerified */ echo __('Links can be purchased separately')?></span></label>
         <div class="admin__field-control">
-            <?php /* @escapeNotVerified */ echo $block->getPurchasedSeparatelySelect()?>
+            <div class="admin__field-control link-switcher" data-role="link-switcher">
+                <div class="admin__field-control-group">
+                    <div class="admin__field admin__field-option">
+                        <input type="radio" name="product[links_purchased_separately]" value="1"
+                               class="admin__control-radio"
+                               id="link-switcher1"
+                           <?php if($block->getProductLinksCanBePurchasedSeparately()): ?>
+                               checked="checked"
+                           <?php endif; ?>
+                            >
+                        <label class="admin__field-label" for="link-switcher1">
+                            <span>Yes</span>
+                        </label>
+                    </div>
+                    <div class="admin__field admin__field-option">
+                        <input type="radio" name="product[links_purchased_separately]" value="0"
+                                class="admin__control-radio"
+                                id="link-switcher0"
+                            <?php if(!$block->getProductLinksCanBePurchasedSeparately()): ?>
+                                checked="checked"
+                            <?php endif; ?>
+                            >
+                        <label class="admin__field-label" for="link-switcher0">
+                            <span>No</span>
+                        </label>
+                    </div>
+                </div>
+            </div>
         </div>
     </div>
     <div class="admin__field admin__field-wide">
@@ -357,9 +384,9 @@ require([
                 }
             },
             togglePriceFields : function(){
-                var toogleTo = $('downloadable_link_purchase_type').value;
+                var toogleTo = jQuery('#link-switcher1').is(':checked');
                 var disableFlag = true;
-                if (toogleTo == '1') {
+                if (toogleTo) {
                     disableFlag = false;
                 }
                 $$('.link-prices[type="text"]').each(function(elm){
@@ -443,8 +470,10 @@ require([
         };
 
 
-        if ($('downloadable_link_purchase_type')) {
-            Event.observe('downloadable_link_purchase_type', 'change', linkItems.togglePriceFields.bind());
+        if (jQuery('#link-switcher1')) {
+            jQuery('#link-switcher1, #link-switcher0').on('change', function () {
+                linkItems.togglePriceFields.bind()
+            });
         }
 
         if($('add_link_item')) {
-- 
GitLab


From eb2a9b0ab76a17f58b0c3076f78f186aec92576e Mon Sep 17 00:00:00 2001
From: Yu Tang <ytang1@ebay.com>
Date: Sat, 24 Oct 2015 09:59:51 -0500
Subject: [PATCH 285/370] MAGETWO-44491: [TD] ActionInterface has Method
 dispatch() Instead of execute()

    - Fix test failures
---
 .../Unit/Controller/Adminhtml/Indexer/ListActionTest.php     | 1 +
 .../_files/Magento/TestModule1/Controller/CookieTester.php   | 2 +-
 .../Adminhtml/Authorizenet/Directpost/Payment/PlaceTest.php  | 5 +++--
 3 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/app/code/Magento/Indexer/Test/Unit/Controller/Adminhtml/Indexer/ListActionTest.php b/app/code/Magento/Indexer/Test/Unit/Controller/Adminhtml/Indexer/ListActionTest.php
index d3817ffe99d..57364ec6060 100644
--- a/app/code/Magento/Indexer/Test/Unit/Controller/Adminhtml/Indexer/ListActionTest.php
+++ b/app/code/Magento/Indexer/Test/Unit/Controller/Adminhtml/Indexer/ListActionTest.php
@@ -60,6 +60,7 @@ class ListActionTest extends \PHPUnit_Framework_TestCase
 
     /**
      * Set up test
+     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
     protected function setUp()
     {
diff --git a/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester.php b/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester.php
index d95d32a8443..986be8b00f5 100644
--- a/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester.php
+++ b/dev/tests/api-functional/_files/Magento/TestModule1/Controller/CookieTester.php
@@ -71,7 +71,7 @@ abstract class CookieTester implements \Magento\Framework\App\ActionInterface
      */
     public function execute(RequestInterface $request)
     {
-        $result = $this->execute($request);
+        $result = $this->executeInternal($request);
         return $result ? $result : $this->_response;
     }
 }
diff --git a/dev/tests/integration/testsuite/Magento/Authorizenet/Controller/Adminhtml/Authorizenet/Directpost/Payment/PlaceTest.php b/dev/tests/integration/testsuite/Magento/Authorizenet/Controller/Adminhtml/Authorizenet/Directpost/Payment/PlaceTest.php
index 85b65644004..d970637f418 100644
--- a/dev/tests/integration/testsuite/Magento/Authorizenet/Controller/Adminhtml/Authorizenet/Directpost/Payment/PlaceTest.php
+++ b/dev/tests/integration/testsuite/Magento/Authorizenet/Controller/Adminhtml/Authorizenet/Directpost/Payment/PlaceTest.php
@@ -13,7 +13,7 @@ class PlaceTest extends \Magento\TestFramework\TestCase\AbstractBackendControlle
     /**
      * Test requestToAuthorizenetData returning
      */
-    public function testExecuteAuthorizenetDataReturning()
+    public function testExecuteInternalAuthorizenetDataReturning()
     {
         $requestToAuthorizenetData = ['Authorizenet' => 'data'];
 
@@ -56,11 +56,12 @@ class PlaceTest extends \Magento\TestFramework\TestCase\AbstractBackendControlle
             ]
         );
 
+        /** @var \Magento\Authorizenet\Controller\Adminhtml\Authorizenet\Directpost\Payment\PlaceTesting $controller */
         $controller = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
             'Magento\Authorizenet\Controller\Adminhtml\Authorizenet\Directpost\Payment\PlaceTesting',
             ['context' => $context]
         );
-        $controller->execute();
+        $controller->executeInternal();
         $this->assertContains(json_encode($requestToAuthorizenetData), $this->getResponse()->getBody());
     }
 
-- 
GitLab


From 8043832b4acf797cbaeaa9d032b02aebf6a1fd52 Mon Sep 17 00:00:00 2001
From: Dmytro Poperechnyy <dpoperechnyy@ebay.com>
Date: Sat, 24 Oct 2015 18:55:59 +0300
Subject: [PATCH 286/370] MAGETWO-44539: Issues with "Orders and Returns"
 widget

---
 app/code/Magento/Sales/Helper/Guest.php       |   5 +-
 app/code/Magento/Sales/Model/Order.php        |  42 +++++++
 .../Sales/Test/Unit/Helper/GuestTest.php      | 104 +++++++++---------
 .../Sales/Test/Unit/Model/OrderTest.php       |  39 ++++++-
 4 files changed, 134 insertions(+), 56 deletions(-)

diff --git a/app/code/Magento/Sales/Helper/Guest.php b/app/code/Magento/Sales/Helper/Guest.php
index baf3512eed4..d61a3af66cb 100644
--- a/app/code/Magento/Sales/Helper/Guest.php
+++ b/app/code/Magento/Sales/Helper/Guest.php
@@ -139,8 +139,9 @@ class Guest extends \Magento\Framework\App\Helper\AbstractHelper
             $lastName = $post['oar_billing_lastname'];
             $email = $post['oar_email'];
             $zip = $post['oar_zip'];
+            $storeId = $this->_storeManager->getStore()->getId();
 
-            if (empty($incrementId) || empty($lastName) || empty($type) || !in_array(
+            if (empty($incrementId) || empty($lastName) || empty($type) || empty($storeId) || !in_array(
                 $type,
                 ['email', 'zip']
             ) || $type == 'email' && empty($email) || $type == 'zip' && empty($zip)
@@ -149,7 +150,7 @@ class Guest extends \Magento\Framework\App\Helper\AbstractHelper
             }
 
             if (!$errors) {
-                $order->loadByIncrementId($incrementId);
+                $order = $order->loadByIncrementIdAndStore($incrementId, $storeId);
             }
 
             $errors = true;
diff --git a/app/code/Magento/Sales/Model/Order.php b/app/code/Magento/Sales/Model/Order.php
index e53438bd684..233f5545071 100644
--- a/app/code/Magento/Sales/Model/Order.php
+++ b/app/code/Magento/Sales/Model/Order.php
@@ -252,6 +252,11 @@ class Order extends AbstractModel implements EntityInterface, OrderInterface
      */
     protected $_trackCollectionFactory;
 
+    /**
+     * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory
+     */
+    protected $salesOrderCollectionFactory;
+
     /**
      * @var PriceCurrencyInterface
      */
@@ -284,6 +289,7 @@ class Order extends AbstractModel implements EntityInterface, OrderInterface
      * @param \Magento\Sales\Model\ResourceModel\Order\Shipment\CollectionFactory $shipmentCollectionFactory
      * @param \Magento\Sales\Model\ResourceModel\Order\Creditmemo\CollectionFactory $memoCollectionFactory
      * @param \Magento\Sales\Model\ResourceModel\Order\Shipment\Track\CollectionFactory $trackCollectionFactory
+     * @param ResourceModel\Order\CollectionFactory $salesOrderCollectionFactory
      * @param PriceCurrencyInterface $priceCurrency
      * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productListFactory
      * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
@@ -313,6 +319,7 @@ class Order extends AbstractModel implements EntityInterface, OrderInterface
         \Magento\Sales\Model\ResourceModel\Order\Shipment\CollectionFactory $shipmentCollectionFactory,
         \Magento\Sales\Model\ResourceModel\Order\Creditmemo\CollectionFactory $memoCollectionFactory,
         \Magento\Sales\Model\ResourceModel\Order\Shipment\Track\CollectionFactory $trackCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $salesOrderCollectionFactory,
         PriceCurrencyInterface $priceCurrency,
         \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productListFactory,
         \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
@@ -337,6 +344,7 @@ class Order extends AbstractModel implements EntityInterface, OrderInterface
         $this->_shipmentCollectionFactory = $shipmentCollectionFactory;
         $this->_memoCollectionFactory = $memoCollectionFactory;
         $this->_trackCollectionFactory = $trackCollectionFactory;
+        $this->salesOrderCollectionFactory = $salesOrderCollectionFactory;
         $this->priceCurrency = $priceCurrency;
         parent::__construct(
             $context,
@@ -435,6 +443,40 @@ class Order extends AbstractModel implements EntityInterface, OrderInterface
         return $this->loadByAttribute('increment_id', $incrementId);
     }
 
+    /**
+     * Load order by system increment identifier and store
+     *
+     * @param string $incrementId
+     * @param string $storeId
+     * @return \Magento\Sales\Model\Order
+     */
+    public function loadByIncrementIdAndStore($incrementId, $storeId)
+    {
+        $orderCollection = $this->getSalesOrderCollection(
+            [
+                'increment_id' => $incrementId,
+                'store_id' => $storeId
+            ]
+        );
+        return $orderCollection->getFirstItem();
+    }
+
+    /**
+     * Get sales Order collection model populated with data
+     *
+     * @param array $filters
+     * @return \Magento\Sales\Model\ResourceModel\Order\Collection
+     */
+    protected function getSalesOrderCollection(array $filters = [])
+    {
+        /** @var \Magento\Sales\Model\ResourceModel\Order\Collection $salesOrderCollection */
+        $salesOrderCollection = $this->salesOrderCollectionFactory->create();
+        foreach ($filters as $field => $condition) {
+            $salesOrderCollection->addFieldToFilter($field, $condition);
+        }
+        return $salesOrderCollection->load();
+    }
+
     /**
      * Load order by custom attribute value. Attribute value should be unique
      *
diff --git a/app/code/Magento/Sales/Test/Unit/Helper/GuestTest.php b/app/code/Magento/Sales/Test/Unit/Helper/GuestTest.php
index 208fc66106d..a8baaac6336 100644
--- a/app/code/Magento/Sales/Test/Unit/Helper/GuestTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Helper/GuestTest.php
@@ -3,15 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-
 namespace Magento\Sales\Test\Unit\Helper;
 
-use \Magento\Sales\Helper\Guest;
-
+use Magento\Sales\Helper\Guest;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 
 /**
- * Class GuestTest
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
 class GuestTest extends \PHPUnit_Framework_TestCase
@@ -49,6 +46,12 @@ class GuestTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Framework\App\ViewInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $viewInterfaceMock;
 
+    /** @var \Magento\Store\Model\Store|\PHPUnit_Framework_MockObject_MockObject */
+    protected $storeModelMock;
+
+    /** @var \Magento\Sales\Model\Order|\PHPUnit_Framework_MockObject_MockObject */
+    protected $salesOrderMock;
+
     protected function setUp()
     {
         $this->appContextHelperMock = $this->getMock('Magento\Framework\App\Helper\Context', [], [], '', false);
@@ -66,6 +69,19 @@ class GuestTest extends \PHPUnit_Framework_TestCase
         $this->managerInterfaceMock = $this->getMock('Magento\Framework\Message\ManagerInterface');
         $this->orderFactoryMock = $this->getMock('Magento\Sales\Model\OrderFactory', ['create'], [], '', false);
         $this->viewInterfaceMock = $this->getMock('Magento\Framework\App\ViewInterface');
+        $this->storeModelMock = $this->getMockBuilder('Magento\Store\Model\Store')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->salesOrderMock = $this->getMock(
+            'Magento\Sales\Model\Order',
+            [
+                'getProtectCode', 'loadByIncrementIdAndStore', 'loadByIncrementId',
+                'getId', 'getBillingAddress', '__wakeup'
+            ],
+            [],
+            '',
+            false
+        );
 
         $this->objectManagerHelper = new ObjectManagerHelper($this);
         $this->guest = $this->objectManagerHelper->getObject(
@@ -86,8 +102,6 @@ class GuestTest extends \PHPUnit_Framework_TestCase
 
     public function testLoadValidOrderNotEmptyPost()
     {
-        $this->sessionMock->expects($this->once())->method('isLoggedIn')->will($this->returnValue(false));
-
         $post = [
             'oar_order_id' => 1,
             'oar_type' => 'email',
@@ -96,20 +110,17 @@ class GuestTest extends \PHPUnit_Framework_TestCase
             'oar_zip' => 'oar_zip',
 
         ];
+        $storeId = '1';
         $incrementId = $post['oar_order_id'];
+        $protectedCode = 'protectedCode';
+        $this->sessionMock->expects($this->once())->method('isLoggedIn')->willReturn(false);
         $requestMock = $this->getMock('Magento\Framework\App\Request\Http', [], [], '', false);
-        $requestMock->expects($this->once())->method('getPostValue')->will($this->returnValue($post));
-
-        $orderMock = $this->getMock(
-            'Magento\Sales\Model\Order',
-            ['getProtectCode', 'loadByIncrementId', 'getId', 'getBillingAddress', '__wakeup'],
-            [],
-            '',
-            false
-        );
-        $this->orderFactoryMock->expects($this->once())->method('create')->will($this->returnValue($orderMock));
-        $orderMock->expects($this->once())->method('loadByIncrementId')->with($incrementId);
-        $orderMock->expects($this->exactly(2))->method('getId')->will($this->returnValue($incrementId));
+        $requestMock->expects($this->once())->method('getPostValue')->willReturn($post);
+        $this->storeManagerInterfaceMock->expects($this->once())->method('getStore')->willReturn($this->storeModelMock);
+        $this->storeModelMock->expects($this->once())->method('getId')->willReturn($storeId);
+        $this->orderFactoryMock->expects($this->once())->method('create')->willReturn($this->salesOrderMock);
+        $this->salesOrderMock->expects($this->once())->method('loadByIncrementIdAndStore')->willReturnSelf();
+        $this->salesOrderMock->expects($this->any())->method('getId')->willReturn($incrementId);
 
         $billingAddressMock = $this->getMock(
             'Magento\Sales\Model\Order\Address',
@@ -118,15 +129,10 @@ class GuestTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $billingAddressMock->expects($this->once())->method('getLastname')->will(
-            $this->returnValue($post['oar_billing_lastname'])
-        );
-        $billingAddressMock->expects($this->once())->method('getEmail')->will(
-            $this->returnValue($post['oar_email'])
-        );
-        $orderMock->expects($this->once())->method('getBillingAddress')->will($this->returnValue($billingAddressMock));
-        $protectedCode = 'protectedCode';
-        $orderMock->expects($this->once())->method('getProtectCode')->will($this->returnValue($protectedCode));
+        $billingAddressMock->expects($this->once())->method('getLastname')->willReturn(($post['oar_billing_lastname']));
+        $billingAddressMock->expects($this->once())->method('getEmail')->willReturn(($post['oar_email']));
+        $this->salesOrderMock->expects($this->once())->method('getBillingAddress')->willReturn($billingAddressMock);
+        $this->salesOrderMock->expects($this->once())->method('getProtectCode')->willReturn($protectedCode);
         $metaDataMock = $this->getMock(
             'Magento\Framework\Stdlib\Cookie\PublicCookieMetadata',
             [],
@@ -134,17 +140,16 @@ class GuestTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $metaDataMock->expects($this->once())
-            ->method('setPath')
+        $metaDataMock->expects($this->once())->method('setPath')
             ->with(Guest::COOKIE_PATH)
-            ->will($this->returnSelf());
+            ->willReturnSelf();
         $metaDataMock->expects($this->once())
             ->method('setHttpOnly')
             ->with(true)
-            ->will($this->returnSelf());
+            ->willReturnSelf();
         $this->cookieMetadataFactoryMock->expects($this->once())
             ->method('createPublicCookieMetadata')
-            ->will($this->returnValue($metaDataMock));
+            ->willReturn($metaDataMock);
         $this->cookieManagerMock->expects($this->once())
             ->method('setPublicCookie')
             ->with(Guest::COOKIE_NAME, $this->anything(), $metaDataMock);
@@ -153,26 +158,22 @@ class GuestTest extends \PHPUnit_Framework_TestCase
 
     public function testLoadValidOrderStoredCookie()
     {
-        $this->sessionMock->expects($this->once())->method('isLoggedIn')->will($this->returnValue(false));
-        $orderMock = $this->getMock(
-            'Magento\Sales\Model\Order',
-            ['getProtectCode', 'loadByIncrementId', 'getId', 'getBillingAddress', '__wakeup'],
-            [],
-            '',
-            false
-        );
         $protectedCode = 'protectedCode';
         $incrementId = 1;
         $cookieData = $protectedCode . ':' . $incrementId;
         $cookieDataHash = base64_encode($cookieData);
-        $this->orderFactoryMock->expects($this->once())->method('create')->will($this->returnValue($orderMock));
-
-        $this->cookieManagerMock->expects($this->once())->method('getCookie')->with(Guest::COOKIE_NAME)->will(
-            $this->returnValue($cookieDataHash)
-        );
-        $orderMock->expects($this->once())->method('loadByIncrementId')->with($incrementId);
-        $orderMock->expects($this->exactly(1))->method('getId')->will($this->returnValue($incrementId));
-        $orderMock->expects($this->once())->method('getProtectCode')->will($this->returnValue($protectedCode));
+        $this->sessionMock->expects($this->once())->method('isLoggedIn')->willReturn(false);
+        $this->orderFactoryMock->expects($this->once())->method('create')->willReturn($this->salesOrderMock);
+        $this->cookieManagerMock->expects($this->once())
+            ->method('getCookie')
+            ->with(Guest::COOKIE_NAME)
+            ->willReturn($cookieDataHash);
+        $this->salesOrderMock->expects($this->once())
+            ->method('loadByIncrementId')
+            ->with($incrementId)
+            ->willReturnSelf();
+        $this->salesOrderMock->expects($this->exactly(1))->method('getId')->willReturn($incrementId);
+        $this->salesOrderMock->expects($this->once())->method('getProtectCode')->willReturn($protectedCode);
         $metaDataMock = $this->getMock(
             'Magento\Framework\Stdlib\Cookie\PublicCookieMetadata',
             [],
@@ -183,18 +184,17 @@ class GuestTest extends \PHPUnit_Framework_TestCase
         $metaDataMock->expects($this->once())
             ->method('setPath')
             ->with(Guest::COOKIE_PATH)
-            ->will($this->returnSelf());
+            ->willReturnSelf();
         $metaDataMock->expects($this->once())
             ->method('setHttpOnly')
             ->with(true)
-            ->will($this->returnSelf());
+            ->willReturnSelf();
         $this->cookieMetadataFactoryMock->expects($this->once())
             ->method('createPublicCookieMetadata')
-            ->will($this->returnValue($metaDataMock));
+            ->willReturn($metaDataMock);
         $this->cookieManagerMock->expects($this->once())
             ->method('setPublicCookie')
             ->with(Guest::COOKIE_NAME, $this->anything(), $metaDataMock);
-
         $requestMock = $this->getMock('Magento\Framework\App\Request\Http', [], [], '', false);
         $this->assertTrue($this->guest->loadValidOrder($requestMock));
     }
diff --git a/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php b/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php
index e334be58410..f3da5e9ac41 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php
@@ -5,8 +5,7 @@
  */
 namespace Magento\Sales\Test\Unit\Model;
 
-use \Magento\Sales\Model\Order;
-
+use Magento\Sales\Model\Order;
 use Magento\Sales\Model\ResourceModel\Order\Status\History\CollectionFactory as HistoryCollectionFactory;
 
 /**
@@ -54,6 +53,16 @@ class OrderTest extends \PHPUnit_Framework_TestCase
      */
     protected $priceCurrency;
 
+    /**
+     * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $salesOrderCollectionFactoryMock;
+
+    /**
+     * @var \Magento\Sales\Model\ResourceModel\Order\Collection|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $salesOrderCollectionMock;
+
     protected function setUp()
     {
         $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
@@ -78,6 +87,13 @@ class OrderTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
+        $this->salesOrderCollectionFactoryMock = $this->getMock(
+            'Magento\Sales\Model\ResourceModel\Order\CollectionFactory',
+            ['create'],
+            [],
+            '',
+            false
+        );
         $this->item = $this->getMock(
             'Magento\Sales\Model\ResourceModel\Order\Item',
             ['isDeleted', 'getQtyToInvoice', 'getParentItemId', 'getQuoteItemId', 'getLockedDoInvoice'],
@@ -85,6 +101,10 @@ class OrderTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
+        $this->salesOrderCollectionMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Collection')
+            ->disableOriginalConstructor()
+            ->setMethods(['addFieldToFilter', 'load', 'getFirstItem'])
+            ->getMock();
         $collection = $this->getMock('Magento\Sales\Model\ResourceModel\Order\Item\Collection', [], [], '', false);
         $collection->expects($this->any())
             ->method('setOrderFilter')
@@ -121,6 +141,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
                 'data' => ['increment_id' => $this->incrementId],
                 'context' => $context,
                 'historyCollectionFactory' => $this->historyCollectionFactoryMock,
+                'salesOrderCollectionFactory' => $this->salesOrderCollectionFactoryMock,
                 'priceCurrency' => $this->priceCurrency
             ]
         );
@@ -722,6 +743,20 @@ class OrderTest extends \PHPUnit_Framework_TestCase
         }
     }
 
+    public function testLoadByIncrementIdAndStore()
+    {
+        $incrementId = '000000001';
+        $storeId = '2';
+        $this->salesOrderCollectionFactoryMock
+            ->expects($this->once())
+            ->method('create')
+            ->willReturn($this->salesOrderCollectionMock);
+        $this->salesOrderCollectionMock->expects($this->any())->method('addFieldToFilter')->willReturnSelf();
+        $this->salesOrderCollectionMock->expects($this->once())->method('load')->willReturnSelf();
+        $this->salesOrderCollectionMock->expects($this->once())->method('getFirstItem')->willReturn($this->order);
+        $this->assertSame($this->order , $this->order->loadByIncrementIdAndStore($incrementId, $storeId));
+    }
+
     public function notInvoicingStatesProvider()
     {
         return [
-- 
GitLab


From a7757306d5ce9586805bcc0ab947cd4954619a5f Mon Sep 17 00:00:00 2001
From: Dmitry Kologrivov <dmitry_kologrivov@epam.com>
Date: Sun, 25 Oct 2015 00:06:14 +0300
Subject: [PATCH 287/370] PV-5: Fix Integrity tests

---
 .../Magento/Test/Integrity/Theme/XmlFilesTest.php     | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php
index 95a9bb0d8cb..7e7319fb537 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php
@@ -15,13 +15,12 @@ class XmlFilesTest extends \PHPUnit_Framework_TestCase
      */
     public function testViewConfigFile($file)
     {
-        $reader = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
-            'Magento\Framework\View\Xsd\Reader'
-        );
-        $mergeXsd = $reader->read();
         $domConfig = new \Magento\Framework\Config\Dom(file_get_contents($file));
-        $errors = [];
-        $result = $domConfig->validate($mergeXsd, $errors);
+        $urnResolver = new \Magento\Framework\Config\Dom\UrnResolver();
+        $result = $domConfig->validate(
+            $urnResolver->getRealPath('urn:magento:framework:Config/etc/view.xsd'),
+            $errors
+        );
         $this->assertTrue($result, "Invalid XML-file: {$file}\n" . join("\n", $errors));
     }
 
-- 
GitLab


From 4455274fd7a632f05079eb8da79a5335ca4996d7 Mon Sep 17 00:00:00 2001
From: Maksym Aposov <maposov@ebay.com>
Date: Sun, 25 Oct 2015 10:08:22 +0200
Subject: [PATCH 288/370] MAGETWO-44516: Provide fix for Functional Tests MX

---
 .../Edit/Tab/Super/Config/Attribute.php       | 19 +++++++++++++++----
 .../Ui/Test/Block/Adminhtml/DataGrid.php      |  4 ++--
 2 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute.php
index de619baa251..15255001d1b 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute.php
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute.php
@@ -160,16 +160,27 @@ class Attribute extends Form
      */
     public function fillAttributes(array $attributes)
     {
+        $attributesFilters = [];
         foreach ($attributes as $attribute) {
             if (empty($attribute['attribute_id'])) {
                 $this->createNewVariationSet($attribute);
             }
+            $attributesFilters[] = ['frontend_label' => $attribute['frontend_label']];
         }
 
-        foreach ($attributes as $attribute) {
-            $this->getAttributesGrid()->searchAndSelect(['frontend_label' => $attribute['frontend_label']]);
-            $this->browser->find($this->nextButton)->click();
-            $this->getTemplateBlock()->waitLoader();
+        //select attributes
+        $this->getAttributesGrid()->resetFilter();
+        if ($this->_rootElement->find('[class$=no-data]')->isVisible()) {
+            return;
+        }
+        $this->getAttributesGrid()->selectItems($attributesFilters);
+
+        $this->browser->find($this->nextButton)->click();
+        $this->getTemplateBlock()->waitLoader();
+
+        //update attributes options
+        foreach ($attributes as $attribute)
+        {
             $this->updateOptions($attribute);
         }
 
diff --git a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
index 2dbf54a4354..849b1d7a3f4 100644
--- a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
+++ b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
@@ -286,7 +286,7 @@ class DataGrid extends Grid
      * @return void
      * @throws \Exception
      */
-    protected function selectItems(array $items)
+    public function selectItems(array $items)
     {
         $this->sortGridByField('ID');
         foreach ($items as $item) {
@@ -294,7 +294,7 @@ class DataGrid extends Grid
             $this->waitLoader();
             $selectItem = $this->getRow($item)->find($this->selectItem);
             do {
-                if ($selectItem->isVisible()) {
+                if ($selectItem->isVisible() && !$selectItem->isSelected()) {
                     $selectItem->click();
                     break;
                 }
-- 
GitLab


From 66b85694e59a2918f46fa325c1341beee0dd7c6a Mon Sep 17 00:00:00 2001
From: Maksym Aposov <maposov@ebay.com>
Date: Sun, 25 Oct 2015 10:14:44 +0200
Subject: [PATCH 289/370] MAGETWO-44516: Provide fix for Functional Tests MX

---
 .../Adminhtml/Product/Edit/Tab/Super/Config/Attribute.php      | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute.php
index 15255001d1b..4f1aa888773 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute.php
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/Edit/Tab/Super/Config/Attribute.php
@@ -179,8 +179,7 @@ class Attribute extends Form
         $this->getTemplateBlock()->waitLoader();
 
         //update attributes options
-        foreach ($attributes as $attribute)
-        {
+        foreach ($attributes as $attribute) {
             $this->updateOptions($attribute);
         }
 
-- 
GitLab


From 9ff1783f32e166749b4a0399fe36302b3b53431b Mon Sep 17 00:00:00 2001
From: Maksym Aposov <maposov@ebay.com>
Date: Sun, 25 Oct 2015 11:54:01 +0200
Subject: [PATCH 290/370] MAGETWO-44159: Configurable product price in store
 front doesn't reflect price change from backend

---
 .../Magento/ConfigurableProduct/Api/ProductRepositoryTest.php    | 1 -
 1 file changed, 1 deletion(-)

diff --git a/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/ProductRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/ProductRepositoryTest.php
index e8719f6f4e2..21f313bcf0c 100644
--- a/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/ProductRepositoryTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/ProductRepositoryTest.php
@@ -126,7 +126,6 @@ class ProductRepositoryTest extends WebapiAbstract
 
         $response = $this->createConfigurableProduct();
         $this->assertEquals(self::CONFIGURABLE_PRODUCT_SKU, $response[ProductInterface::SKU]);
-        $this->assertEquals(50, $response['price']);
         $this->assertTrue(
             isset($response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["configurable_product_options"])
         );
-- 
GitLab


From 74296a2f2c0e07fb4a591d473f741b3f5715920f Mon Sep 17 00:00:00 2001
From: Maksym Aposov <maposov@ebay.com>
Date: Sun, 25 Oct 2015 14:38:07 +0200
Subject: [PATCH 291/370] MAGETWO-44432: [GITHUB] Manage stock on Product level
 --> Use Config Settings is never checked by default #2141

---
 .../Bundle/Test/TestCase/CreateBundleProductEntityTest.xml     | 2 --
 .../Test/TestCase/Product/CreateSimpleProductEntityTest.xml    | 1 -
 .../Test/TestCase/CreateDownloadableProductEntityTest.xml      | 3 ++-
 .../Test/TestCase/UpdateDownloadableProductEntityTest.xml      | 1 -
 4 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/CreateBundleProductEntityTest.xml b/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/CreateBundleProductEntityTest.xml
index b18d964c212..5fa78fb4247 100644
--- a/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/CreateBundleProductEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Bundle/Test/TestCase/CreateBundleProductEntityTest.xml
@@ -149,8 +149,6 @@
             <data name="product/data/weight" xsi:type="string">10</data>
             <data name="product/data/category" xsi:type="string">category_%isolation%</data>
             <data name="product/data/price_view" xsi:type="string">Price Range</data>
-            <data name="product/data/stock_data/use_config_manage_stock" xsi:type="string">No</data>
-            <data name="product/data/stock_data/manage_stock" xsi:type="string">Yes</data>
             <data name="product/data/shipment_type" xsi:type="string">Together</data>
             <data name="product/data/bundle_selections/dataset" xsi:type="string">with_not_required_options</data>
             <data name="product/data/bundle_selections/products" xsi:type="string">catalogProductSimple::product_100_dollar,catalogProductVirtual::product_50_dollar|catalogProductSimple::product_100_dollar,catalogProductVirtual::product_50_dollar</data>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateSimpleProductEntityTest.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateSimpleProductEntityTest.xml
index 97aee8c72ce..3741b987951 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateSimpleProductEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Product/CreateSimpleProductEntityTest.xml
@@ -441,7 +441,6 @@
             <data name="product/data/name" xsi:type="string">Simple Product %isolation%</data>
             <data name="product/data/sku" xsi:type="string">simple_sku_%isolation%</data>
             <data name="product/data/price/value" xsi:type="string">10</data>
-            <data name="product/data/stock_data/manage_stock" xsi:type="string">Yes</data>
             <data name="product/data/stock_data/qty" xsi:type="string">1</data>
             <data name="tag" xsi:type="string">test_type:acceptance_test</data>
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductSaveMessage" />
diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/CreateDownloadableProductEntityTest.xml b/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/CreateDownloadableProductEntityTest.xml
index 89234e4b9a1..5874e8b5074 100644
--- a/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/CreateDownloadableProductEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/CreateDownloadableProductEntityTest.xml
@@ -10,6 +10,8 @@
         <variation name="CreateDownloadableProductEntityTestVariation1" summary="Create Downloadable Product with Required Fields Only and Assign it to the Category" ticketId="MAGETWO-13595">
             <data name="product/data/name" xsi:type="string">DownloadableProduct_%isolation%</data>
             <data name="product/data/sku" xsi:type="string">DownloadableProduct_%isolation%</data>
+            <data name="product/data/quantity_and_stock_status/qty" xsi:type="string">10</data>
+            <data name="product/data/quantity_and_stock_status/is_in_stock" xsi:type="string">In Stock</data>
             <data name="product/data/price/value" xsi:type="string">1</data>
             <data name="product/data/category" xsi:type="string">category %isolation%</data>
             <data name="product/data/downloadable_links/dataset" xsi:type="string">one_separately_link</data>
@@ -128,7 +130,6 @@
             <data name="product/data/tax_class_id/dataset" xsi:type="string">taxable_goods</data>
             <data name="product/data/product_has_weight" xsi:type="string">No</data>
             <data name="product/data/category" xsi:type="string">Default Category</data>
-            <data name="product/data/stock_data/manage_stock" xsi:type="string">Yes</data>
             <data name="product/data/stock_data/qty" xsi:type="string">123</data>
             <data name="product/data/stock_data/use_config_min_qty" xsi:type="string">No</data>
             <data name="product/data/stock_data/min_qty" xsi:type="string">123</data>
diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/UpdateDownloadableProductEntityTest.xml b/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/UpdateDownloadableProductEntityTest.xml
index 8a5230fce71..45fa48eb78c 100644
--- a/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/UpdateDownloadableProductEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Downloadable/Test/TestCase/UpdateDownloadableProductEntityTest.xml
@@ -54,7 +54,6 @@
             <data name="product/data/quantity_and_stock_status/qty" xsi:type="string">123</data>
             <data name="product/data/product_has_weight" xsi:type="string">No</data>
             <data name="product/data/category" xsi:type="string">Default Category</data>
-            <data name="product/data/stock_data/manage_stock" xsi:type="string">Yes</data>
             <data name="product/data/stock_data/use_config_min_qty" xsi:type="string">No</data>
             <data name="product/data/stock_data/min_qty" xsi:type="string">123</data>
             <data name="isRequired" xsi:type="string">No</data>
-- 
GitLab


From d31c0067106534abd86818de22d3f9d09d90e5d2 Mon Sep 17 00:00:00 2001
From: Viktor Tymchynskyi <vtymchynskyi@ebay.com>
Date: Sun, 25 Oct 2015 16:31:14 +0200
Subject: [PATCH 292/370] MAGETWO-44566: Unable to get rates for online
 shipping carriers on server with php-fpm, php version 5.6

---
 lib/internal/Magento/Framework/Xml/Security.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/internal/Magento/Framework/Xml/Security.php b/lib/internal/Magento/Framework/Xml/Security.php
index 1fade0a2aec..87c5f271a5b 100644
--- a/lib/internal/Magento/Framework/Xml/Security.php
+++ b/lib/internal/Magento/Framework/Xml/Security.php
@@ -21,7 +21,7 @@ class Security
      */
     private function heuristicScan($xmlContent)
     {
-        return strpos($xmlContent, '<!ENTITY') !== false;
+        return strpos($xmlContent, '<!ENTITY') === false;
     }
 
     /**
-- 
GitLab


From da880473b1f3aace37b0c78d3f84929f08a9b0c2 Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Sun, 25 Oct 2015 18:29:36 +0200
Subject: [PATCH 293/370] MAGETWO-44469: There are errors while switching
 Magento to "production" mode

---
 app/code/Magento/Deploy/Model/Deployer.php           | 9 ++++-----
 lib/internal/Magento/Framework/View/Asset/Source.php | 7 +++++--
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/app/code/Magento/Deploy/Model/Deployer.php b/app/code/Magento/Deploy/Model/Deployer.php
index 60480c220e2..c63bed56770 100644
--- a/app/code/Magento/Deploy/Model/Deployer.php
+++ b/app/code/Magento/Deploy/Model/Deployer.php
@@ -312,12 +312,11 @@ class Deployer
             }
         }
 
-        $logMessage = "Processing file '$filePath' for area '$area', theme '$themePath', locale '$locale'";
-        if ($module) {
-            $logMessage .= ", module '$module'";
-        }
-
         if ($this->output->isVeryVerbose()) {
+            $logMessage = "Processing file '$filePath' for area '$area', theme '$themePath', locale '$locale'";
+            if ($module) {
+                $logMessage .= ", module '$module'";
+            }
             $this->output->writeln($logMessage);
         }
 
diff --git a/lib/internal/Magento/Framework/View/Asset/Source.php b/lib/internal/Magento/Framework/View/Asset/Source.php
index d47a76a4fe5..53965c612a4 100644
--- a/lib/internal/Magento/Framework/View/Asset/Source.php
+++ b/lib/internal/Magento/Framework/View/Asset/Source.php
@@ -128,9 +128,12 @@ class Source
         $this->preProcessorPool->process($chain);
         $chain->assertValid();
         $dirCode = DirectoryList::ROOT;
-        if ($chain->isChanged()) {
+        $directoryReader = $this->filesystem->getDirectoryRead(DirectoryList::STATIC_VIEW);
+        $targetPath = DirectoryList::TMP_MATERIALIZATION_DIR . '/source/' . $chain->getTargetAssetPath();
+
+        if ($chain->isChanged() || !$directoryReader->isExist($targetPath)) {
             $dirCode = DirectoryList::VAR_DIR;
-            $path = DirectoryList::TMP_MATERIALIZATION_DIR . '/source/' . $chain->getTargetAssetPath();
+            $path = $targetPath;
             $this->varDir->writeFile($path, $chain->getContent());
         }
         $result = [$dirCode, $path];
-- 
GitLab


From 6aac527a0e1354fc0d5648ebbab3f6ff881e400f Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Sun, 25 Oct 2015 14:47:40 -0500
Subject: [PATCH 294/370] MAGETWO-44470: clear generated files in CLI framework
  - fixed CR comments

---
 setup/src/Magento/Setup/Console/CompilerPreparation.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/setup/src/Magento/Setup/Console/CompilerPreparation.php b/setup/src/Magento/Setup/Console/CompilerPreparation.php
index 23e796bfcec..adfefd3db07 100644
--- a/setup/src/Magento/Setup/Console/CompilerPreparation.php
+++ b/setup/src/Magento/Setup/Console/CompilerPreparation.php
@@ -35,8 +35,7 @@ class CompilerPreparation
         \Zend\ServiceManager\ServiceManager $serviceManager,
         \Symfony\Component\Console\Input\ArgvInput $input,
         \Magento\Framework\Filesystem\Driver\File $filesystemDriver
-    )
-    {
+    ) {
         $this->serviceManager   = $serviceManager;
         $this->input            = $input;
         $this->filesystemDriver = $filesystemDriver;
@@ -46,6 +45,7 @@ class CompilerPreparation
      * Determine whether a CLI command is for compilation, and if so, clear the directory
      *
      * @throws \Magento\Framework\Exception\FileSystemException
+     * @return void
      */
     public function handleCompilerEnvironment()
     {
-- 
GitLab


From 5d7d0bc7d16e53d2258b9f147405c8f94e6c4e56 Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Mon, 26 Oct 2015 00:02:31 -0500
Subject: [PATCH 295/370] MAGETWO-41954: Eliminate code generatio in production
 mode

---
 .../Magento/Setup/Console/Command/DiCompileCommand.php   | 6 ++++--
 .../Di/App/Task/Operation/ApplicationCodeGenerator.php   | 5 ++++-
 .../Module/Di/App/Task/Operation/ProxyGenerator.php      | 9 ++++++---
 .../Module/Di/App/Task/Operation/RepositoryGenerator.php | 9 ++++++---
 .../Test/Unit/Module/Di/App/Task/ProxyGeneratorTest.php  | 1 +
 .../Unit/Module/Di/App/Task/RepositoryGeneratorTest.php  | 3 ++-
 6 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/setup/src/Magento/Setup/Console/Command/DiCompileCommand.php b/setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
index 8540a636d63..9b2b2f5977d 100644
--- a/setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
+++ b/setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
@@ -296,11 +296,13 @@ class DiCompileCommand extends Command
         $operations = [
             OperationFactory::PROXY_GENERATOR => [
                 'paths' => $compiledPathsList['application'],
-                'filePatterns' => ['di' => '/\/etc\/([a-zA-Z_]*\/di|di)\.xml$/']
+                'filePatterns' => ['di' => '/\/etc\/([a-zA-Z_]*\/di|di)\.xml$/'],
+                'excludePatterns' => ['/\/Test\//']
             ],
             OperationFactory::REPOSITORY_GENERATOR => [
                 'paths' => $compiledPathsList['application'],
-                'filePatterns' => ['di' => '/\/etc\/([a-zA-Z_]*\/di|di)\.xml$/']
+                'filePatterns' => ['di' => '/\/etc\/([a-zA-Z_]*\/di|di)\.xml$/'],
+                'excludePatterns' => ['/\/Test\//']
             ],
             OperationFactory::DATA_ATTRIBUTES_GENERATOR => [
                 'paths' => $compiledPathsList['application'],
diff --git a/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ApplicationCodeGenerator.php b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ApplicationCodeGenerator.php
index b18f413fb68..bd66d8e1223 100644
--- a/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ApplicationCodeGenerator.php
+++ b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ApplicationCodeGenerator.php
@@ -69,7 +69,10 @@ class ApplicationCodeGenerator implements OperationInterface
             $files = [];
             foreach ($paths as $path) {
                 $this->classesScanner->getList($path);
-                $files = array_merge_recursive($files, $this->directoryScanner->scan($path, $this->data['filePatterns'], $this->data['excludePatterns']));
+                $files = array_merge_recursive(
+                    $files,
+                    $this->directoryScanner->scan($path, $this->data['filePatterns'], $this->data['excludePatterns'])
+                );
             }
             $entities = $this->phpScanner->collectEntities($files['php']);
             foreach ($entities as $entityName) {
diff --git a/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ProxyGenerator.php b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ProxyGenerator.php
index 38751954c9e..ebfec0635b8 100644
--- a/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ProxyGenerator.php
+++ b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/ProxyGenerator.php
@@ -48,14 +48,17 @@ class ProxyGenerator implements OperationInterface
      */
     public function doOperation()
     {
-        if (array_diff(array_keys($this->data), ['filePatterns', 'paths'])
-            !== array_diff(['filePatterns', 'paths'], array_keys($this->data))) {
+        if (array_diff(array_keys($this->data), ['filePatterns', 'paths', 'excludePatterns'])
+            !== array_diff(['filePatterns', 'paths', 'excludePatterns'], array_keys($this->data))) {
             return;
         }
 
         $files = [];
         foreach ($this->data['paths'] as $path) {
-            $files = array_merge_recursive($files, $this->directoryScanner->scan($path, $this->data['filePatterns']));
+            $files = array_merge_recursive(
+                $files,
+                $this->directoryScanner->scan($path, $this->data['filePatterns'], $this->data['excludePatterns'])
+            );
         }
         $proxies = $this->proxyScanner->collectEntities($files['di']);
         foreach ($proxies as $entityName) {
diff --git a/setup/src/Magento/Setup/Module/Di/App/Task/Operation/RepositoryGenerator.php b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/RepositoryGenerator.php
index cf3c779a3f7..60d11596615 100644
--- a/setup/src/Magento/Setup/Module/Di/App/Task/Operation/RepositoryGenerator.php
+++ b/setup/src/Magento/Setup/Module/Di/App/Task/Operation/RepositoryGenerator.php
@@ -57,8 +57,8 @@ class RepositoryGenerator implements OperationInterface
      */
     public function doOperation()
     {
-        if (array_diff(array_keys($this->data), ['filePatterns', 'paths'])
-            !== array_diff(['filePatterns', 'paths'], array_keys($this->data))) {
+        if (array_diff(array_keys($this->data), ['filePatterns', 'paths', 'excludePatterns'])
+            !== array_diff(['filePatterns', 'paths', 'excludePatterns'], array_keys($this->data))) {
             return;
         }
 
@@ -68,7 +68,10 @@ class RepositoryGenerator implements OperationInterface
         $this->repositoryScanner->setUseAutoload(false);
         $files = [];
         foreach ($this->data['paths'] as $path) {
-            $files = array_merge_recursive($files, $this->directoryScanner->scan($path, $this->data['filePatterns']));
+            $files = array_merge_recursive(
+                $files,
+                $this->directoryScanner->scan($path, $this->data['filePatterns'], $this->data['excludePatterns'])
+            );
         }
         $repositories = $this->repositoryScanner->collectEntities($files['di']);
         foreach ($repositories as $entityName) {
diff --git a/setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/ProxyGeneratorTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/ProxyGeneratorTest.php
index 9b78e237db3..c721973f615 100644
--- a/setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/ProxyGeneratorTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/ProxyGeneratorTest.php
@@ -70,6 +70,7 @@ class ProxyGeneratorTest extends \PHPUnit_Framework_TestCase
         $data = [
             'paths' => ['path/to/app'],
             'filePatterns' => ['di' => 'di.xml'],
+            'excludePatterns' => ['/\/Test\//'],
         ];
         $files = ['di' => []];
         $model = new ProxyGenerator(
diff --git a/setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/RepositoryGeneratorTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/RepositoryGeneratorTest.php
index 8b49d60df51..626ccfbe713 100644
--- a/setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/RepositoryGeneratorTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Di/App/Task/RepositoryGeneratorTest.php
@@ -16,7 +16,7 @@ class RepositoryGeneratorTest extends \PHPUnit_Framework_TestCase
      * @var Scanner\DirectoryScanner | \PHPUnit_Framework_MockObject_MockObject
      */
     private $directoryScannerMock;
-    
+
     /**
      * @var Scanner\RepositoryScanner | \PHPUnit_Framework_MockObject_MockObject
      */
@@ -75,6 +75,7 @@ class RepositoryGeneratorTest extends \PHPUnit_Framework_TestCase
         $data = [
             'paths' => ['path/to/app'],
             'filePatterns' => ['di' => 'di.xml'],
+            'excludePatterns' => ['/\/Test\//'],
         ];
         $files = ['di' => []];
         $model = new RepositoryGenerator(
-- 
GitLab


From f984b1eac3d8c7d6e791a68958ce919190efd0af Mon Sep 17 00:00:00 2001
From: "Gurzhyi, Andrii" <agurzhyi@ebay.com>
Date: Mon, 26 Oct 2015 10:25:59 +0200
Subject: [PATCH 296/370] MAGETWO-44443: Grunt less task fails

- Changed repository of asset
---
 app/code/Magento/Developer/etc/di.xml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/app/code/Magento/Developer/etc/di.xml b/app/code/Magento/Developer/etc/di.xml
index 25b49f280fd..bf95f080763 100644
--- a/app/code/Magento/Developer/etc/di.xml
+++ b/app/code/Magento/Developer/etc/di.xml
@@ -39,6 +39,7 @@
     </virtualType>
     <type name="Magento\Developer\Model\Css\PreProcessor\FileGenerator\PublicationDecorator">
         <arguments>
+            <argument name="assetRepo" xsi:type="object">AssetRepositorySourceThemeDeploy</argument>
             <argument name="assetPublisher" xsi:type="object">AssetPublisherSourceThemeDeploy</argument>
         </arguments>
     </type>
-- 
GitLab


From d24d66d3759fd031c15e16fb466d0fb18a8e2d95 Mon Sep 17 00:00:00 2001
From: Dmytro Poperechnyy <dpoperechnyy@ebay.com>
Date: Mon, 26 Oct 2015 10:28:53 +0200
Subject: [PATCH 297/370] MAGETWO-44539: Issues with "Orders and Returns"
 widget

- Redundant space eliminated;
---
 app/code/Magento/Sales/Test/Unit/Model/OrderTest.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php b/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php
index f3da5e9ac41..be95921d778 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php
@@ -754,7 +754,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
         $this->salesOrderCollectionMock->expects($this->any())->method('addFieldToFilter')->willReturnSelf();
         $this->salesOrderCollectionMock->expects($this->once())->method('load')->willReturnSelf();
         $this->salesOrderCollectionMock->expects($this->once())->method('getFirstItem')->willReturn($this->order);
-        $this->assertSame($this->order , $this->order->loadByIncrementIdAndStore($incrementId, $storeId));
+        $this->assertSame($this->order, $this->order->loadByIncrementIdAndStore($incrementId, $storeId));
     }
 
     public function notInvoicingStatesProvider()
-- 
GitLab


From b80b85ccc45ed00662a2c9ae509b7faa450ace29 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Mon, 26 Oct 2015 10:59:25 +0200
Subject: [PATCH 298/370] MAGETWO-44521: Multi-check is absent in Admin data
 grid filters

- Fixed missed grid on Blocks page
---
 .../Cms/view/adminhtml/ui_component/cms_block_listing.xml | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml
index 6934d263535..6775549e39d 100644
--- a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml
+++ b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml
@@ -85,6 +85,14 @@
                         <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
                     </item>
+                    <item name="templates" xsi:type="array">
+                        <item name="filters" xsi:type="array">
+                            <item name="select" xsi:type="array">
+                                <item name="component" xsi:type="string">Magento_Ui/js/form/element/ui-select</item>
+                                <item name="template" xsi:type="string">ui/grid/filters/elements/ui-select</item>
+                            </item>
+                        </item>
+                    </item>
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-- 
GitLab


From bb0d99aa7488495adde10f8ce238d8b353688f12 Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Mon, 26 Oct 2015 11:14:18 +0200
Subject: [PATCH 299/370] MAGETWO-44469: There are errors while switching
 Magento to "production" mode

---
 .../View/Test/Unit/Asset/SourceTest.php       | 50 ++++++++++---------
 1 file changed, 27 insertions(+), 23 deletions(-)

diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Asset/SourceTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Asset/SourceTest.php
index 6901f2d0606..427ed2bc155 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Asset/SourceTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Asset/SourceTest.php
@@ -94,7 +94,7 @@ class SourceTest extends \PHPUnit_Framework_TestCase
         $themeList->expects($this->any())
             ->method('getThemeByFullPath')
             ->with('frontend/magento_theme')
-            ->will($this->returnValue($this->theme));
+            ->willReturn($this->theme);
 
         $this->initFilesystem();
 
@@ -104,32 +104,36 @@ class SourceTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @param $origFile
-     * @param $origPath
-     * @param $origContent
-     * @param $isMaterialization
+     * @param string $origFile
+     * @param string $origPath
+     * @param string $origContent
+     * @param bool $isMaterialization
+     * @param bool $isExist
      *
      * @dataProvider getFileDataProvider
      */
-    public function testGetFile($origFile, $origPath, $origContent, $isMaterialization)
+    public function testGetFile($origFile, $origPath, $origContent, $isMaterialization, $isExist)
     {
         $filePath = 'some/file.ext';
         $this->viewFileResolution->expects($this->once())
             ->method('getFile')
             ->with('frontend', $this->theme, 'en_US', $filePath, 'Magento_Module')
-            ->will($this->returnValue($origFile));
+            ->willReturn($origFile);
         $this->rootDirRead->expects($this->once())
             ->method('getRelativePath')
             ->with($origFile)
-            ->will($this->returnValue($origPath));
+            ->willReturn($origPath);
         $this->rootDirRead->expects($this->once())
             ->method('readFile')
             ->with($origPath)
-            ->will($this->returnValue($origContent));
+            ->willReturn($origContent);
         $this->preProcessorPool->expects($this->once())
             ->method('process')
             ->with($this->chain);
-        if ($isMaterialization) {
+        $this->staticDirRead->expects($this->any())
+            ->method('isExist')
+            ->willReturn($isExist);
+        if ($isMaterialization || !$isExist) {
             $this->chain
                 ->expects($this->once())
                 ->method('isChanged')
@@ -147,13 +151,13 @@ class SourceTest extends \PHPUnit_Framework_TestCase
                 ->with('view_preprocessed/source/some/file.ext', 'processed');
             $this->varDir->expects($this->once())
                 ->method('getAbsolutePath')
-                ->with('view_preprocessed/source/some/file.ext')->will($this->returnValue('result'));
+                ->with('view_preprocessed/source/some/file.ext')->willReturn('result');
         } else {
             $this->varDir->expects($this->never())->method('writeFile');
             $this->rootDirRead->expects($this->once())
                 ->method('getAbsolutePath')
                 ->with('source/some/file.ext')
-                ->will($this->returnValue('result'));
+                ->willReturn('result');
         }
         $this->assertSame('result', $this->object->getFile($this->getAsset()));
     }
@@ -197,10 +201,10 @@ class SourceTest extends \PHPUnit_Framework_TestCase
     public function getFileDataProvider()
     {
         return [
-            ['/root/some/file.ext', 'source/some/file.ext', 'processed', false],
-            ['/root/some/file.ext', 'source/some/file.ext', 'not_processed', true],
-            ['/root/some/file.ext2', 'source/some/file.ext2', 'processed', true],
-            ['/root/some/file.ext2', 'source/some/file.ext2', 'not_processed', true],
+            ['/root/some/file.ext', 'source/some/file.ext', 'processed', false, true],
+            ['/root/some/file.ext', 'source/some/file.ext', 'not_processed', true, false],
+            ['/root/some/file.ext2', 'source/some/file.ext2', 'processed', true, true],
+            ['/root/some/file.ext2', 'source/some/file.ext2', 'not_processed', true, false],
         ];
     }
 
@@ -219,11 +223,11 @@ class SourceTest extends \PHPUnit_Framework_TestCase
 
         $this->filesystem->expects($this->any())
             ->method('getDirectoryRead')
-            ->will($this->returnValueMap($readDirMap));
+            ->willReturnMap($readDirMap);
         $this->filesystem->expects($this->any())
             ->method('getDirectoryWrite')
             ->with(DirectoryList::VAR_DIR)
-            ->will($this->returnValue($this->varDir));
+            ->willReturn($this->varDir);
     }
 
     /**
@@ -252,19 +256,19 @@ class SourceTest extends \PHPUnit_Framework_TestCase
         $asset = $this->getMock('Magento\Framework\View\Asset\File', [], [], '', false);
         $asset->expects($this->any())
             ->method('getContext')
-            ->will($this->returnValue($context));
+            ->willReturn($context);
         $asset->expects($this->any())
             ->method('getFilePath')
-            ->will($this->returnValue('some/file.ext'));
+            ->willReturn('some/file.ext');
         $asset->expects($this->any())
             ->method('getPath')
-            ->will($this->returnValue('some/file.ext'));
+            ->willReturn('some/file.ext');
         $asset->expects($this->any())
             ->method('getModule')
-            ->will($this->returnValue('Magento_Module'));
+            ->willReturn('Magento_Module');
         $asset->expects($this->any())
             ->method('getContentType')
-            ->will($this->returnValue('ext'));
+            ->willReturn('ext');
 
         return $asset;
     }
-- 
GitLab


From e72011a42457061f9272fd0344d7d1a25049fd3d Mon Sep 17 00:00:00 2001
From: Vitalii Zabaznov <vzabaznov@ebay.com>
Date: Mon, 26 Oct 2015 11:16:45 +0200
Subject: [PATCH 300/370] MAGETWO-43505:  Check-boxes are avoided on "create
 Downloadable Product" Admin page

---
 .../templates/product/edit/downloadable/links.phtml          | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
index b47b69f0cb0..70c90cf8416 100644
--- a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
+++ b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
@@ -469,9 +469,8 @@ require([
             })(jQuery);
         };
 
-
-        if (jQuery('#link-switcher1')) {
-            jQuery('#link-switcher1, #link-switcher0').on('change', function () {
+        if (jQuery('input[name="product[links_purchased_separately]"]')) {
+            jQuery('input[name="product[links_purchased_separately]"]').on('change', function () {
                 linkItems.togglePriceFields.bind()
             });
         }
-- 
GitLab


From ffb15d2b4a5ca1eb8c957d23be2893a51858e441 Mon Sep 17 00:00:00 2001
From: Dmytro Poperechnyy <dpoperechnyy@ebay.com>
Date: Mon, 26 Oct 2015 11:20:21 +0200
Subject: [PATCH 301/370] MAGETWO-44539: Issues with "Orders and Returns"
 widget

- Renamed method loadByIncrementIdAndStore to loadByIncrementIdAndStoreId;
---
 app/code/Magento/Sales/Helper/Guest.php               | 2 +-
 app/code/Magento/Sales/Model/Order.php                | 4 ++--
 app/code/Magento/Sales/Test/Unit/Helper/GuestTest.php | 4 ++--
 app/code/Magento/Sales/Test/Unit/Model/OrderTest.php  | 4 ++--
 4 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/app/code/Magento/Sales/Helper/Guest.php b/app/code/Magento/Sales/Helper/Guest.php
index d61a3af66cb..a69fa337b8d 100644
--- a/app/code/Magento/Sales/Helper/Guest.php
+++ b/app/code/Magento/Sales/Helper/Guest.php
@@ -150,7 +150,7 @@ class Guest extends \Magento\Framework\App\Helper\AbstractHelper
             }
 
             if (!$errors) {
-                $order = $order->loadByIncrementIdAndStore($incrementId, $storeId);
+                $order = $order->loadByIncrementIdAndStoreId($incrementId, $storeId);
             }
 
             $errors = true;
diff --git a/app/code/Magento/Sales/Model/Order.php b/app/code/Magento/Sales/Model/Order.php
index 233f5545071..e289e654b98 100644
--- a/app/code/Magento/Sales/Model/Order.php
+++ b/app/code/Magento/Sales/Model/Order.php
@@ -444,13 +444,13 @@ class Order extends AbstractModel implements EntityInterface, OrderInterface
     }
 
     /**
-     * Load order by system increment identifier and store
+     * Load order by system increment and store identifiers
      *
      * @param string $incrementId
      * @param string $storeId
      * @return \Magento\Sales\Model\Order
      */
-    public function loadByIncrementIdAndStore($incrementId, $storeId)
+    public function loadByIncrementIdAndStoreId($incrementId, $storeId)
     {
         $orderCollection = $this->getSalesOrderCollection(
             [
diff --git a/app/code/Magento/Sales/Test/Unit/Helper/GuestTest.php b/app/code/Magento/Sales/Test/Unit/Helper/GuestTest.php
index a8baaac6336..6772ac7276d 100644
--- a/app/code/Magento/Sales/Test/Unit/Helper/GuestTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Helper/GuestTest.php
@@ -75,7 +75,7 @@ class GuestTest extends \PHPUnit_Framework_TestCase
         $this->salesOrderMock = $this->getMock(
             'Magento\Sales\Model\Order',
             [
-                'getProtectCode', 'loadByIncrementIdAndStore', 'loadByIncrementId',
+                'getProtectCode', 'loadByIncrementIdAndStoreId', 'loadByIncrementId',
                 'getId', 'getBillingAddress', '__wakeup'
             ],
             [],
@@ -119,7 +119,7 @@ class GuestTest extends \PHPUnit_Framework_TestCase
         $this->storeManagerInterfaceMock->expects($this->once())->method('getStore')->willReturn($this->storeModelMock);
         $this->storeModelMock->expects($this->once())->method('getId')->willReturn($storeId);
         $this->orderFactoryMock->expects($this->once())->method('create')->willReturn($this->salesOrderMock);
-        $this->salesOrderMock->expects($this->once())->method('loadByIncrementIdAndStore')->willReturnSelf();
+        $this->salesOrderMock->expects($this->once())->method('loadByIncrementIdAndStoreId')->willReturnSelf();
         $this->salesOrderMock->expects($this->any())->method('getId')->willReturn($incrementId);
 
         $billingAddressMock = $this->getMock(
diff --git a/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php b/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php
index be95921d778..7ed438f3ce7 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php
@@ -743,7 +743,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
         }
     }
 
-    public function testLoadByIncrementIdAndStore()
+    public function testLoadByIncrementIdAndStoreId()
     {
         $incrementId = '000000001';
         $storeId = '2';
@@ -754,7 +754,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
         $this->salesOrderCollectionMock->expects($this->any())->method('addFieldToFilter')->willReturnSelf();
         $this->salesOrderCollectionMock->expects($this->once())->method('load')->willReturnSelf();
         $this->salesOrderCollectionMock->expects($this->once())->method('getFirstItem')->willReturn($this->order);
-        $this->assertSame($this->order, $this->order->loadByIncrementIdAndStore($incrementId, $storeId));
+        $this->assertSame($this->order, $this->order->loadByIncrementIdAndStoreId($incrementId, $storeId));
     }
 
     public function notInvoicingStatesProvider()
-- 
GitLab


From fe6af12fad2cd3b827a85e79577ccd053747ee8c Mon Sep 17 00:00:00 2001
From: Mikalai_Shostka <mikalai_shostka@epam.com>
Date: Mon, 26 Oct 2015 12:47:36 +0300
Subject: [PATCH 302/370] Fix bug: Couldn't retrive a remote preview image
 file.

---
 .../Controller/Adminhtml/Product/Gallery/RetrieveImage.php    | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php b/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
index 5af6d0976dc..9fde09e3163 100644
--- a/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
+++ b/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
@@ -132,7 +132,9 @@ class RetrieveImage extends \Magento\Backend\App\Action
         $this->curl->write('GET', $fileUrl);
         $image = $this->curl->read();
         if (empty($image)) {
-            throw new \InvalidArgumentException(__('Couldn\'t retrive a remote preview image file. Service is inaccessible.'));
+            throw new \Magento\Framework\Exception\LocalizedException(
+                __('Could not get video information. Please check your connection and try again.')
+            );
         }
         $this->fileUtility->saveFile($localFilePath, $image);
     }
-- 
GitLab


From 71e2259d0e82c2272d26b387e620209e8121dcbc Mon Sep 17 00:00:00 2001
From: Ievgen Shakhsuvarov <ishakhsuvarov@ebay.com>
Date: Fri, 23 Oct 2015 17:55:08 +0300
Subject: [PATCH 303/370] MAGETWO-44514: Products are duplicated in Shopping
 Cart on Storefront

---
 app/code/Magento/Checkout/Model/Cart.php | 1 +
 1 file changed, 1 insertion(+)

diff --git a/app/code/Magento/Checkout/Model/Cart.php b/app/code/Magento/Checkout/Model/Cart.php
index 9cc015b2271..470af073fef 100644
--- a/app/code/Magento/Checkout/Model/Cart.php
+++ b/app/code/Magento/Checkout/Model/Cart.php
@@ -324,6 +324,7 @@ class Cart extends DataObject implements CartInterface
         if (!$request->hasQty()) {
             $request->setQty(1);
         }
+        !$request->hasFormKey() ?: $request->unsFormKey();
 
         return $request;
     }
-- 
GitLab


From 1d6d1ce250921b567ff0b3dcdf17e40a3e4f1def Mon Sep 17 00:00:00 2001
From: Iryna Lagno <ilagno@ebay.com>
Date: Fri, 23 Oct 2015 17:55:28 +0300
Subject: [PATCH 304/370] MAGETWO-44453: Required address attribute is not
 require for checkout flow

---
 .../Checkout/view/frontend/web/js/view/billing-address.js     | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js b/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js
index 4c77250a872..0b3290b3c39 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js
@@ -145,8 +145,8 @@ define(
                 } else {
                     this.source.set('params.invalid', false);
                     this.source.trigger(this.dataScopePrefix + '.data.validate');
-                    if (this.source.get('billingAddress.custom_attributes')) {
-                        this.source.trigger('billingAddress.custom_attributes.data.validate');
+                    if (this.source.get(this.dataScopePrefix + '.custom_attributes')) {
+                        this.source.trigger(this.dataScopePrefix + '.custom_attributes.data.validate');
                     };
 
                     if (!this.source.get('params.invalid')) {
-- 
GitLab


From 97e78c94d30ebc18a005a2c2467178f0b97360dc Mon Sep 17 00:00:00 2001
From: Iryna Lagno <ilagno@ebay.com>
Date: Fri, 23 Oct 2015 18:33:58 +0300
Subject: [PATCH 305/370] MAGETWO-44541: Incorrect currency symbol on Checkout

---
 .../Magento/Checkout/Model/DefaultConfigProvider.php   | 10 +---------
 1 file changed, 1 insertion(+), 9 deletions(-)

diff --git a/app/code/Magento/Checkout/Model/DefaultConfigProvider.php b/app/code/Magento/Checkout/Model/DefaultConfigProvider.php
index d0cc39ceaaf..8e59581f351 100644
--- a/app/code/Magento/Checkout/Model/DefaultConfigProvider.php
+++ b/app/code/Magento/Checkout/Model/DefaultConfigProvider.php
@@ -62,11 +62,6 @@ class DefaultConfigProvider implements ConfigProviderInterface
      */
     private $httpContext;
 
-    /**
-     * @var CurrencyManager
-     */
-    private $currencyManager;
-
     /**
      * @var QuoteRepository
      */
@@ -174,7 +169,6 @@ class DefaultConfigProvider implements ConfigProviderInterface
      * @param CustomerSession $customerSession
      * @param CustomerUrlManager $customerUrlManager
      * @param HttpContext $httpContext
-     * @param CurrencyManager $currencyManager
      * @param QuoteRepository $quoteRepository
      * @param QuoteItemRepository $quoteItemRepository
      * @param ShippingMethodManager $shippingMethodManager
@@ -205,7 +199,6 @@ class DefaultConfigProvider implements ConfigProviderInterface
         CustomerSession $customerSession,
         CustomerUrlManager $customerUrlManager,
         HttpContext $httpContext,
-        CurrencyManager $currencyManager,
         QuoteRepository $quoteRepository,
         QuoteItemRepository $quoteItemRepository,
         ShippingMethodManager $shippingMethodManager,
@@ -233,7 +226,6 @@ class DefaultConfigProvider implements ConfigProviderInterface
         $this->customerSession = $customerSession;
         $this->customerUrlManager = $customerUrlManager;
         $this->httpContext = $httpContext;
-        $this->currencyManager = $currencyManager;
         $this->quoteRepository = $quoteRepository;
         $this->quoteItemRepository = $quoteItemRepository;
         $this->shippingMethodManager = $shippingMethodManager;
@@ -282,7 +274,7 @@ class DefaultConfigProvider implements ConfigProviderInterface
         );
         $output['basePriceFormat'] = $this->localeFormat->getPriceFormat(
             null,
-            $this->currencyManager->getDefaultCurrency()
+            $this->checkoutSession->getQuote()->getBaseCurrencyCode()
         );
         $output['postCodes'] = $this->postCodesConfig->getPostCodes();
         $output['imageData'] = $this->imageProvider->getImages($quoteId);
-- 
GitLab


From bb02063a8ceae868a1496cb0d53926842e9b0a66 Mon Sep 17 00:00:00 2001
From: Stanislav Idolov <sidolov@ebay.com>
Date: Fri, 23 Oct 2015 20:20:23 +0300
Subject: [PATCH 306/370] MAGETWO-44530: Impossible save value for attribute
 with default entity table

---
 app/code/Magento/Eav/Model/Entity/AbstractEntity.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Eav/Model/Entity/AbstractEntity.php b/app/code/Magento/Eav/Model/Entity/AbstractEntity.php
index c52d87b51b4..f26e634b865 100644
--- a/app/code/Magento/Eav/Model/Entity/AbstractEntity.php
+++ b/app/code/Magento/Eav/Model/Entity/AbstractEntity.php
@@ -1513,7 +1513,7 @@ abstract class AbstractEntity extends AbstractResource implements EntityInterfac
             'value' => $this->_prepareValueForSave($value, $attribute),
         ];
 
-        if (!$this->getEntityTable()) {
+        if (!$this->getEntityTable() || $this->getEntityTable() == \Magento\Eav\Model\Entity::DEFAULT_ENTITY_TABLE) {
             $data['entity_type_id'] = $object->getEntityTypeId();
         }
 
-- 
GitLab


From 755cbd7c24fbf0ca8b59243a9c9fa7c266f0fb56 Mon Sep 17 00:00:00 2001
From: Ievgen Shakhsuvarov <ishakhsuvarov@ebay.com>
Date: Sat, 24 Oct 2015 11:23:24 +0300
Subject: [PATCH 307/370] MAGETWO-40150: Empty space is displayed in Mini
 Shopping Cart where the Product was deleted

---
 .../Checkout/view/frontend/web/js/sidebar.js  | 20 ++++++++++++-------
 .../view/frontend/web/js/view/minicart.js     |  6 ------
 2 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js b/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js
index 2600ada8b3c..790d8f721f5 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js
@@ -10,9 +10,10 @@ define([
     'Magento_Customer/js/customer-data',
     'Magento_Ui/js/modal/alert',
     'Magento_Ui/js/modal/confirm',
+    'Magento_Customer/js/customer-data',
     "jquery/ui",
     "mage/decorate"
-], function($, authenticationPopup, customerData, alert, confirm){
+], function($, authenticationPopup, customerData, alert, confirm, customerData){
 
     $.widget('mage.sidebar', {
         options: {
@@ -21,8 +22,18 @@ define([
         },
         scrollHeight: 0,
 
-        _create: function() {
+        /**
+         * Create sidebar.
+         * @private
+         */
+        _create: function () {
+            var self = this;
+
             this._initContent();
+            customerData.get('cart').subscribe(function () {
+                $(self.options.targetElement).trigger('contentUpdated');
+                self._calcHeight();
+            });
         },
 
         _initContent: function() {
@@ -163,11 +174,6 @@ define([
          * @private
          */
         _removeItemAfter: function(elem, response) {
-            /** TODO: Extra options support. Should be refactored after MAGETWO-43159. */
-            var self = this;
-            setTimeout(function(){
-                self._calcHeight();
-            }, 500);
         },
         /**
          * @param url - ajax url
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/minicart.js b/app/code/Magento/Checkout/view/frontend/web/js/view/minicart.js
index 933b5725638..68f02b5d572 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/minicart.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/minicart.js
@@ -72,12 +72,6 @@ define([
                 this.isLoading(addToCartCalls > 0);
                 sidebarInitialized = false;
                 initSidebar();
-
-                /**TODO: Extra options support. Should be refactored after MAGETWO-43159. */
-                setTimeout(function(){
-                    minicart.trigger('contentUpdated');
-                }, 500);
-
             }, this);
             $('[data-block="minicart"]').on('contentLoading', function(event) {
                 addToCartCalls++;
-- 
GitLab


From 0734ec98ef7f6b4277633072c16ebbce60327815 Mon Sep 17 00:00:00 2001
From: Ievgen Shakhsuvarov <ishakhsuvarov@ebay.com>
Date: Sat, 24 Oct 2015 15:39:08 +0300
Subject: [PATCH 308/370] MAGETWO-40150: Empty space is displayed in Mini
 Shopping Cart where the Product was deleted

---
 app/code/Magento/Checkout/view/frontend/web/js/sidebar.js | 1 +
 1 file changed, 1 insertion(+)

diff --git a/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js b/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js
index 790d8f721f5..b1ec6a75dcb 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js
@@ -33,6 +33,7 @@ define([
             customerData.get('cart').subscribe(function () {
                 $(self.options.targetElement).trigger('contentUpdated');
                 self._calcHeight();
+                self._isOverflowed();
             });
         },
 
-- 
GitLab


From a9f25d6051e0f6db3592bcc3edcb06f8760582b4 Mon Sep 17 00:00:00 2001
From: Stanislav Idolov <sidolov@ebay.com>
Date: Mon, 26 Oct 2015 10:44:56 +0200
Subject: [PATCH 309/370] MAGETWO-39588: store_id value is not honored when
 creating simple product through API in multi-websites / multi-stores setup

---
 .../etc/{adminhtml => }/events.xml            |  0
 .../Store/_files/core_fixturestore.php        | 21 ++++++++++---------
 2 files changed, 11 insertions(+), 10 deletions(-)
 rename app/code/Magento/CatalogSearch/etc/{adminhtml => }/events.xml (100%)

diff --git a/app/code/Magento/CatalogSearch/etc/adminhtml/events.xml b/app/code/Magento/CatalogSearch/etc/events.xml
similarity index 100%
rename from app/code/Magento/CatalogSearch/etc/adminhtml/events.xml
rename to app/code/Magento/CatalogSearch/etc/events.xml
diff --git a/dev/tests/integration/testsuite/Magento/Store/_files/core_fixturestore.php b/dev/tests/integration/testsuite/Magento/Store/_files/core_fixturestore.php
index 730eca1e740..88c3f333e12 100644
--- a/dev/tests/integration/testsuite/Magento/Store/_files/core_fixturestore.php
+++ b/dev/tests/integration/testsuite/Magento/Store/_files/core_fixturestore.php
@@ -6,25 +6,26 @@
 
 use Magento\TestFramework\Helper\Bootstrap;
 
+/** @var \Magento\Store\Model\StoreManagerInterface $storeManager */
+$storeManager = Bootstrap::getObjectManager()->get('Magento\Store\Model\StoreManagerInterface');
+
+/** @var \Magento\Store\Model\Store $store */
 $store = Bootstrap::getObjectManager()->create('Magento\Store\Model\Store');
 $storeCode = 'fixturestore';
-if (!$store->load($storeCode)->getId()) {
-    $websiteId = Bootstrap::getObjectManager()->get('Magento\Store\Model\StoreManagerInterface')
-        ->getWebsite()
-        ->getId();
-
-    $groupId = Bootstrap::getObjectManager()->get('Magento\Store\Model\StoreManagerInterface')
-        ->getWebsite()
-        ->getDefaultGroupId();
 
+if (!$store->load($storeCode)->getId()) {
     $store->setCode($storeCode)
-        ->setWebsiteId($websiteId)
-        ->setGroupId($groupId)
+        ->setWebsiteId($storeManager->getWebsite()->getId())
+        ->setGroupId($storeManager->getWebsite()->getDefaultGroupId())
         ->setName('Fixture Store')
         ->setSortOrder(10)
         ->setIsActive(1);
     $store->save();
 
+    Bootstrap::getObjectManager()
+        ->get('Magento\Framework\Event\ManagerInterface')
+        ->dispatch('store_add', ['store' => $store]);
+
     /* Refresh stores memory cache */
     Bootstrap::getObjectManager()->get('Magento\Store\Model\StoreManagerInterface')->reinitStores();
 }
-- 
GitLab


From c54d67aadc55475892b17c4a958dfcaf8bf8ce52 Mon Sep 17 00:00:00 2001
From: Ievgen Sentiabov <isentiabov@ebay.com>
Date: Mon, 26 Oct 2015 13:19:04 +0200
Subject: [PATCH 310/370] MAGETWO-44588: Shipping address is displayed with
 html tags on express Order Review Page

 - Added `br` tags to escaper excluded tags list for shipping address rendering
---
 .../Paypal/view/frontend/templates/express/review.phtml      | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Paypal/view/frontend/templates/express/review.phtml b/app/code/Magento/Paypal/view/frontend/templates/express/review.phtml
index 9146130881c..970607145f0 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/express/review.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/express/review.phtml
@@ -84,7 +84,10 @@
                     </strong>
                     <div class="box-content">
                         <address>
-                            <?php echo $block->escapeHtml($block->renderAddress($block->getShippingAddress())); ?>
+                            <?php echo $block->escapeHtml(
+                                $block->renderAddress($block->getShippingAddress()),
+                                ['br']
+                            ); ?>
                         </address>
                     </div>
                     <?php if ($block->getCanEditShippingAddress()): ?>
-- 
GitLab


From 2cc1116250fbc7dd6a7c1581446c0975f4b097ca Mon Sep 17 00:00:00 2001
From: Mikalai_Eutsikhieu <Mikalai_Eutsikhieu@epam.com>
Date: Mon, 26 Oct 2015 14:26:47 +0300
Subject: [PATCH 311/370] Edit warning failed image upload style

---
 .../adminhtml/web/js/get-video-information.js |  2 +-
 .../view/adminhtml/web/js/new-video-dialog.js | 12 ++++---
 .../web/css/source/_module.less               | 31 +++++++++++++++++++
 3 files changed, 39 insertions(+), 6 deletions(-)

diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
index 06ed1098c8d..76cf3f98771 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
+++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
@@ -403,7 +403,7 @@ require([
                             errorsMessage.push(tmpError.message);
                         }
 
-                        return 'Video cannot be shown due to the following reason: ' + $.unique(errorsMessage).join(', ');
+                        return 'Video cant be shown due to the following reason: ' + $.unique(errorsMessage).join(', ');
                     };
 
                     if (data.error && data.error.code === 400) {
diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
index e5efb668b51..e16cac8bd00 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
+++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
@@ -4,14 +4,13 @@
  */
 define([
     'jquery',
-    'Magento_Ui/js/modal/alert',
     'jquery/ui',
     'Magento_Ui/js/modal/modal',
     'mage/translate',
     'mage/backend/tree-suggest',
     'mage/backend/validation',
     'Magento_ProductVideo/js/get-video-information'
-], function ($, alert) {
+], function ($) {
     'use strict';
 
     $.widget('mage.createVideoPlayer', {
@@ -527,10 +526,13 @@ define([
         _onImageLoaded: function (result, file, oldFile, callback) {
             var data = JSON.parse(result);
 
+            if ($('#video_url').parent().find('.image-upload-error').length > 0) {
+                $('.image-upload-error').remove();
+            }
+
             if (data.errorcode || data.error) {
-                alert({
-                    content: data.error
-                });
+                $('#video_url').parent().append('<div class="image-upload-error">' +
+                '<div class="image-upload-error-cross"></div><span>' + data.error + '</span></div>');
 
                 return;
             }
diff --git a/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less b/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
index 7f4e8a590ac..3380e885fd1 100644
--- a/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
+++ b/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
@@ -234,3 +234,34 @@
 .image.base-image:hover .image-label {
     display: none;
 }
+
+.image-upload-error {
+    background: lighten(@color-red9, 80%);
+    color: #303030;
+    font-size: 12px;
+    font-weight: 400;
+    padding: 7px 7px 7px 35px;
+    position: relative;
+    .image-upload-error-cross {
+        position: absolute;
+        left: 8px;
+        top: 9px;
+        width: 20px;
+        height: 20px;
+        &:before,
+        &:after {
+            position: absolute;
+            left: 8px;
+            content: ' ';
+            height: 20px;
+            width: 4px;
+            background-color: @color-red9;
+        }
+        &:before {
+            transform: rotate(45deg);
+        }
+        &:after {
+            transform: rotate(-45deg);
+        }
+    }
+}
-- 
GitLab


From 04c500fcdc77d559b1f9c0da7188f8b2c30489d1 Mon Sep 17 00:00:00 2001
From: Mikalai_Eutsikhieu <Mikalai_Eutsikhieu@epam.com>
Date: Mon, 26 Oct 2015 14:29:15 +0300
Subject: [PATCH 312/370] Edit warning failed image upload style, added vars

---
 .../backend/Magento_ProductVideo/web/css/source/_module.less  | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less b/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
index 3380e885fd1..1a57d5706f8 100644
--- a/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
+++ b/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
@@ -236,8 +236,8 @@
 }
 
 .image-upload-error {
-    background: lighten(@color-red9, 80%);
-    color: #303030;
+    background: #F9E1E1;
+    color: @color-gray19;
     font-size: 12px;
     font-weight: 400;
     padding: 7px 7px 7px 35px;
-- 
GitLab


From 4cf22c1375129be3f149ffbebe35b2818c5be690 Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Mon, 26 Oct 2015 13:32:37 +0200
Subject: [PATCH 313/370] MAGETWO-44563: JS static tests fail on mainline

- Fixed code style
---
 .../view/base/web/js/lib/registry/events.js   | 32 +++++++++----------
 lib/web/mage/utils/compare.js                 | 22 ++++++++++---
 2 files changed, 33 insertions(+), 21 deletions(-)

diff --git a/app/code/Magento/Ui/view/base/web/js/lib/registry/events.js b/app/code/Magento/Ui/view/base/web/js/lib/registry/events.js
index 69fcebf547e..87d566a7ebc 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/registry/events.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/registry/events.js
@@ -2,6 +2,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
+
 define([
     'underscore',
     'mageUtils',
@@ -13,11 +14,11 @@ define([
      * @constructor
      */
     function Events(storage) {
-        this.id = 0,
+        this.id = 0;
 
-        this.requests   = new Map();
-        this.map        = {};
-        this.storage    = storage;
+        this.requests = new Map();
+        this.map = {};
+        this.storage = storage;
 
         _.bindAll(this, '_resolve', '_clear');
     }
@@ -28,7 +29,7 @@ define([
         /**
          * Tries to resolve dependencies affected by the scpecified element.
          * @param {String} elem - Elements' name.
-         * @returns {events} Chainable.
+         * @returns {Object} Chainable.
          */
         resolve: function (elem) {
             var pending = this.map[elem];
@@ -44,17 +45,16 @@ define([
 
         /**
          * Creates a new request for the specified set
-                of elements in case some of them wasn't registered yeat.
-                Otherwise triggers callback immediately.
+         *      of elements in case some of them wasn't registered yeat.
+         *      Otherwise triggers callback immediately.
          * @param {Array} elems - Requested elements.
-         * @param {Function} callback -
-                Callback that will be triggered as soon as
-                all of the elements will be registered.
+         * @param {Object} callback - that will be triggered as soon as
+         *      all of the elements will be registered.
          * @returns {events} Chainable.
          */
         wait: function (elems, callback) {
             var storage = this.storage,
-                map     = this.map;
+                map = this.map;
 
             if (storage.has(elems)) {
                 return callback.apply(null, storage.get(elems));
@@ -79,9 +79,9 @@ define([
          * @returns {Boolean} Whether specified request was successfully resolved.
          */
         _resolve: function (id) {
-            var request     = this.requests.get(id),
-                elems       = request.deps,
-                storage     = this.storage,
+            var request = this.requests.get(id),
+                elems = request.deps,
+                storage = this.storage,
                 isResolved;
 
             isResolved = storage.has(elems);
@@ -99,8 +99,8 @@ define([
          * @param {Number} id - Id of request.
          */
         _clear: function (id) {
-            var map     = this.map,
-                elems   = this.requests.get(id).deps;
+            var map = this.map,
+                elems = this.requests.get(id).deps;
 
             elems.forEach(function (elem) {
                 utils.remove(map[elem], id);
diff --git a/lib/web/mage/utils/compare.js b/lib/web/mage/utils/compare.js
index 2cae7362a21..c079b087a9d 100644
--- a/lib/web/mage/utils/compare.js
+++ b/lib/web/mage/utils/compare.js
@@ -66,7 +66,8 @@ define([
     }
 
     /**
-     *
+     * @param {String} prefix
+     * @param {String} part
      */
     function getPath(prefix, part) {
         return prefix ? prefix + '.' + part : part;
@@ -84,7 +85,7 @@ define([
     }
 
     /**
-     *
+     * @param {Array} changes
      */
     function getContainers(changes) {
         var containers  = {},
@@ -108,7 +109,11 @@ define([
     }
 
     /**
-     *
+     * @param {String} path
+     * @param {String} name
+     * @param {String} type
+     * @param {String} newValue
+     * @param {String} oldValue
      */
     function addChange(path, name, type, newValue, oldValue) {
         var data;
@@ -130,7 +135,11 @@ define([
     }
 
     /**
-     *
+     * @param {String} ns
+     * @param {String} name
+     * @param {String} type
+     * @param {String} iterator
+     * @param {String} placeholder
      */
     function setAll(ns, name, type, iterator, placeholder) {
         var key;
@@ -156,7 +165,10 @@ define([
 
     /*eslint-disable max-depth*/
     /**
-     *
+     * @param {Object} old
+     * @param {Object} current
+     * @param {String} ns
+     * @param {String} name
      */
     function compare(old, current, ns, name) {
         var key,
-- 
GitLab


From 5529a8c430571e288c64fba02835698358844b6d Mon Sep 17 00:00:00 2001
From: "Gurzhyi, Andrii" <agurzhyi@ebay.com>
Date: Mon, 26 Oct 2015 13:36:23 +0200
Subject: [PATCH 314/370] MAGETWO-44443: Grunt less task fails

- Created unit test
---
 .../Command/SourceThemeDeployCommand.php      |   2 +-
 .../Command/SourceThemeDeployCommandTest.php  | 156 ++++++++++++++++++
 .../Test/Legacy/_files/obsolete_classes.php   |   1 +
 .../Framework/App/View/Asset/Publisher.php    |   3 +-
 4 files changed, 160 insertions(+), 2 deletions(-)
 create mode 100644 app/code/Magento/Developer/Test/Unit/Console/Command/SourceThemeDeployCommandTest.php

diff --git a/app/code/Magento/Developer/Console/Command/SourceThemeDeployCommand.php b/app/code/Magento/Developer/Console/Command/SourceThemeDeployCommand.php
index 4ae886b3b8d..0726f83859c 100644
--- a/app/code/Magento/Developer/Console/Command/SourceThemeDeployCommand.php
+++ b/app/code/Magento/Developer/Console/Command/SourceThemeDeployCommand.php
@@ -168,6 +168,6 @@ class SourceThemeDeployCommand extends Command
             $output->writeln('<comment>-> ' . $asset->getFilePath() . '</comment>');
         }
 
-        $output->writeln('<info>Successfully processed stylesheet</info>');
+        $output->writeln('<info>Successfully processed.</info>');
     }
 }
diff --git a/app/code/Magento/Developer/Test/Unit/Console/Command/SourceThemeDeployCommandTest.php b/app/code/Magento/Developer/Test/Unit/Console/Command/SourceThemeDeployCommandTest.php
new file mode 100644
index 00000000000..cc66a9830f2
--- /dev/null
+++ b/app/code/Magento/Developer/Test/Unit/Console/Command/SourceThemeDeployCommandTest.php
@@ -0,0 +1,156 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Developer\Test\Unit\Console\Command;
+
+use Magento\Framework\Validator\Locale;
+use Magento\Framework\View\Asset\Repository;
+use Magento\Framework\App\View\Asset\Publisher;
+use Magento\Framework\View\Asset\LocalInterface;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Magento\Developer\Console\Command\SourceThemeDeployCommand;
+
+/**
+ * Class SourceThemeDeployCommandTest
+ *
+ * @see \Magento\Developer\Console\Command\SourceThemeDeployCommand
+ */
+class SourceThemeDeployCommandTest extends \PHPUnit_Framework_TestCase
+{
+    const AREA_TEST_VALUE = 'area-test-value';
+
+    const LOCALE_TEST_VALUE = 'locale-test-value';
+
+    const THEME_TEST_VALUE = 'theme-test-value';
+
+    const TYPE_TEST_VALUE = 'type-test-value';
+
+    const FILE_TEST_VALUE = 'file-test-value/test/file';
+
+    /**
+     * @var SourceThemeDeployCommand
+     */
+    private $sourceThemeDeployCommand;
+
+    /**
+     * @var Locale|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $validatorMock;
+
+    /**
+     * @var Publisher|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $assetPublisherMock;
+
+    /**
+     * @var Repository|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $assetRepositoryMock;
+
+    /**
+     * Set up
+     */
+    protected function setUp()
+    {
+        $this->validatorMock = $this->getMockBuilder(Locale::class)
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->assetPublisherMock = $this->getMockBuilder(Publisher::class)
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->assetRepositoryMock = $this->getMockBuilder(Repository::class)
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->sourceThemeDeployCommand = new SourceThemeDeployCommand(
+            $this->validatorMock,
+            $this->assetPublisherMock,
+            $this->assetRepositoryMock
+        );
+    }
+
+    /**
+     * Run test for execute method
+     */
+    public function testExecute()
+    {
+        /** @var OutputInterface|\PHPUnit_Framework_MockObject_MockObject $outputMock */
+        $outputMock = $this->getMockBuilder(OutputInterface::class)
+            ->getMockForAbstractClass();
+        $assetMock = $this->getMockBuilder(LocalInterface::class)
+            ->getMockForAbstractClass();
+
+        $this->validatorMock->expects(self::once())
+            ->method('isValid')
+            ->with(self::LOCALE_TEST_VALUE)
+            ->willReturn(true);
+
+        $message = sprintf(
+            '<info>Processed Area: %s, Locale: %s, Theme: %s, File type: %s.</info>',
+            self::AREA_TEST_VALUE,
+            self::LOCALE_TEST_VALUE,
+            self::THEME_TEST_VALUE,
+            self::TYPE_TEST_VALUE
+        );
+
+        $outputMock->expects(self::at(0))
+            ->method('writeln')
+            ->with($message);
+        $outputMock->expects(self::at(1))
+            ->method('writeln')
+            ->with('<comment>-> file-test-value/test/file</comment>');
+        $outputMock->expects(self::at(2))
+            ->method('writeln')
+            ->with('<info>Successfully processed.</info>');
+
+        $this->assetRepositoryMock->expects(self::once())
+            ->method('createAsset')
+            ->with(
+                'file-test-value/test' . DIRECTORY_SEPARATOR . 'file' . '.' . self::TYPE_TEST_VALUE,
+                [
+                    'area' => self::AREA_TEST_VALUE,
+                    'theme' => self::THEME_TEST_VALUE,
+                    'locale' => self::LOCALE_TEST_VALUE,
+                ]
+            )->willReturn($assetMock);
+
+        $this->assetPublisherMock->expects(self::once())
+            ->method('publish')
+            ->with($assetMock);
+
+        $assetMock->expects(self::once())
+            ->method('getFilePath')
+            ->willReturn(self::FILE_TEST_VALUE);
+
+        $this->sourceThemeDeployCommand->run($this->getInputMock(), $outputMock);
+    }
+
+    /**
+     * @return InputInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private function getInputMock()
+    {
+        $inputMock = $this->getMockBuilder(InputInterface::class)
+            ->getMockForAbstractClass();
+
+        $inputMock->expects(self::exactly(4))
+            ->method('getOption')
+            ->willReturnMap(
+                [
+                    ['area', self::AREA_TEST_VALUE],
+                    ['locale', self::LOCALE_TEST_VALUE],
+                    ['theme', self::THEME_TEST_VALUE],
+                    ['type', self::TYPE_TEST_VALUE]
+                ]
+            );
+        $inputMock->expects(self::once())
+            ->method('getArgument')
+            ->with('file')
+            ->willReturn([self::FILE_TEST_VALUE]);
+
+        return $inputMock;
+    }
+}
diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
index cf42cd0950a..3d839cb7e20 100755
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_classes.php
@@ -4102,4 +4102,5 @@ return [
     ['Magento\GoogleOptimizer\Model\Observer\Block\Category\Tab', 'Magento\GoogleOptimizer\Observer\*'],
     ['Magento\Payment\Model\Observer', 'Magento\Payment\Observer\*'],
     ['Magento\Tax\Observer\AggregateSalesReportTaxData', 'Magento\Tax\Model\AggregateSalesReportTaxData'],
+    ['Magento\Developer\Console\Command\CssDeployCommand']
 ];
diff --git a/lib/internal/Magento/Framework/App/View/Asset/Publisher.php b/lib/internal/Magento/Framework/App/View/Asset/Publisher.php
index e65564720bb..45c18093ae6 100644
--- a/lib/internal/Magento/Framework/App/View/Asset/Publisher.php
+++ b/lib/internal/Magento/Framework/App/View/Asset/Publisher.php
@@ -37,7 +37,8 @@ class Publisher
     }
 
     /**
-     * {@inheritdoc}
+     * @param Asset\LocalInterface $asset
+     * @return bool
      */
     public function publish(Asset\LocalInterface $asset)
     {
-- 
GitLab


From 3b715e3e1708909c6a635956f71a6dfc3ad20e70 Mon Sep 17 00:00:00 2001
From: Vadim Zubovich <vadim_zubovich@epam.com>
Date: Mon, 26 Oct 2015 14:41:55 +0300
Subject: [PATCH 315/370] PR2-Stabilization: fixed according PR comments from
 Magento team

---
 .../Block/Adminhtml/Product/Edit/NewVideo.php          | 10 ++++------
 .../Adminhtml/Product/Gallery/RetrieveImage.php        |  3 ++-
 .../Model/Plugin/ExternalVideoResourceBackend.php      |  1 -
 3 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php b/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
index 0cc9119d506..94249c205fd 100644
--- a/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
+++ b/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
@@ -25,7 +25,7 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
     /**
      * @var \Magento\Framework\UrlInterface
      */
-    protected $_urlBuilder;
+    protected $urlBuilder;
 
     /**
      * @var \Magento\Framework\Json\EncoderInterface
@@ -35,7 +35,6 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\ProductVideo\Helper\Media $mediaHelper
-     * @param \Magento\Framework\UrlInterface $urlBuilder
      * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Data\FormFactory $formFactory
@@ -44,7 +43,6 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\ProductVideo\Helper\Media $mediaHelper,
-        \Magento\Framework\UrlInterface $urlBuilder,
         \Magento\Framework\Json\EncoderInterface $jsonEncoder,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Data\FormFactory $formFactory,
@@ -52,7 +50,7 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
     ) {
         parent::__construct($context, $registry, $formFactory, $data);
         $this->mediaHelper = $mediaHelper;
-        $this->_urlBuilder = $urlBuilder;
+        $this->urlBuilder = $context->getUrlBuilder();
         $this->jsonEncoder = $jsonEncoder;
         $this->setUseContainer(true);
     }
@@ -273,7 +271,7 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
         $result = __('YouTube and Vimeo supported.');
         if (is_null($this->mediaHelper->getYouTubeApiKey())) {
             $result = __(
-                'Vimeo supported.<br>'
+                'Vimeo supported.<br />'
                 . 'To add YouTube video, please <a href="%1">enter YouTube API Key</a> first.'
                 ,
                 $this->getConfigApiKeyUrl()
@@ -289,7 +287,7 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
      */
     protected function getConfigApiKeyUrl()
     {
-        return $this->_urlBuilder->getUrl(
+        return $this->urlBuilder->getUrl(
             'adminhtml/system_config/edit',
             [
                 'section' => 'catalog',
diff --git a/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php b/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
index 9fde09e3163..ad6bd76e49f 100644
--- a/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
+++ b/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
@@ -124,7 +124,8 @@ class RetrieveImage extends \Magento\Backend\App\Action
     /**
      * @param string $fileUrl
      * @param string $localFilePath
-     * @return bool|void
+     * @return void
+     * @throws \Magento\Framework\Exception\LocalizedException
      */
     protected function retrieveRemoteImage($fileUrl, $localFilePath)
     {
diff --git a/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoResourceBackend.php b/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoResourceBackend.php
index d8a9f6232e2..089c4149e57 100644
--- a/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoResourceBackend.php
+++ b/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoResourceBackend.php
@@ -7,7 +7,6 @@
 namespace Magento\ProductVideo\Model\Plugin;
 
 use Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media;
-use Magento\ProductVideo\Setup\InstallSchema;
 
 /**
  * Attribute Media Resource decorator
-- 
GitLab


From 330f3934dd1df900fb937bd9cd78bf9007918679 Mon Sep 17 00:00:00 2001
From: Volodymyr Zaets <vzaets@ebay.com>
Date: Mon, 26 Oct 2015 13:50:10 +0200
Subject: [PATCH 316/370] MAGETWO-44563: JS static tests fail on mainline

- Fixed eslint and jscs version
---
 package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/package.json b/package.json
index 8869196abef..2caa552da3e 100644
--- a/package.json
+++ b/package.json
@@ -21,9 +21,9 @@
         "grunt-contrib-jasmine": "^0.8.1",
         "grunt-contrib-less": "^0.12.0",
         "grunt-contrib-watch": "^0.6.1",
-        "grunt-eslint": "^17.0.0",
+        "grunt-eslint": "17.3.1",
         "grunt-exec": "^0.4.6",
-        "grunt-jscs": "^2.1.0",
+        "grunt-jscs": "2.2.0",
         "grunt-replace": "^0.9.2",
         "grunt-styledocco": "^0.1.4",
         "grunt-template-jasmine-requirejs": "^0.2.3",
-- 
GitLab


From 41ce11430be35df635796e62bcce9464aee7df51 Mon Sep 17 00:00:00 2001
From: Anton Guz <aguz@ebay.com>
Date: Mon, 26 Oct 2015 13:07:05 +0200
Subject: [PATCH 317/370] MAGETWO-44371: [iphone6+, iphone5] "Full Screen"
 Gallery on mobile wrong behaviour

---
 lib/web/fotorama/fotorama.js     | 7 +------
 lib/web/fotorama/fotorama.min.js | 4 ++--
 2 files changed, 3 insertions(+), 8 deletions(-)

diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 445fe7d30c5..9aba3a85f00 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -2229,14 +2229,9 @@ fotoramaVersion = '4.6.4';
             stageLeft = 0,
 
             fadeStack = [];
-        if (Modernizr.touch) {
-            $wrap[STAGE_FRAME_KEY] = $('<a class="' + stageFrameClass + '" target="_blank"></a>');
-        } else {
-            $wrap[STAGE_FRAME_KEY] = $('<div class="' + stageFrameClass + '"></div>');
-        }
 
+        $wrap[STAGE_FRAME_KEY] = $('<div class="' + stageFrameClass + '"></div>');
         $wrap[NAV_THUMB_FRAME_KEY] = $($.Fotorama.jst.thumb());
-
         $wrap[NAV_DOT_FRAME_KEY] = $($.Fotorama.jst.dots());
 
         toDeactivate[STAGE_FRAME_KEY] = [];
diff --git a/lib/web/fotorama/fotorama.min.js b/lib/web/fotorama/fotorama.min.js
index dbce341e322..591010dd423 100644
--- a/lib/web/fotorama/fotorama.min.js
+++ b/lib/web/fotorama/fotorama.min.js
@@ -1,5 +1,5 @@
 /*!
  * Fotorama 4.6.4 | http://fotorama.io/license/
  */
-fotoramaVersion="4.6.4",function(t,e,n,o,i){"use strict";function r(t){var e="bez_"+o.makeArray(arguments).join("_").replace(".","p");if("function"!=typeof o.easing[e]){var n=function(t,e){var n=[null,null],o=[null,null],i=[null,null],r=function(r,a){return i[a]=3*t[a],o[a]=3*(e[a]-t[a])-i[a],n[a]=1-i[a]-o[a],r*(i[a]+r*(o[a]+r*n[a]))},a=function(t){return i[0]+t*(2*o[0]+3*n[0]*t)},s=function(t){for(var e,n=t,o=0;++o<14&&(e=r(n,0)-t,!(Math.abs(e)<.001));)n-=e/a(n);return n};return function(t){return r(s(t),1)}};o.easing[e]=function(e,o,i,r,a){return r*n([t[0],t[1]],[t[2],t[3]])(o/a)+i}}return e}function a(){}function s(t,e,n){return Math.max(isNaN(e)?-1/0:e,Math.min(isNaN(n)?1/0:n,t))}function u(t,e){return t.match(/ma/)&&t.match(/-?\d+(?!d)/g)[t.match(/3d/)?"vertical"===e?13:12:"vertical"===e?5:4]}function l(t,e){return On?+u(t.css("transform"),e):+t.css("vertical"===e?"top":"left").replace("px","")}function c(t,e){var n={};if(On)switch(e){case"vertical":n.transform="translate3d(0, "+t+"px,0)";break;case"list":break;default:n.transform="translate3d("+t+"px,0,0)"}else"vertical"===e?n.top=t:n.left=t;return n}function d(t){return{"transition-duration":t+"ms"}}function f(t,e){return isNaN(t)?e:t}function h(t,e){return f(+String(t).replace(e||"px",""))}function m(t){return/%$/.test(t)?h(t,"%"):i}function p(t,e){return f(m(t)/100*e,h(t))}function v(t){return(!isNaN(h(t))||!isNaN(h(t,"%")))&&t}function g(t,e,n,o){return(t-(o||0))*(e+(n||0))}function w(t,e,n,o){return-Math.round(t/(e+(n||0))-(o||0))}function y(t){var e=t.data();if(!e.tEnd){var n=t[0],o={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",msTransition:"MSTransitionEnd",transition:"transitionend"};V(n,o[Tn.prefixed("transition")],function(t){e.tProp&&t.propertyName.match(e.tProp)&&e.onEndFn()}),e.tEnd=!0}}function b(t,e,n,o){var i,r=t.data();r&&(r.onEndFn=function(){i||(i=!0,clearTimeout(r.tT),n())},r.tProp=e,clearTimeout(r.tT),r.tT=setTimeout(function(){r.onEndFn()},1.5*o),y(t))}function x(t,e){var n=t.navdir||"horizontal";if(t.length){var o=t.data();On?(t.css(d(0)),o.onEndFn=a,clearTimeout(o.tT)):t.stop();var i=_(e,function(){return l(t,n)});return t.css(c(i,n)),i}}function _(){for(var t,e=0,n=arguments.length;n>e&&(t=e?arguments[e]():arguments[e],"number"!=typeof t);e++);return t}function C(t,e){return Math.round(t+(e-t)/1.5)}function k(){return k.p=k.p||("https:"===n.protocol?"https://":"http://"),k.p}function T(t){var n=e.createElement("a");return n.href=t,n}function P(t,e){if("string"!=typeof t)return t;t=T(t);var n,o;if(t.host.match(/youtube\.com/)&&t.search){if(n=t.search.split("v=")[1]){var i=n.indexOf("&");-1!==i&&(n=n.substring(0,i)),o="youtube"}}else t.host.match(/youtube\.com|youtu\.be/)?(n=t.pathname.replace(/^\/(embed\/|v\/)?/,"").replace(/\/.*/,""),o="youtube"):t.host.match(/vimeo\.com/)&&(o="vimeo",n=t.pathname.replace(/^\/(video\/)?/,"").replace(/\/.*/,""));return n&&o||!e||(n=t.href,o="custom"),n?{id:n,type:o,s:t.search.replace(/^\?/,""),p:k()}:!1}function S(t,e,n){var i,r,a=t.video;return"youtube"===a.type?(r=k()+"img.youtube.com/vi/"+a.id+"/default.jpg",i=r.replace(/\/default.jpg$/,"/hqdefault.jpg"),t.thumbsReady=!0):"vimeo"===a.type?o.ajax({url:k()+"vimeo.com/api/v2/video/"+a.id+".json",dataType:"jsonp",success:function(o){t.thumbsReady=!0,M(e,{img:o[0].thumbnail_large,thumb:o[0].thumbnail_small},t.i,n)}}):t.thumbsReady=!0,{img:i,thumb:r}}function M(t,e,n,i){for(var r=0,a=t.length;a>r;r++){var s=t[r];if(s.i===n&&s.thumbsReady){var u={videoReady:!0};u[to]=u[no]=u[eo]=!1,i.splice(r,1,o.extend({},s,u,e));break}}}function E(t){function e(t,e,i){var r=t.children("img").eq(0),a=t.attr("href"),s=t.attr("src"),u=r.attr("src"),l=e.video,c=i?P(a,l===!0):!1;c?a=!1:c=l,n(t,r,o.extend(e,{video:c,img:e.img||a||s||u,thumb:e.thumb||u||s||a}))}function n(t,e,n){var i=n.thumb&&n.img!==n.thumb,r=h(n.width||t.attr("width")),a=h(n.height||t.attr("height"));o.extend(n,{width:r,height:a,thumbratio:K(n.thumbratio||h(n.thumbwidth||e&&e.attr("width")||i||r)/h(n.thumbheight||e&&e.attr("height")||i||a))})}var i=[];return t.children().each(function(){var t=o(this),r=H(o.extend(t.data(),{id:t.attr("id")}));if(t.is("a, img"))e(t,r,!0);else{if(t.is(":empty"))return;n(t,null,o.extend(r,{html:this,_html:t.html()}))}i.push(r)}),i}function F(t){return 0===t.offsetWidth&&0===t.offsetHeight}function j(t){return!o.contains(e.documentElement,t)}function z(t,e,n,o){return z.i||(z.i=1,z.ii=[!0]),o=o||z.i,"undefined"==typeof z.ii[o]&&(z.ii[o]=!0),t()?e():z.ii[o]&&setTimeout(function(){z.ii[o]&&z(t,e,n,o)},n||100),z.i++}function N(t,e){var n=t.data(),o=n.measures;if(o&&(!n.l||n.l.W!==o.width||n.l.H!==o.height||n.l.r!==o.ratio||n.l.w!==e.w||n.l.h!==e.h)){var i=s(e.h,0,o.height),r=i*o.ratio;po.setRatio(t,r,i),n.l={W:o.width,H:o.height,r:o.ratio,w:e.w,h:e.h}}return!0}function $(t,e){var n=t[0];n.styleSheet?n.styleSheet.cssText=e:t.html(e)}function q(t,e,n,o){return e===n?!1:"vertical"===o?e>=t?"top":t>=n?"bottom":"top bottom":e>=t?"left":t>=n?"right":"left right"}function L(t,e,n){n=n||{},t.each(function(){var t,i=o(this),r=i.data();r.clickOn||(r.clickOn=!0,o.extend(oe(i,{onStart:function(e){t=e,(n.onStart||a).call(this,e)},onMove:n.onMove||a,onTouchEnd:n.onTouchEnd||a,onEnd:function(n){n.moved||e.call(this,t)}}),{noMove:!0}))})}function A(t,e){return'<div class="'+t+'">'+(e||"")+"</div>"}function I(t){return"."+t}function O(t){var e='<iframe src="'+t.p+t.type+".com/embed/"+t.id+'" frameborder="0" allowfullscreen></iframe>';return e}function D(t){for(var e=t.length;e;){var n=Math.floor(Math.random()*e--),o=t[e];t[e]=t[n],t[n]=o}return t}function R(t){return"[object Array]"==Object.prototype.toString.call(t)&&o.map(t,function(t){return o.extend({},t)})}function W(t,e,n){t.scrollLeft(e||0).scrollTop(n||0)}function H(t){if(t){var e={};return o.each(t,function(t,n){e[t.toLowerCase()]=n}),e}}function K(t){if(t){var e=+t;return isNaN(e)?(e=t.split("/"),+e[0]/+e[1]||i):e}}function V(t,e,n,o){e&&(t.addEventListener?t.addEventListener(e,n,!!o):t.attachEvent("on"+e,n))}function B(t,e){return t>e.max?t=e.max:t<e.min&&(t=e.min),t}function Q(t,e,n,o,i,r,a){var s,u,l;return"horizontal"===a?(u=t.thumbwidth,l=r.width()):(u=t.thumbheight,l=r.height()),s=(u+t.margin)*(n+1)>=l-o?"horizontal"===a?-i.position().left:-i.position().top:(u+t.margin)*n<=Math.abs(o)?"horizontal"===a?-i.position().left+l-(u+t.margin):-i.position().top+l-(u+t.margin):o,s=B(s,e),s||0}function X(t){return!!t.getAttribute("disabled")}function U(t){return{tabindex:-1*t+"",disabled:t}}function Y(t,e){V(t,"keyup",function(n){X(t)||13==n.keyCode&&e.call(t,n)})}function G(t,e){V(t,"focus",t.onfocusin=function(n){e.call(t,n)},!0)}function J(t,e){t.preventDefault?t.preventDefault():t.returnValue=!1,e&&t.stopPropagation&&t.stopPropagation()}function Z(t){return t?">":"<"}function te(t,e){var n=t.data(),i=Math.round(e.pos),r=function(){n&&n.sliding&&(n.sliding=!1),(e.onEnd||a)()};"undefined"!=typeof e.overPos&&e.overPos!==e.pos&&(i=e.overPos);var s=o.extend(c(i,e.direction),e.width&&{width:e.width},e.height&&{height:e.height});n&&n.sliding&&(n.sliding=!0),On?(t.css(o.extend(d(e.time),s)),e.time>10?b(t,"transform",r,e.time):r()):t.stop().animate(s,e.time,io,r)}function ee(t,e,n,i,r,s){var u="undefined"!=typeof s;if(u||(r.push(arguments),Array.prototype.push.call(arguments,r.length),!(r.length>1))){t=t||o(t),e=e||o(e);var l=t[0],c=e[0],d="crossfade"===i.method,f=function(){if(!f.done){f.done=!0;var t=(u||r.shift())&&r.shift();t&&ee.apply(this,t),(i.onEnd||a)(!!t)}},h=i.time/(s||1);n.removeClass(Ke+" "+He),t.stop().addClass(Ke),e.stop().addClass(He),d&&c&&t.fadeTo(0,0),t.fadeTo(d?h:0,1,d&&f),e.fadeTo(h,0,f),l&&d||c||f()}}function ne(t){var e=(t.touches||[])[0]||t;t._x=e.pageX,t._y=e.clientY,t._now=o.now()}function oe(t,n){function i(t){return f=o(t.target),b.checked=p=v=w=!1,c||b.flow||t.touches&&t.touches.length>1||t.which>1||lo&&lo.type!==t.type&&fo||(p=n.select&&f.is(n.select,y))?p:(m="touchstart"===t.type,v=f.is("a, a *",y),h=b.control,g=b.noMove||b.noSwipe||h?16:b.snap?0:4,ne(t),d=lo=t,co=t.type.replace(/down|start/,"move").replace(/Down/,"Move"),(n.onStart||a).call(y,t,{control:h,$target:f}),c=b.flow=!0,void((!m||b.go)&&J(t)))}function r(t){if(t.touches&&t.touches.length>1||Kn&&!t.isPrimary||co!==t.type||!c)return c&&s(),void(n.onTouchEnd||a)();ne(t);var e=Math.abs(t._x-d._x),o=Math.abs(t._y-d._y),i=e-o,r=(b.go||b.x||i>=0)&&!b.noSwipe,u=0>i;m&&!b.checked?(c=r)&&J(t):(J(t),(n.onMove||a).call(y,t,{touch:m})),!w&&Math.sqrt(Math.pow(e,2)+Math.pow(o,2))>g&&(w=!0),b.checked=b.checked||r||u}function s(t){(n.onTouchEnd||a)();var e=c;b.control=c=!1,e&&(b.flow=!1),!e||v&&!b.checked||(t&&J(t),fo=!0,clearTimeout(ho),ho=setTimeout(function(){fo=!1},1e3),(n.onEnd||a).call(y,{moved:w,$target:f,control:h,touch:m,startEvent:d,aborted:!t||"MSPointerCancel"===t.type}))}function u(){b.flow||setTimeout(function(){b.flow=!0},10)}function l(){b.flow&&setTimeout(function(){b.flow=!1},Bn)}var c,d,f,h,m,p,v,g,w,y=t[0],b={};return Kn?(V(y,"MSPointerDown",i),V(e,"MSPointerMove",r),V(e,"MSPointerCancel",s),V(e,"MSPointerUp",s)):(V(y,"touchstart",i),V(y,"touchmove",r),V(y,"touchend",s),V(e,"touchstart",u),V(e,"touchend",l),V(e,"touchcancel",l),qn.on("scroll",l),t.on("mousedown",i),Ln.on("mousemove",r).on("mouseup",s)),mo=Tn.touch?"a":"div",t.on("click",mo,function(t){b.checked&&J(t)}),b}function ie(t,e){function n(n,o){S=!0,l=d="vertical"===_?n._y:n._x,v=n._now,p=[[v,l]],f=h=F.noMove||o?0:x(t,(e.getPos||a)()),(e.onStart||a).call(M,n)}function i(e,o){w=F.min,y=F.max,b=F.snap,_=F.direction||"horizontal",t.navdir=_,k=e.altKey,S=P=!1,T=o.control,T||E.sliding||n(e)}function r(o,i){F.noSwipe||(S||n(o),d="vertical"===_?o._y:o._x,p.push([o._now,d]),h=f-(l-d),m=q(h,w,y,_),w>=h?h=C(h,w):h>=y&&(h=C(h,y)),F.noMove||(t.css(c(h,_)),P||(P=!0,i.touch||Kn||t.addClass(un)),(e.onMove||a).call(M,o,{pos:h,edge:m})))}function u(i){if(!F.noSwipe||!i.moved){S||n(i.startEvent,!0),i.touch||Kn||t.removeClass(un),g=o.now();for(var r,u,l,c,m,v,x,C,T,P=g-Bn,E=null,j=Qn,z=e.friction,N=p.length-1;N>=0;N--){if(r=p[N][0],u=Math.abs(r-P),null===E||l>u)E=r,c=p[N][1];else if(E===P||u>l)break;l=u}x=s(h,w,y);var $=c-d,q=$>=0,L=g-E,A=L>Bn,I=!A&&h!==f&&x===h;b&&(x=s(Math[I?q?"floor":"ceil":"round"](h/b)*b,w,y),w=y=x),I&&(b||x===h)&&(T=-($/L),j*=s(Math.abs(T),e.timeLow,e.timeHigh),m=Math.round(h+T*j/z),b||(x=m),(!q&&m>y||q&&w>m)&&(v=q?w:y,C=m-v,b||(x=v),C=s(x+.03*C,v-50,v+50),j=Math.abs((h-C)/(T/z)))),j*=k?10:1,(e.onEnd||a).call(M,o.extend(i,{moved:i.moved||A&&b,pos:h,newPos:x,overPos:C,time:j,dir:_}))}}var l,d,f,h,m,p,v,g,w,y,b,_,k,T,P,S,M=t[0],E=t.data(),F={};return F=o.extend(oe(e.$wrap,o.extend({},e,{onStart:i,onMove:r,onEnd:u})),F)}function re(t,e){var n,i,r,s=t[0],u={prevent:{}};return V(s,Vn,function(t){var s=t.wheelDeltaY||-1*t.deltaY||0,l=t.wheelDeltaX||-1*t.deltaX||0,c=Math.abs(l)&&!Math.abs(s),d=Z(0>l),f=i===d,h=o.now(),m=Bn>h-r;i=d,r=h,c&&u.ok&&(!u.prevent[d]||n)&&(J(t,!0),n&&f&&m||(e.shift&&(n=!0,clearTimeout(u.t),u.t=setTimeout(function(){n=!1},Xn)),(e.onEnd||a)(t,e.shift?d:l)))}),u}function ae(){o.each(o.Fotorama.instances,function(t,e){e.index=t})}function se(t){o.Fotorama.instances.push(t),ae()}function ue(t){o.Fotorama.instances.splice(t.index,1),ae()}var le="fotorama",ce="fotorama__fullscreen",de=le+"__wrap",fe=de+"--css2",he=de+"--css3",me=de+"--video",pe=de+"--fade",ve=de+"--slide",ge=de+"--no-controls",we=de+"--no-shadows",ye=de+"--pan-y",be=de+"--rtl",xe=de+"--no-captions",_e=de+"--toggle-arrows",Ce=le+"__stage",ke=Ce+"__frame",Te=ke+"--video",Pe=Ce+"__shaft",Se=le+"__grab",Me=le+"__pointer",Ee=le+"__arr",Fe=Ee+"--disabled",je=Ee+"--prev",ze=Ee+"--next",Ne=le+"__nav",$e=Ne+"-wrap",qe=Ne+"__shaft",Le=$e+"--vertical",Ae=$e+"--list",Ie=$e+"--horizontal",Oe=Ne+"--dots",De=Ne+"--thumbs",Re=Ne+"__frame",We=le+"__fade",He=We+"-front",Ke=We+"-rear",Ve=le+"__shadow",Be=Ve+"s",Qe=Be+"--left",Xe=Be+"--right",Ue=Be+"--top",Ye=Be+"--bottom",Ge=le+"__active",Je=le+"__select",Ze=le+"--hidden",tn=le+"--fullscreen",en=le+"__fullscreen-icon",nn=le+"__error",on=le+"__loading",rn=le+"__loaded",an=rn+"--full",sn=rn+"--img",un=le+"__grabbing",ln=le+"__img",cn=ln+"--full",dn=le+"__thumb",fn=dn+"__arr--left",hn=dn+"__arr--right",mn=dn+"-border",pn=le+"__html",vn=le+"-video-container",gn=le+"__video",wn=gn+"-play",yn=gn+"-close",bn=le+"__spinner",xn=le+"_horizontal_ratio",_n=le+"_vertical_ratio",Cn=o&&o.fn.jquery.split(".");if(!Cn||Cn[0]<1||1==Cn[0]&&Cn[1]<8)throw"Fotorama requires jQuery 1.8 or later and will not run without it.";var kn={},Tn=function(t,e,n){function o(t){g.cssText=t}function i(t,e){return typeof t===e}function r(t,e){return!!~(""+t).indexOf(e)}function a(t,e){for(var o in t){var i=t[o];if(!r(i,"-")&&g[i]!==n)return"pfx"==e?i:!0}return!1}function s(t,e,o){for(var r in t){var a=e[t[r]];if(a!==n)return o===!1?t[r]:i(a,"function")?a.bind(o||e):a}return!1}function u(t,e,n){var o=t.charAt(0).toUpperCase()+t.slice(1),r=(t+" "+b.join(o+" ")+o).split(" ");return i(e,"string")||i(e,"undefined")?a(r,e):(r=(t+" "+x.join(o+" ")+o).split(" "),s(r,e,n))}var l,c,d,f="2.8.3",h={},m=e.documentElement,p="modernizr",v=e.createElement(p),g=v.style,w=({}.toString," -webkit- -moz- -o- -ms- ".split(" ")),y="Webkit Moz O ms",b=y.split(" "),x=y.toLowerCase().split(" "),_={},C=[],k=C.slice,T=function(t,n,o,i){var r,a,s,u,l=e.createElement("div"),c=e.body,d=c||e.createElement("body");if(parseInt(o,10))for(;o--;)s=e.createElement("div"),s.id=i?i[o]:p+(o+1),l.appendChild(s);return r=["&#173;",'<style id="s',p,'">',t,"</style>"].join(""),l.id=p,(c?l:d).innerHTML+=r,d.appendChild(l),c||(d.style.background="",d.style.overflow="hidden",u=m.style.overflow,m.style.overflow="hidden",m.appendChild(d)),a=n(l,t),c?l.parentNode.removeChild(l):(d.parentNode.removeChild(d),m.style.overflow=u),!!a},P={}.hasOwnProperty;d=i(P,"undefined")||i(P.call,"undefined")?function(t,e){return e in t&&i(t.constructor.prototype[e],"undefined")}:function(t,e){return P.call(t,e)},Function.prototype.bind||(Function.prototype.bind=function(t){var e=this;if("function"!=typeof e)throw new TypeError;var n=k.call(arguments,1),o=function(){if(this instanceof o){var i=function(){};i.prototype=e.prototype;var r=new i,a=e.apply(r,n.concat(k.call(arguments)));return Object(a)===a?a:r}return e.apply(t,n.concat(k.call(arguments)))};return o}),_.touch=function(){var n;return"ontouchstart"in t||t.DocumentTouch&&e instanceof DocumentTouch?n=!0:T(["@media (",w.join("touch-enabled),("),p,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(t){n=9===t.offsetTop}),n},_.csstransforms3d=function(){var t=!!u("perspective");return t&&"webkitPerspective"in m.style&&T("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(e){t=9===e.offsetLeft&&3===e.offsetHeight}),t},_.csstransitions=function(){return u("transition")};for(var S in _)d(_,S)&&(c=S.toLowerCase(),h[c]=_[S](),C.push((h[c]?"":"no-")+c));return h.addTest=function(t,e){if("object"==typeof t)for(var o in t)d(t,o)&&h.addTest(o,t[o]);else{if(t=t.toLowerCase(),h[t]!==n)return h;e="function"==typeof e?e():e,"undefined"!=typeof enableClasses&&enableClasses&&(m.className+=" "+(e?"":"no-")+t),h[t]=e}return h},o(""),v=l=null,h._version=f,h._prefixes=w,h._domPrefixes=x,h._cssomPrefixes=b,h.testProp=function(t){return a([t])},h.testAllProps=u,h.testStyles=T,h.prefixed=function(t,e,n){return e?u(t,e,n):u(t,"pfx")},h}(t,e),Pn={ok:!1,is:function(){return!1},request:function(){},cancel:function(){},event:"",prefix:""},Sn="webkit moz o ms khtml".split(" ");if("undefined"!=typeof e.cancelFullScreen)Pn.ok=!0;else for(var Mn=0,En=Sn.length;En>Mn;Mn++)if(Pn.prefix=Sn[Mn],"undefined"!=typeof e[Pn.prefix+"CancelFullScreen"]){Pn.ok=!0;break}Pn.ok&&(Pn.event=Pn.prefix+"fullscreenchange",Pn.is=function(){switch(this.prefix){case"":return e.fullScreen;case"webkit":return e.webkitIsFullScreen;default:return e[this.prefix+"FullScreen"]}},Pn.request=function(t){return""===this.prefix?t.requestFullScreen():t[this.prefix+"RequestFullScreen"]()},Pn.cancel=function(){return""===this.prefix?e.cancelFullScreen():e[this.prefix+"CancelFullScreen"]()});var Fn,jn={lines:12,length:5,width:2,radius:7,corners:1,rotate:15,color:"rgba(128, 128, 128, .75)",hwaccel:!0},zn={top:"auto",left:"auto",className:""};!function(t,e){Fn=e()}(this,function(){function t(t,n){var o,i=e.createElement(t||"div");for(o in n)i[o]=n[o];return i}function n(t){for(var e=1,n=arguments.length;n>e;e++)t.appendChild(arguments[e]);return t}function o(t,e,n,o){var i=["opacity",e,~~(100*t),n,o].join("-"),r=.01+n/o*100,a=Math.max(1-(1-t)/e*(100-r),t),s=f.substring(0,f.indexOf("Animation")).toLowerCase(),u=s&&"-"+s+"-"||"";return m[i]||(p.insertRule("@"+u+"keyframes "+i+"{0%{opacity:"+a+"}"+r+"%{opacity:"+t+"}"+(r+.01)+"%{opacity:1}"+(r+e)%100+"%{opacity:"+t+"}100%{opacity:"+a+"}}",p.cssRules.length),m[i]=1),i}function r(t,e){var n,o,r=t.style;for(e=e.charAt(0).toUpperCase()+e.slice(1),o=0;o<h.length;o++)if(n=h[o]+e,r[n]!==i)return n;return r[e]!==i?e:void 0}function a(t,e){for(var n in e)t.style[r(t,n)||n]=e[n];return t}function s(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var o in n)t[o]===i&&(t[o]=n[o])}return t}function u(t){for(var e={x:t.offsetLeft,y:t.offsetTop};t=t.offsetParent;)e.x+=t.offsetLeft,e.y+=t.offsetTop;return e}function l(t,e){return"string"==typeof t?t:t[e%t.length]}function c(t){return"undefined"==typeof this?new c(t):void(this.opts=s(t||{},c.defaults,v))}function d(){function e(e,n){return t("<"+e+' xmlns="urn:schemas-microsoft.com:vml" class="spin-vml">',n)}p.addRule(".spin-vml","behavior:url(#default#VML)"),c.prototype.lines=function(t,o){function i(){return a(e("group",{coordsize:c+" "+c,coordorigin:-u+" "+-u}),{width:c,height:c})}function r(t,r,s){n(f,n(a(i(),{rotation:360/o.lines*t+"deg",left:~~r}),n(a(e("roundrect",{arcsize:o.corners}),{width:u,height:o.width,left:o.radius,top:-o.width>>1,filter:s}),e("fill",{color:l(o.color,t),opacity:o.opacity}),e("stroke",{opacity:0}))))}var s,u=o.length+o.width,c=2*u,d=2*-(o.width+o.length)+"px",f=a(i(),{position:"absolute",top:d,left:d});if(o.shadow)for(s=1;s<=o.lines;s++)r(s,-2,"progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)");for(s=1;s<=o.lines;s++)r(s);return n(t,f)},c.prototype.opacity=function(t,e,n,o){var i=t.firstChild;o=o.shadow&&o.lines||0,i&&e+o<i.childNodes.length&&(i=i.childNodes[e+o],i=i&&i.firstChild,i=i&&i.firstChild,i&&(i.opacity=n))}}var f,h=["webkit","Moz","ms","O"],m={},p=function(){var o=t("style",{type:"text/css"});return n(e.getElementsByTagName("head")[0],o),o.sheet||o.styleSheet}(),v={lines:12,length:7,width:5,radius:10,rotate:0,corners:1,color:"#000",direction:1,speed:1,trail:100,opacity:.25,fps:20,zIndex:2e9,className:"spinner",top:"auto",left:"auto",position:"relative"};c.defaults={},s(c.prototype,{spin:function(e){this.stop();var n,o,i=this,r=i.opts,s=i.el=a(t(0,{className:r.className}),{position:r.position,width:0,zIndex:r.zIndex}),l=r.radius+r.length+r.width;if(e&&(e.insertBefore(s,e.firstChild||null),o=u(e),n=u(s),a(s,{left:("auto"==r.left?o.x-n.x+(e.offsetWidth>>1):parseInt(r.left,10)+l)+"px",top:("auto"==r.top?o.y-n.y+(e.offsetHeight>>1):parseInt(r.top,10)+l)+"px"})),s.setAttribute("role","progressbar"),i.lines(s,i.opts),!f){var c,d=0,h=(r.lines-1)*(1-r.direction)/2,m=r.fps,p=m/r.speed,v=(1-r.opacity)/(p*r.trail/100),g=p/r.lines;!function w(){d++;for(var t=0;t<r.lines;t++)c=Math.max(1-(d+(r.lines-t)*g)%p*v,r.opacity),i.opacity(s,t*r.direction+h,c,r);i.timeout=i.el&&setTimeout(w,~~(1e3/m))}()}return i},stop:function(){var t=this.el;return t&&(clearTimeout(this.timeout),t.parentNode&&t.parentNode.removeChild(t),this.el=i),this},lines:function(e,i){function r(e,n){return a(t(),{position:"absolute",width:i.length+i.width+"px",height:i.width+"px",background:e,boxShadow:n,transformOrigin:"left",transform:"rotate("+~~(360/i.lines*u+i.rotate)+"deg) translate("+i.radius+"px,0)",borderRadius:(i.corners*i.width>>1)+"px"})}for(var s,u=0,c=(i.lines-1)*(1-i.direction)/2;u<i.lines;u++)s=a(t(),{position:"absolute",top:1+~(i.width/2)+"px",transform:i.hwaccel?"translate3d(0,0,0)":"",opacity:i.opacity,animation:f&&o(i.opacity,i.trail,c+u*i.direction,i.lines)+" "+1/i.speed+"s linear infinite"}),i.shadow&&n(s,a(r("#000","0 0 4px #000"),{top:"2px"})),n(e,n(s,r(l(i.color,u),"0 0 1px rgba(0,0,0,.1)")));return e},opacity:function(t,e,n){e<t.childNodes.length&&(t.childNodes[e].style.opacity=n)}});var g=a(t("group"),{behavior:"url(#default#VML)"});return!r(g,"transform")&&g.adj?d():f=r(g,"animation"),c});var Nn,$n,qn=o(t),Ln=o(e),An="quirks"===n.hash.replace("#",""),In=Tn.csstransforms3d,On=In&&!An,Dn=In||"CSS1Compat"===e.compatMode,Rn=Pn.ok,Wn=navigator.userAgent.match(/Android|webOS|iPhone|iPad|iPod|BlackBerry|Windows Phone/i),Hn=!On||Wn,Kn=navigator.msPointerEnabled,Vn="onwheel"in e.createElement("div")?"wheel":e.onmousewheel!==i?"mousewheel":"DOMMouseScroll",Bn=250,Qn=300,Xn=1400,Un=5e3,Yn=2,Gn=64,Jn=500,Zn=333,to="$stageFrame",eo="$navDotFrame",no="$navThumbFrame",oo="auto",io=r([.1,0,.25,1]),ro=1200,ao=1,so={width:null,minwidth:null,maxwidth:"100%",height:null,minheight:null,maxheight:null,ratio:null,margin:Yn,nav:"dots",navposition:"bottom",navwidth:null,thumbwidth:Gn,thumbheight:Gn,thumbmargin:Yn,thumbborderwidth:Yn,allowfullscreen:!1,transition:"slide",clicktransition:null,transitionduration:Qn,captions:!0,startindex:0,loop:!1,autoplay:!1,stopautoplayontouch:!0,keyboard:!1,arrows:!0,click:!0,swipe:!1,trackpad:!1,shuffle:!1,direction:"ltr",shadows:!0,spinner:null,showcaption:!0,navdir:"horizontal",navarrows:!0,navtype:"thumbs"},uo={left:!0,right:!0,down:!1,up:!1,space:!1,home:!1,end:!1};z.stop=function(t){z.ii[t]=!1};var lo,co,fo,ho,mo,po=function(){function t(t,e,n){var o=e/n;1>=o?(t.parent().removeClass(xn),t.parent().addClass(_n)):(t.parent().removeClass(_n),t.parent().addClass(xn))}function e(t,e,n){var r=n;t.attr(r)||t.attr(r)===i||t.attr(r,e),t.find("["+r+"]").length&&t.find("["+r+"]").each(function(){o(this).attr(r,e)})}function n(t,e,n){var o,i=!1;return o=t.showCaption===n||t.showCaption===!0?!0:!1,e?(t.caption&&o&&(i=!0),i):!1}return{setRatio:t,setThumbAttr:e,isExpectedCaption:n}}(po||{},jQuery);jQuery.Fotorama=function(n,r){function a(){o.each(Ro,function(t,e){if(!e.i){e.i=Ei++;var n=P(e.video,!0);if(n){var o={};e.video=n,e.img||e.thumb?e.thumbsReady=!0:o=S(e,Ro,Ti),M(Ro,{img:o.img,thumb:o.thumb},e.i,Ti)}}})}function u(t){return mi[t]||Ti.fullScreen}function f(){if($i!==i)if("vertical"==r.navdir){var t=r.thumbwidth+r.thumbmargin;$i.css("left",t),Ii.css("right",t),Xi.css("right",t),Ni.css("width",Ni.css("width")+t),qi.css("max-width",Ni.width()-t)}else $i.css("left",""),Ii.css("right",""),Xi.css("right",""),Ni.css("width",Ni.css("width")+t),qi.css("max-width","")}function m(t){var e,n="keydown."+le,o=le+Pi,i="keydown."+o,a="keyup."+o,s="resize."+o+" orientationchange."+o;t?(Ln.on(i,function(t){var n,o;Vo&&27===t.keyCode?(n=!0,Eo(Vo,!0,!0)):(Ti.fullScreen||r.keyboard&&!Ti.index)&&(27===t.keyCode?(n=!0,Ti.cancelFullScreen()):t.shiftKey&&32===t.keyCode&&u("space")||37===t.keyCode&&u("left")||38===t.keyCode&&u("up")?(Ti.longPress.progress(),o="<"):32===t.keyCode&&u("space")||39===t.keyCode&&u("right")||40===t.keyCode&&u("down")?(Ti.longPress.progress(),o=">"):36===t.keyCode&&u("home")?(Ti.longPress.progress(),o="<<"):35===t.keyCode&&u("end")&&(Ti.longPress.progress(),o=">>")),(n||o)&&J(t),e={index:o,slow:t.altKey,user:!0},o&&(Ti.longPress.inProgress?Ti.showWhileLongPress(e):Ti.show(e))}),t&&Ln.on(a,function(){Ti.longPress.inProgress&&Ti.showEndLongPress({user:!0}),Ti.longPress.reset()}),Ti.index||Ln.off(n).on(n,"textarea, input, select",function(t){!$n.hasClass(ce)&&t.stopPropagation()}),qn.on(s,Ti.resize)):(Ln.off(i),qn.off(s))}function y(t){t!==y.f&&(t?(n.addClass(le+" "+Si).before(zi).before(ji),se(Ti)):(zi.detach(),ji.detach(),n.html(Fi.urtext).removeClass(Si),ue(Ti)),m(t),y.f=t)}function b(){Ro=Ti.data=Ro||R(r.data)||E(n),Wo=Ti.size=Ro.length,Do.ok&&r.shuffle&&D(Ro),a(),tr=oe(tr),Wo&&y(!0)}function C(){var t=2>Wo||Vo;or.noMove=t||si,or.noSwipe=t||!r.swipe,!di&&qi.toggleClass(Se,!r.click&&!or.noMove&&!or.noSwipe),Kn&&Ni.toggleClass(ye,!or.noSwipe)}function k(t){t===!0&&(t=""),r.autoplay=Math.max(+t||Un,1.5*ci)}function T(t){t.navarrows&&"thumbs"===t.nav?(Bi.show(),Qi.show()):(Bi.hide(),Qi.hide())}function F(t,e){return Math.floor(Ni.width()/(e.thumbwidth+e.thumbmargin))}function X(){function t(t,n){e[t?"add":"remove"].push(n)}r.nav&&"dots"!==r.nav||(r.navdir="horizontal"),Ti.options=r=H(r),ao=F(Ni,r),si="crossfade"===r.transition||"dissolve"===r.transition,ei=r.loop&&(Wo>2||si&&(!di||"slide"!==di)),ci=+r.transitionduration||Qn,hi="rtl"===r.direction,mi=o.extend({},r.keyboard&&uo,r.keyboard),T(r);var e={add:[],remove:[]};Wo>1?(ni=r.nav,ii="top"===r.navposition,e.remove.push(Je),Oi.toggle(r.arrows)):(ni=!1,Oi.hide()),Cn(),Ko=new Fn(o.extend(jn,r.spinner,zn,{direction:hi?-1:1})),Yn(),so(),io(),r.autoplay&&k(r.autoplay),ui=h(r.thumbwidth)||Gn,li=h(r.thumbheight)||Gn,ir.ok=ar.ok=r.trackpad&&!Hn,C(),wo(r,[nr]),oi="thumbs"===ni,Di.filter(":hidden")&&ni&&Di.show(),oi?(Mn(Wo,"navThumb"),Ho=Ki,ki=no,$(ji,o.Fotorama.jst.style({w:ui,h:li,b:r.thumbborderwidth,m:r.thumbmargin,s:Pi,q:!Dn})),Ri.addClass(De).removeClass(Oe)):"dots"===ni?(Mn(Wo,"navDot"),Ho=Hi,ki=eo,Ri.addClass(Oe).removeClass(De)):(Di.hide(),ni=!1,Ri.removeClass(De+" "+Oe)),ni&&(ii?Di.insertBefore($i):Di.insertAfter($i),Wn.nav=!1,Wn(Ho,Wi,"nav")),ri=r.allowfullscreen,ri?(Xi.prependTo($i),ai=Rn&&"native"===ri):(Xi.detach(),ai=!1),t(si,pe),t(!si,ve),t(!r.captions,xe),t(hi,be),t("always"!==r.arrows,_e),fi=r.shadows&&!Hn,t(!fi,we),Ni.addClass(e.add.join(" ")).removeClass(e.remove.join(" ")),er=o.extend({},r),f()}function ne(t){return 0>t?(Wo+t%Wo)%Wo:t>=Wo?t%Wo:t}function oe(t){return s(t,0,Wo-1)}function ae(t){return ei?ne(t):oe(t)}function We(t){return t>0||ei?t-1:!1}function He(t){return Wo-1>t||ei?t+1:!1}function Ke(){or.min=ei?-1/0:-g(Wo-1,nr.w,r.margin,Xo),or.max=ei?1/0:-g(0,nr.w,r.margin,Xo),or.snap=nr.w+r.margin}function Ve(){var t="vertical"===r.navdir,e=t?Wi.height():Wi.width(),n=t?nr.h:nr.nw;rr.min=Math.min(0,n-e),rr.max=0,rr.direction=r.navdir,Wi.toggleClass(Se,!(rr.noMove=rr.min===rr.max))}function un(t,e,n){if("number"==typeof t){t=new Array(t);var i=!0}return o.each(t,function(t,o){if(i&&(o=t),"number"==typeof o){var r=Ro[ne(o)];if(r){var a="$"+e+"Frame",s=r[a];n.call(this,t,o,r,s,a,s&&s.data())}}})}function dn(t,e,n,o){(!pi||"*"===pi&&o===ti)&&(t=v(r.width)||v(t)||Jn,e=v(r.height)||v(e)||Zn,Ti.resize({width:t,ratio:r.ratio||n||t/e},0,o!==ti&&"*"))}function xn(t,e,n,i){un(t,e,function(t,a,s,u,l,c){function d(t){var e=ne(a);yo(t,{index:e,src:b,frame:Ro[e]})}function f(){g.remove(),o.Fotorama.cache[b]="error",s.html&&"stage"===e||!x||x===b?(!b||s.html||p?"stage"===e&&(u.trigger("f:load").removeClass(on+" "+nn).addClass(rn),d("load"),dn()):(u.trigger("f:error").removeClass(on).addClass(nn),d("error")),c.state="error",!(Wo>1&&Ro[a]===s)||s.html||s.deleted||s.video||p||(s.deleted=!0,Ti.splice(a,1))):(s[y]=b=x,xn([a],e,n,!0))}function h(){o.Fotorama.measures[b]=w.measures=o.Fotorama.measures[b]||{width:v.width,height:v.height,ratio:v.width/v.height},dn(w.measures.width,w.measures.height,w.measures.ratio,a),g.off("load error").addClass(ln+(p?" "+cn:"")).prependTo(u),u.hasClass(ke)&&!u.hasClass(vn)&&u.attr("href",g.attr("src")),N(g,(o.isFunction(n)?n():n)||nr),o.Fotorama.cache[b]=c.state="loaded",setTimeout(function(){u.trigger("f:load").removeClass(on+" "+nn).addClass(rn+" "+(p?an:sn)),"stage"===e?d("load"):(s.thumbratio===oo||!s.thumbratio&&r.thumbratio===oo)&&(s.thumbratio=w.measures.ratio,Io())},0)}function m(){var t=10;z(function(){return!_i||!t--&&!Hn},function(){h()})}if(u){var p=Ti.fullScreen&&s.full&&s.full!==s.img&&!c.$full&&"stage"===e;if(!c.$img||i||p){var v=new Image,g=o(v),w=g.data();c[p?"$full":"$img"]=g;var y="stage"===e?p?"full":"img":"thumb",b=s[y],x=p?null:s["stage"===e?"thumb":"img"];if("navThumb"===e&&(u=c.$wrap),!b)return void f();o.Fotorama.cache[b]?!function _(){"error"===o.Fotorama.cache[b]?f():"loaded"===o.Fotorama.cache[b]?setTimeout(m,0):setTimeout(_,100)}():(o.Fotorama.cache[b]="*",g.on("load",m).on("error",f)),c.state="",v.src=b,c.data.caption&&(v.alt=c.data.caption||""),po.isExpectedCaption(s,r.showcaption)&&o(v).attr("aria-labelledby",s.labelledby)}}})}function _n(t){Zi.append(Ko.spin().el).appendTo(t)}function Cn(){Zi.detach(),Ko&&Ko.stop()}function kn(){var t=Bo[to];t&&!t.data().state&&(_n(t),t.on("f:load f:error",function(){t.off("f:load f:error"),Cn()}))}function Sn(t){Y(t,qo),G(t,function(){setTimeout(function(){W(Ri)},0),fo({time:ci,guessIndex:o(this).data().eq,minMax:rr})})}function Mn(t,e){un(t,e,function(t,n,i,a,s,u){if(!a){a=i[s]=Ni[s].clone(),u=a.data(),u.data=i;var l=a[0],c="labelledby"+o.now();"stage"===e?(i.html&&o('<div class="'+pn+'"></div>').append(i._html?o(i.html).removeAttr("id").html(i._html):i.html).appendTo(a),i.id&&(c=i.id||c),i.labelledby=c,po.isExpectedCaption(i,r.showcaption)&&o(o.Fotorama.jst.frameCaption({caption:i.caption,labelledby:c})).appendTo(a),i.video&&a.addClass(Te).append(Yi.clone()),G(l,function(){setTimeout(function(){W($i)},0),zo({index:u.eq,user:!0})}),Li=Li.add(a)):"navDot"===e?(Sn(l),Hi=Hi.add(a)):"navThumb"===e&&(Sn(l),u.$wrap=a.children(":first"),Ki=Ki.add(a),i.video&&u.$wrap.append(Yi.clone()))}})}function En(t,e){return t&&t.length&&N(t,e)}function An(t){un(t,"stage",function(t,e,n,i,a,s){if(i){var u=ne(e);s.eq=u,ur[to][u]=i.css(o.extend({left:si?0:g(e,nr.w,r.margin,Xo)},si&&d(0))),j(i[0])&&(i.appendTo(qi),Eo(n.$video)),En(s.$img,nr),En(s.$full,nr),!i.hasClass(ke)||"false"===i.attr("aria-hidden")&&i.hasClass(Ge)||i.attr("aria-hidden","true")}})}function In(t,e){var n,i;"thumbs"!==ni||isNaN(t)||(n=-t,i=-t+nr.nw,"vertical"===r.navdir&&(t-=r.thumbheight,i=-t+nr.h),Ki.each(function(){var t=o(this),a=t.data(),s=a.eq,u=function(){return{h:li,w:a.w}},l=u(),c="vertical"===r.navdir?a.t>i:a.l>i;l.w=a.w,a.l+a.w<n||c||En(a.$img,l)||e&&xn([s],"navThumb",u)}))}function Wn(t,e,n){if(!Wn[n]){var i="nav"===n&&oi,a=0,s=0;e.append(t.filter(function(){for(var t,e=o(this),n=e.data(),i=0,r=Ro.length;r>i;i++)if(n.data===Ro[i]){t=!0,n.eq=i;break}return t||e.remove()&&!1}).sort(function(t,e){return o(t).data().eq-o(e).data().eq}).each(function(){var t=o(this),e=t.data();po.setThumbAttr(t,e.data.caption,"aria-label")}).each(function(){if(i){var t=o(this),e=t.data(),n=Math.round(li*e.data.thumbratio)||ui,u=Math.round(ui/e.data.thumbratio)||li;e.t=s,e.h=u,e.l=a,e.w=n,t.css({width:n}),s+=u+r.thumbmargin,a+=n+r.thumbmargin}})),Wn[n]=!0}}function Vn(t){return t-lr>nr.w/3}function Xn(t){return!(ei||tr+t&&tr-Wo+t||Vo)}function Yn(){var t=Xn(0),e=Xn(1);Ai.toggleClass(Fe,t).attr(U(t)),Ii.toggleClass(Fe,e).attr(U(e))}function io(){var t=!1,e=!1;if("thumbs"!==r.navtype||r.loop||(t=0==tr?!0:!1,e=tr==r.data.length-1?!0:!1),"slides"===r.navtype){var n=l(Wi,r.navdir);t=n>=rr.max?!0:!1,e=n<=rr.min?!0:!1}Bi.toggleClass(Fe,t).attr(U(t)),Qi.toggleClass(Fe,e).attr(U(e))}function so(){ir.ok&&(ir.prevent={"<":Xn(0),">":Xn(1)})}function lo(t){var e,n,o,i,a=t.data();oi?(e=a.l,n=a.t,o=a.w,i=a.h):(e=t.position().left,o=t.width());var s={c:e+o/2,min:-e+10*r.thumbmargin,max:-e+nr.w-o-10*r.thumbmargin},u={c:n+i/2,min:-n+10*r.thumbmargin,max:-n+nr.h-i-10*r.thumbmargin};return"vertical"===r.navdir?u:s}function co(t){var e=Bo[ki].data();te(Vi,{time:1.2*t,pos:"vertical"===r.navdir?e.t:e.l,width:e.w,height:e.h,direction:r.navdir})}function fo(t){var e,n,o,i,a,u,c,d,f=Ro[t.guessIndex][ki],h=r.navtype;f&&("thumbs"===h?(e=rr.min!==rr.max,o=t.minMax||e&&lo(Bo[ki]),i=e&&(t.keep&&fo.t?fo.l:s((t.coo||nr.nw/2)-lo(f).c,o.min,o.max)),a=e&&(t.keep&&fo.l?fo.l:s((t.coo||nr.nw/2)-lo(f).c,o.min,o.max)),u="vertical"===r.navdir?i:a,c=e&&s(u,rr.min,rr.max)||0,n=1.1*t.time,te(Wi,{time:n,pos:c,direction:r.navdir,onEnd:function(){In(c,!0),io()}}),Mo(Ri,q(c,rr.min,rr.max,r.navdir)),fo.l=u):(d=l(Wi,r.navdir),n=1.11*t.time,c=Q(r,rr,t.guessIndex,d,f,Di,r.navdir),te(Wi,{time:n,pos:c,direction:r.navdir,onEnd:function(){In(c,!0),io()
-}}),Mo(Ri,q(c,rr.min,rr.max,r.navdir))))}function ho(){mo(ki),sr[ki].push(Bo[ki].addClass(Ge).attr("data-active",!0))}function mo(t){for(var e=sr[t];e.length;)e.shift().removeClass(Ge).attr("data-active",!1)}function vo(t){var e=ur[t];o.each(Qo,function(t,n){delete e[ne(n)]}),o.each(e,function(t,n){delete e[t],n.detach()})}function go(t){Xo=Uo=tr;var e=Bo[to];e&&(mo(to),sr[to].push(e.addClass(Ge).attr("data-active",!0)),e.hasClass(ke)&&e.attr("aria-hidden","false"),t||Ti.showStage.onEnd(!0),x(qi,0,!0),vo(to),An(Qo),Ke(),Ve(),Y(qi[0],function(){n.hasClass(tn)||(Ti.requestFullScreen(),o(Ui).trigger("focus"))}))}function wo(t,e){t&&o.each(e,function(e,n){n&&o.extend(n,{width:t.width||n.width,height:t.height,minwidth:t.minwidth,maxwidth:t.maxwidth,minheight:t.minheight,maxheight:t.maxheight,ratio:K(t.ratio)})})}function yo(t,e){n.trigger(le+":"+t,[Ti,e])}function bo(){clearTimeout(xo.t),_i=1,r.stopautoplayontouch?Ti.stopAutoplay():yi=!0}function xo(){_i&&(r.stopautoplayontouch||(_o(),Co()),xo.t=setTimeout(function(){_i=0},Qn+Bn))}function _o(){yi=!(!Vo&&!bi)}function Co(){if(clearTimeout(Co.t),z.stop(Co.w),!r.autoplay||yi)return void(Ti.autoplay&&(Ti.autoplay=!1,yo("stopautoplay")));Ti.autoplay||(Ti.autoplay=!0,yo("startautoplay"));var t=tr,e=Bo[to].data();Co.w=z(function(){return e.state||t!==tr},function(){Co.t=setTimeout(function(){if(!yi&&t===tr){var e=Zo,n=Ro[e][to].data();Co.w=z(function(){return n.state||e!==Zo},function(){yi||e!==Zo||Ti.show(ei?Z(!hi):Zo)})}},r.autoplay)})}function ko(t){var e;return"object"!=typeof t?(e=t,t={}):e=t.index,e=">"===e?Uo+1:"<"===e?Uo-1:"<<"===e?0:">>"===e?Wo-1:e,e=isNaN(e)?i:e,e="undefined"==typeof e?tr||0:e}function To(t){Ti.activeIndex=tr=ae(t),Go=We(tr),Jo=He(tr),Zo=ne(tr+(hi?-1:1)),Qo=[tr,Go,Jo],Uo=ei?t:tr}function Po(t){var e=Math.abs(Yo-Uo),n=_(t.time,function(){return Math.min(ci*(1+(e-1)/12),2*ci)});return t.slow&&(n*=10),n}function So(){Ti.fullScreen&&(Ti.fullScreen=!1,Rn&&Pn.cancel(Mi),$n.removeClass(ce),Nn.removeClass(ce),n.removeClass(tn).insertAfter(zi),nr=o.extend({},xi),Eo(Vo,!0,!0),$o("x",!1),Ti.resize(),xn(Qo,"stage"),W(qn,gi,vi),yo("fullscreenexit"))}function Mo(t,e){fi&&(t.removeClass(Qe+" "+Xe),t.removeClass(Ue+" "+Ye),e&&!Vo&&t.addClass(e.replace(/^|\s/g," "+Be+"--")))}function Eo(t,e,n){e&&(Ni.removeClass(me),Vo=!1,C()),t&&t!==Vo&&(t.remove(),yo("unloadvideo")),n&&(_o(),Co())}function Fo(t){Ni.toggleClass(ge,t)}function jo(t){if(!or.flow){var e=t?t.pageX:jo.x,n=e&&!Xn(Vn(e))&&r.click;jo.p!==n&&$i.toggleClass(Me,n)&&(jo.p=n,jo.x=e)}}function zo(t){clearTimeout(zo.t),r.clicktransition&&r.clicktransition!==r.transition?setTimeout(function(){var e=r.transition;Ti.setOptions({transition:r.clicktransition}),di=e,zo.t=setTimeout(function(){Ti.show(t)},10)},0):Ti.show(t)}function No(t,e){var n=t.target,i=o(n);i.hasClass(wn)?Ti.playVideo():n===Ui?Ti.toggleFullScreen():Vo?n===Ji&&Eo(Vo,!0,!0):e?Fo():r.click&&zo({index:t.shiftKey||Z(Vn(t._x)),slow:t.altKey,user:!0})}function $o(t,e){or[t]=rr[t]=e}function qo(t){var e=o(this).data().eq;zo("thumbs"===r.navtype?{index:e,slow:t.altKey,user:!0,coo:t._x-Ri.offset().left}:{index:e,slow:t.altKey,user:!0})}function Lo(t){zo({index:Oi.index(this)?">":"<",slow:t.altKey,user:!0})}function Ao(t){G(t,function(){setTimeout(function(){W($i)},0),Fo(!1)})}function Io(){if(b(),X(),!Io.i){Io.i=!0;var t=r.startindex;tr=Xo=Uo=Yo=ti=ae(t)||0}if(Wo){if(Oo())return;Vo&&Eo(Vo,!0),Qo=[],vo(to),Io.ok=!0,Ti.show({index:tr,time:0}),Ti.resize()}else Ti.destroy()}function Oo(){return!Oo.f===hi?(Oo.f=hi,tr=Wo-1-tr,Ti.reverse(),!0):void 0}function Do(){Do.ok&&(Do.ok=!1,yo("ready"))}Nn=o("html"),$n=o("body");var Ro,Wo,Ho,Ko,Vo,Bo,Qo,Xo,Uo,Yo,Go,Jo,Zo,ti,ei,ni,oi,ii,ri,ai,si,ui,li,ci,di,fi,hi,mi,pi,vi,gi,wi,yi,bi,xi,_i,Ci,ki,Ti=this,Pi=o.now(),Si=le+Pi,Mi=n[0],Ei=1,Fi=n.data(),ji=o("<style></style>"),zi=o(A(Ze)),Ni=n.find(I(de)),$i=Ni.find(I(Ce)),qi=($i[0],n.find(I(Pe))),Li=o(),Ai=n.find(I(je)),Ii=n.find(I(ze)),Oi=n.find(I(Ee)),Di=n.find(I($e)),Ri=Di.find(I(Ne)),Wi=Ri.find(I(qe)),Hi=o(),Ki=o(),Vi=(qi.data(),Wi.data(),n.find(I(mn))),Bi=n.find(I(fn)),Qi=n.find(I(hn)),Xi=n.find(I(en)),Ui=Xi[0],Yi=o(A(wn)),Gi=n.find(I(yn)),Ji=Gi[0],Zi=o(A(bn)),tr=!1,er={},nr={},or={},ir={},rr={},ar={},sr={},ur={},lr=0,cr=[];Ni[to]=o(Tn.touch?'<a class="'+ke+'" target="_blank"></a>':'<div class="'+ke+'"></div>'),Ni[no]=o(o.Fotorama.jst.thumb()),Ni[eo]=o(o.Fotorama.jst.dots()),sr[to]=[],sr[no]=[],sr[eo]=[],ur[to]={},Ni.addClass(On?he:fe),Fi.fotorama=this,Ti.startAutoplay=function(t){return Ti.autoplay?this:(yi=bi=!1,k(t||r.autoplay),Co(),this)},Ti.stopAutoplay=function(){return Ti.autoplay&&(yi=bi=!0,Co()),this},Ti.showSlide=function(t){var e,n=l(Wi,r.navdir),o=550,i="horizontal"===r.navdir?r.thumbwidth:r.thumbheight,a=function(){io()};"next"===t&&(e=n-(i+r.margin)*ao),"prev"===t&&(e=n+(i+r.margin)*ao),e=B(e,rr),In(e,!0),te(Wi,{time:o,pos:e,direction:r.navdir,onEnd:a})},Ti.showWhileLongPress=function(t){if(!Ti.longPress.singlePressInProgress){var e=ko(t);To(e);var n=Po(t)/50,o=Bo;Ti.activeFrame=Bo=Ro[tr];var i=o===Bo&&!t.user;return Ti.showNav(i,t,n),this}},Ti.showEndLongPress=function(t){if(!Ti.longPress.singlePressInProgress){var e=ko(t);To(e);var n=Po(t)/50,o=Bo;Ti.activeFrame=Bo=Ro[tr];var i=o===Bo&&!t.user;return Ti.showStage(i,t,n),wi="undefined"!=typeof Yo&&Yo!==tr,Yo=tr,this}},Ti.showStage=function(t,e,n){Eo(Vo,Bo.i!==Ro[ne(Xo)].i),Mn(Qo,"stage"),An(Hn?[Uo]:[Uo,We(Uo),He(Uo)]),$o("go",!0),t||yo("show",{user:e.user,time:n}),yi=!0;var o=e.overPos,i=Ti.showStage.onEnd=function(n){if(!i.ok){if(i.ok=!0,n||go(!0),t||yo("showend",{user:e.user}),!n&&di&&di!==r.transition)return Ti.setOptions({transition:di}),void(di=!1);kn(),xn(Qo,"stage"),$o("go",!1),so(),jo(),_o(),Co()}};if(si){var a=Bo[to],s=Ro[Yo]&&tr!==Yo?Ro[Yo][to]:null;ee(a,s,Li,{time:n,method:r.transition,onEnd:i},cr)}else te(qi,{pos:-g(Uo,nr.w,r.margin,Xo),overPos:o,time:n,onEnd:i});Yn()},Ti.showNav=function(t,e,n){if(io(),ni){ho();var o=oe(tr+s(Uo-Yo,-1,1));fo({time:n,coo:o!==tr&&e.coo,guessIndex:"undefined"!=typeof e.coo?o:tr,keep:t}),oi&&co(n)}},Ti.show=function(t){Ti.longPress.singlePressInProgress=!0;var e=ko(t);To(e);var n=Po(t),o=Bo;Ti.activeFrame=Bo=Ro[tr];var i=o===Bo&&!t.user;return Ti.showStage(i,t,n),Ti.showNav(i,t,n),wi="undefined"!=typeof Yo&&Yo!==tr,Yo=tr,Ti.longPress.singlePressInProgress=!1,this},Ti.requestFullScreen=function(){return ri&&!Ti.fullScreen&&(vi=qn.scrollTop(),gi=qn.scrollLeft(),W(qn),$o("x",!0),xi=o.extend({},nr),n.addClass(tn).appendTo($n.addClass(ce)),Nn.addClass(ce),Eo(Vo,!0,!0),Ti.fullScreen=!0,ai&&Pn.request(Mi),Ti.resize(),xn(Qo,"stage"),kn(),yo("fullscreenenter")),this},Ti.cancelFullScreen=function(){return ai&&Pn.is()?Pn.cancel(e):So(),this},Ti.toggleFullScreen=function(){return Ti[(Ti.fullScreen?"cancel":"request")+"FullScreen"]()},V(e,Pn.event,function(){!Ro||Pn.is()||Vo||So()}),Ti.resize=function(e){if(!Ro)return this;var n=arguments[1]||0,i=arguments[2];ao=F(Ni,r),wo(Ti.fullScreen?{width:o(t).width(),maxwidth:null,minwidth:null,height:o(t).height(),maxheight:null,minheight:null}:H(e),[nr,i||Ti.fullScreen||r]);var a=nr.width,u=nr.height,l=nr.ratio,c=qn.height()-(ni?Ri.height():0);if(v(a)&&(Ni.css({width:""}),Ni.css({height:""}),$i.css({width:""}),$i.css({height:""}),$i.css({"line-height":""}),qi.css({width:""}),qi.css({height:""}),Ri.css({width:""}),Ri.css({height:""}),Ni.css({minWidth:nr.minwidth||0,maxWidth:nr.maxwidth||ro}),a=nr.W=nr.w=Ni.width(),nr.nw=ni&&p(r.navwidth,a)||a,qi.css({width:nr.w,marginLeft:(nr.W-nr.w)/2}),u=p(u,c),u=u||l&&a/l)){if(a=Math.round(a),u=nr.h=Math.round(s(u,p(nr.minheight,c),p(nr.maxheight,c))),$i.css({width:a,height:u,"line-height":u+"px"}),"vertical"!==r.navdir||Ti.fullscreen||Ri.width(r.thumbwidth+2*r.thumbmargin),"horizontal"!==r.navdir||Ti.fullscreen||Ri.height(r.thumbheight+2*r.thumbmargin),"vertical"===r.navdir&&Ti.fullScreen&&$i.css("height",o(t).height()),"horizontal"===r.navdir&&Ti.fullScreen&&$i.css("height",o(t).height()-(r.thumbheight+2*r.thumbmargin)),ni){switch(r.navdir){case"vertical":Di.removeClass(Ie),Di.removeClass(Ae),Di.addClass(Le),Ri.stop().animate({height:nr.h,width:r.thumbwidth},n);break;case"list":Di.removeClass(Le),Di.removeClass(Ie),Di.addClass(Ae);break;default:Di.removeClass(Le),Di.removeClass(Ae),Di.addClass(Ie),Ri.stop().animate({width:nr.nw},n)}go(),fo({guessIndex:tr,time:n,keep:!0}),oi&&Wn.nav&&co(n)}pi=i||!0,Do.ok=!0,Do()}return lr=$i.offset().left,f(),this},Ti.setOptions=function(t){return o.extend(r,t),Io(),this},Ti.shuffle=function(){return Ro&&D(Ro)&&Io(),this},Ti.longPress={threshold:1,count:0,thumbSlideTime:20,progress:function(){this.inProgress||(this.count++,this.inProgress=this.count>this.threshold)},end:function(){this.inProgress&&(this.isEnded=!0)},reset:function(){this.count=0,this.inProgress=!1,this.isEnded=!1}},Ti.destroy=function(){return Ti.cancelFullScreen(),Ti.stopAutoplay(),Ro=Ti.data=null,y(),Qo=[],vo(to),Io.ok=!1,this},Ti.playVideo=function(){var t=Bo,e=t.video,n=tr;return"object"==typeof e&&t.videoReady&&(ai&&Ti.fullScreen&&Ti.cancelFullScreen(),z(function(){return!Pn.is()||n!==tr},function(){n===tr&&(t.$video=t.$video||o(A(gn)).append(O(e)),t.$video.appendTo(t[to]),Ni.addClass(me),Vo=t.$video,C(),Oi.blur(),Xi.blur(),yo("loadvideo"))})),this},Ti.stopVideo=function(){return Eo(Vo,!0,!0),this},$i.on("mousemove",jo),or=ie(qi,{onStart:bo,onMove:function(t,e){Mo($i,e.edge)},onTouchEnd:xo,onEnd:function(t){Mo($i);var e=(Kn&&!Ci||t.touch)&&r.arrows&&"always"!==r.arrows;if(t.moved||e&&t.pos!==t.newPos&&!t.control){var n=w(t.newPos,nr.w,r.margin,Xo);Ti.show({index:n,time:si?ci:t.time,overPos:t.overPos,user:!0})}else t.aborted||t.control||No(t.startEvent,e)},timeLow:1,timeHigh:1,friction:2,select:"."+Je+", ."+Je+" *",$wrap:$i,direction:"horizontal"}),rr=ie(Wi,{onStart:bo,onMove:function(t,e){Mo(Ri,e.edge)},onTouchEnd:xo,onEnd:function(t){function e(){fo.l=t.newPos,_o(),Co(),In(t.newPos,!0),io()}if(t.moved)t.pos!==t.newPos?(yi=!0,te(Wi,{time:t.time,pos:t.newPos,overPos:t.overPos,direction:r.navdir,onEnd:e}),In(t.newPos),fi&&Mo(Ri,q(t.newPos,rr.min,rr.max,t.dir))):e();else{var n=t.$target.closest("."+Re,Wi)[0];n&&qo.call(n,t.startEvent)}},timeLow:.5,timeHigh:2,friction:5,$wrap:Ri,direction:r.navdir}),ir=re($i,{shift:!0,onEnd:function(t,e){bo(),xo(),Ti.show({index:e,slow:t.altKey})}}),ar=re(Ri,{onEnd:function(t,e){bo(),xo();var n=x(Wi)+.25*e;Wi.css(c(s(n,rr.min,rr.max),r.navdir)),fi&&Mo(Ri,q(n,rr.min,rr.max,r.navdir)),ar.prevent={"<":n>=rr.max,">":n<=rr.min},clearTimeout(ar.t),ar.t=setTimeout(function(){fo.l=n,In(n,!0)},Bn),In(n)}}),Ni.hover(function(){setTimeout(function(){_i||Fo(!(Ci=!0))},0)},function(){Ci&&Fo(!(Ci=!1))}),L(Oi,function(t){J(t),Lo.call(this,t)},{onStart:function(){bo(),or.control=!0},onTouchEnd:xo}),L(Bi,function(t){J(t),"thumbs"===r.navtype?Ti.show("<"):Ti.showSlide("prev")}),L(Qi,function(t){J(t),"thumbs"===r.navtype?Ti.show(">"):Ti.showSlide("next")}),Oi.each(function(){Y(this,function(t){Lo.call(this,t)}),Ao(this)}),Y(Ui,function(){Ti.toggleFullScreen(),o(Ui).trigger("focus")}),Ao(Ui),o.each("load push pop shift unshift reverse sort splice".split(" "),function(t,e){Ti[e]=function(){return Ro=Ro||[],"load"!==e?Array.prototype[e].apply(Ro,arguments):arguments[0]&&"object"==typeof arguments[0]&&arguments[0].length&&(Ro=R(arguments[0])),Io(),Ti}}),Io()},o.fn.fotorama=function(e){return this.each(function(){var n=this,i=o(this),r=i.data(),a=r.fotorama;a?a.setOptions(e,!0):z(function(){return!F(n)},function(){r.urtext=i.html(),new o.Fotorama(i,o.extend({},so,t.fotoramaDefaults,e,r))})})},o.Fotorama.instances=[],o.Fotorama.cache={},o.Fotorama.measures={},o=o||{},o.Fotorama=o.Fotorama||{},o.Fotorama.jst=o.Fotorama.jst||{},o.Fotorama.jst.dots=function(){{var t="";kn.escape}return t+='<div class="fotorama__nav__frame fotorama__nav__frame--dot" tabindex="0" role="button" data-gallery-role="nav-frame" data-nav-type="thumb" aria-label>\r\n    <div class="fotorama__dot"></div>\r\n</div>'},o.Fotorama.jst.frameCaption=function(t){{var e,n="";kn.escape}return n+='<div class="fotorama__caption" aria-hidden="true">\r\n    <div class="fotorama__caption__wrap" id="'+(null==(e=t.labelledby)?"":e)+'">'+(null==(e=t.caption)?"":e)+"</div>\r\n</div>\r\n"},o.Fotorama.jst.style=function(t){{var e,n="";kn.escape}return n+=".fotorama"+(null==(e=t.s)?"":e)+" .fotorama__nav--thumbs .fotorama__nav__frame{\r\npadding:"+(null==(e=t.m)?"":e)+"px;\r\nheight:"+(null==(e=t.h)?"":e)+"px}\r\n.fotorama"+(null==(e=t.s)?"":e)+" .fotorama__thumb-border{\r\nheight:"+(null==(e=t.h)?"":e)+"px;\r\nborder-width:"+(null==(e=t.b)?"":e)+"px;\r\nmargin-top:"+(null==(e=t.m)?"":e)+"px}"},o.Fotorama.jst.thumb=function(){{var t="";kn.escape}return t+='<div class="fotorama__nav__frame fotorama__nav__frame--thumb" tabindex="0" role="button" data-gallery-role="nav-frame" data-nav-type="thumb" aria-label>\r\n    <div class="fotorama__thumb">\r\n    </div>\r\n</div>'}}(window,document,location,"undefined"!=typeof jQuery&&jQuery);
\ No newline at end of file
+fotoramaVersion="4.6.4",function(t,e,n,o,i){"use strict";function r(t){var e="bez_"+o.makeArray(arguments).join("_").replace(".","p");if("function"!=typeof o.easing[e]){var n=function(t,e){var n=[null,null],o=[null,null],i=[null,null],r=function(r,a){return i[a]=3*t[a],o[a]=3*(e[a]-t[a])-i[a],n[a]=1-i[a]-o[a],r*(i[a]+r*(o[a]+r*n[a]))},a=function(t){return i[0]+t*(2*o[0]+3*n[0]*t)},s=function(t){for(var e,n=t,o=0;++o<14&&(e=r(n,0)-t,!(Math.abs(e)<.001));)n-=e/a(n);return n};return function(t){return r(s(t),1)}};o.easing[e]=function(e,o,i,r,a){return r*n([t[0],t[1]],[t[2],t[3]])(o/a)+i}}return e}function a(){}function s(t,e,n){return Math.max(isNaN(e)?-1/0:e,Math.min(isNaN(n)?1/0:n,t))}function u(t,e){return t.match(/ma/)&&t.match(/-?\d+(?!d)/g)[t.match(/3d/)?"vertical"===e?13:12:"vertical"===e?5:4]}function l(t,e){return On?+u(t.css("transform"),e):+t.css("vertical"===e?"top":"left").replace("px","")}function c(t,e){var n={};if(On)switch(e){case"vertical":n.transform="translate3d(0, "+t+"px,0)";break;case"list":break;default:n.transform="translate3d("+t+"px,0,0)"}else"vertical"===e?n.top=t:n.left=t;return n}function d(t){return{"transition-duration":t+"ms"}}function f(t,e){return isNaN(t)?e:t}function h(t,e){return f(+String(t).replace(e||"px",""))}function m(t){return/%$/.test(t)?h(t,"%"):i}function p(t,e){return f(m(t)/100*e,h(t))}function v(t){return(!isNaN(h(t))||!isNaN(h(t,"%")))&&t}function g(t,e,n,o){return(t-(o||0))*(e+(n||0))}function w(t,e,n,o){return-Math.round(t/(e+(n||0))-(o||0))}function y(t){var e=t.data();if(!e.tEnd){var n=t[0],o={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",msTransition:"MSTransitionEnd",transition:"transitionend"};V(n,o[Tn.prefixed("transition")],function(t){e.tProp&&t.propertyName.match(e.tProp)&&e.onEndFn()}),e.tEnd=!0}}function b(t,e,n,o){var i,r=t.data();r&&(r.onEndFn=function(){i||(i=!0,clearTimeout(r.tT),n())},r.tProp=e,clearTimeout(r.tT),r.tT=setTimeout(function(){r.onEndFn()},1.5*o),y(t))}function x(t,e){var n=t.navdir||"horizontal";if(t.length){var o=t.data();On?(t.css(d(0)),o.onEndFn=a,clearTimeout(o.tT)):t.stop();var i=_(e,function(){return l(t,n)});return t.css(c(i,n)),i}}function _(){for(var t,e=0,n=arguments.length;n>e&&(t=e?arguments[e]():arguments[e],"number"!=typeof t);e++);return t}function C(t,e){return Math.round(t+(e-t)/1.5)}function k(){return k.p=k.p||("https:"===n.protocol?"https://":"http://"),k.p}function T(t){var n=e.createElement("a");return n.href=t,n}function P(t,e){if("string"!=typeof t)return t;t=T(t);var n,o;if(t.host.match(/youtube\.com/)&&t.search){if(n=t.search.split("v=")[1]){var i=n.indexOf("&");-1!==i&&(n=n.substring(0,i)),o="youtube"}}else t.host.match(/youtube\.com|youtu\.be/)?(n=t.pathname.replace(/^\/(embed\/|v\/)?/,"").replace(/\/.*/,""),o="youtube"):t.host.match(/vimeo\.com/)&&(o="vimeo",n=t.pathname.replace(/^\/(video\/)?/,"").replace(/\/.*/,""));return n&&o||!e||(n=t.href,o="custom"),n?{id:n,type:o,s:t.search.replace(/^\?/,""),p:k()}:!1}function S(t,e,n){var i,r,a=t.video;return"youtube"===a.type?(r=k()+"img.youtube.com/vi/"+a.id+"/default.jpg",i=r.replace(/\/default.jpg$/,"/hqdefault.jpg"),t.thumbsReady=!0):"vimeo"===a.type?o.ajax({url:k()+"vimeo.com/api/v2/video/"+a.id+".json",dataType:"jsonp",success:function(o){t.thumbsReady=!0,M(e,{img:o[0].thumbnail_large,thumb:o[0].thumbnail_small},t.i,n)}}):t.thumbsReady=!0,{img:i,thumb:r}}function M(t,e,n,i){for(var r=0,a=t.length;a>r;r++){var s=t[r];if(s.i===n&&s.thumbsReady){var u={videoReady:!0};u[to]=u[no]=u[eo]=!1,i.splice(r,1,o.extend({},s,u,e));break}}}function E(t){function e(t,e,i){var r=t.children("img").eq(0),a=t.attr("href"),s=t.attr("src"),u=r.attr("src"),l=e.video,c=i?P(a,l===!0):!1;c?a=!1:c=l,n(t,r,o.extend(e,{video:c,img:e.img||a||s||u,thumb:e.thumb||u||s||a}))}function n(t,e,n){var i=n.thumb&&n.img!==n.thumb,r=h(n.width||t.attr("width")),a=h(n.height||t.attr("height"));o.extend(n,{width:r,height:a,thumbratio:K(n.thumbratio||h(n.thumbwidth||e&&e.attr("width")||i||r)/h(n.thumbheight||e&&e.attr("height")||i||a))})}var i=[];return t.children().each(function(){var t=o(this),r=H(o.extend(t.data(),{id:t.attr("id")}));if(t.is("a, img"))e(t,r,!0);else{if(t.is(":empty"))return;n(t,null,o.extend(r,{html:this,_html:t.html()}))}i.push(r)}),i}function F(t){return 0===t.offsetWidth&&0===t.offsetHeight}function j(t){return!o.contains(e.documentElement,t)}function z(t,e,n,o){return z.i||(z.i=1,z.ii=[!0]),o=o||z.i,"undefined"==typeof z.ii[o]&&(z.ii[o]=!0),t()?e():z.ii[o]&&setTimeout(function(){z.ii[o]&&z(t,e,n,o)},n||100),z.i++}function N(t,e){var n=t.data(),o=n.measures;if(o&&(!n.l||n.l.W!==o.width||n.l.H!==o.height||n.l.r!==o.ratio||n.l.w!==e.w||n.l.h!==e.h)){var i=s(e.h,0,o.height),r=i*o.ratio;po.setRatio(t,r,i),n.l={W:o.width,H:o.height,r:o.ratio,w:e.w,h:e.h}}return!0}function $(t,e){var n=t[0];n.styleSheet?n.styleSheet.cssText=e:t.html(e)}function q(t,e,n,o){return e===n?!1:"vertical"===o?e>=t?"top":t>=n?"bottom":"top bottom":e>=t?"left":t>=n?"right":"left right"}function L(t,e,n){n=n||{},t.each(function(){var t,i=o(this),r=i.data();r.clickOn||(r.clickOn=!0,o.extend(oe(i,{onStart:function(e){t=e,(n.onStart||a).call(this,e)},onMove:n.onMove||a,onTouchEnd:n.onTouchEnd||a,onEnd:function(n){n.moved||e.call(this,t)}}),{noMove:!0}))})}function A(t,e){return'<div class="'+t+'">'+(e||"")+"</div>"}function I(t){return"."+t}function O(t){var e='<iframe src="'+t.p+t.type+".com/embed/"+t.id+'" frameborder="0" allowfullscreen></iframe>';return e}function D(t){for(var e=t.length;e;){var n=Math.floor(Math.random()*e--),o=t[e];t[e]=t[n],t[n]=o}return t}function R(t){return"[object Array]"==Object.prototype.toString.call(t)&&o.map(t,function(t){return o.extend({},t)})}function W(t,e,n){t.scrollLeft(e||0).scrollTop(n||0)}function H(t){if(t){var e={};return o.each(t,function(t,n){e[t.toLowerCase()]=n}),e}}function K(t){if(t){var e=+t;return isNaN(e)?(e=t.split("/"),+e[0]/+e[1]||i):e}}function V(t,e,n,o){e&&(t.addEventListener?t.addEventListener(e,n,!!o):t.attachEvent("on"+e,n))}function B(t,e){return t>e.max?t=e.max:t<e.min&&(t=e.min),t}function Q(t,e,n,o,i,r,a){var s,u,l;return"horizontal"===a?(u=t.thumbwidth,l=r.width()):(u=t.thumbheight,l=r.height()),s=(u+t.margin)*(n+1)>=l-o?"horizontal"===a?-i.position().left:-i.position().top:(u+t.margin)*n<=Math.abs(o)?"horizontal"===a?-i.position().left+l-(u+t.margin):-i.position().top+l-(u+t.margin):o,s=B(s,e),s||0}function X(t){return!!t.getAttribute("disabled")}function U(t){return{tabindex:-1*t+"",disabled:t}}function Y(t,e){V(t,"keyup",function(n){X(t)||13==n.keyCode&&e.call(t,n)})}function G(t,e){V(t,"focus",t.onfocusin=function(n){e.call(t,n)},!0)}function J(t,e){t.preventDefault?t.preventDefault():t.returnValue=!1,e&&t.stopPropagation&&t.stopPropagation()}function Z(t){return t?">":"<"}function te(t,e){var n=t.data(),i=Math.round(e.pos),r=function(){n&&n.sliding&&(n.sliding=!1),(e.onEnd||a)()};"undefined"!=typeof e.overPos&&e.overPos!==e.pos&&(i=e.overPos);var s=o.extend(c(i,e.direction),e.width&&{width:e.width},e.height&&{height:e.height});n&&n.sliding&&(n.sliding=!0),On?(t.css(o.extend(d(e.time),s)),e.time>10?b(t,"transform",r,e.time):r()):t.stop().animate(s,e.time,io,r)}function ee(t,e,n,i,r,s){var u="undefined"!=typeof s;if(u||(r.push(arguments),Array.prototype.push.call(arguments,r.length),!(r.length>1))){t=t||o(t),e=e||o(e);var l=t[0],c=e[0],d="crossfade"===i.method,f=function(){if(!f.done){f.done=!0;var t=(u||r.shift())&&r.shift();t&&ee.apply(this,t),(i.onEnd||a)(!!t)}},h=i.time/(s||1);n.removeClass(Ke+" "+He),t.stop().addClass(Ke),e.stop().addClass(He),d&&c&&t.fadeTo(0,0),t.fadeTo(d?h:0,1,d&&f),e.fadeTo(h,0,f),l&&d||c||f()}}function ne(t){var e=(t.touches||[])[0]||t;t._x=e.pageX,t._y=e.clientY,t._now=o.now()}function oe(t,n){function i(t){return f=o(t.target),b.checked=p=v=w=!1,c||b.flow||t.touches&&t.touches.length>1||t.which>1||lo&&lo.type!==t.type&&fo||(p=n.select&&f.is(n.select,y))?p:(m="touchstart"===t.type,v=f.is("a, a *",y),h=b.control,g=b.noMove||b.noSwipe||h?16:b.snap?0:4,ne(t),d=lo=t,co=t.type.replace(/down|start/,"move").replace(/Down/,"Move"),(n.onStart||a).call(y,t,{control:h,$target:f}),c=b.flow=!0,void((!m||b.go)&&J(t)))}function r(t){if(t.touches&&t.touches.length>1||Kn&&!t.isPrimary||co!==t.type||!c)return c&&s(),void(n.onTouchEnd||a)();ne(t);var e=Math.abs(t._x-d._x),o=Math.abs(t._y-d._y),i=e-o,r=(b.go||b.x||i>=0)&&!b.noSwipe,u=0>i;m&&!b.checked?(c=r)&&J(t):(J(t),(n.onMove||a).call(y,t,{touch:m})),!w&&Math.sqrt(Math.pow(e,2)+Math.pow(o,2))>g&&(w=!0),b.checked=b.checked||r||u}function s(t){(n.onTouchEnd||a)();var e=c;b.control=c=!1,e&&(b.flow=!1),!e||v&&!b.checked||(t&&J(t),fo=!0,clearTimeout(ho),ho=setTimeout(function(){fo=!1},1e3),(n.onEnd||a).call(y,{moved:w,$target:f,control:h,touch:m,startEvent:d,aborted:!t||"MSPointerCancel"===t.type}))}function u(){b.flow||setTimeout(function(){b.flow=!0},10)}function l(){b.flow&&setTimeout(function(){b.flow=!1},Bn)}var c,d,f,h,m,p,v,g,w,y=t[0],b={};return Kn?(V(y,"MSPointerDown",i),V(e,"MSPointerMove",r),V(e,"MSPointerCancel",s),V(e,"MSPointerUp",s)):(V(y,"touchstart",i),V(y,"touchmove",r),V(y,"touchend",s),V(e,"touchstart",u),V(e,"touchend",l),V(e,"touchcancel",l),qn.on("scroll",l),t.on("mousedown",i),Ln.on("mousemove",r).on("mouseup",s)),mo=Tn.touch?"a":"div",t.on("click",mo,function(t){b.checked&&J(t)}),b}function ie(t,e){function n(n,o){S=!0,l=d="vertical"===_?n._y:n._x,v=n._now,p=[[v,l]],f=h=F.noMove||o?0:x(t,(e.getPos||a)()),(e.onStart||a).call(M,n)}function i(e,o){w=F.min,y=F.max,b=F.snap,_=F.direction||"horizontal",t.navdir=_,k=e.altKey,S=P=!1,T=o.control,T||E.sliding||n(e)}function r(o,i){F.noSwipe||(S||n(o),d="vertical"===_?o._y:o._x,p.push([o._now,d]),h=f-(l-d),m=q(h,w,y,_),w>=h?h=C(h,w):h>=y&&(h=C(h,y)),F.noMove||(t.css(c(h,_)),P||(P=!0,i.touch||Kn||t.addClass(un)),(e.onMove||a).call(M,o,{pos:h,edge:m})))}function u(i){if(!F.noSwipe||!i.moved){S||n(i.startEvent,!0),i.touch||Kn||t.removeClass(un),g=o.now();for(var r,u,l,c,m,v,x,C,T,P=g-Bn,E=null,j=Qn,z=e.friction,N=p.length-1;N>=0;N--){if(r=p[N][0],u=Math.abs(r-P),null===E||l>u)E=r,c=p[N][1];else if(E===P||u>l)break;l=u}x=s(h,w,y);var $=c-d,q=$>=0,L=g-E,A=L>Bn,I=!A&&h!==f&&x===h;b&&(x=s(Math[I?q?"floor":"ceil":"round"](h/b)*b,w,y),w=y=x),I&&(b||x===h)&&(T=-($/L),j*=s(Math.abs(T),e.timeLow,e.timeHigh),m=Math.round(h+T*j/z),b||(x=m),(!q&&m>y||q&&w>m)&&(v=q?w:y,C=m-v,b||(x=v),C=s(x+.03*C,v-50,v+50),j=Math.abs((h-C)/(T/z)))),j*=k?10:1,(e.onEnd||a).call(M,o.extend(i,{moved:i.moved||A&&b,pos:h,newPos:x,overPos:C,time:j,dir:_}))}}var l,d,f,h,m,p,v,g,w,y,b,_,k,T,P,S,M=t[0],E=t.data(),F={};return F=o.extend(oe(e.$wrap,o.extend({},e,{onStart:i,onMove:r,onEnd:u})),F)}function re(t,e){var n,i,r,s=t[0],u={prevent:{}};return V(s,Vn,function(t){var s=t.wheelDeltaY||-1*t.deltaY||0,l=t.wheelDeltaX||-1*t.deltaX||0,c=Math.abs(l)&&!Math.abs(s),d=Z(0>l),f=i===d,h=o.now(),m=Bn>h-r;i=d,r=h,c&&u.ok&&(!u.prevent[d]||n)&&(J(t,!0),n&&f&&m||(e.shift&&(n=!0,clearTimeout(u.t),u.t=setTimeout(function(){n=!1},Xn)),(e.onEnd||a)(t,e.shift?d:l)))}),u}function ae(){o.each(o.Fotorama.instances,function(t,e){e.index=t})}function se(t){o.Fotorama.instances.push(t),ae()}function ue(t){o.Fotorama.instances.splice(t.index,1),ae()}var le="fotorama",ce="fotorama__fullscreen",de=le+"__wrap",fe=de+"--css2",he=de+"--css3",me=de+"--video",pe=de+"--fade",ve=de+"--slide",ge=de+"--no-controls",we=de+"--no-shadows",ye=de+"--pan-y",be=de+"--rtl",xe=de+"--no-captions",_e=de+"--toggle-arrows",Ce=le+"__stage",ke=Ce+"__frame",Te=ke+"--video",Pe=Ce+"__shaft",Se=le+"__grab",Me=le+"__pointer",Ee=le+"__arr",Fe=Ee+"--disabled",je=Ee+"--prev",ze=Ee+"--next",Ne=le+"__nav",$e=Ne+"-wrap",qe=Ne+"__shaft",Le=$e+"--vertical",Ae=$e+"--list",Ie=$e+"--horizontal",Oe=Ne+"--dots",De=Ne+"--thumbs",Re=Ne+"__frame",We=le+"__fade",He=We+"-front",Ke=We+"-rear",Ve=le+"__shadow",Be=Ve+"s",Qe=Be+"--left",Xe=Be+"--right",Ue=Be+"--top",Ye=Be+"--bottom",Ge=le+"__active",Je=le+"__select",Ze=le+"--hidden",tn=le+"--fullscreen",en=le+"__fullscreen-icon",nn=le+"__error",on=le+"__loading",rn=le+"__loaded",an=rn+"--full",sn=rn+"--img",un=le+"__grabbing",ln=le+"__img",cn=ln+"--full",dn=le+"__thumb",fn=dn+"__arr--left",hn=dn+"__arr--right",mn=dn+"-border",pn=le+"__html",vn=le+"-video-container",gn=le+"__video",wn=gn+"-play",yn=gn+"-close",bn=le+"__spinner",xn=le+"_horizontal_ratio",_n=le+"_vertical_ratio",Cn=o&&o.fn.jquery.split(".");if(!Cn||Cn[0]<1||1==Cn[0]&&Cn[1]<8)throw"Fotorama requires jQuery 1.8 or later and will not run without it.";var kn={},Tn=function(t,e,n){function o(t){g.cssText=t}function i(t,e){return typeof t===e}function r(t,e){return!!~(""+t).indexOf(e)}function a(t,e){for(var o in t){var i=t[o];if(!r(i,"-")&&g[i]!==n)return"pfx"==e?i:!0}return!1}function s(t,e,o){for(var r in t){var a=e[t[r]];if(a!==n)return o===!1?t[r]:i(a,"function")?a.bind(o||e):a}return!1}function u(t,e,n){var o=t.charAt(0).toUpperCase()+t.slice(1),r=(t+" "+b.join(o+" ")+o).split(" ");return i(e,"string")||i(e,"undefined")?a(r,e):(r=(t+" "+x.join(o+" ")+o).split(" "),s(r,e,n))}var l,c,d,f="2.8.3",h={},m=e.documentElement,p="modernizr",v=e.createElement(p),g=v.style,w=({}.toString," -webkit- -moz- -o- -ms- ".split(" ")),y="Webkit Moz O ms",b=y.split(" "),x=y.toLowerCase().split(" "),_={},C=[],k=C.slice,T=function(t,n,o,i){var r,a,s,u,l=e.createElement("div"),c=e.body,d=c||e.createElement("body");if(parseInt(o,10))for(;o--;)s=e.createElement("div"),s.id=i?i[o]:p+(o+1),l.appendChild(s);return r=["&#173;",'<style id="s',p,'">',t,"</style>"].join(""),l.id=p,(c?l:d).innerHTML+=r,d.appendChild(l),c||(d.style.background="",d.style.overflow="hidden",u=m.style.overflow,m.style.overflow="hidden",m.appendChild(d)),a=n(l,t),c?l.parentNode.removeChild(l):(d.parentNode.removeChild(d),m.style.overflow=u),!!a},P={}.hasOwnProperty;d=i(P,"undefined")||i(P.call,"undefined")?function(t,e){return e in t&&i(t.constructor.prototype[e],"undefined")}:function(t,e){return P.call(t,e)},Function.prototype.bind||(Function.prototype.bind=function(t){var e=this;if("function"!=typeof e)throw new TypeError;var n=k.call(arguments,1),o=function(){if(this instanceof o){var i=function(){};i.prototype=e.prototype;var r=new i,a=e.apply(r,n.concat(k.call(arguments)));return Object(a)===a?a:r}return e.apply(t,n.concat(k.call(arguments)))};return o}),_.touch=function(){var n;return"ontouchstart"in t||t.DocumentTouch&&e instanceof DocumentTouch?n=!0:T(["@media (",w.join("touch-enabled),("),p,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(t){n=9===t.offsetTop}),n},_.csstransforms3d=function(){var t=!!u("perspective");return t&&"webkitPerspective"in m.style&&T("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(e){t=9===e.offsetLeft&&3===e.offsetHeight}),t},_.csstransitions=function(){return u("transition")};for(var S in _)d(_,S)&&(c=S.toLowerCase(),h[c]=_[S](),C.push((h[c]?"":"no-")+c));return h.addTest=function(t,e){if("object"==typeof t)for(var o in t)d(t,o)&&h.addTest(o,t[o]);else{if(t=t.toLowerCase(),h[t]!==n)return h;e="function"==typeof e?e():e,"undefined"!=typeof enableClasses&&enableClasses&&(m.className+=" "+(e?"":"no-")+t),h[t]=e}return h},o(""),v=l=null,h._version=f,h._prefixes=w,h._domPrefixes=x,h._cssomPrefixes=b,h.testProp=function(t){return a([t])},h.testAllProps=u,h.testStyles=T,h.prefixed=function(t,e,n){return e?u(t,e,n):u(t,"pfx")},h}(t,e),Pn={ok:!1,is:function(){return!1},request:function(){},cancel:function(){},event:"",prefix:""},Sn="webkit moz o ms khtml".split(" ");if("undefined"!=typeof e.cancelFullScreen)Pn.ok=!0;else for(var Mn=0,En=Sn.length;En>Mn;Mn++)if(Pn.prefix=Sn[Mn],"undefined"!=typeof e[Pn.prefix+"CancelFullScreen"]){Pn.ok=!0;break}Pn.ok&&(Pn.event=Pn.prefix+"fullscreenchange",Pn.is=function(){switch(this.prefix){case"":return e.fullScreen;case"webkit":return e.webkitIsFullScreen;default:return e[this.prefix+"FullScreen"]}},Pn.request=function(t){return""===this.prefix?t.requestFullScreen():t[this.prefix+"RequestFullScreen"]()},Pn.cancel=function(){return""===this.prefix?e.cancelFullScreen():e[this.prefix+"CancelFullScreen"]()});var Fn,jn={lines:12,length:5,width:2,radius:7,corners:1,rotate:15,color:"rgba(128, 128, 128, .75)",hwaccel:!0},zn={top:"auto",left:"auto",className:""};!function(t,e){Fn=e()}(this,function(){function t(t,n){var o,i=e.createElement(t||"div");for(o in n)i[o]=n[o];return i}function n(t){for(var e=1,n=arguments.length;n>e;e++)t.appendChild(arguments[e]);return t}function o(t,e,n,o){var i=["opacity",e,~~(100*t),n,o].join("-"),r=.01+n/o*100,a=Math.max(1-(1-t)/e*(100-r),t),s=f.substring(0,f.indexOf("Animation")).toLowerCase(),u=s&&"-"+s+"-"||"";return m[i]||(p.insertRule("@"+u+"keyframes "+i+"{0%{opacity:"+a+"}"+r+"%{opacity:"+t+"}"+(r+.01)+"%{opacity:1}"+(r+e)%100+"%{opacity:"+t+"}100%{opacity:"+a+"}}",p.cssRules.length),m[i]=1),i}function r(t,e){var n,o,r=t.style;for(e=e.charAt(0).toUpperCase()+e.slice(1),o=0;o<h.length;o++)if(n=h[o]+e,r[n]!==i)return n;return r[e]!==i?e:void 0}function a(t,e){for(var n in e)t.style[r(t,n)||n]=e[n];return t}function s(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var o in n)t[o]===i&&(t[o]=n[o])}return t}function u(t){for(var e={x:t.offsetLeft,y:t.offsetTop};t=t.offsetParent;)e.x+=t.offsetLeft,e.y+=t.offsetTop;return e}function l(t,e){return"string"==typeof t?t:t[e%t.length]}function c(t){return"undefined"==typeof this?new c(t):void(this.opts=s(t||{},c.defaults,v))}function d(){function e(e,n){return t("<"+e+' xmlns="urn:schemas-microsoft.com:vml" class="spin-vml">',n)}p.addRule(".spin-vml","behavior:url(#default#VML)"),c.prototype.lines=function(t,o){function i(){return a(e("group",{coordsize:c+" "+c,coordorigin:-u+" "+-u}),{width:c,height:c})}function r(t,r,s){n(f,n(a(i(),{rotation:360/o.lines*t+"deg",left:~~r}),n(a(e("roundrect",{arcsize:o.corners}),{width:u,height:o.width,left:o.radius,top:-o.width>>1,filter:s}),e("fill",{color:l(o.color,t),opacity:o.opacity}),e("stroke",{opacity:0}))))}var s,u=o.length+o.width,c=2*u,d=2*-(o.width+o.length)+"px",f=a(i(),{position:"absolute",top:d,left:d});if(o.shadow)for(s=1;s<=o.lines;s++)r(s,-2,"progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)");for(s=1;s<=o.lines;s++)r(s);return n(t,f)},c.prototype.opacity=function(t,e,n,o){var i=t.firstChild;o=o.shadow&&o.lines||0,i&&e+o<i.childNodes.length&&(i=i.childNodes[e+o],i=i&&i.firstChild,i=i&&i.firstChild,i&&(i.opacity=n))}}var f,h=["webkit","Moz","ms","O"],m={},p=function(){var o=t("style",{type:"text/css"});return n(e.getElementsByTagName("head")[0],o),o.sheet||o.styleSheet}(),v={lines:12,length:7,width:5,radius:10,rotate:0,corners:1,color:"#000",direction:1,speed:1,trail:100,opacity:.25,fps:20,zIndex:2e9,className:"spinner",top:"auto",left:"auto",position:"relative"};c.defaults={},s(c.prototype,{spin:function(e){this.stop();var n,o,i=this,r=i.opts,s=i.el=a(t(0,{className:r.className}),{position:r.position,width:0,zIndex:r.zIndex}),l=r.radius+r.length+r.width;if(e&&(e.insertBefore(s,e.firstChild||null),o=u(e),n=u(s),a(s,{left:("auto"==r.left?o.x-n.x+(e.offsetWidth>>1):parseInt(r.left,10)+l)+"px",top:("auto"==r.top?o.y-n.y+(e.offsetHeight>>1):parseInt(r.top,10)+l)+"px"})),s.setAttribute("role","progressbar"),i.lines(s,i.opts),!f){var c,d=0,h=(r.lines-1)*(1-r.direction)/2,m=r.fps,p=m/r.speed,v=(1-r.opacity)/(p*r.trail/100),g=p/r.lines;!function w(){d++;for(var t=0;t<r.lines;t++)c=Math.max(1-(d+(r.lines-t)*g)%p*v,r.opacity),i.opacity(s,t*r.direction+h,c,r);i.timeout=i.el&&setTimeout(w,~~(1e3/m))}()}return i},stop:function(){var t=this.el;return t&&(clearTimeout(this.timeout),t.parentNode&&t.parentNode.removeChild(t),this.el=i),this},lines:function(e,i){function r(e,n){return a(t(),{position:"absolute",width:i.length+i.width+"px",height:i.width+"px",background:e,boxShadow:n,transformOrigin:"left",transform:"rotate("+~~(360/i.lines*u+i.rotate)+"deg) translate("+i.radius+"px,0)",borderRadius:(i.corners*i.width>>1)+"px"})}for(var s,u=0,c=(i.lines-1)*(1-i.direction)/2;u<i.lines;u++)s=a(t(),{position:"absolute",top:1+~(i.width/2)+"px",transform:i.hwaccel?"translate3d(0,0,0)":"",opacity:i.opacity,animation:f&&o(i.opacity,i.trail,c+u*i.direction,i.lines)+" "+1/i.speed+"s linear infinite"}),i.shadow&&n(s,a(r("#000","0 0 4px #000"),{top:"2px"})),n(e,n(s,r(l(i.color,u),"0 0 1px rgba(0,0,0,.1)")));return e},opacity:function(t,e,n){e<t.childNodes.length&&(t.childNodes[e].style.opacity=n)}});var g=a(t("group"),{behavior:"url(#default#VML)"});return!r(g,"transform")&&g.adj?d():f=r(g,"animation"),c});var Nn,$n,qn=o(t),Ln=o(e),An="quirks"===n.hash.replace("#",""),In=Tn.csstransforms3d,On=In&&!An,Dn=In||"CSS1Compat"===e.compatMode,Rn=Pn.ok,Wn=navigator.userAgent.match(/Android|webOS|iPhone|iPad|iPod|BlackBerry|Windows Phone/i),Hn=!On||Wn,Kn=navigator.msPointerEnabled,Vn="onwheel"in e.createElement("div")?"wheel":e.onmousewheel!==i?"mousewheel":"DOMMouseScroll",Bn=250,Qn=300,Xn=1400,Un=5e3,Yn=2,Gn=64,Jn=500,Zn=333,to="$stageFrame",eo="$navDotFrame",no="$navThumbFrame",oo="auto",io=r([.1,0,.25,1]),ro=1200,ao=1,so={width:null,minwidth:null,maxwidth:"100%",height:null,minheight:null,maxheight:null,ratio:null,margin:Yn,nav:"dots",navposition:"bottom",navwidth:null,thumbwidth:Gn,thumbheight:Gn,thumbmargin:Yn,thumbborderwidth:Yn,allowfullscreen:!1,transition:"slide",clicktransition:null,transitionduration:Qn,captions:!0,startindex:0,loop:!1,autoplay:!1,stopautoplayontouch:!0,keyboard:!1,arrows:!0,click:!0,swipe:!1,trackpad:!1,shuffle:!1,direction:"ltr",shadows:!0,spinner:null,showcaption:!0,navdir:"horizontal",navarrows:!0,navtype:"thumbs"},uo={left:!0,right:!0,down:!1,up:!1,space:!1,home:!1,end:!1};z.stop=function(t){z.ii[t]=!1};var lo,co,fo,ho,mo,po=function(){function t(t,e,n){var o=e/n;1>=o?(t.parent().removeClass(xn),t.parent().addClass(_n)):(t.parent().removeClass(_n),t.parent().addClass(xn))}function e(t,e,n){var r=n;t.attr(r)||t.attr(r)===i||t.attr(r,e),t.find("["+r+"]").length&&t.find("["+r+"]").each(function(){o(this).attr(r,e)})}function n(t,e,n){var o,i=!1;return o=t.showCaption===n||t.showCaption===!0?!0:!1,e?(t.caption&&o&&(i=!0),i):!1}return{setRatio:t,setThumbAttr:e,isExpectedCaption:n}}(po||{},jQuery);jQuery.Fotorama=function(n,r){function a(){o.each(Do,function(t,e){if(!e.i){e.i=Mi++;var n=P(e.video,!0);if(n){var o={};e.video=n,e.img||e.thumb?e.thumbsReady=!0:o=S(e,Do,ki),M(Do,{img:o.img,thumb:o.thumb},e.i,ki)}}})}function u(t){return hi[t]||ki.fullScreen}function f(){if(Ni!==i)if("vertical"==r.navdir){var t=r.thumbwidth+r.thumbmargin;Ni.css("left",t),Ai.css("right",t),Qi.css("right",t),zi.css("width",zi.css("width")+t),$i.css("max-width",zi.width()-t)}else Ni.css("left",""),Ai.css("right",""),Qi.css("right",""),zi.css("width",zi.css("width")+t),$i.css("max-width","")}function m(t){var e,n="keydown."+le,o=le+Ti,i="keydown."+o,a="keyup."+o,s="resize."+o+" orientationchange."+o;t?(Ln.on(i,function(t){var n,o;Ko&&27===t.keyCode?(n=!0,Mo(Ko,!0,!0)):(ki.fullScreen||r.keyboard&&!ki.index)&&(27===t.keyCode?(n=!0,ki.cancelFullScreen()):t.shiftKey&&32===t.keyCode&&u("space")||37===t.keyCode&&u("left")||38===t.keyCode&&u("up")?(ki.longPress.progress(),o="<"):32===t.keyCode&&u("space")||39===t.keyCode&&u("right")||40===t.keyCode&&u("down")?(ki.longPress.progress(),o=">"):36===t.keyCode&&u("home")?(ki.longPress.progress(),o="<<"):35===t.keyCode&&u("end")&&(ki.longPress.progress(),o=">>")),(n||o)&&J(t),e={index:o,slow:t.altKey,user:!0},o&&(ki.longPress.inProgress?ki.showWhileLongPress(e):ki.show(e))}),t&&Ln.on(a,function(){ki.longPress.inProgress&&ki.showEndLongPress({user:!0}),ki.longPress.reset()}),ki.index||Ln.off(n).on(n,"textarea, input, select",function(t){!$n.hasClass(ce)&&t.stopPropagation()}),qn.on(s,ki.resize)):(Ln.off(i),qn.off(s))}function y(t){t!==y.f&&(t?(n.addClass(le+" "+Pi).before(ji).before(Fi),se(ki)):(ji.detach(),Fi.detach(),n.html(Ei.urtext).removeClass(Pi),ue(ki)),m(t),y.f=t)}function b(){Do=ki.data=Do||R(r.data)||E(n),Ro=ki.size=Do.length,Oo.ok&&r.shuffle&&D(Do),a(),Zi=oe(Zi),Ro&&y(!0)}function C(){var t=2>Ro||Ko;nr.noMove=t||ai,nr.noSwipe=t||!r.swipe,!ci&&$i.toggleClass(Se,!r.click&&!nr.noMove&&!nr.noSwipe),Kn&&zi.toggleClass(ye,!nr.noSwipe)}function k(t){t===!0&&(t=""),r.autoplay=Math.max(+t||Un,1.5*li)}function T(t){t.navarrows&&"thumbs"===t.nav?(Vi.show(),Bi.show()):(Vi.hide(),Bi.hide())}function F(t,e){return Math.floor(zi.width()/(e.thumbwidth+e.thumbmargin))}function X(){function t(t,n){e[t?"add":"remove"].push(n)}r.nav&&"dots"!==r.nav||(r.navdir="horizontal"),ki.options=r=H(r),ao=F(zi,r),ai="crossfade"===r.transition||"dissolve"===r.transition,ti=r.loop&&(Ro>2||ai&&(!ci||"slide"!==ci)),li=+r.transitionduration||Qn,fi="rtl"===r.direction,hi=o.extend({},r.keyboard&&uo,r.keyboard),T(r);var e={add:[],remove:[]};Ro>1?(ei=r.nav,oi="top"===r.navposition,e.remove.push(Je),Ii.toggle(r.arrows)):(ei=!1,Ii.hide()),Cn(),Ho=new Fn(o.extend(jn,r.spinner,zn,{direction:fi?-1:1})),Xn(),io(),Yn(),r.autoplay&&k(r.autoplay),si=h(r.thumbwidth)||Gn,ui=h(r.thumbheight)||Gn,or.ok=rr.ok=r.trackpad&&!Hn,C(),go(r,[er]),ni="thumbs"===ei,Oi.filter(":hidden")&&ei&&Oi.show(),ni?(Sn(Ro,"navThumb"),Wo=Hi,Ci=no,$(Fi,o.Fotorama.jst.style({w:si,h:ui,b:r.thumbborderwidth,m:r.thumbmargin,s:Ti,q:!Dn})),Di.addClass(De).removeClass(Oe)):"dots"===ei?(Sn(Ro,"navDot"),Wo=Wi,Ci=eo,Di.addClass(Oe).removeClass(De)):(Oi.hide(),ei=!1,Di.removeClass(De+" "+Oe)),ei&&(oi?Oi.insertBefore(Ni):Oi.insertAfter(Ni),In.nav=!1,In(Wo,Ri,"nav")),ii=r.allowfullscreen,ii?(Qi.prependTo(Ni),ri=Rn&&"native"===ii):(Qi.detach(),ri=!1),t(ai,pe),t(!ai,ve),t(!r.captions,xe),t(fi,be),t("always"!==r.arrows,_e),di=r.shadows&&!Hn,t(!di,we),zi.addClass(e.add.join(" ")).removeClass(e.remove.join(" ")),tr=o.extend({},r),f()}function ne(t){return 0>t?(Ro+t%Ro)%Ro:t>=Ro?t%Ro:t}function oe(t){return s(t,0,Ro-1)}function ae(t){return ti?ne(t):oe(t)}function We(t){return t>0||ti?t-1:!1}function He(t){return Ro-1>t||ti?t+1:!1}function Ke(){nr.min=ti?-1/0:-g(Ro-1,er.w,r.margin,Qo),nr.max=ti?1/0:-g(0,er.w,r.margin,Qo),nr.snap=er.w+r.margin}function Ve(){var t="vertical"===r.navdir,e=t?Ri.height():Ri.width(),n=t?er.h:er.nw;ir.min=Math.min(0,n-e),ir.max=0,ir.direction=r.navdir,Ri.toggleClass(Se,!(ir.noMove=ir.min===ir.max))}function un(t,e,n){if("number"==typeof t){t=new Array(t);var i=!0}return o.each(t,function(t,o){if(i&&(o=t),"number"==typeof o){var r=Do[ne(o)];if(r){var a="$"+e+"Frame",s=r[a];n.call(this,t,o,r,s,a,s&&s.data())}}})}function dn(t,e,n,o){(!mi||"*"===mi&&o===Zo)&&(t=v(r.width)||v(t)||Jn,e=v(r.height)||v(e)||Zn,ki.resize({width:t,ratio:r.ratio||n||t/e},0,o!==Zo&&"*"))}function xn(t,e,n,i){un(t,e,function(t,a,s,u,l,c){function d(t){var e=ne(a);wo(t,{index:e,src:b,frame:Do[e]})}function f(){g.remove(),o.Fotorama.cache[b]="error",s.html&&"stage"===e||!x||x===b?(!b||s.html||p?"stage"===e&&(u.trigger("f:load").removeClass(on+" "+nn).addClass(rn),d("load"),dn()):(u.trigger("f:error").removeClass(on).addClass(nn),d("error")),c.state="error",!(Ro>1&&Do[a]===s)||s.html||s.deleted||s.video||p||(s.deleted=!0,ki.splice(a,1))):(s[y]=b=x,xn([a],e,n,!0))}function h(){o.Fotorama.measures[b]=w.measures=o.Fotorama.measures[b]||{width:v.width,height:v.height,ratio:v.width/v.height},dn(w.measures.width,w.measures.height,w.measures.ratio,a),g.off("load error").addClass(ln+(p?" "+cn:"")).prependTo(u),u.hasClass(ke)&&!u.hasClass(vn)&&u.attr("href",g.attr("src")),N(g,(o.isFunction(n)?n():n)||er),o.Fotorama.cache[b]=c.state="loaded",setTimeout(function(){u.trigger("f:load").removeClass(on+" "+nn).addClass(rn+" "+(p?an:sn)),"stage"===e?d("load"):(s.thumbratio===oo||!s.thumbratio&&r.thumbratio===oo)&&(s.thumbratio=w.measures.ratio,Ao())},0)}function m(){var t=10;z(function(){return!xi||!t--&&!Hn},function(){h()})}if(u){var p=ki.fullScreen&&s.full&&s.full!==s.img&&!c.$full&&"stage"===e;if(!c.$img||i||p){var v=new Image,g=o(v),w=g.data();c[p?"$full":"$img"]=g;var y="stage"===e?p?"full":"img":"thumb",b=s[y],x=p?null:s["stage"===e?"thumb":"img"];if("navThumb"===e&&(u=c.$wrap),!b)return void f();o.Fotorama.cache[b]?!function _(){"error"===o.Fotorama.cache[b]?f():"loaded"===o.Fotorama.cache[b]?setTimeout(m,0):setTimeout(_,100)}():(o.Fotorama.cache[b]="*",g.on("load",m).on("error",f)),c.state="",v.src=b,c.data.caption&&(v.alt=c.data.caption||""),po.isExpectedCaption(s,r.showcaption)&&o(v).attr("aria-labelledby",s.labelledby)}}})}function _n(t){Ji.append(Ho.spin().el).appendTo(t)}function Cn(){Ji.detach(),Ho&&Ho.stop()}function kn(){var t=Vo[to];t&&!t.data().state&&(_n(t),t.on("f:load f:error",function(){t.off("f:load f:error"),Cn()}))}function Tn(t){Y(t,$o),G(t,function(){setTimeout(function(){W(Di)},0),co({time:li,guessIndex:o(this).data().eq,minMax:ir})})}function Sn(t,e){un(t,e,function(t,n,i,a,s,u){if(!a){a=i[s]=zi[s].clone(),u=a.data(),u.data=i;var l=a[0],c="labelledby"+o.now();"stage"===e?(i.html&&o('<div class="'+pn+'"></div>').append(i._html?o(i.html).removeAttr("id").html(i._html):i.html).appendTo(a),i.id&&(c=i.id||c),i.labelledby=c,po.isExpectedCaption(i,r.showcaption)&&o(o.Fotorama.jst.frameCaption({caption:i.caption,labelledby:c})).appendTo(a),i.video&&a.addClass(Te).append(Ui.clone()),G(l,function(){setTimeout(function(){W(Ni)},0),jo({index:u.eq,user:!0})}),qi=qi.add(a)):"navDot"===e?(Tn(l),Wi=Wi.add(a)):"navThumb"===e&&(Tn(l),u.$wrap=a.children(":first"),Hi=Hi.add(a),i.video&&u.$wrap.append(Ui.clone()))}})}function Mn(t,e){return t&&t.length&&N(t,e)}function En(t){un(t,"stage",function(t,e,n,i,a,s){if(i){var u=ne(e);s.eq=u,sr[to][u]=i.css(o.extend({left:ai?0:g(e,er.w,r.margin,Qo)},ai&&d(0))),j(i[0])&&(i.appendTo($i),Mo(n.$video)),Mn(s.$img,er),Mn(s.$full,er),!i.hasClass(ke)||"false"===i.attr("aria-hidden")&&i.hasClass(Ge)||i.attr("aria-hidden","true")}})}function An(t,e){var n,i;"thumbs"!==ei||isNaN(t)||(n=-t,i=-t+er.nw,"vertical"===r.navdir&&(t-=r.thumbheight,i=-t+er.h),Hi.each(function(){var t=o(this),a=t.data(),s=a.eq,u=function(){return{h:ui,w:a.w}},l=u(),c="vertical"===r.navdir?a.t>i:a.l>i;l.w=a.w,a.l+a.w<n||c||Mn(a.$img,l)||e&&xn([s],"navThumb",u)}))}function In(t,e,n){if(!In[n]){var i="nav"===n&&ni,a=0,s=0;e.append(t.filter(function(){for(var t,e=o(this),n=e.data(),i=0,r=Do.length;r>i;i++)if(n.data===Do[i]){t=!0,n.eq=i;break}return t||e.remove()&&!1}).sort(function(t,e){return o(t).data().eq-o(e).data().eq}).each(function(){var t=o(this),e=t.data();po.setThumbAttr(t,e.data.caption,"aria-label")}).each(function(){if(i){var t=o(this),e=t.data(),n=Math.round(ui*e.data.thumbratio)||si,u=Math.round(si/e.data.thumbratio)||ui;e.t=s,e.h=u,e.l=a,e.w=n,t.css({width:n}),s+=u+r.thumbmargin,a+=n+r.thumbmargin}})),In[n]=!0}}function Wn(t){return t-ur>er.w/3}function Vn(t){return!(ti||Zi+t&&Zi-Ro+t||Ko)}function Xn(){var t=Vn(0),e=Vn(1);Li.toggleClass(Fe,t).attr(U(t)),Ai.toggleClass(Fe,e).attr(U(e))}function Yn(){var t=!1,e=!1;if("thumbs"!==r.navtype||r.loop||(t=0==Zi?!0:!1,e=Zi==r.data.length-1?!0:!1),"slides"===r.navtype){var n=l(Ri,r.navdir);t=n>=ir.max?!0:!1,e=n<=ir.min?!0:!1}Vi.toggleClass(Fe,t).attr(U(t)),Bi.toggleClass(Fe,e).attr(U(e))}function io(){or.ok&&(or.prevent={"<":Vn(0),">":Vn(1)})}function so(t){var e,n,o,i,a=t.data();ni?(e=a.l,n=a.t,o=a.w,i=a.h):(e=t.position().left,o=t.width());var s={c:e+o/2,min:-e+10*r.thumbmargin,max:-e+er.w-o-10*r.thumbmargin},u={c:n+i/2,min:-n+10*r.thumbmargin,max:-n+er.h-i-10*r.thumbmargin};return"vertical"===r.navdir?u:s}function lo(t){var e=Vo[Ci].data();te(Ki,{time:1.2*t,pos:"vertical"===r.navdir?e.t:e.l,width:e.w,height:e.h,direction:r.navdir})}function co(t){var e,n,o,i,a,u,c,d,f=Do[t.guessIndex][Ci],h=r.navtype;f&&("thumbs"===h?(e=ir.min!==ir.max,o=t.minMax||e&&so(Vo[Ci]),i=e&&(t.keep&&co.t?co.l:s((t.coo||er.nw/2)-so(f).c,o.min,o.max)),a=e&&(t.keep&&co.l?co.l:s((t.coo||er.nw/2)-so(f).c,o.min,o.max)),u="vertical"===r.navdir?i:a,c=e&&s(u,ir.min,ir.max)||0,n=1.1*t.time,te(Ri,{time:n,pos:c,direction:r.navdir,onEnd:function(){An(c,!0),Yn()}}),So(Di,q(c,ir.min,ir.max,r.navdir)),co.l=u):(d=l(Ri,r.navdir),n=1.11*t.time,c=Q(r,ir,t.guessIndex,d,f,Oi,r.navdir),te(Ri,{time:n,pos:c,direction:r.navdir,onEnd:function(){An(c,!0),Yn()
+}}),So(Di,q(c,ir.min,ir.max,r.navdir))))}function fo(){ho(Ci),ar[Ci].push(Vo[Ci].addClass(Ge).attr("data-active",!0))}function ho(t){for(var e=ar[t];e.length;)e.shift().removeClass(Ge).attr("data-active",!1)}function mo(t){var e=sr[t];o.each(Bo,function(t,n){delete e[ne(n)]}),o.each(e,function(t,n){delete e[t],n.detach()})}function vo(t){Qo=Xo=Zi;var e=Vo[to];e&&(ho(to),ar[to].push(e.addClass(Ge).attr("data-active",!0)),e.hasClass(ke)&&e.attr("aria-hidden","false"),t||ki.showStage.onEnd(!0),x($i,0,!0),mo(to),En(Bo),Ke(),Ve(),Y($i[0],function(){n.hasClass(tn)||(ki.requestFullScreen(),o(Xi).trigger("focus"))}))}function go(t,e){t&&o.each(e,function(e,n){n&&o.extend(n,{width:t.width||n.width,height:t.height,minwidth:t.minwidth,maxwidth:t.maxwidth,minheight:t.minheight,maxheight:t.maxheight,ratio:K(t.ratio)})})}function wo(t,e){n.trigger(le+":"+t,[ki,e])}function yo(){clearTimeout(bo.t),xi=1,r.stopautoplayontouch?ki.stopAutoplay():wi=!0}function bo(){xi&&(r.stopautoplayontouch||(xo(),_o()),bo.t=setTimeout(function(){xi=0},Qn+Bn))}function xo(){wi=!(!Ko&&!yi)}function _o(){if(clearTimeout(_o.t),z.stop(_o.w),!r.autoplay||wi)return void(ki.autoplay&&(ki.autoplay=!1,wo("stopautoplay")));ki.autoplay||(ki.autoplay=!0,wo("startautoplay"));var t=Zi,e=Vo[to].data();_o.w=z(function(){return e.state||t!==Zi},function(){_o.t=setTimeout(function(){if(!wi&&t===Zi){var e=Jo,n=Do[e][to].data();_o.w=z(function(){return n.state||e!==Jo},function(){wi||e!==Jo||ki.show(ti?Z(!fi):Jo)})}},r.autoplay)})}function Co(t){var e;return"object"!=typeof t?(e=t,t={}):e=t.index,e=">"===e?Xo+1:"<"===e?Xo-1:"<<"===e?0:">>"===e?Ro-1:e,e=isNaN(e)?i:e,e="undefined"==typeof e?Zi||0:e}function ko(t){ki.activeIndex=Zi=ae(t),Yo=We(Zi),Go=He(Zi),Jo=ne(Zi+(fi?-1:1)),Bo=[Zi,Yo,Go],Xo=ti?t:Zi}function To(t){var e=Math.abs(Uo-Xo),n=_(t.time,function(){return Math.min(li*(1+(e-1)/12),2*li)});return t.slow&&(n*=10),n}function Po(){ki.fullScreen&&(ki.fullScreen=!1,Rn&&Pn.cancel(Si),$n.removeClass(ce),Nn.removeClass(ce),n.removeClass(tn).insertAfter(ji),er=o.extend({},bi),Mo(Ko,!0,!0),No("x",!1),ki.resize(),xn(Bo,"stage"),W(qn,vi,pi),wo("fullscreenexit"))}function So(t,e){di&&(t.removeClass(Qe+" "+Xe),t.removeClass(Ue+" "+Ye),e&&!Ko&&t.addClass(e.replace(/^|\s/g," "+Be+"--")))}function Mo(t,e,n){e&&(zi.removeClass(me),Ko=!1,C()),t&&t!==Ko&&(t.remove(),wo("unloadvideo")),n&&(xo(),_o())}function Eo(t){zi.toggleClass(ge,t)}function Fo(t){if(!nr.flow){var e=t?t.pageX:Fo.x,n=e&&!Vn(Wn(e))&&r.click;Fo.p!==n&&Ni.toggleClass(Me,n)&&(Fo.p=n,Fo.x=e)}}function jo(t){clearTimeout(jo.t),r.clicktransition&&r.clicktransition!==r.transition?setTimeout(function(){var e=r.transition;ki.setOptions({transition:r.clicktransition}),ci=e,jo.t=setTimeout(function(){ki.show(t)},10)},0):ki.show(t)}function zo(t,e){var n=t.target,i=o(n);i.hasClass(wn)?ki.playVideo():n===Xi?ki.toggleFullScreen():Ko?n===Gi&&Mo(Ko,!0,!0):e?Eo():r.click&&jo({index:t.shiftKey||Z(Wn(t._x)),slow:t.altKey,user:!0})}function No(t,e){nr[t]=ir[t]=e}function $o(t){var e=o(this).data().eq;jo("thumbs"===r.navtype?{index:e,slow:t.altKey,user:!0,coo:t._x-Di.offset().left}:{index:e,slow:t.altKey,user:!0})}function qo(t){jo({index:Ii.index(this)?">":"<",slow:t.altKey,user:!0})}function Lo(t){G(t,function(){setTimeout(function(){W(Ni)},0),Eo(!1)})}function Ao(){if(b(),X(),!Ao.i){Ao.i=!0;var t=r.startindex;Zi=Qo=Xo=Uo=Zo=ae(t)||0}if(Ro){if(Io())return;Ko&&Mo(Ko,!0),Bo=[],mo(to),Ao.ok=!0,ki.show({index:Zi,time:0}),ki.resize()}else ki.destroy()}function Io(){return!Io.f===fi?(Io.f=fi,Zi=Ro-1-Zi,ki.reverse(),!0):void 0}function Oo(){Oo.ok&&(Oo.ok=!1,wo("ready"))}Nn=o("html"),$n=o("body");var Do,Ro,Wo,Ho,Ko,Vo,Bo,Qo,Xo,Uo,Yo,Go,Jo,Zo,ti,ei,ni,oi,ii,ri,ai,si,ui,li,ci,di,fi,hi,mi,pi,vi,gi,wi,yi,bi,xi,_i,Ci,ki=this,Ti=o.now(),Pi=le+Ti,Si=n[0],Mi=1,Ei=n.data(),Fi=o("<style></style>"),ji=o(A(Ze)),zi=n.find(I(de)),Ni=zi.find(I(Ce)),$i=(Ni[0],n.find(I(Pe))),qi=o(),Li=n.find(I(je)),Ai=n.find(I(ze)),Ii=n.find(I(Ee)),Oi=n.find(I($e)),Di=Oi.find(I(Ne)),Ri=Di.find(I(qe)),Wi=o(),Hi=o(),Ki=($i.data(),Ri.data(),n.find(I(mn))),Vi=n.find(I(fn)),Bi=n.find(I(hn)),Qi=n.find(I(en)),Xi=Qi[0],Ui=o(A(wn)),Yi=n.find(I(yn)),Gi=Yi[0],Ji=o(A(bn)),Zi=!1,tr={},er={},nr={},or={},ir={},rr={},ar={},sr={},ur=0,lr=[];zi[to]=o('<div class="'+ke+'"></div>'),zi[no]=o(o.Fotorama.jst.thumb()),zi[eo]=o(o.Fotorama.jst.dots()),ar[to]=[],ar[no]=[],ar[eo]=[],sr[to]={},zi.addClass(On?he:fe),Ei.fotorama=this,ki.startAutoplay=function(t){return ki.autoplay?this:(wi=yi=!1,k(t||r.autoplay),_o(),this)},ki.stopAutoplay=function(){return ki.autoplay&&(wi=yi=!0,_o()),this},ki.showSlide=function(t){var e,n=l(Ri,r.navdir),o=550,i="horizontal"===r.navdir?r.thumbwidth:r.thumbheight,a=function(){Yn()};"next"===t&&(e=n-(i+r.margin)*ao),"prev"===t&&(e=n+(i+r.margin)*ao),e=B(e,ir),An(e,!0),te(Ri,{time:o,pos:e,direction:r.navdir,onEnd:a})},ki.showWhileLongPress=function(t){if(!ki.longPress.singlePressInProgress){var e=Co(t);ko(e);var n=To(t)/50,o=Vo;ki.activeFrame=Vo=Do[Zi];var i=o===Vo&&!t.user;return ki.showNav(i,t,n),this}},ki.showEndLongPress=function(t){if(!ki.longPress.singlePressInProgress){var e=Co(t);ko(e);var n=To(t)/50,o=Vo;ki.activeFrame=Vo=Do[Zi];var i=o===Vo&&!t.user;return ki.showStage(i,t,n),gi="undefined"!=typeof Uo&&Uo!==Zi,Uo=Zi,this}},ki.showStage=function(t,e,n){Mo(Ko,Vo.i!==Do[ne(Qo)].i),Sn(Bo,"stage"),En(Hn?[Xo]:[Xo,We(Xo),He(Xo)]),No("go",!0),t||wo("show",{user:e.user,time:n}),wi=!0;var o=e.overPos,i=ki.showStage.onEnd=function(n){if(!i.ok){if(i.ok=!0,n||vo(!0),t||wo("showend",{user:e.user}),!n&&ci&&ci!==r.transition)return ki.setOptions({transition:ci}),void(ci=!1);kn(),xn(Bo,"stage"),No("go",!1),io(),Fo(),xo(),_o()}};if(ai){var a=Vo[to],s=Do[Uo]&&Zi!==Uo?Do[Uo][to]:null;ee(a,s,qi,{time:n,method:r.transition,onEnd:i},lr)}else te($i,{pos:-g(Xo,er.w,r.margin,Qo),overPos:o,time:n,onEnd:i});Xn()},ki.showNav=function(t,e,n){if(Yn(),ei){fo();var o=oe(Zi+s(Xo-Uo,-1,1));co({time:n,coo:o!==Zi&&e.coo,guessIndex:"undefined"!=typeof e.coo?o:Zi,keep:t}),ni&&lo(n)}},ki.show=function(t){ki.longPress.singlePressInProgress=!0;var e=Co(t);ko(e);var n=To(t),o=Vo;ki.activeFrame=Vo=Do[Zi];var i=o===Vo&&!t.user;return ki.showStage(i,t,n),ki.showNav(i,t,n),gi="undefined"!=typeof Uo&&Uo!==Zi,Uo=Zi,ki.longPress.singlePressInProgress=!1,this},ki.requestFullScreen=function(){return ii&&!ki.fullScreen&&(pi=qn.scrollTop(),vi=qn.scrollLeft(),W(qn),No("x",!0),bi=o.extend({},er),n.addClass(tn).appendTo($n.addClass(ce)),Nn.addClass(ce),Mo(Ko,!0,!0),ki.fullScreen=!0,ri&&Pn.request(Si),ki.resize(),xn(Bo,"stage"),kn(),wo("fullscreenenter")),this},ki.cancelFullScreen=function(){return ri&&Pn.is()?Pn.cancel(e):Po(),this},ki.toggleFullScreen=function(){return ki[(ki.fullScreen?"cancel":"request")+"FullScreen"]()},V(e,Pn.event,function(){!Do||Pn.is()||Ko||Po()}),ki.resize=function(e){if(!Do)return this;var n=arguments[1]||0,i=arguments[2];ao=F(zi,r),go(ki.fullScreen?{width:o(t).width(),maxwidth:null,minwidth:null,height:o(t).height(),maxheight:null,minheight:null}:H(e),[er,i||ki.fullScreen||r]);var a=er.width,u=er.height,l=er.ratio,c=qn.height()-(ei?Di.height():0);if(v(a)&&(zi.css({width:""}),zi.css({height:""}),Ni.css({width:""}),Ni.css({height:""}),Ni.css({"line-height":""}),$i.css({width:""}),$i.css({height:""}),Di.css({width:""}),Di.css({height:""}),zi.css({minWidth:er.minwidth||0,maxWidth:er.maxwidth||ro}),a=er.W=er.w=zi.width(),er.nw=ei&&p(r.navwidth,a)||a,$i.css({width:er.w,marginLeft:(er.W-er.w)/2}),u=p(u,c),u=u||l&&a/l)){if(a=Math.round(a),u=er.h=Math.round(s(u,p(er.minheight,c),p(er.maxheight,c))),Ni.css({width:a,height:u,"line-height":u+"px"}),"vertical"!==r.navdir||ki.fullscreen||Di.width(r.thumbwidth+2*r.thumbmargin),"horizontal"!==r.navdir||ki.fullscreen||Di.height(r.thumbheight+2*r.thumbmargin),"vertical"===r.navdir&&ki.fullScreen&&Ni.css("height",o(t).height()),"horizontal"===r.navdir&&ki.fullScreen&&Ni.css("height",o(t).height()-(r.thumbheight+2*r.thumbmargin)),ei){switch(r.navdir){case"vertical":Oi.removeClass(Ie),Oi.removeClass(Ae),Oi.addClass(Le),Di.stop().animate({height:er.h,width:r.thumbwidth},n);break;case"list":Oi.removeClass(Le),Oi.removeClass(Ie),Oi.addClass(Ae);break;default:Oi.removeClass(Le),Oi.removeClass(Ae),Oi.addClass(Ie),Di.stop().animate({width:er.nw},n)}vo(),co({guessIndex:Zi,time:n,keep:!0}),ni&&In.nav&&lo(n)}mi=i||!0,Oo.ok=!0,Oo()}return ur=Ni.offset().left,f(),this},ki.setOptions=function(t){return o.extend(r,t),Ao(),this},ki.shuffle=function(){return Do&&D(Do)&&Ao(),this},ki.longPress={threshold:1,count:0,thumbSlideTime:20,progress:function(){this.inProgress||(this.count++,this.inProgress=this.count>this.threshold)},end:function(){this.inProgress&&(this.isEnded=!0)},reset:function(){this.count=0,this.inProgress=!1,this.isEnded=!1}},ki.destroy=function(){return ki.cancelFullScreen(),ki.stopAutoplay(),Do=ki.data=null,y(),Bo=[],mo(to),Ao.ok=!1,this},ki.playVideo=function(){var t=Vo,e=t.video,n=Zi;return"object"==typeof e&&t.videoReady&&(ri&&ki.fullScreen&&ki.cancelFullScreen(),z(function(){return!Pn.is()||n!==Zi},function(){n===Zi&&(t.$video=t.$video||o(A(gn)).append(O(e)),t.$video.appendTo(t[to]),zi.addClass(me),Ko=t.$video,C(),Ii.blur(),Qi.blur(),wo("loadvideo"))})),this},ki.stopVideo=function(){return Mo(Ko,!0,!0),this},Ni.on("mousemove",Fo),nr=ie($i,{onStart:yo,onMove:function(t,e){So(Ni,e.edge)},onTouchEnd:bo,onEnd:function(t){So(Ni);var e=(Kn&&!_i||t.touch)&&r.arrows&&"always"!==r.arrows;if(t.moved||e&&t.pos!==t.newPos&&!t.control){var n=w(t.newPos,er.w,r.margin,Qo);ki.show({index:n,time:ai?li:t.time,overPos:t.overPos,user:!0})}else t.aborted||t.control||zo(t.startEvent,e)},timeLow:1,timeHigh:1,friction:2,select:"."+Je+", ."+Je+" *",$wrap:Ni,direction:"horizontal"}),ir=ie(Ri,{onStart:yo,onMove:function(t,e){So(Di,e.edge)},onTouchEnd:bo,onEnd:function(t){function e(){co.l=t.newPos,xo(),_o(),An(t.newPos,!0),Yn()}if(t.moved)t.pos!==t.newPos?(wi=!0,te(Ri,{time:t.time,pos:t.newPos,overPos:t.overPos,direction:r.navdir,onEnd:e}),An(t.newPos),di&&So(Di,q(t.newPos,ir.min,ir.max,t.dir))):e();else{var n=t.$target.closest("."+Re,Ri)[0];n&&$o.call(n,t.startEvent)}},timeLow:.5,timeHigh:2,friction:5,$wrap:Di,direction:r.navdir}),or=re(Ni,{shift:!0,onEnd:function(t,e){yo(),bo(),ki.show({index:e,slow:t.altKey})}}),rr=re(Di,{onEnd:function(t,e){yo(),bo();var n=x(Ri)+.25*e;Ri.css(c(s(n,ir.min,ir.max),r.navdir)),di&&So(Di,q(n,ir.min,ir.max,r.navdir)),rr.prevent={"<":n>=ir.max,">":n<=ir.min},clearTimeout(rr.t),rr.t=setTimeout(function(){co.l=n,An(n,!0)},Bn),An(n)}}),zi.hover(function(){setTimeout(function(){xi||Eo(!(_i=!0))},0)},function(){_i&&Eo(!(_i=!1))}),L(Ii,function(t){J(t),qo.call(this,t)},{onStart:function(){yo(),nr.control=!0},onTouchEnd:bo}),L(Vi,function(t){J(t),"thumbs"===r.navtype?ki.show("<"):ki.showSlide("prev")}),L(Bi,function(t){J(t),"thumbs"===r.navtype?ki.show(">"):ki.showSlide("next")}),Ii.each(function(){Y(this,function(t){qo.call(this,t)}),Lo(this)}),Y(Xi,function(){ki.toggleFullScreen(),o(Xi).trigger("focus")}),Lo(Xi),o.each("load push pop shift unshift reverse sort splice".split(" "),function(t,e){ki[e]=function(){return Do=Do||[],"load"!==e?Array.prototype[e].apply(Do,arguments):arguments[0]&&"object"==typeof arguments[0]&&arguments[0].length&&(Do=R(arguments[0])),Ao(),ki}}),Ao()},o.fn.fotorama=function(e){return this.each(function(){var n=this,i=o(this),r=i.data(),a=r.fotorama;a?a.setOptions(e,!0):z(function(){return!F(n)},function(){r.urtext=i.html(),new o.Fotorama(i,o.extend({},so,t.fotoramaDefaults,e,r))})})},o.Fotorama.instances=[],o.Fotorama.cache={},o.Fotorama.measures={},o=o||{},o.Fotorama=o.Fotorama||{},o.Fotorama.jst=o.Fotorama.jst||{},o.Fotorama.jst.dots=function(){{var t="";kn.escape}return t+='<div class="fotorama__nav__frame fotorama__nav__frame--dot" tabindex="0" role="button" data-gallery-role="nav-frame" data-nav-type="thumb" aria-label>\r\n    <div class="fotorama__dot"></div>\r\n</div>'},o.Fotorama.jst.frameCaption=function(t){{var e,n="";kn.escape}return n+='<div class="fotorama__caption" aria-hidden="true">\r\n    <div class="fotorama__caption__wrap" id="'+(null==(e=t.labelledby)?"":e)+'">'+(null==(e=t.caption)?"":e)+"</div>\r\n</div>\r\n"},o.Fotorama.jst.style=function(t){{var e,n="";kn.escape}return n+=".fotorama"+(null==(e=t.s)?"":e)+" .fotorama__nav--thumbs .fotorama__nav__frame{\r\npadding:"+(null==(e=t.m)?"":e)+"px;\r\nheight:"+(null==(e=t.h)?"":e)+"px}\r\n.fotorama"+(null==(e=t.s)?"":e)+" .fotorama__thumb-border{\r\nheight:"+(null==(e=t.h)?"":e)+"px;\r\nborder-width:"+(null==(e=t.b)?"":e)+"px;\r\nmargin-top:"+(null==(e=t.m)?"":e)+"px}"},o.Fotorama.jst.thumb=function(){{var t="";kn.escape}return t+='<div class="fotorama__nav__frame fotorama__nav__frame--thumb" tabindex="0" role="button" data-gallery-role="nav-frame" data-nav-type="thumb" aria-label>\r\n    <div class="fotorama__thumb">\r\n    </div>\r\n</div>'}}(window,document,location,"undefined"!=typeof jQuery&&jQuery);
\ No newline at end of file
-- 
GitLab


From a8a2724a643e1fe93081347833e39a4bd8730d49 Mon Sep 17 00:00:00 2001
From: Olga Matviienko <omatviienko@ebay.com>
Date: Mon, 26 Oct 2015 14:10:44 +0200
Subject: [PATCH 318/370] MAGETWO-42900: [GitHub] UI improvement. User account
 on hover cursor state

---
 .../Magento/luma/Magento_Theme/web/css/source/_module.less     | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/app/design/frontend/Magento/luma/Magento_Theme/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_Theme/web/css/source/_module.less
index 6327a896780..a1f0aac552b 100644
--- a/app/design/frontend/Magento/luma/Magento_Theme/web/css/source/_module.less
+++ b/app/design/frontend/Magento/luma/Magento_Theme/web/css/source/_module.less
@@ -465,6 +465,9 @@
                 padding: 8px;
             }
         }
+        .customer-name {
+            cursor: pointer;
+        }
         .customer-menu {
             display: none;
         }
-- 
GitLab


From e4f9381f6b47d2513eb281575079e2b12c4c4ba3 Mon Sep 17 00:00:00 2001
From: Olga Matviienko <omatviienko@ebay.com>
Date: Mon, 26 Oct 2015 14:25:20 +0200
Subject: [PATCH 319/370] MAGETWO-44317: [MF] "Grid/List" view selector is
 invalidly colored

---
 .../web/css/source/module/_toolbar.less       | 155 ++++++------
 .../web/css/source/module/_toolbar.less       | 223 ++++++++++--------
 2 files changed, 204 insertions(+), 174 deletions(-)

diff --git a/app/design/frontend/Magento/blank/Magento_Catalog/web/css/source/module/_toolbar.less b/app/design/frontend/Magento/blank/Magento_Catalog/web/css/source/module/_toolbar.less
index 95ae194085a..c6e638f56f4 100644
--- a/app/design/frontend/Magento/blank/Magento_Catalog/web/css/source/module/_toolbar.less
+++ b/app/design/frontend/Magento/blank/Magento_Catalog/web/css/source/module/_toolbar.less
@@ -4,105 +4,109 @@
 //  */
 
 //
-//    Common
-//--------------------------------------
+//  Common
+//  _____________________________________________
 
 @toolbar-mode-icon-font-size: 24px;
 @toolbar-element-background: @panel__background-color;
 
 & when (@media-common = true) {
 
-.page-products .columns {
-    position: relative;
-    z-index: 1;
-}
-
-.toolbar {
-    &:extend(.abs-add-clearfix all);
-    &-amount {
-        display: block;
-        line-height: @toolbar-mode-icon-font-size+2;
-        padding: 8px 0 0;
-        margin: 0;
-        vertical-align: middle;
-        .products.wrapper ~ .toolbar & {
-            display: none;
+    .page-products {
+        .columns {
+            position: relative;
+            z-index: 1;
         }
     }
-    &-products {
-        margin-bottom: @indent__xl;
-        text-align: center;
-        padding: 0 @indent__s;
+
+    .toolbar {
         &:extend(.abs-add-clearfix all);
-        .pages {
-            display: none;
-            .products.wrapper ~ & {
-                display: block;
+        &-amount {
+            display: block;
+            line-height: @toolbar-mode-icon-font-size+2;
+            margin: 0;
+            padding: 8px 0 0;
+            vertical-align: middle;
+            .products.wrapper ~ .toolbar & {
+                display: none;
             }
         }
-        .limiter {
-            display: none;
-            .control {
-                display: inline-block;
+        &-products {
+            margin-bottom: @indent__xl;
+            padding: 0 @indent__s;
+            text-align: center;
+            &:extend(.abs-add-clearfix all);
+            .pages {
+                display: none;
+                .products.wrapper ~ & {
+                    display: block;
+                }
+            }
+            .limiter {
+                display: none;
+                .control {
+                    display: inline-block;
+                }
             }
         }
     }
-}
 
-.sorter {
-    padding: 4px 0 0;
-    .products.wrapper ~ .toolbar & {
-        display: none;
-    }
-    &-options {
-        margin: 0 0 0 7px;
-        width: auto;
-    }
-    &-action {
-        vertical-align: top;
-        .lib-icon-font(
+    .sorter {
+        padding: 4px 0 0;
+        .products.wrapper ~ .toolbar & {
+            display: none;
+        }
+        &-options {
+            margin: 0 0 0 7px;
+            width: auto;
+        }
+        &-action {
+            vertical-align: top;
+            .lib-icon-font(
             @icon-arrow-up,
             @_icon-font-size: 28px,
             @_icon-font-line-height: 32px,
             @_icon-font-color: @header-icons-color,
             @_icon-font-color-hover: @header-icons-color-hover,
             @_icon-font-text-hide: true
-        );
-        &.sort-desc:before {
-            content: @icon-arrow-down;
+            );
+            &.sort-desc:before {
+                content: @icon-arrow-down;
+            }
         }
     }
-}
 
-.modes {
-    display: none;
-}
-
-.limiter {
-    &-options {
-        width: auto;
-        margin: 0 5px 0 7px;
-    }
-    &-label {
-        font-weight: 400;
-    }
-    .page-products .toolbar & {
+    .modes {
         display: none;
     }
-}
 
+    .limiter {
+        &-options {
+            width: auto;
+            margin: 0 5px 0 7px;
+        }
+        &-label {
+            font-weight: 400;
+        }
+        .page-products .toolbar & {
+            display: none;
+        }
+    }
 }
 
 //
-//  Mobile
-//  ---------------------------------------------
+//  Desctop
+//  _____________________________________________
 
 .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__s) {
-    .page-products .columns {
-        position: relative;
-        z-index: 1;
-        padding-top: 0;
+    .page-products {
+        .columns {
+            padding-top: 0;
+            position: relative;
+            z-index: 1;
+        }
     }
+
     .toolbar {
         .products.wrapper ~ & .pages {
             float: left;
@@ -111,19 +115,24 @@
             float: left;
         }
     }
+
     .sorter {
         float: right;
     }
+
     .modes {
-        float: left;
         display: inline-block;
+        float: left;
         margin-right: @indent__base;
+
         .products.wrapper ~ .toolbar & {
             display: none;
         }
+
         &-label {
             &:extend(.abs-visually-hidden-desktop-s all);
         }
+
         &-mode {
             .lib-css(color, @text__color__muted);
             border: 1px solid @border-color__base;
@@ -134,8 +143,8 @@
             padding: 7px 10px;
             text-align: center;
             &:not(.active):hover {
-                background: darken(@toolbar-element-background, 7%);
                 .lib-css(color, @text__color__muted);
+                background: darken(@toolbar-element-background, 7%);
             }
             &:last-child {
                 border-right: 1px solid @border-color__base;
@@ -144,15 +153,19 @@
                 .lib-css(color, @primary__color__light);
             }
             .lib-icon-font(
-                @icon-grid,
-                @_icon-font-size: @toolbar-mode-icon-font-size,
-                @_icon-font-text-hide: true
+            @icon-grid,
+            @_icon-font-size: @toolbar-mode-icon-font-size,
+            @_icon-font-text-hide: true,
+            @_icon-font-color: @text__color__muted,
+            @_icon-font-color-hover: @text__color__muted
             );
         }
     }
+
     .mode-list {
         .lib-icon-font-symbol(@icon-list);
     }
+
     .limiter {
         float: right;
         .products.wrapper ~ .toolbar & {
diff --git a/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/module/_toolbar.less b/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/module/_toolbar.less
index 3eefdcaa2b7..bb25b47c668 100644
--- a/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/module/_toolbar.less
+++ b/app/design/frontend/Magento/luma/Magento_Catalog/web/css/source/module/_toolbar.less
@@ -11,114 +11,117 @@
 @pager__font-weight: @font-weight__bold;
 
 //
-//    Common
-//--------------------------------------
+//  Common
+//  _____________________________________________
 
 & when (@media-common = true) {
-
-.page-products .columns {
-    position: relative;
-    z-index: 1;
-    padding-top: 60px;
-}
-
-.toolbar {
-    select {
-        .lib-css(background-color, @toolbar-element-background);
-        border-radius: 3px;
-        .lib-css(box-shadow, @button__shadow);
+    .page-products {
+        .columns {
+            padding-top: 60px;
+            position: relative;
+            z-index: 1;
+        }
     }
 
-    text-align: center;
-    &:extend(.abs-add-clearfix all);
-    &-amount {
-        position: absolute;
-        left: 0;
-        top: 0;
-        line-height: @toolbar-mode-icon-font-size+2;
-        padding: 7px 0;
-        margin: 0;
-        vertical-align: middle;
-        text-align: left;
-        .products.wrapper ~ .toolbar & {
-            display: none;
+    .toolbar {
+        &:extend(.abs-add-clearfix all);
+        margin-bottom: @indent__l;
+        text-align: center;
+
+        select {
+            .lib-css(background-color, @toolbar-element-background);
+            .lib-css(box-shadow, @button__shadow);
+            border-radius: 3px;
         }
-    }
-    .page-with-filter & {
+
         &-amount {
-            position: static;
+            left: 0;
+            line-height: @toolbar-mode-icon-font-size+2;
+            margin: 0;
+            padding: 7px 0;
+            position: absolute;
+            text-align: left;
+            top: 0;
+            vertical-align: middle;
+            .products.wrapper ~ .toolbar & {
+                display: none;
+            }
         }
-    }
-    margin-bottom: @indent__l;
-    &-products {
-        .lib-css(background-color, @toolbar-background);
-        .pages {
-            display: none;
-            .products.wrapper ~ & {
-                display: block;
+
+        .page-with-filter & {
+            &-amount {
+                position: static;
             }
         }
-    }
-    .pages {
-        margin-bottom: @indent__m;
-    }
-}
 
-.sorter {
-    float: right;
-    .page-products & {
-        position: absolute;
-        z-index: 1;
-        top: 0;
-        right: @indent__s;
-    }
-    .products.wrapper ~ .toolbar & {
-        display: none;
-    }
-    &-options {
-        margin: 0 @indent__xs 0 7px;
-        width: auto;
+        &-products {
+            .lib-css(background-color, @toolbar-background);
+            .pages {
+                display: none;
+                .products.wrapper ~ & {
+                    display: block;
+                }
+            }
+        }
+        .pages {
+            margin-bottom: @indent__m;
+        }
     }
-    &-action {
-        .lib-icon-font(
+
+    .sorter {
+        float: right;
+        .page-products & {
+            position: absolute;
+            right: @indent__s;
+            top: 0;
+            z-index: 1;
+        }
+        .products.wrapper ~ .toolbar & {
+            display: none;
+        }
+        &-options {
+            margin: 0 @indent__xs 0 7px;
+            width: auto;
+        }
+        &-action {
+            .lib-icon-font(
             @icon-arrow-up,
             @_icon-font-size: 16px,
             @_icon-font-color: @header-icons-color,
             @_icon-font-color-hover: @header-icons-color-hover
-        );
-        .lib-icon-text-hide();
-        &.sort-desc:before {
-            content: @icon-arrow-down;
+            );
+            .lib-icon-text-hide();
+            &.sort-desc:before {
+                content: @icon-arrow-down;
+            }
         }
     }
-}
 
-.modes {
-    display: none;
-}
-
-.limiter {
-    display: none;
-    &-options {
-        width: auto;
-        margin: 0 5px 0 7px;
-    }
-    &-label {
-        font-weight: 400;
-    }
-    .page-products .toolbar & {
+    .modes {
         display: none;
     }
-    .control {
-        display: inline-block;
-    }
-}
 
+    .limiter {
+        display: none;
+        &-options {
+            margin: 0 5px 0 7px;
+            width: auto;
+        }
+        &-label {
+            font-weight: 400;
+        }
+        .page-products .toolbar & {
+            display: none;
+        }
+        .control {
+            display: inline-block;
+        }
+    }
 }
 
 //
-//    Mobile
-//--------------------------------------
+//  Desctop
+//  _____________________________________________
 
 .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) {
     .toolbar-products {
@@ -127,26 +130,31 @@
 }
 
 .media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__s) {
-    .page-products .columns {
-        position: relative;
-        z-index: 1;
-        padding-top: 0;
+    .page-products {
+        .columns {
+            padding-top: 0;
+            position: relative;
+            z-index: 1;
+        }
     }
+
     .toolbar {
         &-amount {
-            position: static;
             display: block;
             float: left;
+            position: static;
         }
         .products.wrapper ~ & .pages {
             float: left;
             margin-bottom: 0;
         }
     }
+
     .modes {
-        float: left;
         display: inline-block;
+        float: left;
         margin-right: @indent__base;
+
         .products.wrapper ~ .toolbar & {
             display: none;
         }
@@ -156,22 +164,23 @@
         }
 
         &-mode {
-            float: left;
+            .lib-css(background-color, @toolbar-element-background);
+            .lib-css(box-shadow, @button__shadow);
+            .lib-css(color, @text__color__muted);
             border: 1px solid @border-color__base;
+            border-right: 0;
+            float: left;
             font-weight: @font-weight__regular;
-            .lib-css(color, @text__color__muted);
-            text-align: center;
-            padding: 7px 10px;
             line-height: 1;
-            border-right: 0;
-            .lib-css(background-color, @toolbar-element-background);
-            .lib-css(box-shadow, @button__shadow);
+            padding: 7px 10px;
+            text-align: center;
+
             .modes-label + & {
                 border-radius: 3px 0 0 3px;
             }
             &:hover {
-                background: darken(@toolbar-element-background, 2%);
                 .lib-css(color, @text__color__muted);
+                background: darken(@toolbar-element-background, 2%);
             }
             &:last-child {
                 border-radius: 0 3px 3px 0;
@@ -182,21 +191,29 @@
                 background: darken(@toolbar-element-background, 7%);
                 color: @color-gray62;
             }
+
             .lib-icon-font(
-                @icon-grid,
-                @_icon-font-size: @toolbar-mode-icon-font-size,
-                @_icon-font-text-hide: true
+            @icon-grid,
+            @_icon-font-size: @toolbar-mode-icon-font-size,
+            @_icon-font-text-hide: true,
+            @_icon-font-color: @text__color__muted,
+            @_icon-font-color-hover: @text__color__muted
             );
         }
     }
+
     .sorter {
         .page-products & {
             position: static;
         }
     }
-    .mode-list:before {
-        content: @icon-list;
+
+    .mode-list {
+        &:before {
+            content: @icon-list;
+        }
     }
+
     .limiter {
         float: right;
         .products.wrapper ~ .toolbar & {
-- 
GitLab


From fdec247850bccdb8af133098d826001f096cd886 Mon Sep 17 00:00:00 2001
From: "Gurzhyi, Andrii" <agurzhyi@ebay.com>
Date: Mon, 26 Oct 2015 14:28:33 +0200
Subject: [PATCH 320/370] MAGETWO-44443: Grunt less task fails

- Fixed test
---
 .../PublicationDecoratorTest.php              | 39 ++++++++++++-------
 1 file changed, 25 insertions(+), 14 deletions(-)

diff --git a/app/code/Magento/Developer/Test/Unit/Model/Css/PreProcessor/FileGenerator/PublicationDecoratorTest.php b/app/code/Magento/Developer/Test/Unit/Model/Css/PreProcessor/FileGenerator/PublicationDecoratorTest.php
index 56cca40bf66..9d0538f265c 100644
--- a/app/code/Magento/Developer/Test/Unit/Model/Css/PreProcessor/FileGenerator/PublicationDecoratorTest.php
+++ b/app/code/Magento/Developer/Test/Unit/Model/Css/PreProcessor/FileGenerator/PublicationDecoratorTest.php
@@ -3,11 +3,15 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-
 namespace Magento\Developer\Test\Unit\Model\Css\PreProcessor\FileGenerator;
 
-use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+use Magento\Framework\Filesystem;
+use Magento\Framework\Css\PreProcessor\File\Temporary;
+use Magento\Developer\Model\Css\PreProcessor\FileGenerator\PublicationDecorator;
 
+/**
+ * Class PublicationDecoratorTest
+ */
 class PublicationDecoratorTest extends \PHPUnit_Framework_TestCase
 {
     /**
@@ -15,6 +19,13 @@ class PublicationDecoratorTest extends \PHPUnit_Framework_TestCase
      */
     public function testGenerateRelatedFile()
     {
+        $filesystemMock = $this->getMockBuilder(Filesystem::class)
+            ->disableOriginalConstructor()
+            ->getMock();
+        $fileTemporaryMock = $this->getMockBuilder(Temporary::class)
+            ->disableOriginalConstructor()
+            ->getMock();
+
         $publisherMock = $this->getMockBuilder('Magento\Framework\App\View\Asset\Publisher')
             ->disableOriginalConstructor()
             ->getMock();
@@ -33,24 +44,24 @@ class PublicationDecoratorTest extends \PHPUnit_Framework_TestCase
         $relatedFileId = 'file_id';
 
         $relatedFiles = [[$relatedFileId, $localAssetMock]];
-        $importGeneratorMock->expects($this->any())
+
+        $importGeneratorMock->expects(self::any())
             ->method('getRelatedFiles')
-            ->will($this->onConsecutiveCalls($relatedFiles, []));
-        $assetRepoMock->expects($this->any())
+            ->will(self::onConsecutiveCalls($relatedFiles, []));
+
+        $assetRepoMock->expects(self::any())
             ->method('createRelated')
             ->willReturn($relatedAssetMock);
-        $publisherMock->expects($this->once())
+
+        $publisherMock->expects(self::once())
             ->method('publish')
             ->with($relatedAssetMock);
 
-        $args = [
-            'assetRepo' => $assetRepoMock,
-            'publisher' => $publisherMock
-        ];
-
-        $model = (new ObjectManager($this))->getObject(
-            'Magento\Developer\Model\Css\PreProcessor\FileGenerator\PublicationDecorator',
-            $args
+        $model = new PublicationDecorator(
+            $filesystemMock,
+            $assetRepoMock,
+            $fileTemporaryMock,
+            $publisherMock
         );
 
         $model->generate($importGeneratorMock);
-- 
GitLab


From 8b13f99228b3f2c3b8122403bd325f36502220c5 Mon Sep 17 00:00:00 2001
From: Anton Ohorodnyk <aohorodnyk@ebay.com>
Date: Mon, 26 Oct 2015 15:36:45 +0200
Subject: [PATCH 321/370] MAGETWO-44555: Exception in Advanced Search if used
 special symbols

 - Removed now used variable
---
 app/code/Magento/CatalogSearch/Model/Advanced.php | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/app/code/Magento/CatalogSearch/Model/Advanced.php b/app/code/Magento/CatalogSearch/Model/Advanced.php
index 277e092dec2..ec96c0deb3a 100644
--- a/app/code/Magento/CatalogSearch/Model/Advanced.php
+++ b/app/code/Magento/CatalogSearch/Model/Advanced.php
@@ -166,7 +166,6 @@ class Advanced extends \Magento\Framework\Model\AbstractModel
     public function addFilters($values)
     {
         $attributes = $this->getAttributes();
-        $hasConditions = false;
         $allConditions = [];
 
         foreach ($attributes as $attribute) {
@@ -225,7 +224,7 @@ class Advanced extends \Magento\Framework\Model\AbstractModel
         if ($allConditions) {
             $this->_registry->register('advanced_search_conditions', $allConditions);
             $this->getProductCollection()->addFieldsToFilter($allConditions);
-        } elseif (!$hasConditions) {
+        } else {
             throw new LocalizedException(__('Please specify at least one search term.'));
         }
 
-- 
GitLab


From a2fa1b1b1804747d5af5c8e25dea37fb9c873a47 Mon Sep 17 00:00:00 2001
From: Anton Ohorodnyk <aohorodnyk@ebay.com>
Date: Mon, 26 Oct 2015 15:38:11 +0200
Subject: [PATCH 322/370] MAGETWO-44555: Exception in Advanced Search if used
 special symbols

 - Fixed bug
---
 .../Magento/CatalogSearch/Model/Advanced/Request/Builder.php   | 2 +-
 .../Magento/CatalogSearch/Model/ResourceModel/Advanced.php     | 2 +-
 lib/internal/Magento/Framework/DB/Helper/Mysql/Fulltext.php    | 2 ++
 lib/internal/Magento/Framework/Search/Request/Cleaner.php      | 3 ++-
 4 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/app/code/Magento/CatalogSearch/Model/Advanced/Request/Builder.php b/app/code/Magento/CatalogSearch/Model/Advanced/Request/Builder.php
index 5e0eb83f4eb..138916f0767 100644
--- a/app/code/Magento/CatalogSearch/Model/Advanced/Request/Builder.php
+++ b/app/code/Magento/CatalogSearch/Model/Advanced/Request/Builder.php
@@ -27,7 +27,7 @@ class Builder extends RequestBuilder
         } elseif (!is_array($attributeValue)) {
             $this->bind($attributeCode, $attributeValue);
         } elseif (isset($attributeValue['like'])) {
-            $this->bind($attributeCode, trim($attributeValue['like'], '%'));
+            $this->bind($attributeCode, $attributeValue['like']);
         } elseif (isset($attributeValue['in'])) {
             $this->bind($attributeCode, $attributeValue['in']);
         } elseif (isset($attributeValue['in_set'])) {
diff --git a/app/code/Magento/CatalogSearch/Model/ResourceModel/Advanced.php b/app/code/Magento/CatalogSearch/Model/ResourceModel/Advanced.php
index 4dafffbf8df..8f4b8de898f 100644
--- a/app/code/Magento/CatalogSearch/Model/ResourceModel/Advanced.php
+++ b/app/code/Magento/CatalogSearch/Model/ResourceModel/Advanced.php
@@ -81,7 +81,7 @@ class Advanced extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
         } else {
             if (strlen($value) > 0) {
                 if (in_array($attribute->getBackendType(), ['varchar', 'text', 'static'])) {
-                    $condition = ['like' => '%' . $value . '%']; // text search
+                    $condition = ['like' => $value]; // text search
                 } else {
                     $condition = $value;
                 }
diff --git a/lib/internal/Magento/Framework/DB/Helper/Mysql/Fulltext.php b/lib/internal/Magento/Framework/DB/Helper/Mysql/Fulltext.php
index 931939a7899..e64092f508c 100644
--- a/lib/internal/Magento/Framework/DB/Helper/Mysql/Fulltext.php
+++ b/lib/internal/Magento/Framework/DB/Helper/Mysql/Fulltext.php
@@ -68,6 +68,8 @@ class Fulltext
 
         $expression = $this->connection->quote($expression);
 
+        $expression = str_replace('%', '\\%', $expression);
+
         $condition = self::MATCH . " ({$columns}) " . self::AGAINST . " ({$expression} {$mode})";
         return $condition;
     }
diff --git a/lib/internal/Magento/Framework/Search/Request/Cleaner.php b/lib/internal/Magento/Framework/Search/Request/Cleaner.php
index 4752b0a3a95..bb54ad8be0d 100644
--- a/lib/internal/Magento/Framework/Search/Request/Cleaner.php
+++ b/lib/internal/Magento/Framework/Search/Request/Cleaner.php
@@ -90,7 +90,8 @@ class Cleaner
                 }
                 break;
             case QueryInterface::TYPE_MATCH:
-                if (preg_match('/\$(.+)\$/si', $query['value'], $matches)) {
+                if (preg_match('/\$(.+)\$/si', $query['value'], $matches)
+                    && !preg_match('/^\$+$/si', $query['value'], $matches)) {
                     unset($this->requestData['queries'][$queryName]);
                 }
                 break;
-- 
GitLab


From 6f44e6ee92d6879b32097552e0add60aadbb43b8 Mon Sep 17 00:00:00 2001
From: Anton Ohorodnyk <aohorodnyk@ebay.com>
Date: Mon, 26 Oct 2015 16:19:53 +0200
Subject: [PATCH 323/370] MAGETWO-44555: Exception in Advanced Search if used
 special symbols

 - Fixed unit tests
---
 .../Test/Unit/Model/Advanced/Request/BuilderTest.php            | 2 +-
 .../Test/Unit/Model/ResourceModel/AdvancedTest.php              | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Advanced/Request/BuilderTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Advanced/Request/BuilderTest.php
index 2b7788e245b..0c3377d2b13 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Advanced/Request/BuilderTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Advanced/Request/BuilderTest.php
@@ -182,7 +182,7 @@ class BuilderTest extends \PHPUnit_Framework_TestCase
         ];
         $this->requestBuilder->bindRequestValue('from_to', ['from' => 10, 'to' => 20]);
         $this->requestBuilder->bindRequestValue('not_array', 130);
-        $this->requestBuilder->bindRequestValue('like', ['like' => '%search_text%']);
+        $this->requestBuilder->bindRequestValue('like', ['like' => 'search_text']);
         $this->requestBuilder->bindRequestValue('in', ['in' => 23]);
         $this->requestBuilder->bindRequestValue('in_set', ['in_set' => [12, 23, 34, 45]]);
         $this->requestBuilder->setRequestName($requestName);
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/AdvancedTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/AdvancedTest.php
index 94bc0686cd2..93c29b50787 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/AdvancedTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/AdvancedTest.php
@@ -54,7 +54,7 @@ class AdvancedTest extends PHPUnit_Framework_TestCase
     {
         return [
             ['string', 'string', 'string'],
-            ['varchar', 'string', ['like' => '%string%']],
+            ['varchar', 'string', ['like' => 'string']],
             ['varchar', ['test'], ['in_set' => ['test']]],
             ['select', ['test'], ['in' => ['test']]],
             ['range', ['from' => 1], ['from' => 1]],
-- 
GitLab


From 5c5f9d02044fe0be1cc925cba40c6c9c8a3e6c97 Mon Sep 17 00:00:00 2001
From: Ievgen Sentiabov <isentiabov@ebay.com>
Date: Mon, 26 Oct 2015 16:54:21 +0200
Subject: [PATCH 324/370] MAGETWO-44608: Credit card form is filled with
 current date when adding credit card for Braintree

 - Removed default exp month and year for credit card
---
 .../Braintree/view/frontend/templates/creditcard/edit.phtml   | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml b/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml
index e866c76a8b5..7c49fa2eecb 100644
--- a/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml
+++ b/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml
@@ -9,8 +9,8 @@
 /** @var $block \Magento\Braintree\Block\Creditcard\Management */
 
 echo $block->getLayout()->getMessagesBlock()->getGroupedHtml();
-$defaultExpMonth = $block->getTodayMonth();
-$defaultExpYear = $block->getTodayYear();
+$defaultExpMonth = '';
+$defaultExpYear = '';
 $countrySpecificCardTypeConfig = $block->getCountrySpecificCardTypeConfig();
 $applicableCardTypeConfig = $block->getCcApplicableTypes();
 if ($block->isEditMode()) {
-- 
GitLab


From 155d8790491705d7a5184b273b4e9b23758121f5 Mon Sep 17 00:00:00 2001
From: Mikalai_Shostka <mikalai_shostka@epam.com>
Date: Mon, 26 Oct 2015 18:30:44 +0300
Subject: [PATCH 325/370] Fix position after change preview image

---
 .../view/adminhtml/web/js/new-video-dialog.js | 43 ++++++++++++-------
 1 file changed, 28 insertions(+), 15 deletions(-)

diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
index e16cac8bd00..afe4296777b 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
+++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
@@ -424,7 +424,9 @@ define([
          */
         _replaceImage: function (oldFile, newFile, imageData) {
             var tmpNewFile = newFile,
+                tmpOldImage,
                 newImageId,
+                oldNewFilePosition,
                 fc,
                 suff,
                 searchsuff,
@@ -433,6 +435,7 @@ define([
 
             oldFile = this.__prepareFilename(oldFile);
             newFile = this.__prepareFilename(newFile);
+            tmpOldImage = this._images[oldFile];
 
             if (newFile === oldFile) {
                 this._images[newFile] = imageData;
@@ -444,26 +447,36 @@ define([
             this._removeImage(oldFile);
             this._setImage(newFile, imageData);
 
-            if (oldFile && imageData.oldFile) {
-                newImageId = this.findElementId(tmpNewFile);
-                fc = $(this._itemIdSelector).val();
+            if (!oldFile || !imageData.oldFile) {
+                return null;
+            }
 
-                suff = 'product[media_gallery][images]' + fc;
+            newImageId = this.findElementId(tmpNewFile);
+            fc = $(this._itemIdSelector).val();
 
-                searchsuff = 'input[name="' + suff + '[value_id]"]';
-                key = $(searchsuff).val();
+            suff = 'product[media_gallery][images]' + fc;
 
-                if (!key) {
-                    return null;
-                }
+            searchsuff = 'input[name="' + suff + '[value_id]"]';
+            key = $(searchsuff).val();
 
-                oldValIdElem = document.createElement('input');
-                $('form[data-form="edit-product"]').append(oldValIdElem);
-                $(oldValIdElem).attr({
-                    type: 'hidden',
-                    name: 'product[media_gallery][images][' + newImageId + '][save_data_from]'
-                }).val(key);
+            if (!key) {
+                return null;
             }
+
+            oldValIdElem = document.createElement('input');
+            $('form[data-form="edit-product"]').append(oldValIdElem);
+            $(oldValIdElem).attr({
+                type: 'hidden',
+                name: 'product[media_gallery][images][' + newImageId + '][save_data_from]'
+            }).val(key);
+
+            oldNewFilePosition = parseInt(tmpOldImage.position);
+            imageData.position = oldNewFilePosition;
+
+            $(this._imageWidgetSelector).trigger('setPosition', {
+                imageData: imageData,
+                position: oldNewFilePosition
+            });
         },
 
         /**
-- 
GitLab


From 327799c17cdce424da00b269ce33ad6a88cd71fb Mon Sep 17 00:00:00 2001
From: "Gurzhyi, Andrii" <agurzhyi@ebay.com>
Date: Mon, 26 Oct 2015 18:09:59 +0200
Subject: [PATCH 326/370] MAGETWO-44443: Grunt less task fails

- CR
---
 app/code/Magento/Developer/etc/di.xml | 30 ++++++++++++++-------------
 1 file changed, 16 insertions(+), 14 deletions(-)

diff --git a/app/code/Magento/Developer/etc/di.xml b/app/code/Magento/Developer/etc/di.xml
index bf95f080763..a393b0ebce8 100644
--- a/app/code/Magento/Developer/etc/di.xml
+++ b/app/code/Magento/Developer/etc/di.xml
@@ -24,7 +24,8 @@
         </arguments>
     </type>
 
-    <virtualType name="AssetMaterializationStrategySourceThemeDeployFactory" type="Magento\Framework\App\View\Asset\MaterializationStrategy\Factory">
+    <!-- Configuration for \Magento\Developer\Console\Command\SourceThemeDeployCommand -->
+    <virtualType name="AssetMaterializationStrategyFactoryForSourceThemeDeploy" type="Magento\Framework\App\View\Asset\MaterializationStrategy\Factory">
         <arguments>
             <argument name="strategiesList" xsi:type="array">
                 <item name="symlink" xsi:type="object">Magento\Framework\App\View\Asset\MaterializationStrategy\Symlink</item>
@@ -32,23 +33,23 @@
             </argument>
         </arguments>
     </virtualType>
-    <virtualType name="AssetPublisherSourceThemeDeploy" type="Magento\Framework\App\View\Asset\Publisher">
+    <virtualType name="AssetPublisherForSourceThemeDeploy" type="Magento\Framework\App\View\Asset\Publisher">
         <arguments>
-            <argument name="materializationStrategyFactory" xsi:type="object">AssetMaterializationStrategySourceThemeDeployFactory</argument>
+            <argument name="materializationStrategyFactory" xsi:type="object">AssetMaterializationStrategyFactoryForSourceThemeDeploy</argument>
         </arguments>
     </virtualType>
     <type name="Magento\Developer\Model\Css\PreProcessor\FileGenerator\PublicationDecorator">
         <arguments>
-            <argument name="assetRepo" xsi:type="object">AssetRepositorySourceThemeDeploy</argument>
-            <argument name="assetPublisher" xsi:type="object">AssetPublisherSourceThemeDeploy</argument>
+            <argument name="assetRepo" xsi:type="object">AssetRepositoryForSourceThemeDeploy</argument>
+            <argument name="assetPublisher" xsi:type="object">AssetPublisherForSourceThemeDeploy</argument>
         </arguments>
     </type>
-    <virtualType name="PreProcessorInstructionImportSourceThemeDeploy" type="Magento\Framework\Css\PreProcessor\Instruction\Import">
+    <virtualType name="PreProcessorInstructionImportForSourceThemeDeploy" type="Magento\Framework\Css\PreProcessor\Instruction\Import">
         <arguments>
             <argument name="relatedFileGenerator" xsi:type="object">Magento\Developer\Model\Css\PreProcessor\FileGenerator\PublicationDecorator</argument>
         </arguments>
     </virtualType>
-    <virtualType name="AssetPreProcessorPoolSourceThemeDeploy" type="Magento\Framework\View\Asset\PreProcessor\Pool">
+    <virtualType name="AssetPreProcessorPoolForSourceThemeDeploy" type="Magento\Framework\View\Asset\PreProcessor\Pool">
         <arguments>
             <argument name="preprocessors" xsi:type="array">
                 <item name="less" xsi:type="array">
@@ -57,28 +58,29 @@
                     </item>
                     <item name="import" xsi:type="array">
                         <item name="after" xsi:type="string">magento_import</item>
-                        <item name="class" xsi:type="string">PreProcessorInstructionImportSourceThemeDeploy</item>
+                        <item name="class" xsi:type="string">PreProcessorInstructionImportForSourceThemeDeploy</item>
                     </item>
                 </item>
             </argument>
         </arguments>
     </virtualType>
-    <virtualType name="AssetSourceSourceThemeDeploy" type="Magento\Framework\View\Asset\Source">
+    <virtualType name="AssetSourceForSourceThemeDeploy" type="Magento\Framework\View\Asset\Source">
         <arguments>
-            <argument name="preProcessorPool" xsi:type="object">AssetPreProcessorPoolSourceThemeDeploy</argument>
+            <argument name="preProcessorPool" xsi:type="object">AssetPreProcessorPoolForSourceThemeDeploy</argument>
         </arguments>
     </virtualType>
-    <virtualType name="AssetRepositorySourceThemeDeploy" type="Magento\Framework\View\Asset\Repository">
+    <virtualType name="AssetRepositoryForSourceThemeDeploy" type="Magento\Framework\View\Asset\Repository">
         <arguments>
-            <argument name="assetSource" xsi:type="object">AssetSourceSourceThemeDeploy</argument>
+            <argument name="assetSource" xsi:type="object">AssetSourceForSourceThemeDeploy</argument>
         </arguments>
     </virtualType>
     <type name="Magento\Developer\Console\Command\SourceThemeDeployCommand">
         <arguments>
-            <argument name="assetPublisher" xsi:type="object">AssetPublisherSourceThemeDeploy</argument>
-            <argument name="assetRepository" xsi:type="object">AssetRepositorySourceThemeDeploy</argument>
+            <argument name="assetPublisher" xsi:type="object">AssetPublisherForSourceThemeDeploy</argument>
+            <argument name="assetRepository" xsi:type="object">AssetRepositoryForSourceThemeDeploy</argument>
         </arguments>
     </type>
+    <!-- End configuration for \Magento\Developer\Console\Command\SourceThemeDeployCommand -->
 
     <type name="Magento\Framework\Console\CommandList">
         <arguments>
-- 
GitLab


From b87f210b5fd9ece8050d62bc9ece4817f248155e Mon Sep 17 00:00:00 2001
From: Viktor Tymchynskyi <vtymchynskyi@ebay.com>
Date: Mon, 26 Oct 2015 18:43:27 +0200
Subject: [PATCH 327/370] MAGETWO-44616: Update paypal modules currency list
 with the latest published list

- Add russian ruble to paypal currency list
---
 app/code/Magento/Paypal/Model/Config.php | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/Paypal/Model/Config.php b/app/code/Magento/Paypal/Model/Config.php
index dd5a0696e3e..1e4b95886fc 100644
--- a/app/code/Magento/Paypal/Model/Config.php
+++ b/app/code/Magento/Paypal/Model/Config.php
@@ -208,12 +208,13 @@ class Config extends AbstractConfig
         'NZD',
         'PLN',
         'GBP',
+        'RUB',
         'SGD',
         'SEK',
         'CHF',
-        'USD',
         'TWD',
         'THB',
+        'USD',
     ];
 
     /**
-- 
GitLab


From 8db40e1ad65ac65634f4099c8efb2ef2e75d9757 Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Mon, 26 Oct 2015 12:28:30 -0500
Subject: [PATCH 328/370] MAGETWO-43857: [github] cache types don't properly
 invalidate all the time #1844

---
 .../Theme/Model/Design/Backend/Theme.php      | 22 +++++--
 .../Unit/Model/Design/Backend/ThemeTest.php   | 63 ++++++++-----------
 app/code/Magento/Theme/etc/config.xml         |  5 ++
 3 files changed, 48 insertions(+), 42 deletions(-)

diff --git a/app/code/Magento/Theme/Model/Design/Backend/Theme.php b/app/code/Magento/Theme/Model/Design/Backend/Theme.php
index 108e82528a0..4917dd31b07 100644
--- a/app/code/Magento/Theme/Model/Design/Backend/Theme.php
+++ b/app/code/Magento/Theme/Model/Design/Backend/Theme.php
@@ -16,6 +16,13 @@ class Theme extends Value
      */
     protected $_design = null;
 
+    /**
+     * Path to config node with list of caches
+     *
+     * @var string
+     */
+    const XML_PATH_INVALID_CACHES = 'design/invalid_caches';
+
     /**
      * Initialize dependencies
      *
@@ -59,17 +66,22 @@ class Theme extends Value
     /**
      * {@inheritdoc}
      *
-     * {@inheritdoc}. In addition, it cleans all Magento cache
+     * {@inheritdoc}. In addition, it sets status 'invalidate' for blocks and other output caches
      *
      * @return $this
      */
     public function afterSave()
     {
-        parent::afterSave();
+        $types = array_keys(
+            $this->_config->getValue(
+                self::XML_PATH_INVALID_CACHES,
+                \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+            )
+        );
         if ($this->isValueChanged()) {
-            $this->_cacheManager->clean();
-            $this->_eventManager->dispatch('adminhtml_cache_flush_system');
+            $this->cacheTypeList->invalidate($types);
         }
-        return $this;
+
+        return parent::afterSave();
     }
 }
diff --git a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php
index e394482d748..e83a4e4ca30 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php
@@ -18,9 +18,9 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Framework\Model\Context
+     * @var \Magento\Framework\Model\Context|\PHPUnit_Framework_MockObject_MockObject
      */
-    protected $context;
+    protected $contextMock;
 
     /**
      * @var \Magento\Framework\View\DesignInterface|\PHPUnit_Framework_MockObject_MockObject
@@ -32,16 +32,6 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
      */
     protected $cacheTypeListMock;
 
-    /**
-     * @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $eventManagerMock;
-
-    /**
-     * @var \Magento\Framework\App\CacheInterface | \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $cacheManagerMock;
-
     /**
      * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
      */
@@ -49,33 +39,23 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $objectManager = new ObjectManager($this);
-        $this->cacheManagerMock = $this->getMockBuilder('Magento\Framework\App\CacheInterface')
+        $this->contextMock = $this->getMockBuilder('Magento\Framework\Model\Context')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->eventManagerMock = $this->getMockBuilder('Magento\Framework\Event\ManagerInterface')
-            ->disableOriginalConstructor()
-            ->getMock();
-        $this->context = $objectManager->getObject(
-            'Magento\Framework\Model\Context',
-            [
-                'cacheManager' => $this->cacheManagerMock,
-                'eventDispatcher' => $this->eventManagerMock,
-            ]
-        );
-
         $this->designMock = $this->getMockBuilder('Magento\Framework\View\DesignInterface')->getMock();
         $this->cacheTypeListMock = $this->getMockBuilder('Magento\Framework\App\Cache\TypeListInterface')
             ->disableOriginalConstructor()
             ->getMock();
+        $this->contextMock->expects($this->once())
+            ->method('getEventDispatcher')
+            ->willReturn($this->getMockBuilder('Magento\Framework\Event\ManagerInterface')->getMock());
         $this->configMock = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface')->getMock();
 
-
-        $this->model = $objectManager->getObject(
+        $this->model = (new ObjectManager($this))->getObject(
             'Magento\Theme\Model\Design\Backend\Theme',
             [
                 'design' => $this->designMock,
-                'context' => $this->context,
+                'context' => $this->contextMock,
                 'cacheTypeList' => $this->cacheTypeListMock,
                 'config' => $this->configMock,
             ]
@@ -106,16 +86,25 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
     {
         $this->cacheTypeListMock->expects($this->exactly($callNumber))
             ->method('invalidate');
-        $this->cacheManagerMock->expects($this->exactly($callNumber))
-            ->method('clean');
         $this->configMock->expects($this->any())
             ->method('getValue')
-            ->willReturn($oldValue);
-        if ($callNumber) {
-            $this->eventManagerMock->expects($this->at(3))
-                ->method('dispatch')
-                ->with('adminhtml_cache_flush_system');
-        }
+            ->willReturnMap(
+                [
+                    [
+                        Theme::XML_PATH_INVALID_CACHES,
+                        \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
+                        null,
+                        ['block_html' => 1, 'layout' => 1, 'translate' => 1]
+                    ],
+                    [
+                        null,
+                        \Magento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT,
+                        null,
+                        $oldValue
+                    ],
+
+                ]
+            );
         $this->model->setValue('some_value');
         $this->assertInstanceOf(get_class($this->model), $this->model->afterSave());
     }
@@ -124,7 +113,7 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
     {
         return [
             [0, 'some_value'],
-            [1, 'other_value'],
+            [2, 'other_value'],
         ];
     }
 }
diff --git a/app/code/Magento/Theme/etc/config.xml b/app/code/Magento/Theme/etc/config.xml
index 332043e56df..4f25cd7e2ab 100644
--- a/app/code/Magento/Theme/etc/config.xml
+++ b/app/code/Magento/Theme/etc/config.xml
@@ -8,6 +8,11 @@
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
     <default>
         <design>
+            <invalid_caches>
+                <block_html />
+                <layout />
+                <translate />
+            </invalid_caches>
             <head translate="default_description">
                 <default_title>Magento Commerce</default_title>
                 <default_description>Default Description</default_description>
-- 
GitLab


From a7077e6fff76f44f018e4efb6b7e7566c5d8e437 Mon Sep 17 00:00:00 2001
From: Mikalai Shostka <mikalai_shostka@epam.com>
Date: Mon, 26 Oct 2015 20:30:12 +0300
Subject: [PATCH 329/370] Fix rename title modal window

---
 .../ProductVideo/view/adminhtml/web/js/new-video-dialog.js      | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
index afe4296777b..91041f04795 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
+++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
@@ -662,7 +662,7 @@ define([
                     roles.prop('disabled', false);
                     file = $('#file_name').val();
                     widget._onGetVideoInformationEditClick();
-                    modalTitleElement = $('.modal-title');
+                    modalTitleElement = $('.mage-new-video-dialog .modal-title');
 
                     if (!file) {
                         widget._blockActionButtons(true);
-- 
GitLab


From 087e32921e51c0d432605378853c189804b43534 Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Mon, 26 Oct 2015 14:33:43 -0500
Subject: [PATCH 330/370] MAGETWO-41954: Eliminate code generatio in production
 mode

---
 .../Setup/Console/Command/DiCompileCommand.php        | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/setup/src/Magento/Setup/Console/Command/DiCompileCommand.php b/setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
index 9b2b2f5977d..8843fb66c21 100644
--- a/setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
+++ b/setup/src/Magento/Setup/Console/Command/DiCompileCommand.php
@@ -293,16 +293,21 @@ class DiCompileCommand extends Command
         array $compiledPathsList,
         array $dataAttributesIncludePattern
     ) {
+        $excludePatterns = [];
+        foreach ($this->excludedPathsList as $excludedPaths) {
+            $excludePatterns = array_merge($excludedPaths, $excludePatterns);
+        }
+
         $operations = [
             OperationFactory::PROXY_GENERATOR => [
                 'paths' => $compiledPathsList['application'],
                 'filePatterns' => ['di' => '/\/etc\/([a-zA-Z_]*\/di|di)\.xml$/'],
-                'excludePatterns' => ['/\/Test\//']
+                'excludePatterns' => $excludePatterns,
             ],
             OperationFactory::REPOSITORY_GENERATOR => [
                 'paths' => $compiledPathsList['application'],
                 'filePatterns' => ['di' => '/\/etc\/([a-zA-Z_]*\/di|di)\.xml$/'],
-                'excludePatterns' => ['/\/Test\//']
+                'excludePatterns' => $excludePatterns,
             ],
             OperationFactory::DATA_ATTRIBUTES_GENERATOR => [
                 'paths' => $compiledPathsList['application'],
@@ -315,7 +320,7 @@ class DiCompileCommand extends Command
                     $compiledPathsList['generated_helpers'],
                 ],
                 'filePatterns' => ['php' => '/\.php$/'],
-                'excludePatterns' => ['/\/Test\//']
+                'excludePatterns' => $excludePatterns,
             ],
             OperationFactory::INTERCEPTION => [
                 'intercepted_paths' => [
-- 
GitLab


From 9050b25a37634815302492674ef9f7f653cb7b4e Mon Sep 17 00:00:00 2001
From: Paul Lewis <plewis@ebay.com>
Date: Mon, 26 Oct 2015 21:23:17 -0500
Subject: [PATCH 331/370] MAGETWO-44581: Contribute Ogre Bugfixes

- update CE composer.lock
---
 composer.lock | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/composer.lock b/composer.lock
index 9da03972969..b14624bb581 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,8 +4,8 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "hash": "80867d6202a3ae5d2f4c079e2cfd702f",
-    "content-hash": "41493176956dcfd2401ac1181d4d4782",
+    "hash": "e4fca60e7de95ce1b8a7f76d7fa40c80",
+    "content-hash": "6372c4ff0d59809e1b9a22251313cc80",
     "packages": [
         {
             "name": "braintree/braintree_php",
@@ -2571,16 +2571,16 @@
         },
         {
             "name": "fabpot/php-cs-fixer",
-            "version": "v1.10.1",
+            "version": "v1.10.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git",
-                "reference": "12dbcd1462f1e3a5a96c6c7398af26b28e092a8a"
+                "reference": "e8b3c4e41dc1484210fdc45363c41af6c2d56f20"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/12dbcd1462f1e3a5a96c6c7398af26b28e092a8a",
-                "reference": "12dbcd1462f1e3a5a96c6c7398af26b28e092a8a",
+                "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/e8b3c4e41dc1484210fdc45363c41af6c2d56f20",
+                "reference": "e8b3c4e41dc1484210fdc45363c41af6c2d56f20",
                 "shasum": ""
             },
             "require": {
@@ -2621,7 +2621,7 @@
                 }
             ],
             "description": "A tool to automatically fix PHP code style",
-            "time": "2015-10-12 20:13:46"
+            "time": "2015-10-21 19:19:43"
         },
         {
             "name": "league/climate",
@@ -3926,9 +3926,7 @@
     "prefer-stable": true,
     "prefer-lowest": false,
     "platform": {
-        "php": "~5.5.0|~5.6.0|~7.0.0"
-    },
-    "platform-dev": {
+        "php": "~5.5.0|~5.6.0|~7.0.0",
         "lib-libxml": "*",
         "ext-ctype": "*",
         "ext-gd": "*",
@@ -3943,5 +3941,6 @@
         "ext-xsl": "*",
         "ext-mbstring": "*",
         "ext-openssl": "*"
-    }
+    },
+    "platform-dev": []
 }
-- 
GitLab


From 3d95c895d3bff1d349b1ea3af5eae1f4d96df0c4 Mon Sep 17 00:00:00 2001
From: Anton Ohorodnyk <aohorodnyk@ebay.com>
Date: Tue, 27 Oct 2015 10:57:05 +0200
Subject: [PATCH 332/370] MAGETWO-44555: Exception in Advanced Search if used
 special symbols

 - Moved fix to another class
---
 lib/internal/Magento/Framework/DB/Helper/Mysql/Fulltext.php     | 2 --
 .../Framework/Search/Adapter/Mysql/Query/Builder/Match.php      | 2 +-
 2 files changed, 1 insertion(+), 3 deletions(-)

diff --git a/lib/internal/Magento/Framework/DB/Helper/Mysql/Fulltext.php b/lib/internal/Magento/Framework/DB/Helper/Mysql/Fulltext.php
index e64092f508c..931939a7899 100644
--- a/lib/internal/Magento/Framework/DB/Helper/Mysql/Fulltext.php
+++ b/lib/internal/Magento/Framework/DB/Helper/Mysql/Fulltext.php
@@ -68,8 +68,6 @@ class Fulltext
 
         $expression = $this->connection->quote($expression);
 
-        $expression = str_replace('%', '\\%', $expression);
-
         $condition = self::MATCH . " ({$columns}) " . self::AGAINST . " ({$expression} {$mode})";
         return $condition;
     }
diff --git a/lib/internal/Magento/Framework/Search/Adapter/Mysql/Query/Builder/Match.php b/lib/internal/Magento/Framework/Search/Adapter/Mysql/Query/Builder/Match.php
index e2a94382f2f..a19e9dc04de 100644
--- a/lib/internal/Magento/Framework/Search/Adapter/Mysql/Query/Builder/Match.php
+++ b/lib/internal/Magento/Framework/Search/Adapter/Mysql/Query/Builder/Match.php
@@ -15,7 +15,7 @@ use Magento\Framework\Search\Request\QueryInterface as RequestQueryInterface;
 
 class Match implements QueryInterface
 {
-    const SPECIAL_CHARACTERS = '-+~/\\<>\'":*$#@()!,.?`=';
+    const SPECIAL_CHARACTERS = '-+~/\\<>\'":*$#@()!,.?`=%';
 
     const MINIMAL_CHARACTER_LENGTH = 3;
 
-- 
GitLab


From d4981dbe8ac791f950f364895bf5b3b7cc026bc7 Mon Sep 17 00:00:00 2001
From: Stanislav Idolov <sidolov@ebay.com>
Date: Tue, 27 Oct 2015 11:34:11 +0200
Subject: [PATCH 333/370] MAGETWO-39588: store_id value is not honored when
 creating simple product through API in multi-websites / multi-stores setup

---
 .../Api/ProductRepositoryInterfaceTest.php    |  4 +--
 .../Store/_files/core_fixturestore.php        |  4 ---
 ...fixture_store_with_catalogsearch_index.php | 31 +++++++++++++++++++
 ...tore_with_catalogsearch_index_rollback.php | 22 +++++++++++++
 4 files changed, 55 insertions(+), 6 deletions(-)
 create mode 100644 dev/tests/integration/testsuite/Magento/Store/_files/fixture_store_with_catalogsearch_index.php
 create mode 100644 dev/tests/integration/testsuite/Magento/Store/_files/fixture_store_with_catalogsearch_index_rollback.php

diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductRepositoryInterfaceTest.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductRepositoryInterfaceTest.php
index a4e57552656..8535762ad4f 100644
--- a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductRepositoryInterfaceTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/ProductRepositoryInterfaceTest.php
@@ -140,7 +140,7 @@ class ProductRepositoryInterfaceTest extends WebapiAbstract
      * @param array $fixtureProduct
      *
      * @dataProvider productCreationProvider
-     * @magentoApiDataFixture Magento/Store/_files/core_fixturestore.php
+     * @magentoApiDataFixture Magento/Store/_files/fixture_store_with_catalogsearch_index.php
      */
     public function testCreateAllStoreCode($fixtureProduct)
     {
@@ -169,7 +169,7 @@ class ProductRepositoryInterfaceTest extends WebapiAbstract
      * @param array $fixtureProduct
      *
      * @dataProvider productCreationProvider
-     * @magentoApiDataFixture Magento/Store/_files/core_fixturestore.php
+     * @magentoApiDataFixture Magento/Store/_files/fixture_store_with_catalogsearch_index.php
      */
     public function testDeleteAllStoreCode($fixtureProduct)
     {
diff --git a/dev/tests/integration/testsuite/Magento/Store/_files/core_fixturestore.php b/dev/tests/integration/testsuite/Magento/Store/_files/core_fixturestore.php
index 88c3f333e12..8c432d03e79 100644
--- a/dev/tests/integration/testsuite/Magento/Store/_files/core_fixturestore.php
+++ b/dev/tests/integration/testsuite/Magento/Store/_files/core_fixturestore.php
@@ -22,10 +22,6 @@ if (!$store->load($storeCode)->getId()) {
         ->setIsActive(1);
     $store->save();
 
-    Bootstrap::getObjectManager()
-        ->get('Magento\Framework\Event\ManagerInterface')
-        ->dispatch('store_add', ['store' => $store]);
-
     /* Refresh stores memory cache */
     Bootstrap::getObjectManager()->get('Magento\Store\Model\StoreManagerInterface')->reinitStores();
 }
diff --git a/dev/tests/integration/testsuite/Magento/Store/_files/fixture_store_with_catalogsearch_index.php b/dev/tests/integration/testsuite/Magento/Store/_files/fixture_store_with_catalogsearch_index.php
new file mode 100644
index 00000000000..88c3f333e12
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Store/_files/fixture_store_with_catalogsearch_index.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+use Magento\TestFramework\Helper\Bootstrap;
+
+/** @var \Magento\Store\Model\StoreManagerInterface $storeManager */
+$storeManager = Bootstrap::getObjectManager()->get('Magento\Store\Model\StoreManagerInterface');
+
+/** @var \Magento\Store\Model\Store $store */
+$store = Bootstrap::getObjectManager()->create('Magento\Store\Model\Store');
+$storeCode = 'fixturestore';
+
+if (!$store->load($storeCode)->getId()) {
+    $store->setCode($storeCode)
+        ->setWebsiteId($storeManager->getWebsite()->getId())
+        ->setGroupId($storeManager->getWebsite()->getDefaultGroupId())
+        ->setName('Fixture Store')
+        ->setSortOrder(10)
+        ->setIsActive(1);
+    $store->save();
+
+    Bootstrap::getObjectManager()
+        ->get('Magento\Framework\Event\ManagerInterface')
+        ->dispatch('store_add', ['store' => $store]);
+
+    /* Refresh stores memory cache */
+    Bootstrap::getObjectManager()->get('Magento\Store\Model\StoreManagerInterface')->reinitStores();
+}
diff --git a/dev/tests/integration/testsuite/Magento/Store/_files/fixture_store_with_catalogsearch_index_rollback.php b/dev/tests/integration/testsuite/Magento/Store/_files/fixture_store_with_catalogsearch_index_rollback.php
new file mode 100644
index 00000000000..08a8af6a68e
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Store/_files/fixture_store_with_catalogsearch_index_rollback.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+/** @var \Magento\Framework\Registry $registry */
+$registry = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Framework\Registry');
+
+$registry->unregister('isSecureArea');
+$registry->register('isSecureArea', true);
+
+/** @var \Magento\Store\Model\Store $store */
+$store = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Store\Model\Store');
+$storeCode = 'fixturestore';
+$store->load($storeCode);
+if ($store->getId()) {
+    $store->delete();
+}
+
+$registry->unregister('isSecureArea');
+$registry->register('isSecureArea', false);
-- 
GitLab


From 72bc6c887c03378dff8c78f7638019982251d30f Mon Sep 17 00:00:00 2001
From: Andrii Kasian <akasian@magento.com>
Date: Tue, 27 Oct 2015 11:58:28 +0200
Subject: [PATCH 334/370] MAGETWO-44106: New created category should be anchor
 by default

---
 setup/src/Magento/Setup/Fixtures/CategoriesFixture.php | 1 +
 1 file changed, 1 insertion(+)

diff --git a/setup/src/Magento/Setup/Fixtures/CategoriesFixture.php b/setup/src/Magento/Setup/Fixtures/CategoriesFixture.php
index f4e52eac261..670e936b0ca 100644
--- a/setup/src/Magento/Setup/Fixtures/CategoriesFixture.php
+++ b/setup/src/Magento/Setup/Fixtures/CategoriesFixture.php
@@ -54,6 +54,7 @@ class CategoriesFixture extends Fixture
                 ->setPath($nestingPath[$groupNumber])
                 ->setLevel($nestingLevel[$groupNumber] + 1)
                 ->setAvailableSortBy('name')
+                ->setIsAnchor(false)
                 ->setDefaultSortBy('name')
                 ->setIsActive(true)
                 ->save();
-- 
GitLab


From ae174e7e38a0ab262946d3bc863cb91faad5684a Mon Sep 17 00:00:00 2001
From: Michail Slabko <mslabko@ebay.com>
Date: Mon, 26 Oct 2015 13:48:38 +0200
Subject: [PATCH 335/370] MAGETWO-36162: Unable to change some product
 information corresponding to all store view (storeId = 0) in multiwebsite
 structure through API service

---
 .../Api/Data/ProductWebsiteLinkInterface.php  | 39 ++++++++++
 .../ProductWebsiteLinkRepositoryInterface.php | 32 ++++++++
 .../Catalog/Model/ProductRepository.php       |  2 +-
 .../Catalog/Model/ProductWebsiteLink.php      | 51 +++++++++++++
 .../Model/ProductWebsiteLinkRepository.php    | 76 +++++++++++++++++++
 app/code/Magento/Catalog/etc/di.xml           |  2 +
 app/code/Magento/Catalog/etc/webapi.xml       | 18 +++++
 7 files changed, 219 insertions(+), 1 deletion(-)
 create mode 100644 app/code/Magento/Catalog/Api/Data/ProductWebsiteLinkInterface.php
 create mode 100644 app/code/Magento/Catalog/Api/ProductWebsiteLinkRepositoryInterface.php
 create mode 100644 app/code/Magento/Catalog/Model/ProductWebsiteLink.php
 create mode 100644 app/code/Magento/Catalog/Model/ProductWebsiteLinkRepository.php

diff --git a/app/code/Magento/Catalog/Api/Data/ProductWebsiteLinkInterface.php b/app/code/Magento/Catalog/Api/Data/ProductWebsiteLinkInterface.php
new file mode 100644
index 00000000000..a50edeedcfa
--- /dev/null
+++ b/app/code/Magento/Catalog/Api/Data/ProductWebsiteLinkInterface.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Catalog\Api\Data;
+
+/**
+ * @api
+ */
+interface ProductWebsiteLinkInterface
+{
+    /**
+     * @return string|null
+     */
+    public function getSku();
+
+    /**
+     * @param string $sku
+     * @return $this
+     */
+    public function setSku($sku);
+
+    /**
+     * Get website ids
+     *
+     * @return int
+     */
+    public function getWebsiteId();
+
+    /**
+     * Set website id
+     *
+     * @param int $websiteId
+     * @return $this
+     */
+    public function setWebsiteId($websiteId);
+}
diff --git a/app/code/Magento/Catalog/Api/ProductWebsiteLinkRepositoryInterface.php b/app/code/Magento/Catalog/Api/ProductWebsiteLinkRepositoryInterface.php
new file mode 100644
index 00000000000..d557bc583cc
--- /dev/null
+++ b/app/code/Magento/Catalog/Api/ProductWebsiteLinkRepositoryInterface.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Catalog\Api;
+
+interface ProductWebsiteLinkRepositoryInterface
+{
+    /**
+     * Assign a product to the websites
+     *
+     * @param \Magento\Catalog\Api\Data\ProductWebsiteLinkInterface $productWebsiteLink
+     * @return bool will returned True if assigned
+     *
+     * @throws \Magento\Framework\Exception\CouldNotSaveException
+     * @throws \Magento\Framework\Exception\InputException
+     */
+    public function save(Data\ProductWebsiteLinkInterface $productWebsiteLink);
+
+    /**
+     * Remove the websites assignment from the product by product sku
+     *
+     * @param string $sku
+     * @param int $websiteId
+     * @return bool will returned True if websites successfully unassigned from product
+     *
+     * @throws \Magento\Framework\Exception\StateException
+     */
+    public function deleteById($sku, $websiteId);
+}
\ No newline at end of file
diff --git a/app/code/Magento/Catalog/Model/ProductRepository.php b/app/code/Magento/Catalog/Model/ProductRepository.php
index ccd62fb3d33..c5fd198ebc9 100644
--- a/app/code/Magento/Catalog/Model/ProductRepository.php
+++ b/app/code/Magento/Catalog/Model/ProductRepository.php
@@ -586,7 +586,7 @@ class ProductRepository implements \Magento\Catalog\Api\ProductRepositoryInterfa
             if ($tierPrices !== null) {
                 $product->setData('tier_price', $tierPrices);
             }
-            $this->resourceModel->save($product);
+            $product->save();
         } catch (\Magento\Eav\Model\Entity\Attribute\Exception $exception) {
             throw \Magento\Framework\Exception\InputException::invalidFieldValue(
                 $exception->getAttributeCode(),
diff --git a/app/code/Magento/Catalog/Model/ProductWebsiteLink.php b/app/code/Magento/Catalog/Model/ProductWebsiteLink.php
new file mode 100644
index 00000000000..614cd579281
--- /dev/null
+++ b/app/code/Magento/Catalog/Model/ProductWebsiteLink.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Catalog\Model;
+
+class ProductWebsiteLink extends \Magento\Framework\Api\AbstractSimpleObject implements
+    \Magento\Catalog\Api\Data\ProductWebsiteLinkInterface
+{
+    /**#@+
+     * Field names
+     */
+    const KEY_SKU = 'sku';
+    const WEBSITE_ID = 'website_id';
+    /**#@-*/
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getSku()
+    {
+        return $this->_get(self::KEY_SKU);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getWebsiteId()
+    {
+        return $this->_get(self::WEBSITE_ID);
+    }
+
+    /**
+     * @param string $sku
+     * @return $this
+     */
+    public function setSku($sku)
+    {
+        return $this->setData(self::KEY_SKU, $sku);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function setWebsiteId($websiteId)
+    {
+        return $this->setData(self::WEBSITE_ID, $websiteId);
+    }
+}
diff --git a/app/code/Magento/Catalog/Model/ProductWebsiteLinkRepository.php b/app/code/Magento/Catalog/Model/ProductWebsiteLinkRepository.php
new file mode 100644
index 00000000000..991086d62ef
--- /dev/null
+++ b/app/code/Magento/Catalog/Model/ProductWebsiteLinkRepository.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Catalog\Model;
+
+use Magento\Framework\Exception\InputException;
+use Magento\Framework\Exception\CouldNotSaveException;
+use Magento\Catalog\Api\Data\ProductWebsiteLinkInterface;
+
+class ProductWebsiteLinkRepository implements \Magento\Catalog\Api\ProductWebsiteLinkRepositoryInterface
+{
+    /**
+     * @var \Magento\Catalog\Api\ProductRepositoryInterface
+     */
+    protected $productRepository;
+
+    /**
+     * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository
+     */
+    public function __construct(
+        \Magento\Catalog\Api\ProductRepositoryInterface $productRepository
+    ) {
+        $this->productRepository = $productRepository;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function save(ProductWebsiteLinkInterface $productWebsiteLink)
+    {
+        if (!$productWebsiteLink->getWebsiteId()) {
+            throw new InputException(__('There are not websites for assign to product'));
+        }
+        $product = $this->productRepository->get($productWebsiteLink->getSku());
+        $product->setWebsiteIds(array_merge($product->getWebsiteIds(), [$productWebsiteLink->getWebsiteId()]));
+        try {
+            $product->save();
+        } catch (\Exception $e) {
+            throw new CouldNotSaveException(
+                __(
+                    'Could not assign product "%1" to websites "%2"',
+                    $product->getId(),
+                    $productWebsiteLink->getWebsiteId()
+                ),
+                $e
+            );
+        }
+        return true;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function deleteById($sku, $websiteId)
+    {
+        $product = $this->productRepository->get($sku);
+        $product->setWebsiteIds(array_diff($product->getWebsiteIds(), [$websiteId]));
+
+        try {
+            $product->save();
+        } catch (\Exception $e) {
+            throw new CouldNotSaveException(
+                __(
+                    'Could not save product "%1" with websites %2',
+                    $product->getId(),
+                    implode(', ', $product->getWebsiteIds())
+                ),
+                $e
+            );
+        }
+        return true;
+    }
+}
diff --git a/app/code/Magento/Catalog/etc/di.xml b/app/code/Magento/Catalog/etc/di.xml
index 7bd25115331..3ffee936046 100644
--- a/app/code/Magento/Catalog/etc/di.xml
+++ b/app/code/Magento/Catalog/etc/di.xml
@@ -459,6 +459,8 @@
     <preference for="Magento\Catalog\Api\ProductLinkManagementInterface" type="Magento\Catalog\Model\ProductLink\Management" />
     <preference for="Magento\Catalog\Api\Data\ProductLinkInterface" type="Magento\Catalog\Model\ProductLink\Link" />
     <preference for="\Magento\Catalog\Api\CategoryLinkManagementInterface" type="\Magento\Catalog\Model\CategoryLinkManagement" />
+    <preference for="Magento\Catalog\Api\Data\ProductWebsiteLinkInterface" type="Magento\Catalog\Model\ProductWebsiteLink" />
+    <preference for="Magento\Catalog\Api\ProductWebsiteLinkRepositoryInterface" type="Magento\Catalog\Model\ProductWebsiteLinkRepository" />
     <preference for="\Magento\Catalog\Api\CategoryLinkRepositoryInterface" type="\Magento\Catalog\Model\CategoryLinkRepository" />
     <preference for="Magento\Catalog\Api\Data\ProductCustomOptionInterface" type="Magento\Catalog\Model\Product\Option" />
     <preference for="Magento\Catalog\Api\ProductCustomOptionRepositoryInterface" type="\Magento\Catalog\Model\Product\Option\Repository" />
diff --git a/app/code/Magento/Catalog/etc/webapi.xml b/app/code/Magento/Catalog/etc/webapi.xml
index 24492cbc019..6e6ee08b761 100644
--- a/app/code/Magento/Catalog/etc/webapi.xml
+++ b/app/code/Magento/Catalog/etc/webapi.xml
@@ -385,4 +385,22 @@
             <resource ref="Magento_Catalog::categories" />
         </resources>
     </route>
+    <route url="/V1/products/:sku/websites" method="POST">
+        <service class="Magento\Catalog\Api\ProductWebsiteLinkRepositoryInterface" method="save" />
+        <resources>
+            <resource ref="Magento_Catalog::products" />
+        </resources>
+    </route>
+    <route url="/V1/products/:sku/websites" method="PUT">
+        <service class="Magento\Catalog\Api\ProductWebsiteLinkRepositoryInterface" method="save" />
+        <resources>
+            <resource ref="Magento_Catalog::products" />
+        </resources>
+    </route>
+    <route url="/V1/products/:sku/websites/:websiteId" method="DELETE">
+        <service class="Magento\Catalog\Api\ProductWebsiteLinkRepositoryInterface" method="deleteById" />
+        <resources>
+            <resource ref="Magento_Catalog::products" />
+        </resources>
+    </route>
 </routes>
-- 
GitLab


From 8eee426ab3d352d18d967eca3d00f91a8ce998a0 Mon Sep 17 00:00:00 2001
From: Michail Slabko <mslabko@ebay.com>
Date: Mon, 26 Oct 2015 14:48:24 +0200
Subject: [PATCH 336/370] MAGETWO-44556: Js error on product page "Cannot read
 property 'getCurrencySymbol' of undefined"

---
 .../view/adminhtml/web/js/variations/steps/bulk.js         | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js
index 499962f8e59..788d4eed832 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js
@@ -55,7 +55,7 @@ define([
                     type: ko.observable('none'),
                     value: ko.observable(),
                     attribute: ko.observable(),
-                    currencySymbol: this.variationsComponent().getCurrencySymbol()
+                    currencySymbol: ''
                 },
                 quantity: {
                     label: 'quantity',
@@ -64,6 +64,11 @@ define([
                     attribute: ko.observable()
                 }
             });
+
+            this.variationsComponent(function (variationsComponent) {
+                this.sections().price.currencySymbol = variationsComponent.getCurrencySymbol()
+            }.bind(this));
+
             this.makeOptionSections = function () {
                 this.images = new self.makeImages(null);
                 this.price = self.price;
-- 
GitLab


From 1cf0a7254452dc6ecdb31dd58fe3a48b8c340e17 Mon Sep 17 00:00:00 2001
From: Vitalii Zabaznov <vzabaznov@ebay.com>
Date: Mon, 26 Oct 2015 17:06:24 +0200
Subject: [PATCH 337/370] MAGETWO-43505:  Check-boxes are avoided on "create
 Downloadable Product" Admin page

- fix test
---
 .../Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.xml   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.xml b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.xml
index bd1e9e70f43..6d6f3231f3e 100644
--- a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.xml
+++ b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.xml
@@ -14,7 +14,7 @@
         <links_purchased_separately>
             <selector>[name="product[links_purchased_separately]"]</selector>
             <strategy>css selector</strategy>
-            <input>select</input>
+            <input>checkbox</input>
         </links_purchased_separately>
     </fields>
 </mapping>
-- 
GitLab


From 6c0ac05be596a0259ffbf39f2e23346be8a7e849 Mon Sep 17 00:00:00 2001
From: Valeriy Nayda <vnayda@ebay.com>
Date: Mon, 26 Oct 2015 17:12:44 +0200
Subject: [PATCH 338/370] MAGETWO-43822: Incorrect Request Path generated for
 child category if Edit URL Rewrites from Category Page

---
 .../Model/CategoryUrlPathGenerator.php        |  4 +-
 .../CategoryUrlPathAutogeneratorObserver.php  | 56 +++++++++++++++++--
 .../Service/V1/StoreViewService.php           | 36 ++++++++++--
 3 files changed, 86 insertions(+), 10 deletions(-)

diff --git a/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlPathGenerator.php b/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlPathGenerator.php
index d978d726a58..24d5eb552c3 100644
--- a/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlPathGenerator.php
+++ b/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlPathGenerator.php
@@ -73,7 +73,9 @@ class CategoryUrlPathGenerator
             return $category->getUrlPath();
         }
         if ($this->isNeedToGenerateUrlPathForParent($category)) {
-            $parentPath = $this->getUrlPath($this->categoryRepository->get($category->getParentId()));
+            $parentPath = $this->getUrlPath(
+                $this->categoryRepository->get($category->getParentId(),$category->getStoreId())
+            );
             $path = $parentPath === '' ? $path : $parentPath . '/' . $path;
         }
         return $path;
diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/CategoryUrlPathAutogeneratorObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/CategoryUrlPathAutogeneratorObserver.php
index e72b5df1704..a832b1104e9 100644
--- a/app/code/Magento/CatalogUrlRewrite/Observer/CategoryUrlPathAutogeneratorObserver.php
+++ b/app/code/Magento/CatalogUrlRewrite/Observer/CategoryUrlPathAutogeneratorObserver.php
@@ -7,9 +7,11 @@ namespace Magento\CatalogUrlRewrite\Observer;
 
 use Magento\Catalog\Model\Category;
 use Magento\CatalogUrlRewrite\Model\CategoryUrlPathGenerator;
+use Magento\CatalogUrlRewrite\Service\V1\StoreViewService;
 use Magento\Framework\Event\Observer;
 use Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider;
 use Magento\Framework\Event\ObserverInterface;
+use Magento\Store\Model\Store;
 
 class CategoryUrlPathAutogeneratorObserver implements ObserverInterface
 {
@@ -19,16 +21,22 @@ class CategoryUrlPathAutogeneratorObserver implements ObserverInterface
     /** @var \Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider */
     protected $childrenCategoriesProvider;
 
+    /** @var StoreViewService */
+    protected $storeViewService;
+
     /**
      * @param CategoryUrlPathGenerator $categoryUrlPathGenerator
      * @param ChildrenCategoriesProvider $childrenCategoriesProvider
+     * @param \Magento\CatalogUrlRewrite\Service\V1\StoreViewService $storeViewService
      */
     public function __construct(
         CategoryUrlPathGenerator $categoryUrlPathGenerator,
-        ChildrenCategoriesProvider $childrenCategoriesProvider
+        ChildrenCategoriesProvider $childrenCategoriesProvider,
+        StoreViewService $storeViewService
     ) {
         $this->categoryUrlPathGenerator = $categoryUrlPathGenerator;
         $this->childrenCategoriesProvider = $childrenCategoriesProvider;
+        $this->storeViewService = $storeViewService;
     }
 
     /**
@@ -57,10 +65,48 @@ class CategoryUrlPathAutogeneratorObserver implements ObserverInterface
      */
     protected function updateUrlPathForChildren(Category $category)
     {
-        foreach ($this->childrenCategoriesProvider->getChildren($category, true) as $childCategory) {
-            $childCategory->unsUrlPath();
-            $childCategory->setUrlPath($this->categoryUrlPathGenerator->getUrlPath($childCategory));
-            $childCategory->getResource()->saveAttribute($childCategory, 'url_path');
+        $children = $this->childrenCategoriesProvider->getChildren($category, true);
+
+        if ($this->isGlobalScope($category->getStoreId())) {
+            foreach ($children as $child) {
+                foreach ($category->getStoreIds() as $storeId) {
+                    if ($this->storeViewService->doesEntityHaveOverriddenUrlPathForStore(
+                        $storeId,
+                        $child->getId(),
+                        Category::ENTITY
+                    )) {
+                        $child->setStoreId($storeId);
+                        $this->updateUrlPathForCategory($child);
+                    }
+                }
+            }
+        } else {
+            foreach ($children as $child) {
+                $child->setStoreId($category->getStoreId());
+                $this->updateUrlPathForCategory($child);
+            }
         }
     }
+
+    /**
+     * Check is global scope
+     *
+     * @param int|null $storeId
+     * @return bool
+     */
+    protected function isGlobalScope($storeId)
+    {
+        return null === $storeId || $storeId == Store::DEFAULT_STORE_ID;
+    }
+
+    /**
+     * @param Category $category
+     * @return void
+     */
+    protected function updateUrlPathForCategory(Category $category)
+    {
+        $category->unsUrlPath();
+        $category->setUrlPath($this->categoryUrlPathGenerator->getUrlPath($category));
+        $category->getResource()->saveAttribute($category, 'url_path');
+    }
 }
diff --git a/app/code/Magento/CatalogUrlRewrite/Service/V1/StoreViewService.php b/app/code/Magento/CatalogUrlRewrite/Service/V1/StoreViewService.php
index 958e882c460..86cd085a796 100644
--- a/app/code/Magento/CatalogUrlRewrite/Service/V1/StoreViewService.php
+++ b/app/code/Magento/CatalogUrlRewrite/Service/V1/StoreViewService.php
@@ -46,14 +46,42 @@ class StoreViewService
      */
     public function doesEntityHaveOverriddenUrlKeyForStore($storeId, $entityId, $entityType)
     {
-        $attribute = $this->eavConfig->getAttribute($entityType, 'url_key');
+        return $this->doesEntityHaveOverriddenUrlAttributeForStore($storeId, $entityId, $entityType, 'url_key');
+    }
+
+    /**
+     * Check that entity has overridden url path for specific store
+     *
+     * @param int $storeId
+     * @param int $entityId
+     * @param string $entityType
+     * @throws \InvalidArgumentException
+     * @return bool
+     */
+    public function doesEntityHaveOverriddenUrlPathForStore($storeId, $entityId, $entityType)
+    {
+        return $this->doesEntityHaveOverriddenUrlAttributeForStore($storeId, $entityId, $entityType, 'url_path');
+    }
+
+    /**
+     * Check that entity has overridden url attribute for specific store
+     *
+     * @param int $storeId
+     * @param int $entityId
+     * @param string $entityType
+     * @throws \InvalidArgumentException
+     * @return bool
+     */
+    protected function doesEntityHaveOverriddenUrlAttributeForStore($storeId, $entityId, $entityType, $attributeName)
+    {
+        $attribute = $this->eavConfig->getAttribute($entityType, $attributeName);
         if (!$attribute) {
             throw new \InvalidArgumentException(sprintf('Cannot retrieve attribute for entity type "%s"', $entityType));
         }
         $select = $this->connection->select()
-        ->from($attribute->getBackendTable(), 'store_id')
-        ->where('attribute_id = ?', $attribute->getId())
-        ->where('entity_id = ?', $entityId);
+            ->from($attribute->getBackendTable(), 'store_id')
+            ->where('attribute_id = ?', $attribute->getId())
+            ->where('entity_id = ?', $entityId);
 
         return in_array($storeId, $this->connection->fetchCol($select));
     }
-- 
GitLab


From 6d3a6a760feb91700a7aa392f80b8204c0d03142 Mon Sep 17 00:00:00 2001
From: Andrii Lugovyi <alugovyi@ebay.com>
Date: Wed, 30 Sep 2015 13:54:57 +0300
Subject: [PATCH 339/370] MAGETWO-43464: Loaded files display twice if edit
 downloadable product

- remove extra div
---
 .../templates/product/edit/downloadable.phtml         | 11 -----------
 1 file changed, 11 deletions(-)

diff --git a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml
index dac2edad7be..dd2cf918d70 100644
--- a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml
+++ b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml
@@ -25,17 +25,6 @@ require([
 
 //<![CDATA[>
 var uploaderTemplate = '<div class="no-display" id="[[idName]]-template">' +
-                                '<div id="<%- data.id %>" class="file-row file-row-narrow">' +
-                                    '<span class="file-info">' +
-                                        '<span class="file-info-name"><%= data.name %></span>' +
-                                        ' ' +
-                                        '<span class="file-info-size">(<%- data.size %>)</span>' +
-                                    '</span>' +
-                                    '<div class="progressbar-container">' +
-                                        '<div class="progressbar upload-progress" style="width: 0%;"></div>' +
-                                    '</div>' +
-                                    '<div class="clear"></div>' +
-                                '</div>' +
                             '</div>' +
                                 '<div class="no-display" id="[[idName]]-template-progress">' +
                                 '<%- data.percent %>% <%- data.uploaded %> / <%- data.total %>' +
-- 
GitLab


From a4056d44c9092e3842caea42f868f987cd75cd04 Mon Sep 17 00:00:00 2001
From: Michail Slabko <mslabko@ebay.com>
Date: Tue, 27 Oct 2015 13:38:39 +0200
Subject: [PATCH 340/370] MAGETWO-36162: Unable to change some product
 information corresponding to all store view (storeId = 0) in multiwebsite
 structure through API service

---
 .../Api/Data/ProductWebsiteLinkInterface.php  |  2 +-
 .../ProductWebsiteLinkRepositoryInterface.php | 20 ++++++++++++++-----
 .../Model/ProductWebsiteLinkRepository.php    |  8 ++++++++
 app/code/Magento/Catalog/etc/webapi.xml       |  2 ++
 4 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/app/code/Magento/Catalog/Api/Data/ProductWebsiteLinkInterface.php b/app/code/Magento/Catalog/Api/Data/ProductWebsiteLinkInterface.php
index a50edeedcfa..08c8f6b9705 100644
--- a/app/code/Magento/Catalog/Api/Data/ProductWebsiteLinkInterface.php
+++ b/app/code/Magento/Catalog/Api/Data/ProductWebsiteLinkInterface.php
@@ -12,7 +12,7 @@ namespace Magento\Catalog\Api\Data;
 interface ProductWebsiteLinkInterface
 {
     /**
-     * @return string|null
+     * @return string
      */
     public function getSku();
 
diff --git a/app/code/Magento/Catalog/Api/ProductWebsiteLinkRepositoryInterface.php b/app/code/Magento/Catalog/Api/ProductWebsiteLinkRepositoryInterface.php
index d557bc583cc..67f73d354a5 100644
--- a/app/code/Magento/Catalog/Api/ProductWebsiteLinkRepositoryInterface.php
+++ b/app/code/Magento/Catalog/Api/ProductWebsiteLinkRepositoryInterface.php
@@ -9,10 +9,10 @@ namespace Magento\Catalog\Api;
 interface ProductWebsiteLinkRepositoryInterface
 {
     /**
-     * Assign a product to the websites
+     * Assign a product to the website
      *
      * @param \Magento\Catalog\Api\Data\ProductWebsiteLinkInterface $productWebsiteLink
-     * @return bool will returned True if assigned
+     * @return bool will returned True if website successfully assigned to product
      *
      * @throws \Magento\Framework\Exception\CouldNotSaveException
      * @throws \Magento\Framework\Exception\InputException
@@ -20,13 +20,23 @@ interface ProductWebsiteLinkRepositoryInterface
     public function save(Data\ProductWebsiteLinkInterface $productWebsiteLink);
 
     /**
-     * Remove the websites assignment from the product by product sku
+     * Remove the website assignment from the product
+     *
+     * @param \Magento\Catalog\Api\Data\ProductWebsiteLinkInterface $productWebsiteLink
+     * @return bool will returned True if website successfully unassigned from product
+     *
+     * @throws \Magento\Framework\Exception\CouldNotSaveException
+     */
+    public function delete(Data\ProductWebsiteLinkInterface $productWebsiteLink);
+
+    /**
+     * Remove the website assignment from the product by product sku
      *
      * @param string $sku
      * @param int $websiteId
-     * @return bool will returned True if websites successfully unassigned from product
+     * @return bool will returned True if website successfully unassigned from product
      *
-     * @throws \Magento\Framework\Exception\StateException
+     * @throws \Magento\Framework\Exception\CouldNotSaveException
      */
     public function deleteById($sku, $websiteId);
 }
\ No newline at end of file
diff --git a/app/code/Magento/Catalog/Model/ProductWebsiteLinkRepository.php b/app/code/Magento/Catalog/Model/ProductWebsiteLinkRepository.php
index 991086d62ef..4e24fc5ef9c 100644
--- a/app/code/Magento/Catalog/Model/ProductWebsiteLinkRepository.php
+++ b/app/code/Magento/Catalog/Model/ProductWebsiteLinkRepository.php
@@ -51,6 +51,14 @@ class ProductWebsiteLinkRepository implements \Magento\Catalog\Api\ProductWebsit
         return true;
     }
 
+    /**
+     * {@inheritdoc}
+     */
+    public function delete(ProductWebsiteLinkInterface $productLink)
+    {
+        return $this->deleteById($productLink->getSku(), $productLink->getSku());
+    }
+
     /**
      * {@inheritdoc}
      */
diff --git a/app/code/Magento/Catalog/etc/webapi.xml b/app/code/Magento/Catalog/etc/webapi.xml
index 6e6ee08b761..d447b748a9e 100644
--- a/app/code/Magento/Catalog/etc/webapi.xml
+++ b/app/code/Magento/Catalog/etc/webapi.xml
@@ -385,6 +385,8 @@
             <resource ref="Magento_Catalog::categories" />
         </resources>
     </route>
+
+    <!-- Product Website Links -->
     <route url="/V1/products/:sku/websites" method="POST">
         <service class="Magento\Catalog\Api\ProductWebsiteLinkRepositoryInterface" method="save" />
         <resources>
-- 
GitLab


From 62a15a8b4920741aa63d560c4007acdc4d675427 Mon Sep 17 00:00:00 2001
From: Maksym Aposov <maposov@ebay.com>
Date: Tue, 27 Oct 2015 14:49:45 +0200
Subject: [PATCH 341/370] MAGETWO-43816: [TD] Func test failing:
 Magento\Catalog\Test\TestCase\Product\AddToCartCrossSellTest and
 Magento\Catalog\Test\TestCase\Product\NavigateUpSellProductsTest

---
 app/code/Magento/Catalog/view/adminhtml/web/js/options.js     | 4 +++-
 .../view/adminhtml/web/js/variations/steps/bulk.js            | 3 ++-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/options.js b/app/code/Magento/Catalog/view/adminhtml/web/js/options.js
index 0734c4362c5..3928decacf4 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/js/options.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/js/options.js
@@ -11,7 +11,9 @@ define([
     'mage/template',
     'uiRegistry',
     'jquery/ui',
-    'prototype'
+    'prototype',
+    'form',
+    'validation'
 ], function (jQuery, mageTemplate, rg) {
     'use strict';
 
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js
index 499962f8e59..74bc6c1d6a1 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js
@@ -14,7 +14,8 @@ define([
     'mage/template',
     'Magento_Ui/js/modal/alert',
     'jquery/file-uploader',
-    'mage/translate'
+    'mage/translate',
+    'Magento_ConfigurableProduct/js/variations/variations'
 ], function (Component, $, ko, _, Collapsible, mageTemplate, alert) {
     'use strict';
 
-- 
GitLab


From 99696c1365bb8dd59a0730cc4c8259acb7cb35a5 Mon Sep 17 00:00:00 2001
From: Mikalai_Shostka <mikalai_shostka@epam.com>
Date: Tue, 27 Oct 2015 15:53:44 +0300
Subject: [PATCH 342/370] MAGETWO-44249: Instant video playing doesn't work

Change order array
---
 .../frontend/web/js/fotorama-add-video-events.js    | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
index 43a5ce2c26d..afa71a52394 100644
--- a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
+++ b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
@@ -138,11 +138,12 @@ define([
          * @private
          */
         _createVideoData: function (inputData, isJSON) {
-            var videoData = {},
+            var videoData = [],
                 dataUrl,
                 tmpVideoData,
                 tmpInputData,
-                i;
+                i,
+                iPlace;
 
             if (isJSON) {
                 inputData = $.parseJSON(inputData);
@@ -171,10 +172,14 @@ define([
                     tmpVideoData.id = dataUrl.id;
                     tmpVideoData.provider = dataUrl.type;
                 }
+                iPlace = i + 1;
+                if(tmpVideoData.isBase) {
+                    videoData.unshift(tmpVideoData);
+                    continue;
+                }
 
-                videoData[i] = tmpVideoData;
+                videoData.push(tmpVideoData);
             }
-
             return videoData;
         },
 
-- 
GitLab


From 546cde3ea319d4dffc86477ae2304ee01c0da8ec Mon Sep 17 00:00:00 2001
From: Valeriy Nayda <vnayda@ebay.com>
Date: Tue, 27 Oct 2015 15:25:23 +0200
Subject: [PATCH 343/370] MAGETWO-43822: Incorrect Request Path generated for
 child category if Edit URL Rewrites from Category Page

- fix builds
---
 .../Model/CategoryUrlPathGenerator.php        |   4 +-
 .../Model/ProductUrlPathGenerator.php         |   2 +-
 .../CategoryUrlPathAutogeneratorObserver.php  |   3 +-
 .../ProductUrlKeyAutogeneratorObserver.php    |   2 +-
 .../Model/CategoryUrlPathGeneratorTest.php    |  12 +-
 .../Model/ProductUrlPathGeneratorTest.php     |  41 +++---
 ...tegoryUrlPathAutogeneratorObserverTest.php | 129 +++++++++++++++---
 .../Price/ConfigurablePriceResolver.php       |   2 +-
 8 files changed, 140 insertions(+), 55 deletions(-)

diff --git a/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlPathGenerator.php b/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlPathGenerator.php
index 24d5eb552c3..69b955cf78a 100644
--- a/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlPathGenerator.php
+++ b/app/code/Magento/CatalogUrlRewrite/Model/CategoryUrlPathGenerator.php
@@ -74,7 +74,7 @@ class CategoryUrlPathGenerator
         }
         if ($this->isNeedToGenerateUrlPathForParent($category)) {
             $parentPath = $this->getUrlPath(
-                $this->categoryRepository->get($category->getParentId(),$category->getStoreId())
+                $this->categoryRepository->get($category->getParentId(), $category->getStoreId())
             );
             $path = $parentPath === '' ? $path : $parentPath . '/' . $path;
         }
@@ -143,7 +143,7 @@ class CategoryUrlPathGenerator
      * @param \Magento\Catalog\Model\Category $category
      * @return string
      */
-    public function generateUrlKey($category)
+    public function getUrlKey($category)
     {
         $urlKey = $category->getUrlKey();
         return $category->formatUrlKey($urlKey === '' || $urlKey === null ? $category->getName() : $urlKey);
diff --git a/app/code/Magento/CatalogUrlRewrite/Model/ProductUrlPathGenerator.php b/app/code/Magento/CatalogUrlRewrite/Model/ProductUrlPathGenerator.php
index 90e65b9094f..7656610422d 100644
--- a/app/code/Magento/CatalogUrlRewrite/Model/ProductUrlPathGenerator.php
+++ b/app/code/Magento/CatalogUrlRewrite/Model/ProductUrlPathGenerator.php
@@ -114,7 +114,7 @@ class ProductUrlPathGenerator
      * @param \Magento\Catalog\Model\Product $product
      * @return string
      */
-    public function generateUrlKey($product)
+    public function getUrlKey($product)
     {
         return $product->getUrlKey() === false ? false : $this->prepareProductUrlKey($product);
     }
diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/CategoryUrlPathAutogeneratorObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/CategoryUrlPathAutogeneratorObserver.php
index a832b1104e9..74d9754b1d2 100644
--- a/app/code/Magento/CatalogUrlRewrite/Observer/CategoryUrlPathAutogeneratorObserver.php
+++ b/app/code/Magento/CatalogUrlRewrite/Observer/CategoryUrlPathAutogeneratorObserver.php
@@ -48,7 +48,7 @@ class CategoryUrlPathAutogeneratorObserver implements ObserverInterface
         /** @var Category $category */
         $category = $observer->getEvent()->getCategory();
         if ($category->getUrlKey() !== false) {
-            $category->setUrlKey($this->categoryUrlPathGenerator->generateUrlKey($category))
+            $category->setUrlKey($this->categoryUrlPathGenerator->getUrlKey($category))
                 ->setUrlPath($this->categoryUrlPathGenerator->getUrlPath($category));
             if (!$category->isObjectNew()) {
                 $category->getResource()->saveAttribute($category, 'url_path');
@@ -105,7 +105,6 @@ class CategoryUrlPathAutogeneratorObserver implements ObserverInterface
      */
     protected function updateUrlPathForCategory(Category $category)
     {
-        $category->unsUrlPath();
         $category->setUrlPath($this->categoryUrlPathGenerator->getUrlPath($category));
         $category->getResource()->saveAttribute($category, 'url_path');
     }
diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/ProductUrlKeyAutogeneratorObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/ProductUrlKeyAutogeneratorObserver.php
index 5a3cd8bb47a..525cc1568a7 100644
--- a/app/code/Magento/CatalogUrlRewrite/Observer/ProductUrlKeyAutogeneratorObserver.php
+++ b/app/code/Magento/CatalogUrlRewrite/Observer/ProductUrlKeyAutogeneratorObserver.php
@@ -31,6 +31,6 @@ class ProductUrlKeyAutogeneratorObserver implements ObserverInterface
     {
         /** @var Product $product */
         $product = $observer->getEvent()->getProduct();
-        $product->setUrlKey($this->productUrlPathGenerator->generateUrlKey($product));
+        $product->setUrlKey($this->productUrlPathGenerator->getUrlKey($product));
     }
 }
diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryUrlPathGeneratorTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryUrlPathGeneratorTest.php
index 94dc7f9c33a..41300634caa 100644
--- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryUrlPathGeneratorTest.php
+++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/CategoryUrlPathGeneratorTest.php
@@ -235,7 +235,7 @@ class CategoryUrlPathGeneratorTest extends \PHPUnit_Framework_TestCase
     /**
      * @return array
      */
-    public function generateUrlKeyDataProvider()
+    public function getUrlKeyDataProvider()
     {
         return [
             ['url-key', null, 'url-key'],
@@ -244,17 +244,17 @@ class CategoryUrlPathGeneratorTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @dataProvider generateUrlKeyDataProvider
-     * @param string $urlKey
-     * @param string $name
+     * @dataProvider getUrlKeyDataProvider
+     * @param string|null|bool $urlKey
+     * @param string|null|bool $name
      * @param string $result
      */
-    public function testGenerateUrlKey($urlKey, $name, $result)
+    public function testGetUrlKey($urlKey, $name, $result)
     {
         $this->category->expects($this->once())->method('getUrlKey')->will($this->returnValue($urlKey));
         $this->category->expects($this->any())->method('getName')->will($this->returnValue($name));
         $this->category->expects($this->once())->method('formatUrlKey')->will($this->returnArgument(0));
 
-        $this->assertEquals($result, $this->categoryUrlPathGenerator->generateUrlKey($this->category));
+        $this->assertEquals($result, $this->categoryUrlPathGenerator->getUrlKey($this->category));
     }
 }
diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/ProductUrlPathGeneratorTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/ProductUrlPathGeneratorTest.php
index 7b733303bf4..fe4895c721b 100644
--- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/ProductUrlPathGeneratorTest.php
+++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/ProductUrlPathGeneratorTest.php
@@ -85,11 +85,11 @@ class ProductUrlPathGeneratorTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @dataProvider getUrlPathDataProvider
-     * @param $urlKey
-     * @param $productName
-     * @param $result
+     * @param string|null|bool $urlKey
+     * @param string|null|bool $productName
+     * @param string $result
      */
-    public function testGenerateUrlPath($urlKey, $productName, $result)
+    public function testGetUrlPath($urlKey, $productName, $result)
     {
         $this->product->expects($this->once())->method('getData')->with('url_path')
             ->will($this->returnValue(null));
@@ -101,19 +101,21 @@ class ProductUrlPathGeneratorTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @param $productUrlKey
-     * @param $expectedUrlKey
-     *
-     * @dataProvider generateUrlKeyDataProvider
+     * @param string|bool $productUrlKey
+     * @param string|bool $expectedUrlKey
+     * @dataProvider getUrlKeyDataProvider
      */
-    public function testGenerateUrlKey($productUrlKey, $expectedUrlKey)
+    public function testGetUrlKey($productUrlKey, $expectedUrlKey)
     {
         $this->product->expects($this->any())->method('getUrlKey')->will($this->returnValue($productUrlKey));
         $this->product->expects($this->any())->method('formatUrlKey')->will($this->returnValue($productUrlKey));
-        $this->assertEquals($expectedUrlKey, $this->productUrlPathGenerator->generateUrlKey($this->product));
+        $this->assertEquals($expectedUrlKey, $this->productUrlPathGenerator->getUrlKey($this->product));
     }
 
-    public function generateUrlKeyDataProvider()
+    /**
+     * @return array
+     */
+    public function getUrlKeyDataProvider()
     {
         return [
             'URL Key use default' => [false, false],
@@ -121,17 +123,10 @@ class ProductUrlPathGeneratorTest extends \PHPUnit_Framework_TestCase
         ];
     }
 
-    public function testGetUrlPath()
-    {
-        $this->product->expects($this->once())->method('getData')->with('url_path')
-            ->will($this->returnValue('url-path'));
-        $this->product->expects($this->never())->method('getUrlKey');
-
-        $this->assertEquals('url-path', $this->productUrlPathGenerator->getUrlPath($this->product, null));
-    }
-
     /**
-     *
+     * @param string|null|bool $storedUrlKey
+     * @param string|null|bool $productName
+     * @param string $expectedUrlKey
      * @dataProvider getUrlPathDefaultUrlKeyDataProvider
      */
     public function testGetUrlPathDefaultUrlKey($storedUrlKey, $productName, $expectedUrlKey)
@@ -144,13 +139,15 @@ class ProductUrlPathGeneratorTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals($expectedUrlKey, $this->productUrlPathGenerator->getUrlPath($this->product, null));
     }
 
+    /**
+     * @return array
+     */
     public function getUrlPathDefaultUrlKeyDataProvider()
     {
         return [
             ['default-store-view-url-key', null, 'default-store-view-url-key'],
             [false, 'default-store-view-product-name', 'default-store-view-product-name']
         ];
-
     }
 
     public function testGetUrlPathWithCategory()
diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/CategoryUrlPathAutogeneratorObserverTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/CategoryUrlPathAutogeneratorObserverTest.php
index 8088fcf653a..de1f7fe6c02 100644
--- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/CategoryUrlPathAutogeneratorObserverTest.php
+++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/CategoryUrlPathAutogeneratorObserverTest.php
@@ -24,6 +24,16 @@ class CategoryUrlPathAutogeneratorObserverTest extends \PHPUnit_Framework_TestCa
     /** @var \PHPUnit_Framework_MockObject_MockObject */
     protected $category;
 
+    /**
+     * @var \Magento\CatalogUrlRewrite\Service\V1\StoreViewService|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $storeViewService;
+
+    /**
+     * @var \Magento\Catalog\Model\ResourceModel\Category|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $categoryResource;
+
     protected function setUp()
     {
         $this->observer = $this->getMock(
@@ -33,13 +43,15 @@ class CategoryUrlPathAutogeneratorObserverTest extends \PHPUnit_Framework_TestCa
             '',
             false
         );
+        $this->categoryResource = $this->getMock('Magento\Catalog\Model\ResourceModel\Category', [], [], '', false);
         $this->category = $this->getMock(
             'Magento\Catalog\Model\Category',
-            ['setUrlKey', 'setUrlPath', 'dataHasChangedFor', 'isObjectNew', 'getResource', 'getUrlKey'],
+            ['setUrlKey', 'setUrlPath', 'dataHasChangedFor', 'isObjectNew', 'getResource', 'getUrlKey', 'getStoreId'],
             [],
             '',
             false
         );
+        $this->category->expects($this->any())->method('getResource')->willReturn($this->categoryResource);
         $this->observer->expects($this->any())->method('getEvent')->willReturnSelf();
         $this->observer->expects($this->any())->method('getCategory')->willReturn($this->category);
         $this->categoryUrlPathGenerator = $this->getMock(
@@ -53,11 +65,15 @@ class CategoryUrlPathAutogeneratorObserverTest extends \PHPUnit_Framework_TestCa
             'Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider'
         );
 
+        $this->storeViewService = $this->getMock('Magento\CatalogUrlRewrite\Service\V1\StoreViewService', [], [], '',
+            false);
+
         $this->categoryUrlPathAutogeneratorObserver = (new ObjectManagerHelper($this))->getObject(
             'Magento\CatalogUrlRewrite\Observer\CategoryUrlPathAutogeneratorObserver',
             [
                 'categoryUrlPathGenerator' => $this->categoryUrlPathGenerator,
-                'childrenCategoriesProvider' => $this->childrenCategoriesProvider
+                'childrenCategoriesProvider' => $this->childrenCategoriesProvider,
+                'storeViewService' => $this->storeViewService,
             ]
         );
     }
@@ -65,7 +81,7 @@ class CategoryUrlPathAutogeneratorObserverTest extends \PHPUnit_Framework_TestCa
     public function testSetCategoryUrlAndCategoryPath()
     {
         $this->category->expects($this->once())->method('getUrlKey')->willReturn('category');
-        $this->categoryUrlPathGenerator->expects($this->once())->method('generateUrlKey')->willReturn('urk_key');
+        $this->categoryUrlPathGenerator->expects($this->once())->method('getUrlKey')->willReturn('urk_key');
         $this->category->expects($this->once())->method('setUrlKey')->with('urk_key')->willReturnSelf();
         $this->categoryUrlPathGenerator->expects($this->once())->method('getUrlPath')->willReturn('url_path');
         $this->category->expects($this->once())->method('setUrlPath')->with('url_path')->willReturnSelf();
@@ -74,7 +90,7 @@ class CategoryUrlPathAutogeneratorObserverTest extends \PHPUnit_Framework_TestCa
         $this->categoryUrlPathAutogeneratorObserver->execute($this->observer);
     }
 
-    public function testExecuteWithoutGeneration()
+    public function testExecuteWithoutUrlKeyAndUrlPathUpdating()
     {
         $this->category->expects($this->once())->method('getUrlKey')->willReturn(false);
         $this->category->expects($this->never())->method('setUrlKey');
@@ -82,30 +98,103 @@ class CategoryUrlPathAutogeneratorObserverTest extends \PHPUnit_Framework_TestCa
         $this->categoryUrlPathAutogeneratorObserver->execute($this->observer);
     }
 
-    public function testUpdateUrlPathForChildren()
+    public function testUrlKeyAndUrlPathUpdating()
     {
-        $this->category->expects($this->once())->method('getUrlKey')->willReturn('category');
-        $this->category->expects($this->once())->method('setUrlKey')->willReturnSelf();
-        $this->category->expects($this->once())->method('setUrlPath')->willReturnSelf();
+        $this->categoryUrlPathGenerator->expects($this->once())->method('getUrlKey')->with($this->category)
+            ->willReturn('url_key');
+        $this->categoryUrlPathGenerator->expects($this->once())->method('getUrlPath')->with($this->category)
+            ->willReturn('url_path');
+
+        $this->category->expects($this->once())->method('getUrlKey')->willReturn('not_formatted_url_key');
+        $this->category->expects($this->once())->method('setUrlKey')->with('url_key')->willReturnSelf();
+        $this->category->expects($this->once())->method('setUrlPath')->with('url_path')->willReturnSelf();
+        // break code execution
+        $this->category->expects($this->once())->method('isObjectNew')->willReturn(true);
+
+        $this->categoryUrlPathAutogeneratorObserver->execute($this->observer);
+    }
+
+    public function testUrlPathAttributeNoUpdatingIfCategoryIsNew()
+    {
+        $this->categoryUrlPathGenerator->expects($this->any())->method('getUrlKey')->willReturn('url_key');
+        $this->categoryUrlPathGenerator->expects($this->any())->method('getUrlPath')->willReturn('url_path');
+
+        $this->category->expects($this->any())->method('getUrlKey')->willReturn('not_formatted_url_key');
+        $this->category->expects($this->any())->method('setUrlKey')->willReturnSelf();
+        $this->category->expects($this->any())->method('setUrlPath')->willReturnSelf();
+
+        $this->category->expects($this->once())->method('isObjectNew')->willReturn(true);
+        $this->categoryResource->expects($this->never())->method('saveAttribute');
+
+        $this->categoryUrlPathAutogeneratorObserver->execute($this->observer);
+    }
+
+    public function testUrlPathAttributeUpdating()
+    {
+        $this->categoryUrlPathGenerator->expects($this->any())->method('getUrlKey')->willReturn('url_key');
+        $this->categoryUrlPathGenerator->expects($this->any())->method('getUrlPath')->willReturn('url_path');
+
+        $this->category->expects($this->any())->method('getUrlKey')->willReturn('not_formatted_url_key');
+        $this->category->expects($this->any())->method('setUrlKey')->willReturnSelf();
+        $this->category->expects($this->any())->method('setUrlPath')->willReturnSelf();
         $this->category->expects($this->once())->method('isObjectNew')->willReturn(false);
-        $this->category->expects($this->once())->method('dataHasChangedFor')->with('url_path')->willReturn(true);
-        $categoryResource = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Category')
-            ->disableOriginalConstructor()->getMock();
-        $this->category->expects($this->once())->method('getResource')->willReturn($categoryResource);
-        $categoryResource->expects($this->once())->method('saveAttribute')->with($this->category, 'url_path');
 
+        $this->categoryResource->expects($this->once())->method('saveAttribute')->with($this->category, 'url_path');
+
+        // break code execution
+        $this->category->expects($this->once())->method('dataHasChangedFor')->with('url_path')->willReturn(false);
+
+        $this->categoryUrlPathAutogeneratorObserver->execute($this->observer);
+    }
+
+    public function testChildrenUrlPathAttributeNoUpdatingIfParentUrlPathIsNotChanged()
+    {
+        $this->categoryUrlPathGenerator->expects($this->any())->method('getUrlKey')->willReturn('url_key');
+        $this->categoryUrlPathGenerator->expects($this->any())->method('getUrlPath')->willReturn('url_path');
+
+        $this->categoryResource->expects($this->once())->method('saveAttribute')->with($this->category, 'url_path');
+
+        $this->category->expects($this->any())->method('getUrlKey')->willReturn('not_formatted_url_key');
+        $this->category->expects($this->any())->method('setUrlKey')->willReturnSelf();
+        $this->category->expects($this->any())->method('setUrlPath')->willReturnSelf();
+        $this->category->expects($this->once())->method('isObjectNew')->willReturn(false);
+        // break code execution
+        $this->category->expects($this->once())->method('dataHasChangedFor')->with('url_path')->willReturn(false);
+
+        $this->categoryUrlPathAutogeneratorObserver->execute($this->observer);
+    }
+
+    public function testChildrenUrlPathAttributeUpdatingForSpecificStore()
+    {
+        $this->categoryUrlPathGenerator->expects($this->any())->method('getUrlKey')->willReturn('generated_url_key');
+        $this->categoryUrlPathGenerator->expects($this->any())->method('getUrlPath')->willReturn('generated_url_path');
+
+        $this->category->expects($this->any())->method('getUrlKey')->willReturn('not_formatted_url_key');
+        $this->category->expects($this->any())->method('setUrlKey')->willReturnSelf();
+        $this->category->expects($this->any())->method('setUrlPath')->willReturnSelf();
+        $this->category->expects($this->any())->method('isObjectNew')->willReturn(false);
+        $this->category->expects($this->any())->method('dataHasChangedFor')->willReturn(true);
+        // only for specific store
+        $this->category->expects($this->atLeastOnce())->method('getStoreId')->willReturn(1);
+
+        $childCategoryResource = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Category')
+            ->disableOriginalConstructor()->getMock();
         $childCategory = $this->getMockBuilder('Magento\Catalog\Model\Category')
-            ->setMethods(['getUrlPath', 'setUrlPath', 'getResource', 'unsUrlPath'])
+            ->setMethods([
+                'getUrlPath',
+                'setUrlPath',
+                'getResource',
+                'getStore',
+                'getStoreId',
+                'setStoreId'
+            ])
             ->disableOriginalConstructor()->getMock();
+        $childCategory->expects($this->any())->method('getResource')->willReturn($childCategoryResource);
+        $childCategory->expects($this->once())->method('setStoreId')->with(1);
 
         $this->childrenCategoriesProvider->expects($this->once())->method('getChildren')->willReturn([$childCategory]);
-        $childCategoryResource = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Category')
-            ->disableOriginalConstructor()->getMock();
-        $childCategory->expects($this->once())->method('unsUrlPath')->willReturnSelf();
-        $childCategory->expects($this->once())->method('getResource')->willReturn($childCategoryResource);
+        $childCategory->expects($this->once())->method('setUrlPath')->with('generated_url_path')->willReturnSelf();
         $childCategoryResource->expects($this->once())->method('saveAttribute')->with($childCategory, 'url_path');
-        $childCategory->expects($this->once())->method('setUrlPath')->with('category-url_path')->willReturnSelf();
-        $this->categoryUrlPathGenerator->expects($this->any())->method('getUrlPath')->willReturn('category-url_path');
 
         $this->categoryUrlPathAutogeneratorObserver->execute($this->observer);
     }
diff --git a/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurablePriceResolver.php b/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurablePriceResolver.php
index d04e4fb79f2..a4fe3d76da2 100644
--- a/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurablePriceResolver.php
+++ b/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurablePriceResolver.php
@@ -50,7 +50,7 @@ class ConfigurablePriceResolver implements PriceResolverInterface
         }
         if (!$price) {
             throw new \Magento\Framework\Exception\LocalizedException(
-                __('Configurable product "%s" do not have sub-products', $product->getName())
+                __('Configurable product "%1" do not have sub-products', $product->getName())
             );
         }
         return (float)$price;
-- 
GitLab


From 3fbd42a013dff2ade85e589bd17c538a8ebcd4a1 Mon Sep 17 00:00:00 2001
From: Ivan Gavryshko <igavryshko@ebay.com>
Date: Tue, 27 Oct 2015 08:50:56 -0500
Subject: [PATCH 344/370] MAGETWO-43906: Long database prefix length breaks
 setup

- fixed functional test
---
 .../tests/app/Magento/Install/Test/TestCase/InstallTest.xml     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dev/tests/functional/tests/app/Magento/Install/Test/TestCase/InstallTest.xml b/dev/tests/functional/tests/app/Magento/Install/Test/TestCase/InstallTest.xml
index c3b207ff397..003d21fdf59 100644
--- a/dev/tests/functional/tests/app/Magento/Install/Test/TestCase/InstallTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Install/Test/TestCase/InstallTest.xml
@@ -38,7 +38,7 @@
         <variation name="InstallTestVariation4">
             <data name="description" xsi:type="string">Install with table prefix.</data>
             <data name="user/dataset" xsi:type="string">default</data>
-            <data name="install/dbTablePrefix" xsi:type="string">prefix1_</data>
+            <data name="install/dbTablePrefix" xsi:type="string">pref_</data>
             <data name="install/storeLanguage" xsi:type="string">Chinese (China)</data>
             <constraint name="Magento\Install\Test\Constraint\AssertSuccessInstall" />
             <constraint name="Magento\User\Test\Constraint\AssertUserSuccessLogin" />
-- 
GitLab


From 4db50186d91abbf52b72093a90dc283a619288e2 Mon Sep 17 00:00:00 2001
From: Anton Ohorodnyk <aohorodnyk@ebay.com>
Date: Tue, 27 Oct 2015 16:36:52 +0200
Subject: [PATCH 345/370] MAGETWO-44555: Exception in Advanced Search if used
 special symbols

 - Fixed Binder and Cleaner
---
 .../Search/Adapter/Mysql/Query/Builder/Match.php | 16 +++++++++++-----
 .../Magento/Framework/Search/Request/Binder.php  |  1 +
 .../Magento/Framework/Search/Request/Cleaner.php |  8 ++++----
 3 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/lib/internal/Magento/Framework/Search/Adapter/Mysql/Query/Builder/Match.php b/lib/internal/Magento/Framework/Search/Adapter/Mysql/Query/Builder/Match.php
index a19e9dc04de..32e05031cba 100644
--- a/lib/internal/Magento/Framework/Search/Adapter/Mysql/Query/Builder/Match.php
+++ b/lib/internal/Magento/Framework/Search/Adapter/Mysql/Query/Builder/Match.php
@@ -12,17 +12,18 @@ use Magento\Framework\Search\Adapter\Mysql\Field\ResolverInterface;
 use Magento\Framework\Search\Adapter\Mysql\ScoreBuilder;
 use Magento\Framework\Search\Request\Query\BoolExpression;
 use Magento\Framework\Search\Request\QueryInterface as RequestQueryInterface;
+use Zend_Db_Expr;
 
 class Match implements QueryInterface
 {
-    const SPECIAL_CHARACTERS = '-+~/\\<>\'":*$#@()!,.?`=%';
+    const SPECIAL_CHARACTERS = '-+~/\<>\'":*$#@()!,.?`=%^';
 
     const MINIMAL_CHARACTER_LENGTH = 3;
 
     /**
      * @var string[]
      */
-    private $replaceSymbols = [];
+    private $pattern = [];
 
     /**
      * @var ResolverInterface
@@ -50,7 +51,12 @@ class Match implements QueryInterface
         $fulltextSearchMode = Fulltext::FULLTEXT_MODE_BOOLEAN
     ) {
         $this->resolver = $resolver;
-        $this->replaceSymbols = str_split(self::SPECIAL_CHARACTERS, 1);
+        $characters = str_split(self::SPECIAL_CHARACTERS, 1);
+        foreach ($characters as $key => $value) {
+            $characters[$key] = "\\{$value}";
+        }
+        $characters = implode('', $characters);
+        $this->pattern = $characters = "/([{$characters}])/";
         $this->fulltextHelper = $fulltextHelper;
         $this->fulltextSearchMode = $fulltextSearchMode;
     }
@@ -85,7 +91,7 @@ class Match implements QueryInterface
 
         $matchQuery = $this->fulltextHelper->getMatchQuery(
             $columns,
-            $queryValue,
+            new Zend_Db_Expr($queryValue),
             $this->fulltextSearchMode
         );
         $scoreBuilder->addCondition($matchQuery, true);
@@ -106,7 +112,7 @@ class Match implements QueryInterface
      */
     protected function prepareQuery($queryValue, $conditionType)
     {
-        $queryValue = str_replace($this->replaceSymbols, ' ', $queryValue);
+        $queryValue = preg_replace($this->pattern, '\\\\$1', $queryValue);
 
         $stringPrefix = '';
         if ($conditionType === BoolExpression::QUERY_CONDITION_MUST) {
diff --git a/lib/internal/Magento/Framework/Search/Request/Binder.php b/lib/internal/Magento/Framework/Search/Request/Binder.php
index a6ec65f1751..689181f152f 100644
--- a/lib/internal/Magento/Framework/Search/Request/Binder.php
+++ b/lib/internal/Magento/Framework/Search/Request/Binder.php
@@ -81,6 +81,7 @@ class Binder
                         } else {
                             $data[$key] = $bindValue;
                         }
+                        $data['is_bind'] = true;
                     }
                 }
             }
diff --git a/lib/internal/Magento/Framework/Search/Request/Cleaner.php b/lib/internal/Magento/Framework/Search/Request/Cleaner.php
index bb54ad8be0d..6e8a9c4494e 100644
--- a/lib/internal/Magento/Framework/Search/Request/Cleaner.php
+++ b/lib/internal/Magento/Framework/Search/Request/Cleaner.php
@@ -90,8 +90,7 @@ class Cleaner
                 }
                 break;
             case QueryInterface::TYPE_MATCH:
-                if (preg_match('/\$(.+)\$/si', $query['value'], $matches)
-                    && !preg_match('/^\$+$/si', $query['value'], $matches)) {
+                if (!array_key_exists('is_bind', $query)) {
                     unset($this->requestData['queries'][$queryName]);
                 }
                 break;
@@ -131,8 +130,9 @@ class Cleaner
                 foreach ($this->requestData['aggregations'] as $aggregationName => $aggregationValue) {
                     switch ($aggregationValue['type']) {
                         case 'dynamicBucket':
-                            if (is_string($aggregationValue['method'])
-                                && preg_match('/\$(.+)\$/si', $aggregationValue['method'])
+                            if (
+                                !array_key_exists('is_bind', $aggregationValue)
+                                && is_string($aggregationValue['method'])
                             ) {
                                 unset($this->requestData['aggregations'][$aggregationName]);
                             }
-- 
GitLab


From 872a24b1fee33a9e4ead6ac816d4260730884e2b Mon Sep 17 00:00:00 2001
From: Dmitry Kologrivov <dmitry_kologrivov@epam.com>
Date: Tue, 27 Oct 2015 18:30:57 +0300
Subject: [PATCH 346/370] Fix csmd for fixes of PR

---
 .../Block/Adminhtml/Product/Edit/NewVideo.php       | 13 ++++++-------
 .../Model/Plugin/ExternalVideoEntryProcessor.php    |  1 +
 .../Model/Plugin/ExternalVideoResourceBackend.php   |  2 +-
 3 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php b/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
index 94249c205fd..473e44373b7 100644
--- a/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
+++ b/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
@@ -34,18 +34,18 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
-     * @param \Magento\ProductVideo\Helper\Media $mediaHelper
-     * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Data\FormFactory $formFactory
+     * @param \Magento\ProductVideo\Helper\Media $mediaHelper
+     * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
-        \Magento\ProductVideo\Helper\Media $mediaHelper,
-        \Magento\Framework\Json\EncoderInterface $jsonEncoder,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Data\FormFactory $formFactory,
+        \Magento\ProductVideo\Helper\Media $mediaHelper,
+        \Magento\Framework\Json\EncoderInterface $jsonEncoder,
         array $data = []
     ) {
         parent::__construct($context, $registry, $formFactory, $data);
@@ -269,11 +269,10 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
     protected function getNoteVideoUrl()
     {
         $result = __('YouTube and Vimeo supported.');
-        if (is_null($this->mediaHelper->getYouTubeApiKey())) {
+        if ($this->mediaHelper->getYouTubeApiKey() === null) {
             $result = __(
                 'Vimeo supported.<br />'
-                . 'To add YouTube video, please <a href="%1">enter YouTube API Key</a> first.'
-                ,
+                . 'To add YouTube video, please <a href="%1">enter YouTube API Key</a> first.',
                 $this->getConfigApiKeyUrl()
             );
         }
diff --git a/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoEntryProcessor.php b/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoEntryProcessor.php
index 1ac182f9039..1ec18643158 100644
--- a/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoEntryProcessor.php
+++ b/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoEntryProcessor.php
@@ -48,6 +48,7 @@ class ExternalVideoEntryProcessor
 
     /**
      * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media $resourceEntryMediaGallery
+     * @param \Magento\ProductVideo\Model\ResourceModel\Video $videoResourceModel
      */
     public function __construct(
         \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media $resourceEntryMediaGallery,
diff --git a/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoResourceBackend.php b/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoResourceBackend.php
index 089c4149e57..e29ce8831c9 100644
--- a/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoResourceBackend.php
+++ b/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoResourceBackend.php
@@ -36,7 +36,7 @@ class ExternalVideoResourceBackend
     public function afterDuplicate(Media $originalResourceModel, array $valueIdMap)
     {
         $mediaGalleryEntitiesData = $this->videoResourceModel->loadByIds(array_keys($valueIdMap));
-        foreach($mediaGalleryEntitiesData as $row) {
+        foreach ($mediaGalleryEntitiesData as $row) {
             $row['value_id'] = $valueIdMap[$row['value_id']];
             $this->videoResourceModel->insertOnDuplicate($row);
         }
-- 
GitLab


From 6f5aac85183889a8f1f8470f254ed5dd0befdefb Mon Sep 17 00:00:00 2001
From: Anton Ohorodnyk <aohorodnyk@ebay.com>
Date: Tue, 27 Oct 2015 17:33:53 +0200
Subject: [PATCH 347/370] MAGETWO-44555: Exception in Advanced Search if used
 special symbols

 - Added symbols
---
 .../Search/Adapter/Mysql/Query/Builder/Match.php | 16 +++++-----------
 1 file changed, 5 insertions(+), 11 deletions(-)

diff --git a/lib/internal/Magento/Framework/Search/Adapter/Mysql/Query/Builder/Match.php b/lib/internal/Magento/Framework/Search/Adapter/Mysql/Query/Builder/Match.php
index 32e05031cba..927dfb10f4c 100644
--- a/lib/internal/Magento/Framework/Search/Adapter/Mysql/Query/Builder/Match.php
+++ b/lib/internal/Magento/Framework/Search/Adapter/Mysql/Query/Builder/Match.php
@@ -12,18 +12,17 @@ use Magento\Framework\Search\Adapter\Mysql\Field\ResolverInterface;
 use Magento\Framework\Search\Adapter\Mysql\ScoreBuilder;
 use Magento\Framework\Search\Request\Query\BoolExpression;
 use Magento\Framework\Search\Request\QueryInterface as RequestQueryInterface;
-use Zend_Db_Expr;
 
 class Match implements QueryInterface
 {
-    const SPECIAL_CHARACTERS = '-+~/\<>\'":*$#@()!,.?`=%^';
+    const SPECIAL_CHARACTERS = '-+~/\\<>\'":*$#@()!,.?`=%&^_';
 
     const MINIMAL_CHARACTER_LENGTH = 3;
 
     /**
      * @var string[]
      */
-    private $pattern = [];
+    private $replaceSymbols = [];
 
     /**
      * @var ResolverInterface
@@ -51,12 +50,7 @@ class Match implements QueryInterface
         $fulltextSearchMode = Fulltext::FULLTEXT_MODE_BOOLEAN
     ) {
         $this->resolver = $resolver;
-        $characters = str_split(self::SPECIAL_CHARACTERS, 1);
-        foreach ($characters as $key => $value) {
-            $characters[$key] = "\\{$value}";
-        }
-        $characters = implode('', $characters);
-        $this->pattern = $characters = "/([{$characters}])/";
+        $this->replaceSymbols = str_split(self::SPECIAL_CHARACTERS, 1);
         $this->fulltextHelper = $fulltextHelper;
         $this->fulltextSearchMode = $fulltextSearchMode;
     }
@@ -91,7 +85,7 @@ class Match implements QueryInterface
 
         $matchQuery = $this->fulltextHelper->getMatchQuery(
             $columns,
-            new Zend_Db_Expr($queryValue),
+            $queryValue,
             $this->fulltextSearchMode
         );
         $scoreBuilder->addCondition($matchQuery, true);
@@ -112,7 +106,7 @@ class Match implements QueryInterface
      */
     protected function prepareQuery($queryValue, $conditionType)
     {
-        $queryValue = preg_replace($this->pattern, '\\\\$1', $queryValue);
+        $queryValue = str_replace($this->replaceSymbols, ' ', $queryValue);
 
         $stringPrefix = '';
         if ($conditionType === BoolExpression::QUERY_CONDITION_MUST) {
-- 
GitLab


From 23d0eb58f64651fb3b0b34e0a6691940e8f8dc54 Mon Sep 17 00:00:00 2001
From: Oleh Posyniak <oposyniak@ebay.com>
Date: Tue, 27 Oct 2015 17:45:14 +0200
Subject: [PATCH 348/370] MAGETWO-42984: Remove Section from Customer Data

---
 setup/performance-toolkit/benchmark.jmx | 114 ++++++++++++------------
 1 file changed, 57 insertions(+), 57 deletions(-)

diff --git a/setup/performance-toolkit/benchmark.jmx b/setup/performance-toolkit/benchmark.jmx
index af73293f01a..c5060028b34 100644
--- a/setup/performance-toolkit/benchmark.jmx
+++ b/setup/performance-toolkit/benchmark.jmx
@@ -1890,7 +1890,7 @@ vars.put("testLabel", "CatProdBrows");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -1929,7 +1929,7 @@ vars.put("testLabel", "CatProdBrows");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -1981,7 +1981,7 @@ vars.put("testLabel", "CatProdBrows");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -2020,7 +2020,7 @@ vars.put("testLabel", "CatProdBrows");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -2103,7 +2103,7 @@ vars.put("testLabel", "CatProdBrows");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -2142,7 +2142,7 @@ vars.put("testLabel", "CatProdBrows");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -2225,7 +2225,7 @@ vars.put("testLabel", "CatProdBrows");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -2264,7 +2264,7 @@ vars.put("testLabel", "CatProdBrows");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -2621,7 +2621,7 @@ vars.put("loadType", "Guest");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -2660,7 +2660,7 @@ vars.put("loadType", "Guest");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -2712,7 +2712,7 @@ vars.put("loadType", "Guest");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -2751,7 +2751,7 @@ vars.put("loadType", "Guest");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -2863,7 +2863,7 @@ vars.put("loadType", "Guest");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">cart,banner,messages</stringProp>
+            <stringProp name="Argument.value">cart,messages</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -2982,7 +2982,7 @@ vars.put("loadType", "Guest");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -3021,7 +3021,7 @@ vars.put("loadType", "Guest");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -3132,7 +3132,7 @@ vars.put("loadType", "Guest");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">cart,banner,messages</stringProp>
+            <stringProp name="Argument.value">cart,messages</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -3254,7 +3254,7 @@ vars.put("loadType", "Guest");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -3293,7 +3293,7 @@ vars.put("loadType", "Guest");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -3411,7 +3411,7 @@ vars.put("loadType", "Guest");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">cart,banner,messages</stringProp>
+            <stringProp name="Argument.value">cart,messages</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -3807,7 +3807,7 @@ vars.put("loadType", "Guest");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -3846,7 +3846,7 @@ vars.put("loadType", "Guest");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -3898,7 +3898,7 @@ vars.put("loadType", "Guest");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -3937,7 +3937,7 @@ vars.put("loadType", "Guest");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -4049,7 +4049,7 @@ vars.put("loadType", "Guest");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">cart,banner,messages</stringProp>
+            <stringProp name="Argument.value">cart,messages</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -4168,7 +4168,7 @@ vars.put("loadType", "Guest");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -4207,7 +4207,7 @@ vars.put("loadType", "Guest");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -4318,7 +4318,7 @@ vars.put("loadType", "Guest");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">cart,banner,messages</stringProp>
+            <stringProp name="Argument.value">cart,messages</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -4440,7 +4440,7 @@ vars.put("loadType", "Guest");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -4479,7 +4479,7 @@ vars.put("loadType", "Guest");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -4597,7 +4597,7 @@ vars.put("loadType", "Guest");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">cart,banner,messages</stringProp>
+            <stringProp name="Argument.value">cart,messages</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -4767,7 +4767,7 @@ vars.put("loadType", "Guest");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -4806,7 +4806,7 @@ vars.put("loadType", "Guest");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -5074,7 +5074,7 @@ vars.put("loadType", "Guest");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -5113,7 +5113,7 @@ vars.put("loadType", "Guest");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -5243,7 +5243,7 @@ vars.put("loadType", "Guest");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -5282,7 +5282,7 @@ vars.put("loadType", "Guest");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -5520,7 +5520,7 @@ vars.put("loadType", "Customer");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -5559,7 +5559,7 @@ vars.put("loadType", "Customer");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -5728,7 +5728,7 @@ vars.put("loadType", "Customer");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -5767,7 +5767,7 @@ vars.put("loadType", "Customer");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -5839,7 +5839,7 @@ vars.put("loadType", "Customer");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -5878,7 +5878,7 @@ vars.put("loadType", "Customer");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -5930,7 +5930,7 @@ vars.put("loadType", "Customer");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -5969,7 +5969,7 @@ vars.put("loadType", "Customer");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -6081,7 +6081,7 @@ vars.put("loadType", "Customer");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">cart,banner,messages</stringProp>
+            <stringProp name="Argument.value">cart,messages</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -6200,7 +6200,7 @@ vars.put("loadType", "Customer");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -6239,7 +6239,7 @@ vars.put("loadType", "Customer");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -6350,7 +6350,7 @@ vars.put("loadType", "Customer");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">cart,banner,messages</stringProp>
+            <stringProp name="Argument.value">cart,messages</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -6472,7 +6472,7 @@ vars.put("loadType", "Customer");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -6511,7 +6511,7 @@ vars.put("loadType", "Customer");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -6629,7 +6629,7 @@ vars.put("loadType", "Customer");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">cart,banner,messages</stringProp>
+            <stringProp name="Argument.value">cart,messages</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -6839,7 +6839,7 @@ vars.put("loadType", "Customer");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -6878,7 +6878,7 @@ vars.put("loadType", "Customer");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -6957,7 +6957,7 @@ vars.put("loadType", "Customer");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -6996,7 +6996,7 @@ vars.put("loadType", "Customer");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
@@ -7113,7 +7113,7 @@ vars.put("loadType", "Customer");</stringProp>
         <collectionProp name="Arguments.arguments">
           <elementProp name="sections" elementType="HTTPArgument">
             <boolProp name="HTTPArgument.always_encode">true</boolProp>
-            <stringProp name="Argument.value">banner</stringProp>
+            <stringProp name="Argument.value">customer</stringProp>
             <stringProp name="Argument.metadata">=</stringProp>
             <boolProp name="HTTPArgument.use_equals">true</boolProp>
             <stringProp name="Argument.name">sections</stringProp>
@@ -7152,7 +7152,7 @@ vars.put("loadType", "Customer");</stringProp>
     <hashTree>
       <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
         <collectionProp name="Asserion.test_strings">
-          <stringProp name="-1898134910">\"banner\":</stringProp>
+          <stringProp name="1393473040">\"customer\":</stringProp>
         </collectionProp>
         <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
         <boolProp name="Assertion.assume_success">false</boolProp>
-- 
GitLab


From 7e034113fcb9f5867dac6505c390ed46ccbeb69c Mon Sep 17 00:00:00 2001
From: Michail Slabko <mslabko@ebay.com>
Date: Tue, 27 Oct 2015 17:57:59 +0200
Subject: [PATCH 349/370] MAGETWO-36162: Unable to change some product
 information corresponding to all store view (storeId = 0) in multiwebsite
 structure through API service

- rollback to save with resourceModel
---
 app/code/Magento/Catalog/Model/ProductRepository.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Catalog/Model/ProductRepository.php b/app/code/Magento/Catalog/Model/ProductRepository.php
index c5fd198ebc9..ccd62fb3d33 100644
--- a/app/code/Magento/Catalog/Model/ProductRepository.php
+++ b/app/code/Magento/Catalog/Model/ProductRepository.php
@@ -586,7 +586,7 @@ class ProductRepository implements \Magento\Catalog\Api\ProductRepositoryInterfa
             if ($tierPrices !== null) {
                 $product->setData('tier_price', $tierPrices);
             }
-            $product->save();
+            $this->resourceModel->save($product);
         } catch (\Magento\Eav\Model\Entity\Attribute\Exception $exception) {
             throw \Magento\Framework\Exception\InputException::invalidFieldValue(
                 $exception->getAttributeCode(),
-- 
GitLab


From f9f7c02ad06f6c9e1729bcd1548e564e591acdfb Mon Sep 17 00:00:00 2001
From: Michail Slabko <mslabko@ebay.com>
Date: Tue, 27 Oct 2015 18:39:26 +0200
Subject: [PATCH 350/370] MAGETWO-36162: Unable to change some product
 information corresponding to all store view (storeId = 0) in multiwebsite
 structure through API service

- price is not needed for configurable product
---
 .../Magento/ConfigurableProduct/Api/ProductRepositoryTest.php    | 1 -
 1 file changed, 1 deletion(-)

diff --git a/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/ProductRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/ProductRepositoryTest.php
index e8719f6f4e2..21f313bcf0c 100644
--- a/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/ProductRepositoryTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/ProductRepositoryTest.php
@@ -126,7 +126,6 @@ class ProductRepositoryTest extends WebapiAbstract
 
         $response = $this->createConfigurableProduct();
         $this->assertEquals(self::CONFIGURABLE_PRODUCT_SKU, $response[ProductInterface::SKU]);
-        $this->assertEquals(50, $response['price']);
         $this->assertTrue(
             isset($response[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]["configurable_product_options"])
         );
-- 
GitLab


From b17b105108031af9cea43aa95a3b5a3eb000b4b8 Mon Sep 17 00:00:00 2001
From: Andrii Lugovyi <alugovyi@ebay.com>
Date: Tue, 27 Oct 2015 18:48:26 +0200
Subject: [PATCH 351/370] MAGETWO-43464: Loaded files display twice if edit
 downloadable product

- fix static test
---
 .../Api/ProductWebsiteLinkRepositoryInterface.php        | 2 +-
 .../CatalogUrlRewrite/Service/V1/StoreViewService.php    | 1 +
 .../CategoryUrlPathAutogeneratorObserverTest.php         | 9 +++++++--
 .../Catalog/Product/Edit/Tab/Downloadable/Links.php      | 2 +-
 .../templates/product/edit/downloadable/links.phtml      | 4 ++--
 5 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/app/code/Magento/Catalog/Api/ProductWebsiteLinkRepositoryInterface.php b/app/code/Magento/Catalog/Api/ProductWebsiteLinkRepositoryInterface.php
index 67f73d354a5..55e875c2cfd 100644
--- a/app/code/Magento/Catalog/Api/ProductWebsiteLinkRepositoryInterface.php
+++ b/app/code/Magento/Catalog/Api/ProductWebsiteLinkRepositoryInterface.php
@@ -39,4 +39,4 @@ interface ProductWebsiteLinkRepositoryInterface
      * @throws \Magento\Framework\Exception\CouldNotSaveException
      */
     public function deleteById($sku, $websiteId);
-}
\ No newline at end of file
+}
diff --git a/app/code/Magento/CatalogUrlRewrite/Service/V1/StoreViewService.php b/app/code/Magento/CatalogUrlRewrite/Service/V1/StoreViewService.php
index 86cd085a796..71e33a74111 100644
--- a/app/code/Magento/CatalogUrlRewrite/Service/V1/StoreViewService.php
+++ b/app/code/Magento/CatalogUrlRewrite/Service/V1/StoreViewService.php
@@ -69,6 +69,7 @@ class StoreViewService
      * @param int $storeId
      * @param int $entityId
      * @param string $entityType
+     * @param mixed $attributeName
      * @throws \InvalidArgumentException
      * @return bool
      */
diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/CategoryUrlPathAutogeneratorObserverTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/CategoryUrlPathAutogeneratorObserverTest.php
index de1f7fe6c02..e400fe924c6 100644
--- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/CategoryUrlPathAutogeneratorObserverTest.php
+++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/CategoryUrlPathAutogeneratorObserverTest.php
@@ -65,8 +65,13 @@ class CategoryUrlPathAutogeneratorObserverTest extends \PHPUnit_Framework_TestCa
             'Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider'
         );
 
-        $this->storeViewService = $this->getMock('Magento\CatalogUrlRewrite\Service\V1\StoreViewService', [], [], '',
-            false);
+        $this->storeViewService = $this->getMock(
+            'Magento\CatalogUrlRewrite\Service\V1\StoreViewService',
+            [],
+            [],
+            '',
+            false
+        );
 
         $this->categoryUrlPathAutogeneratorObserver = (new ObjectManagerHelper($this))->getObject(
             'Magento\CatalogUrlRewrite\Observer\CategoryUrlPathAutogeneratorObserver',
diff --git a/app/code/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.php b/app/code/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.php
index dd31516d03a..ee184dff0e6 100644
--- a/app/code/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.php
+++ b/app/code/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.php
@@ -161,7 +161,7 @@ class Links extends \Magento\Backend\Block\Template
      *
      * @return bool
      */
-    public function getProductLinksCanBePurchasedSeparately()
+    public function isProductLinksCanBePurchasedSeparately()
     {
         return (bool) $this->getProduct()->getData('links_purchased_separately');
     }
diff --git a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
index 70c90cf8416..909ab56b200 100644
--- a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
+++ b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
@@ -40,7 +40,7 @@
                         <input type="radio" name="product[links_purchased_separately]" value="1"
                                class="admin__control-radio"
                                id="link-switcher1"
-                           <?php if($block->getProductLinksCanBePurchasedSeparately()): ?>
+                           <?php if($block->isProductLinksCanBePurchasedSeparately()): ?>
                                checked="checked"
                            <?php endif; ?>
                             >
@@ -52,7 +52,7 @@
                         <input type="radio" name="product[links_purchased_separately]" value="0"
                                 class="admin__control-radio"
                                 id="link-switcher0"
-                            <?php if(!$block->getProductLinksCanBePurchasedSeparately()): ?>
+                            <?php if(!$block->isProductLinksCanBePurchasedSeparately()): ?>
                                 checked="checked"
                             <?php endif; ?>
                             >
-- 
GitLab


From a75c17fcee4d176eaacf9c633fe42b27eda17bbd Mon Sep 17 00:00:00 2001
From: Dmitry Kologrivov <dmitry_kologrivov@epam.com>
Date: Tue, 27 Oct 2015 19:59:41 +0300
Subject: [PATCH 352/370] Fix phpcs/phpmd for JS

---
 .../web/catalog/base-image-uploader.js        |    2 +-
 .../adminhtml/web/catalog/category/edit.js    |    2 +-
 .../catalog/product/composite/configure.js    |    4 +-
 .../view/adminhtml/web/js/product-gallery.js  |    4 +-
 .../frontend/web/js/catalog-add-to-cart.js    |    2 +-
 .../adminhtml/web/js/get-video-information.js | 1176 ++++++++---------
 .../view/adminhtml/web/js/new-video-dialog.js |   14 +-
 .../web/js/fotorama-add-video-events.js       |    2 +-
 8 files changed, 603 insertions(+), 603 deletions(-)

diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/base-image-uploader.js b/app/code/Magento/Catalog/view/adminhtml/web/catalog/base-image-uploader.js
index de62ea60219..2d02bf2b97f 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/catalog/base-image-uploader.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/base-image-uploader.js
@@ -38,7 +38,7 @@ define([
 
             var findElement = function (data) {
                 return $container.find('.image:not(.image-placeholder)').filter(function () {
-                    if(!$(this).data('image')) {
+                    if (!$(this).data('image')) {
                         return false;
                     }
                     return $(this).data('image').file === data.file;
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/category/edit.js b/app/code/Magento/Catalog/view/adminhtml/web/catalog/category/edit.js
index b56225bc6ea..51fed1ebfec 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/catalog/category/edit.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/category/edit.js
@@ -20,7 +20,7 @@ define([
 
     var params = {};
     var fields = $('category_edit_form').getElementsBySelector('input', 'select');
-    for(var i=0;i<fields.length;i++){
+    for (var i=0; i<fields.length; i++) {
         if (!fields[i].name) {
             continue;
         }
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js
index 1b5fbe954b8..f63c2a7d8f7 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js
@@ -703,7 +703,9 @@ define([
                             mageData.scripts.map(function(script) {
                                 return eval(script);
                             });
-                        } catch (e) {}
+                        } catch (e) {
+
+                        }
                         this.restorePhase = false;
                     }
                     break;
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/product-gallery.js b/app/code/Magento/Catalog/view/adminhtml/web/js/product-gallery.js
index 45ee5c2d5c9..4fef5dbb066 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/js/product-gallery.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/js/product-gallery.js
@@ -301,7 +301,7 @@ define([
          * @private
          */
         _onOpenDialog: function(e, imageData) {
-            if(imageData.media_type && imageData.media_type != 'image') {
+            if (imageData.media_type && imageData.media_type != 'image') {
                 return;
             }
             this._showDialog(imageData);
@@ -315,7 +315,7 @@ define([
         _showDialog: function (imageData) {
             var $imageContainer = this.findElement(imageData);
             var dialogElement = $imageContainer.data('dialog');
-            if(!this.dialogTmpl) {
+            if (!this.dialogTmpl) {
                 alert('System problem!');
                 return;
             }
diff --git a/app/code/Magento/Catalog/view/frontend/web/js/catalog-add-to-cart.js b/app/code/Magento/Catalog/view/frontend/web/js/catalog-add-to-cart.js
index 02898a8e87f..dadc7e8bbb2 100644
--- a/app/code/Magento/Catalog/view/frontend/web/js/catalog-add-to-cart.js
+++ b/app/code/Magento/Catalog/view/frontend/web/js/catalog-add-to-cart.js
@@ -46,7 +46,7 @@ define([
 
         submitForm: function(form) {
             var self = this;
-            if (form.has('input[type="file"]').length  && form.find('input[type="file"]').val() !== '') {
+            if (form.has('input[type="file"]').length && form.find('input[type="file"]').val() !== '') {
                 self.element.off('submit');
                 form.submit();
             } else {
diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
index 76cf3f98771..e5236816627 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
+++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
@@ -1,588 +1,588 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-/*jshint browser:true jquery:true*/
-require([
-        'jquery',
-        'Magento_Ui/js/modal/alert',
-        'jquery/ui'
-    ],
-    function ($, alert) {
-        'use strict';
-
-        var videoRegister = {
-            _register: {},
-
-            /**
-             * Checks, if api is already registered
-             *
-             * @param {String} api
-             * @returns {bool}
-             */
-            isRegistered: function (api) {
-                return this._register[api] !== undefined;
-            },
-
-            /**
-             * Checks, if api is loaded
-             *
-             * @param {String} api
-             * @returns {bool}
-             */
-            isLoaded: function (api) {
-                return this._register[api] !== undefined && this._register[api] === true;
-            },
-
-            /**
-             * Register new video api
-             * @param {String} api
-             * @param {bool} loaded
-             */
-            register: function (api, loaded) {
-                loaded = loaded || false;
-                this._register[api] = loaded;
-            }
-        };
-
-        $.widget('mage.productVideoLoader', {
-
-            /**
-             * @private
-             */
-            _create: function () {
-                switch (this.element.data('type')) {
-                    case 'youtube':
-                        this.element.videoYoutube();
-                        this._player = this.element.data('mageVideoYoutube');
-                        break;
-
-                    case 'vimeo':
-                        this.element.videoVimeo();
-                        this._player = this.element.data('mageVideoVimeo');
-                        break;
-                    default:
-                        throw {
-                            name: 'Video Error',
-                            message: 'Unknown video type',
-
-                            /**
-                             * Return string
-                             */
-                            toString: function () {
-                                return this.name + ': ' + this.message;
-                            }
-                        };
-                }
-            },
-
-            /**
-             * Initializes variables
-             * @private
-             */
-            _initialize: function () {
-                this._params = this.element.data('params') || {};
-                this._code = this.element.data('code');
-                this._width = this.element.data('width');
-                this._height = this.element.data('height');
-                this._autoplay = !!this.element.data('autoplay');
-                this._playing = this._autoplay || false;
-
-                this._responsive = this.element.data('responsive') !== false;
-
-                if (this._responsive === true) {
-                    this.element.addClass('responsive');
-                }
-
-                this._calculateRatio();
-            },
-
-            /**
-             * Abstract play command
-             */
-            play: function () {
-                this._player.play();
-            },
-
-            /**
-             * Abstract pause command
-             */
-            pause: function () {
-                this._player.pause();
-            },
-
-            /**
-             * Abstract stop command
-             */
-            stop: function () {
-                this._player.stop();
-            },
-
-            /**
-             * Abstract playing command
-             */
-            playing: function () {
-                return this._player.playing();
-            },
-
-            /**
-             * Abstract destroying command
-             */
-            destroy: function () {
-                this._player.destroy();
-            },
-
-            /**
-             * Calculates ratio for responsive videos
-             * @private
-             */
-            _calculateRatio: function () {
-                if (!this._responsive) {
-                    return;
-                }
-                this.element.css('paddingBottom', this._height / this._width * 100 + '%');
-            }
-        });
-
-        $.widget('mage.videoYoutube', $.mage.productVideoLoader, {
-
-            /**
-             * Initialization of the Youtube widget
-             * @private
-             */
-            _create: function () {
-                var self = this;
-
-                this._initialize();
-
-                this.element.append('<div/>');
-
-                this._on(window, {
-
-                    /**
-                     * Youtube state check
-                     * @private
-                     */
-                    'youtubeapiready': function () {
-                        if (self._player !== undefined) {
-                            return;
-                        }
-
-                        if (self._autoplay) {
-                            self._params.autoplay = 1;
-                        }
-                        self._params.rel = 0;
-
-                        self._player = new window.YT.Player(self.element.children(':first')[0], {
-                            height: self._height,
-                            width: self._width,
-                            videoId: self._code,
-                            playerVars: self._params,
-                            events: {
-
-                                /**
-                                 * @private
-                                 */
-                                'onReady': function onPlayerReady() {
-                                    self._player.getDuration();
-                                },
-
-                                /**
-                                 * State change flag init
-                                 */
-                                onStateChange: function (data) {
-                                    switch (window.parseInt(data.data, 10)) {
-                                        case 1:
-                                            self._playing = true;
-                                            break;
-                                        default:
-                                            self._playing = false;
-                                            break;
-                                    }
-
-                                    self._trigger('statechange', {}, data);
-                                }
-                            }
-
-                        });
-                    }
-                });
-
-                this._loadApi();
-            },
-
-            /**
-             * Loads Youtube API and triggers event, when loaded
-             * @private
-             */
-            _loadApi: function () {
-                var element,
-                    scriptTag;
-
-                if (videoRegister.isRegistered('youtube')) {
-                    if (videoRegister.isLoaded('youtube')) {
-                        $(window).trigger('youtubeapiready');
-                    }
-
-                    return;
-                }
-                videoRegister.register('youtube');
-
-                element = document.createElement('script');
-                scriptTag = document.getElementsByTagName('script')[0];
-
-                element.async = true;
-                element.src = 'https://www.youtube.com/iframe_api';
-                scriptTag.parentNode.insertBefore(element, scriptTag);
-
-                /**
-                 * Trigger youtube api ready event
-                 */
-                window.onYouTubeIframeAPIReady = function () {
-                    $(window).trigger('youtubeapiready');
-                    videoRegister.register('youtube', true);
-                };
-            },
-
-            /**
-             * Play command for Youtube
-             */
-            play: function () {
-                this._player.playVideo();
-                this._playing = true;
-            },
-
-            /**
-             * Pause command for Youtube
-             */
-            pause: function () {
-                this._player.pauseVideo();
-                this._playing = false;
-            },
-
-            /**
-             * Stop command for Youtube
-             */
-            stop: function () {
-                this._player.stopVideo();
-                this._playing = false;
-            },
-
-            /**
-             * Playing command for Youtube
-             */
-            playing: function () {
-                return this._playing;
-            },
-
-            /**
-             * stops and unloads player
-             * @private
-             */
-            destroy: function () {
-                this.stop();
-                this._player.destroy();
-            }
-        });
-
-        $.widget('mage.videoVimeo', $.mage.productVideoLoader, {
-
-            /**
-             * Initialize the Vimeo widget
-             * @private
-             */
-            _create: function () {
-                var timestamp,
-                    src,
-                    additionalParams;
-
-                this._initialize();
-                timestamp = new Date().getTime();
-
-                if (this._autoplay) {
-                    additionalParams += '&autoplay=1';
-                }
-
-                src = 'http://player.vimeo.com/video/' +
-                    this._code + '?api=1&player_id=vimeo' +
-                    this._code +
-                    timestamp +
-                    additionalParams;
-                this.element.append(
-                    $('<iframe/>')
-                        .attr('frameborder', 0)
-                        .attr('id', 'vimeo' + this._code + timestamp)
-                        .attr('width', this._width)
-                        .attr('height', this._height)
-                        .attr('src', src)
-                );
-
-            }
-        });
-
-        $.widget('mage.videoData', {
-            options: {
-                youtubeKey: '',
-                eventSource: '' //where is data going from - focus out or click on button
-            },
-
-            _REQUEST_VIDEO_INFORMATION_TRIGGER: 'update_video_information',
-
-            _UPDATE_VIDEO_INFORMATION_TRIGGER: 'updated_video_information',
-
-            _ERROR_UPDATE_INFORMATION_TRIGGER: 'error_updated_information',
-
-            _videoInformation: null,
-
-            /**
-             * @private
-             */
-            _init: function () {
-                this._onRequestHandler();
-            },
-
-            /**
-             * @private
-             */
-            _onRequestHandler: function () {
-                var url = this.element.val(),
-                    self = this,
-                    videoInfo,
-                    type,
-                    id,
-                    googleapisUrl;
-
-                if (!url) {
-                    //this._onRequestError("Video url is undefined");
-                    return;
-                }
-
-                videoInfo = this._validateURL(url);
-
-                if (!videoInfo) {
-                    this._onRequestError('Invalid video url');
-
-                    return;
-                }
-
-                /**
-                 *
-                 * @param {Object} data
-                 * @private
-                 */
-                function _onYouTubeLoaded(data) {
-                    var tmp,
-                        uploadedFormatted,
-                        respData,
-                        createErrorMessage;
-
-                    /**
-                     * Create errors message
-                     *
-                     * @returns {String}
-                     */
-                    createErrorMessage = function () {
-                        var error = data.error,
-                            errors = error.errors,
-                            i,
-                            errLength = errors.length,
-                            tmpError,
-                            errReason,
-                            errorsMessage = [];
-
-                        for (i = 0; i < errLength; i++) {
-                            tmpError = errors[i];
-                            errReason = tmpError.reason;
-
-                            if (['keyInvalid'].indexOf(errReason) !== -1) {
-                                errorsMessage.push('Youtube API key is invalid');
-
-                                break;
-                            }
-
-                            errorsMessage.push(tmpError.message);
-                        }
-
-                        return 'Video cant be shown due to the following reason: ' + $.unique(errorsMessage).join(', ');
-                    };
-
-                    if (data.error && data.error.code === 400) {
-                        this._onRequestError(createErrorMessage());
-
-                        return;
-                    }
-
-                    if (!data.items || data.items.length < 1) {
-                        this._onRequestError('Video not found');
-
-                        return;
-                    }
-
-                    tmp = data.items[0];
-                    uploadedFormatted = tmp.snippet.publishedAt.replace('T', ' ').replace(/\..+/g, '');
-                    respData = {
-                        duration: this._formatYoutubeDuration(tmp.contentDetails.duration),
-                        channel: tmp.snippet.channelTitle,
-                        channelId: tmp.snippet.channelId,
-                        uploaded: uploadedFormatted,
-                        title: tmp.snippet.localized.title,
-                        description: tmp.snippet.description,
-                        thumbnail: tmp.snippet.thumbnails.high.url,
-                        videoId: videoInfo.id,
-                        videoProvider: videoInfo.type
-                    };
-                    this._videoInformation = respData;
-                    this.element.trigger(this._UPDATE_VIDEO_INFORMATION_TRIGGER, respData);
-                }
-
-                /**
-                 * @private
-                 */
-                function _onVimeoLoaded(data) {
-                    var tmp = data[0],
-                        respData;
-
-                    if (data.length < 1) {
-                        this._onRequestError('Video not found');
-
-                        return null;
-                    }
-                    tmp = data[0];
-                    respData = {
-                        duration: this._formatVimeoDuration(tmp.duration),
-                        channel: tmp['user_name'],
-                        channelId: tmp['user_url'],
-                        uploaded: tmp['upload_date'],
-                        title: tmp.title,
-                        description: tmp.description.replace(/(&nbsp;|<([^>]+)>)/ig, ''),
-                        thumbnail: tmp['thumbnail_large'],
-                        videoId: videoInfo.id,
-                        videoProvider: videoInfo.type
-                    };
-                    this._videoInformation = respData;
-                    this.element.trigger(this._UPDATE_VIDEO_INFORMATION_TRIGGER, respData);
-                }
-
-                type = videoInfo.type;
-                id = videoInfo.id;
-
-                if (type === 'youtube') {
-                    googleapisUrl = 'https://www.googleapis.com/youtube/v3/videos?id=' +
-                        id +
-                        '&part=snippet,contentDetails,statistics,status&key=' +
-                        this.options.youtubeKey + '&alt=json&callback=?';
-                    $.getJSON(googleapisUrl,
-                        {
-                            format: 'json'
-                        },
-                        $.proxy(_onYouTubeLoaded, self)
-                    ).fail(
-                        function () {
-                            self._onRequestError('Video not found');
-                        }
-                    );
-                } else if (type === 'vimeo') {
-                    $.getJSON('http://www.vimeo.com/api/v2/video/' + id + '.json?callback=?',
-                        {
-                            format: 'json'
-                        },
-                        $.proxy(_onVimeoLoaded, self)
-                    ).fail(
-                        function () {
-                            self._onRequestError('Video not found');
-                        }
-                    );
-                }
-            },
-
-            /**
-             * @private
-             */
-            _onRequestError: function (error) {
-                this._videoInformation = null;
-                this.element.trigger(this._ERROR_UPDATE_INFORMATION_TRIGGER, error);
-                this.element.val('');
-                alert({
-                    content: 'Error: "' + error + '"'
-                });
-            },
-
-            /**
-             * @private
-             */
-            _formatYoutubeDuration: function (duration) {
-                var match = duration.match(/PT(\d+H)?(\d+M)?(\d+S)?/),
-                    hours = parseInt(match[1], 10) || 0,
-                    minutes = parseInt(match[2], 10) || 0,
-                    seconds = parseInt(match[3], 10) || 0;
-
-                return this._formatVimeoDuration(hours * 3600 + minutes * 60 + seconds);
-            },
-
-            /**
-             * @private
-             */
-            _formatVimeoDuration: function (seconds) {
-                return (new Date(seconds * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0];
-            },
-
-            /**
-             * @private
-             */
-            _parseHref: function (href) {
-                var a = document.createElement('a');
-
-                a.href = href;
-
-                return a;
-            },
-
-            /**
-             * @private
-             */
-            _validateURL: function (href, forceVideo) {
-                var id,
-                    type,
-                    ampersandPosition,
-                    vimeoRegex;
-
-                if (typeof href !== 'string') {
-                    return href;
-                }
-                href = this._parseHref(href);
-
-                if (href.host.match(/youtube\.com/) && href.search) {
-
-                    id = href.search.split('v=')[1];
-
-                    if (id) {
-                        ampersandPosition = id.indexOf('&');
-                        type = 'youtube';
-                    }
-
-                    if (id && ampersandPosition !== -1) {
-                        id = id.substring(0, ampersandPosition);
-                    }
-
-                } else if (href.host.match(/youtube\.com|youtu\.be/)) {
-                    id = href.pathname.replace(/^\/(embed\/|v\/)?/, '').replace(/\/.*/, '');
-                    type = 'youtube';
-                } else if (href.host.match(/vimeo\.com/)) {
-                    type = 'vimeo';
-                    vimeoRegex = new RegExp(['https?:\\/\\/(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)',
-                        '?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|video\\/|)(\\d+)(?:$|\\/|\\?)'
-                    ].join(''));
-                    id = href.href.match(vimeoRegex)[3];
-                }
-
-                if ((!id || !type) && forceVideo) {
-                    id = href.href;
-                    type = 'custom';
-                }
-
-                return id ? {
-                    id: id, type: type, s: href.search.replace(/^\?/, '')
-                } : false;
-            }
-        });
-    });
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+/*jshint browser:true jquery:true*/
+require([
+        'jquery',
+        'Magento_Ui/js/modal/alert',
+        'jquery/ui'
+    ],
+    function ($, alert) {
+        'use strict';
+
+        var videoRegister = {
+            _register: {},
+
+            /**
+             * Checks, if api is already registered
+             *
+             * @param {String} api
+             * @returns {bool}
+             */
+            isRegistered: function (api) {
+                return this._register[api] !== undefined;
+            },
+
+            /**
+             * Checks, if api is loaded
+             *
+             * @param {String} api
+             * @returns {bool}
+             */
+            isLoaded: function (api) {
+                return this._register[api] !== undefined && this._register[api] === true;
+            },
+
+            /**
+             * Register new video api
+             * @param {String} api
+             * @param {bool} loaded
+             */
+            register: function (api, loaded) {
+                loaded = loaded || false;
+                this._register[api] = loaded;
+            }
+        };
+
+        $.widget('mage.productVideoLoader', {
+
+            /**
+             * @private
+             */
+            _create: function () {
+                switch (this.element.data('type')) {
+                    case 'youtube':
+                        this.element.videoYoutube();
+                        this._player = this.element.data('mageVideoYoutube');
+                        break;
+
+                    case 'vimeo':
+                        this.element.videoVimeo();
+                        this._player = this.element.data('mageVideoVimeo');
+                        break;
+                    default:
+                        throw {
+                            name: 'Video Error',
+                            message: 'Unknown video type',
+
+                            /**
+                             * Return string
+                             */
+                            toString: function () {
+                                return this.name + ': ' + this.message;
+                            }
+                        };
+                }
+            },
+
+            /**
+             * Initializes variables
+             * @private
+             */
+            _initialize: function () {
+                this._params = this.element.data('params') || {};
+                this._code = this.element.data('code');
+                this._width = this.element.data('width');
+                this._height = this.element.data('height');
+                this._autoplay = !!this.element.data('autoplay');
+                this._playing = this._autoplay || false;
+
+                this._responsive = this.element.data('responsive') !== false;
+
+                if (this._responsive === true) {
+                    this.element.addClass('responsive');
+                }
+
+                this._calculateRatio();
+            },
+
+            /**
+             * Abstract play command
+             */
+            play: function () {
+                this._player.play();
+            },
+
+            /**
+             * Abstract pause command
+             */
+            pause: function () {
+                this._player.pause();
+            },
+
+            /**
+             * Abstract stop command
+             */
+            stop: function () {
+                this._player.stop();
+            },
+
+            /**
+             * Abstract playing command
+             */
+            playing: function () {
+                return this._player.playing();
+            },
+
+            /**
+             * Abstract destroying command
+             */
+            destroy: function () {
+                this._player.destroy();
+            },
+
+            /**
+             * Calculates ratio for responsive videos
+             * @private
+             */
+            _calculateRatio: function () {
+                if (!this._responsive) {
+                    return;
+                }
+                this.element.css('paddingBottom', this._height / this._width * 100 + '%');
+            }
+        });
+
+        $.widget('mage.videoYoutube', $.mage.productVideoLoader, {
+
+            /**
+             * Initialization of the Youtube widget
+             * @private
+             */
+            _create: function () {
+                var self = this;
+
+                this._initialize();
+
+                this.element.append('<div/>');
+
+                this._on(window, {
+
+                    /**
+                     * Youtube state check
+                     * @private
+                     */
+                    'youtubeapiready': function () {
+                        if (self._player !== undefined) {
+                            return;
+                        }
+
+                        if (self._autoplay) {
+                            self._params.autoplay = 1;
+                        }
+                        self._params.rel = 0;
+
+                        self._player = new window.YT.Player(self.element.children(':first')[0], {
+                            height: self._height,
+                            width: self._width,
+                            videoId: self._code,
+                            playerVars: self._params,
+                            events: {
+
+                                /**
+                                 * @private
+                                 */
+                                'onReady': function onPlayerReady() {
+                                    self._player.getDuration();
+                                },
+
+                                /**
+                                 * State change flag init
+                                 */
+                                onStateChange: function (data) {
+                                    switch (window.parseInt(data.data, 10)) {
+                                        case 1:
+                                            self._playing = true;
+                                            break;
+                                        default:
+                                            self._playing = false;
+                                            break;
+                                    }
+
+                                    self._trigger('statechange', {}, data);
+                                }
+                            }
+
+                        });
+                    }
+                });
+
+                this._loadApi();
+            },
+
+            /**
+             * Loads Youtube API and triggers event, when loaded
+             * @private
+             */
+            _loadApi: function () {
+                var element,
+                    scriptTag;
+
+                if (videoRegister.isRegistered('youtube')) {
+                    if (videoRegister.isLoaded('youtube')) {
+                        $(window).trigger('youtubeapiready');
+                    }
+
+                    return;
+                }
+                videoRegister.register('youtube');
+
+                element = document.createElement('script');
+                scriptTag = document.getElementsByTagName('script')[0];
+
+                element.async = true;
+                element.src = 'https://www.youtube.com/iframe_api';
+                scriptTag.parentNode.insertBefore(element, scriptTag);
+
+                /**
+                 * Trigger youtube api ready event
+                 */
+                window.onYouTubeIframeAPIReady = function () {
+                    $(window).trigger('youtubeapiready');
+                    videoRegister.register('youtube', true);
+                };
+            },
+
+            /**
+             * Play command for Youtube
+             */
+            play: function () {
+                this._player.playVideo();
+                this._playing = true;
+            },
+
+            /**
+             * Pause command for Youtube
+             */
+            pause: function () {
+                this._player.pauseVideo();
+                this._playing = false;
+            },
+
+            /**
+             * Stop command for Youtube
+             */
+            stop: function () {
+                this._player.stopVideo();
+                this._playing = false;
+            },
+
+            /**
+             * Playing command for Youtube
+             */
+            playing: function () {
+                return this._playing;
+            },
+
+            /**
+             * stops and unloads player
+             * @private
+             */
+            destroy: function () {
+                this.stop();
+                this._player.destroy();
+            }
+        });
+
+        $.widget('mage.videoVimeo', $.mage.productVideoLoader, {
+
+            /**
+             * Initialize the Vimeo widget
+             * @private
+             */
+            _create: function () {
+                var timestamp,
+                    src,
+                    additionalParams;
+
+                this._initialize();
+                timestamp = new Date().getTime();
+
+                if (this._autoplay) {
+                    additionalParams += '&autoplay=1';
+                }
+
+                src = 'http://player.vimeo.com/video/' +
+                    this._code + '?api=1&player_id=vimeo' +
+                    this._code +
+                    timestamp +
+                    additionalParams;
+                this.element.append(
+                    $('<iframe/>')
+                        .attr('frameborder', 0)
+                        .attr('id', 'vimeo' + this._code + timestamp)
+                        .attr('width', this._width)
+                        .attr('height', this._height)
+                        .attr('src', src)
+                );
+
+            }
+        });
+
+        $.widget('mage.videoData', {
+            options: {
+                youtubeKey: '',
+                eventSource: '' //where is data going from - focus out or click on button
+            },
+
+            _REQUEST_VIDEO_INFORMATION_TRIGGER: 'update_video_information',
+
+            _UPDATE_VIDEO_INFORMATION_TRIGGER: 'updated_video_information',
+
+            _ERROR_UPDATE_INFORMATION_TRIGGER: 'error_updated_information',
+
+            _videoInformation: null,
+
+            /**
+             * @private
+             */
+            _init: function () {
+                this._onRequestHandler();
+            },
+
+            /**
+             * @private
+             */
+            _onRequestHandler: function () {
+                var url = this.element.val(),
+                    self = this,
+                    videoInfo,
+                    type,
+                    id,
+                    googleapisUrl;
+
+                if (!url) {
+                    //this._onRequestError("Video url is undefined");
+                    return;
+                }
+
+                videoInfo = this._validateURL(url);
+
+                if (!videoInfo) {
+                    this._onRequestError('Invalid video url');
+
+                    return;
+                }
+
+                /**
+                 *
+                 * @param {Object} data
+                 * @private
+                 */
+                function _onYouTubeLoaded(data) {
+                    var tmp,
+                        uploadedFormatted,
+                        respData,
+                        createErrorMessage;
+
+                    /**
+                     * Create errors message
+                     *
+                     * @returns {String}
+                     */
+                    createErrorMessage = function () {
+                        var error = data.error,
+                            errors = error.errors,
+                            i,
+                            errLength = errors.length,
+                            tmpError,
+                            errReason,
+                            errorsMessage = [];
+
+                        for (i = 0; i < errLength; i++) {
+                            tmpError = errors[i];
+                            errReason = tmpError.reason;
+
+                            if (['keyInvalid'].indexOf(errReason) !== -1) {
+                                errorsMessage.push('Youtube API key is invalid');
+
+                                break;
+                            }
+
+                            errorsMessage.push(tmpError.message);
+                        }
+
+                        return 'Video cant be shown due to the following reason: ' + $.unique(errorsMessage).join(', ');
+                    };
+
+                    if (data.error && data.error.code === 400) {
+                        this._onRequestError(createErrorMessage());
+
+                        return;
+                    }
+
+                    if (!data.items || data.items.length < 1) {
+                        this._onRequestError('Video not found');
+
+                        return;
+                    }
+
+                    tmp = data.items[0];
+                    uploadedFormatted = tmp.snippet.publishedAt.replace('T', ' ').replace(/\..+/g, '');
+                    respData = {
+                        duration: this._formatYoutubeDuration(tmp.contentDetails.duration),
+                        channel: tmp.snippet.channelTitle,
+                        channelId: tmp.snippet.channelId,
+                        uploaded: uploadedFormatted,
+                        title: tmp.snippet.localized.title,
+                        description: tmp.snippet.description,
+                        thumbnail: tmp.snippet.thumbnails.high.url,
+                        videoId: videoInfo.id,
+                        videoProvider: videoInfo.type
+                    };
+                    this._videoInformation = respData;
+                    this.element.trigger(this._UPDATE_VIDEO_INFORMATION_TRIGGER, respData);
+                }
+
+                /**
+                 * @private
+                 */
+                function _onVimeoLoaded(data) {
+                    var tmp = data[0],
+                        respData;
+
+                    if (data.length < 1) {
+                        this._onRequestError('Video not found');
+
+                        return null;
+                    }
+                    tmp = data[0];
+                    respData = {
+                        duration: this._formatVimeoDuration(tmp.duration),
+                        channel: tmp['user_name'],
+                        channelId: tmp['user_url'],
+                        uploaded: tmp['upload_date'],
+                        title: tmp.title,
+                        description: tmp.description.replace(/(&nbsp;|<([^>]+)>)/ig, ''),
+                        thumbnail: tmp['thumbnail_large'],
+                        videoId: videoInfo.id,
+                        videoProvider: videoInfo.type
+                    };
+                    this._videoInformation = respData;
+                    this.element.trigger(this._UPDATE_VIDEO_INFORMATION_TRIGGER, respData);
+                }
+
+                type = videoInfo.type;
+                id = videoInfo.id;
+
+                if (type === 'youtube') {
+                    googleapisUrl = 'https://www.googleapis.com/youtube/v3/videos?id=' +
+                        id +
+                        '&part=snippet,contentDetails,statistics,status&key=' +
+                        this.options.youtubeKey + '&alt=json&callback=?';
+                    $.getJSON(googleapisUrl,
+                        {
+                            format: 'json'
+                        },
+                        $.proxy(_onYouTubeLoaded, self)
+                    ).fail(
+                        function () {
+                            self._onRequestError('Video not found');
+                        }
+                    );
+                } else if (type === 'vimeo') {
+                    $.getJSON('http://www.vimeo.com/api/v2/video/' + id + '.json?callback=?',
+                        {
+                            format: 'json'
+                        },
+                        $.proxy(_onVimeoLoaded, self)
+                    ).fail(
+                        function () {
+                            self._onRequestError('Video not found');
+                        }
+                    );
+                }
+            },
+
+            /**
+             * @private
+             */
+            _onRequestError: function (error) {
+                this._videoInformation = null;
+                this.element.trigger(this._ERROR_UPDATE_INFORMATION_TRIGGER, error);
+                this.element.val('');
+                alert({
+                    content: 'Error: "' + error + '"'
+                });
+            },
+
+            /**
+             * @private
+             */
+            _formatYoutubeDuration: function (duration) {
+                var match = duration.match(/PT(\d+H)?(\d+M)?(\d+S)?/),
+                    hours = parseInt(match[1], 10) || 0,
+                    minutes = parseInt(match[2], 10) || 0,
+                    seconds = parseInt(match[3], 10) || 0;
+
+                return this._formatVimeoDuration(hours * 3600 + minutes * 60 + seconds);
+            },
+
+            /**
+             * @private
+             */
+            _formatVimeoDuration: function (seconds) {
+                return (new Date(seconds * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0];
+            },
+
+            /**
+             * @private
+             */
+            _parseHref: function (href) {
+                var a = document.createElement('a');
+
+                a.href = href;
+
+                return a;
+            },
+
+            /**
+             * @private
+             */
+            _validateURL: function (href, forceVideo) {
+                var id,
+                    type,
+                    ampersandPosition,
+                    vimeoRegex;
+
+                if (typeof href !== 'string') {
+                    return href;
+                }
+                href = this._parseHref(href);
+
+                if (href.host.match(/youtube\.com/) && href.search) {
+
+                    id = href.search.split('v=')[1];
+
+                    if (id) {
+                        ampersandPosition = id.indexOf('&');
+                        type = 'youtube';
+                    }
+
+                    if (id && ampersandPosition !== -1) {
+                        id = id.substring(0, ampersandPosition);
+                    }
+
+                } else if (href.host.match(/youtube\.com|youtu\.be/)) {
+                    id = href.pathname.replace(/^\/(embed\/|v\/)?/, '').replace(/\/.*/, '');
+                    type = 'youtube';
+                } else if (href.host.match(/vimeo\.com/)) {
+                    type = 'vimeo';
+                    vimeoRegex = new RegExp(['https?:\\/\\/(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)',
+                        '?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|video\\/|)(\\d+)(?:$|\\/|\\?)'
+                    ].join(''));
+                    id = href.href.match(vimeoRegex)[3];
+                }
+
+                if ((!id || !type) && forceVideo) {
+                    id = href.href;
+                    type = 'custom';
+                }
+
+                return id ? {
+                    id: id, type: type, s: href.search.replace(/^\?/, '')
+                } : false;
+            }
+        });
+    });
diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
index 91041f04795..681e619a125 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
+++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
@@ -61,11 +61,9 @@ define([
 
             if (checkVideoID && checkVideoID !== this.options.videoId) {
                 this._doUpdate();
-            } else
-            if (checkVideoID && checkVideoID === this.options.videoId) {
+            } else if (checkVideoID && checkVideoID === this.options.videoId) {
                 return false;
-            } else
-            if (!checkVideoID) {
+            } else if (!checkVideoID) {
                 this._doUpdate();
             }
 
@@ -96,8 +94,7 @@ define([
                     this.options.metaData.data.uploader +
                     '</a>'
                 );
-            } else
-            if (this.options.videoProvider === 'vimeo') {
+            } else if (this.options.videoProvider === 'vimeo') {
                 $(this.options.metaData.DOM.uploader).html(
                     '<a href="' +
                     this.options.metaData.data.uploaderUrl +
@@ -887,7 +884,6 @@ define([
                 this._imageTypes.indexOf(ext.toLowerCase()) === -1 ||
                 !file.files  ||
                 !file.files.length
-
             ) {
                 prev.remove();
                 this._previewImage = null;
@@ -983,7 +979,9 @@ define([
 
             try {
                 newVideoForm.validation('clearError');
-            } catch (e) {}
+            } catch (e) {
+
+            }
             newVideoForm.trigger('reset');
         },
 
diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
index afa71a52394..e5b8b801adc 100644
--- a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
+++ b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
@@ -173,7 +173,7 @@ define([
                     tmpVideoData.provider = dataUrl.type;
                 }
                 iPlace = i + 1;
-                if(tmpVideoData.isBase) {
+                if (tmpVideoData.isBase) {
                     videoData.unshift(tmpVideoData);
                     continue;
                 }
-- 
GitLab


From bcb8c1423ff147ea9649974d81eded6696d9e95d Mon Sep 17 00:00:00 2001
From: Anton Ohorodnyk <aohorodnyk@ebay.com>
Date: Tue, 27 Oct 2015 19:23:33 +0200
Subject: [PATCH 353/370] MAGETWO-44584: Error "The stock item for Product in
 option is not valid." when adding configurable product on second website

 - Fixed tests
---
 .../Magento/Framework/Search/Request/Cleaner.php |  4 ++--
 .../Adapter/Mysql/Query/Builder/MatchTest.php    |  2 +-
 .../Search/Test/Unit/Request/BinderTest.php      |  6 +++---
 .../Search/Test/Unit/Request/CleanerTest.php     | 16 ++++++++--------
 4 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/lib/internal/Magento/Framework/Search/Request/Cleaner.php b/lib/internal/Magento/Framework/Search/Request/Cleaner.php
index 6e8a9c4494e..6e56f281beb 100644
--- a/lib/internal/Magento/Framework/Search/Request/Cleaner.php
+++ b/lib/internal/Magento/Framework/Search/Request/Cleaner.php
@@ -165,14 +165,14 @@ class Cleaner
         switch ($filter['type']) {
             case FilterInterface::TYPE_WILDCARD:
             case FilterInterface::TYPE_TERM:
-                if (is_string($filter['value']) && preg_match('/\$(.+)\$/si', $filter['value'], $matches)) {
+                if (!array_key_exists('is_bind', $filter)) {
                     unset($this->requestData['filters'][$filterName]);
                 }
                 break;
             case FilterInterface::TYPE_RANGE:
                 $keys = ['from', 'to'];
                 foreach ($keys as $key) {
-                    if (isset($filter[$key]) && preg_match('/\$(.+)\$/si', $filter[$key], $matches)) {
+                    if (isset($filter[$key]) && preg_match('/^\$(.+)\$$/si', $filter[$key], $matches)) {
                         unset($this->requestData['filters'][$filterName][$key]);
                     }
                 }
diff --git a/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/Query/Builder/MatchTest.php b/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/Query/Builder/MatchTest.php
index 901474b5773..00d8a26af00 100644
--- a/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/Query/Builder/MatchTest.php
+++ b/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/Query/Builder/MatchTest.php
@@ -64,7 +64,7 @@ class MatchTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->fulltextHelper->expects($this->once())
             ->method('getMatchQuery')
-            ->with($this->equalTo(['some_field' => 'some_field']), $this->equalTo('-some_value*'))
+            ->with($this->equalTo(['some_field' => 'some_field']), $this->equalTo('-some* -value*'))
             ->will($this->returnValue('matchedQuery'));
         $select->expects($this->once())
             ->method('where')
diff --git a/lib/internal/Magento/Framework/Search/Test/Unit/Request/BinderTest.php b/lib/internal/Magento/Framework/Search/Test/Unit/Request/BinderTest.php
index 05ad64cec64..95608775bcf 100644
--- a/lib/internal/Magento/Framework/Search/Test/Unit/Request/BinderTest.php
+++ b/lib/internal/Magento/Framework/Search/Test/Unit/Request/BinderTest.php
@@ -51,9 +51,9 @@ class BinderTest extends \PHPUnit_Framework_TestCase
         ];
         $expectedResult = [
             'dimensions' => ['scope' => ['value' => 'default']],
-            'queries' => ['query' => ['value' => 'match_query']],
-            'filters' => ['filter' => ['from' => 'filter_from', 'to' => 'filter_to', 'value' => 'filter_value']],
-            'aggregations' => ['price' => ['method' => 'filter_method']],
+            'queries' => ['query' => ['value' => 'match_query', 'is_bind' => true]],
+            'filters' => ['filter' => ['from' => 'filter_from', 'to' => 'filter_to', 'value' => 'filter_value', 'is_bind' => true]],
+            'aggregations' => ['price' => ['method' => 'filter_method', 'is_bind' => true]],
             'from' => 1,
             'size' => 10,
         ];
diff --git a/lib/internal/Magento/Framework/Search/Test/Unit/Request/CleanerTest.php b/lib/internal/Magento/Framework/Search/Test/Unit/Request/CleanerTest.php
index a9fdb8f18f8..88bd09a498c 100644
--- a/lib/internal/Magento/Framework/Search/Test/Unit/Request/CleanerTest.php
+++ b/lib/internal/Magento/Framework/Search/Test/Unit/Request/CleanerTest.php
@@ -48,7 +48,7 @@ class CleanerTest extends \PHPUnit_Framework_TestCase
                     ],
                     'type' => 'boolQuery',
                 ],
-                'match_query' => ['value' => 'ok', 'type' => 'matchQuery'],
+                'match_query' => ['value' => 'ok', 'type' => 'matchQuery', 'is_bind' => true],
                 'bool_query_rm' => [
                     'queryReference' => [
                         ['ref' => 'match_query_rm'],
@@ -83,7 +83,7 @@ class CleanerTest extends \PHPUnit_Framework_TestCase
                     'filterReference' => [['ref' => 'term_filter2']],
                     'type' => 'boolFilter',
                 ],
-                'term_filter2' => ['value' => 'value_good', 'type' => 'termFilter'],
+                'term_filter2' => ['value' => 'value_good', 'type' => 'termFilter', 'is_bind' => true],
             ],
         ];
         $exceptedRequestData = [
@@ -93,7 +93,7 @@ class CleanerTest extends \PHPUnit_Framework_TestCase
                     'queryReference' => [['ref' => 'match_query'], ['ref' => 'filtered_query_to_filter2']],
                     'type' => 'boolQuery',
                 ],
-                'match_query' => ['value' => 'ok', 'type' => 'matchQuery'],
+                'match_query' => ['value' => 'ok', 'type' => 'matchQuery', 'is_bind' => true],
                 'filtered_query_to_filter2' => [
                     'filterReference' => [['ref' => 'bool_filter2']],
                     'type' => 'filteredQuery',
@@ -104,7 +104,7 @@ class CleanerTest extends \PHPUnit_Framework_TestCase
                     'filterReference' => [['ref' => 'term_filter2']],
                     'type' => 'boolFilter',
                 ],
-                'term_filter2' => ['value' => 'value_good', 'type' => 'termFilter'],
+                'term_filter2' => ['value' => 'value_good', 'type' => 'termFilter', 'is_bind' => true],
             ],
         ];
 
@@ -129,7 +129,7 @@ class CleanerTest extends \PHPUnit_Framework_TestCase
                     ],
                     'type' => 'boolQuery',
                 ],
-                'match_query' => ['value' => 'ok', 'type' => 'matchQuery'],
+                'match_query' => ['value' => 'ok', 'type' => 'matchQuery', 'is_bind' => true],
                 'bool_query_rm' => [
                     'queryReference' => [
                         ['ref' => 'match_query_rm'],
@@ -164,7 +164,7 @@ class CleanerTest extends \PHPUnit_Framework_TestCase
                     'filterReference' => [['ref' => 'term_filter2']],
                     'type' => 'boolFilter',
                 ],
-                'term_filter2' => ['value' => 'value_good', 'type' => 'termFilter'],
+                'term_filter2' => ['value' => 'value_good', 'type' => 'termFilter', 'is_bind' => true],
             ],
         ];
         $exceptedRequestData = [
@@ -174,7 +174,7 @@ class CleanerTest extends \PHPUnit_Framework_TestCase
                     'queryReference' => [['ref' => 'match_query'], ['ref' => 'filtered_query_to_filter2']],
                     'type' => 'boolQuery',
                 ],
-                'match_query' => ['value' => 'ok', 'type' => 'matchQuery'],
+                'match_query' => ['value' => 'ok', 'type' => 'matchQuery', 'is_bind' => true],
                 'filtered_query_to_filter2' => [
                     'filterReference' => [['ref' => 'bool_filter2']],
                     'type' => 'filteredQuery',
@@ -185,7 +185,7 @@ class CleanerTest extends \PHPUnit_Framework_TestCase
                     'filterReference' => [['ref' => 'term_filter2']],
                     'type' => 'boolFilter',
                 ],
-                'term_filter2' => ['value' => 'value_good', 'type' => 'termFilter'],
+                'term_filter2' => ['value' => 'value_good', 'type' => 'termFilter', 'is_bind' => true],
             ],
             'aggregations' => [],
         ];
-- 
GitLab


From edba3248e5f5908596af41e4a5a4b5a8e897a1cf Mon Sep 17 00:00:00 2001
From: Dmitry Kologrivov <dmitry_kologrivov@epam.com>
Date: Tue, 27 Oct 2015 20:29:57 +0300
Subject: [PATCH 354/370] Small phpcs fix for JS

---
 .../ProductVideo/view/adminhtml/web/js/new-video-dialog.js      | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
index 681e619a125..dd184773f87 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
+++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
@@ -882,7 +882,7 @@ define([
             if (
                 ext.length < 2 ||
                 this._imageTypes.indexOf(ext.toLowerCase()) === -1 ||
-                !file.files  ||
+                !file.files ||
                 !file.files.length
             ) {
                 prev.remove();
-- 
GitLab


From af352ebfd42c82b27c130e86ebab7e51572d05dd Mon Sep 17 00:00:00 2001
From: Michail Slabko <mslabko@ebay.com>
Date: Tue, 27 Oct 2015 20:11:56 +0200
Subject: [PATCH 355/370] MAGETWO-43822: Incorrect Request Path generated for
 child category if Edit URL Rewrites from Category Page

---
 .../Observer/CategoryUrlPathAutogeneratorObserver.php            | 1 +
 1 file changed, 1 insertion(+)

diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/CategoryUrlPathAutogeneratorObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/CategoryUrlPathAutogeneratorObserver.php
index 74d9754b1d2..1a903432cc1 100644
--- a/app/code/Magento/CatalogUrlRewrite/Observer/CategoryUrlPathAutogeneratorObserver.php
+++ b/app/code/Magento/CatalogUrlRewrite/Observer/CategoryUrlPathAutogeneratorObserver.php
@@ -105,6 +105,7 @@ class CategoryUrlPathAutogeneratorObserver implements ObserverInterface
      */
     protected function updateUrlPathForCategory(Category $category)
     {
+        $category->unsUrlPath();
         $category->setUrlPath($this->categoryUrlPathGenerator->getUrlPath($category));
         $category->getResource()->saveAttribute($category, 'url_path');
     }
-- 
GitLab


From f63bede13c80a1716f1dc02543ffd5085b8738e2 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Tue, 27 Oct 2015 16:20:12 -0500
Subject: [PATCH 356/370] MAGETWO-44189: Does not work to switch the language
 in the admin area  - style fix

---
 .../backend/Magento_Backend/web/css/source/module/_footer.less  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/_footer.less b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/_footer.less
index 7752b6d2fed..8bed4f0da21 100644
--- a/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/_footer.less
+++ b/app/design/adminhtml/Magento/backend/Magento_Backend/web/css/source/module/_footer.less
@@ -53,8 +53,8 @@
 
 //  Copyright
 .copyright {
-    text-align: left;
     margin-bottom: -.2rem;
+    text-align: left;
     position: relative;
     .link-copyright {
         display: inline-block;
-- 
GitLab


From a41315cd7226d9d34f69a2f5227ca4cdea158093 Mon Sep 17 00:00:00 2001
From: Anton Ohorodnyk <aohorodnyk@ebay.com>
Date: Wed, 28 Oct 2015 08:23:45 +0200
Subject: [PATCH 357/370] MAGETWO-44555: Exception in Advanced Search if used
 special symbols

 - Fixed static tests
---
 .../Magento/Framework/Search/Request/Cleaner.php         | 2 +-
 .../Framework/Search/Test/Unit/Request/BinderTest.php    | 9 ++++++++-
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/lib/internal/Magento/Framework/Search/Request/Cleaner.php b/lib/internal/Magento/Framework/Search/Request/Cleaner.php
index 6e56f281beb..6fdbf9ec3ba 100644
--- a/lib/internal/Magento/Framework/Search/Request/Cleaner.php
+++ b/lib/internal/Magento/Framework/Search/Request/Cleaner.php
@@ -172,7 +172,7 @@ class Cleaner
             case FilterInterface::TYPE_RANGE:
                 $keys = ['from', 'to'];
                 foreach ($keys as $key) {
-                    if (isset($filter[$key]) && preg_match('/^\$(.+)\$$/si', $filter[$key], $matches)) {
+                    if (isset($filter[$key]) && preg_match('/^\$(.+)\$$/si', $filter[$key])) {
                         unset($this->requestData['filters'][$filterName][$key]);
                     }
                 }
diff --git a/lib/internal/Magento/Framework/Search/Test/Unit/Request/BinderTest.php b/lib/internal/Magento/Framework/Search/Test/Unit/Request/BinderTest.php
index 95608775bcf..dccd480ed28 100644
--- a/lib/internal/Magento/Framework/Search/Test/Unit/Request/BinderTest.php
+++ b/lib/internal/Magento/Framework/Search/Test/Unit/Request/BinderTest.php
@@ -52,7 +52,14 @@ class BinderTest extends \PHPUnit_Framework_TestCase
         $expectedResult = [
             'dimensions' => ['scope' => ['value' => 'default']],
             'queries' => ['query' => ['value' => 'match_query', 'is_bind' => true]],
-            'filters' => ['filter' => ['from' => 'filter_from', 'to' => 'filter_to', 'value' => 'filter_value', 'is_bind' => true]],
+            'filters' => [
+                'filter' => [
+                    'from' => 'filter_from',
+                    'to' => 'filter_to',
+                    'value' => 'filter_value',
+                    'is_bind' => true
+                ]
+            ],
             'aggregations' => ['price' => ['method' => 'filter_method', 'is_bind' => true]],
             'from' => 1,
             'size' => 10,
-- 
GitLab


From 2d243980fac3f1a0faecb1eb77e931c3c01f788c Mon Sep 17 00:00:00 2001
From: Maksym Aposov <maposov@ebay.com>
Date: Wed, 28 Oct 2015 13:18:05 +0200
Subject: [PATCH 358/370] MAGETWO-44555: Exception in Advanced Search if used
 special symbols

---
 lib/internal/Magento/Framework/Search/Request/Cleaner.php | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/lib/internal/Magento/Framework/Search/Request/Cleaner.php b/lib/internal/Magento/Framework/Search/Request/Cleaner.php
index 6fdbf9ec3ba..3227180eb2c 100644
--- a/lib/internal/Magento/Framework/Search/Request/Cleaner.php
+++ b/lib/internal/Magento/Framework/Search/Request/Cleaner.php
@@ -130,9 +130,8 @@ class Cleaner
                 foreach ($this->requestData['aggregations'] as $aggregationName => $aggregationValue) {
                     switch ($aggregationValue['type']) {
                         case 'dynamicBucket':
-                            if (
-                                !array_key_exists('is_bind', $aggregationValue)
-                                && is_string($aggregationValue['method'])
+                            if (is_string($aggregationValue['method'])
+                                && preg_match('/^\$(.+)\$$/si', $aggregationValue['method'])
                             ) {
                                 unset($this->requestData['aggregations'][$aggregationName]);
                             }
-- 
GitLab


From 68c79769d46c3e3c66aac1790b6a42e9524ec847 Mon Sep 17 00:00:00 2001
From: Mikalai_Shostka <mikalai_shostka@epam.com>
Date: Wed, 28 Oct 2015 14:21:26 +0300
Subject: [PATCH 359/370] Fix static tests

---
 .../Product/Gallery/RetrieveImage.php         | 58 ++-----------------
 .../ProductVideo/Setup/UpgradeData.php        |  4 +-
 .../view/adminhtml/web/js/new-video-dialog.js |  2 +-
 .../web/js/fotorama-add-video-events.js       | 11 ++--
 4 files changed, 15 insertions(+), 60 deletions(-)

diff --git a/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php b/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
index ad6bd76e49f..2b42fc5ffed 100644
--- a/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
+++ b/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
@@ -72,12 +72,13 @@ class RetrieveImage extends \Magento\Backend\App\Action
      */
     public function execute()
     {
+        $baseTmpMediaPath = $this->mediaConfig->getBaseTmpMediaPath();
         try {
             $remoteFileUrl = $this->getRequest()->getParam('remote_image');
-            $originalFileName = $this->parseOriginalFileName($remoteFileUrl);
-            $localFileName = $this->localFileName($originalFileName);
-            $localTmpFileName = $this->generateTmpFileName($localFileName);
-            $localFileMediaPath = $this->appendFileSystemPath($localTmpFileName);
+            $originalFileName = basename($remoteFileUrl);
+            $localFileName = Uploader::getCorrectFileName($originalFileName);
+            $localTmpFileName = Uploader::getDispretionPath($localFileName) . DIRECTORY_SEPARATOR . $localFileName;
+            $localFileMediaPath = $baseTmpMediaPath . ($localTmpFileName);
             $localUniqueFileMediaPath = $this->appendNewFileName($localFileMediaPath);
             $this->retrieveRemoteImage($remoteFileUrl, $localUniqueFileMediaPath);
             $localFileFullPath = $this->appendAbsoluteFileSystemPath($localUniqueFileMediaPath);
@@ -101,7 +102,7 @@ class RetrieveImage extends \Magento\Backend\App\Action
     protected function appendResultSaveRemoteImage($fileName)
     {
         $fileInfo = pathinfo($fileName);
-        $tmpFileName = $this->generateTmpFileName($fileInfo['basename']);
+        $tmpFileName = Uploader::getDispretionPath($fileInfo['basename']) . DIRECTORY_SEPARATOR . $fileInfo['basename'];
         $result['name'] = $fileInfo['basename'];
         $result['type'] = $this->imageAdapter->getMimeType();
         $result['error'] = 0;
@@ -111,16 +112,6 @@ class RetrieveImage extends \Magento\Backend\App\Action
         return $result;
     }
 
-    /**
-     * @param string $fileName
-     * @return string
-     */
-    protected function localFileName($fileName)
-    {
-        $fileName = Uploader::getCorrectFileName($fileName);
-        return $fileName;
-    }
-
     /**
      * @param string $fileUrl
      * @param string $localFilePath
@@ -152,43 +143,6 @@ class RetrieveImage extends \Magento\Backend\App\Action
         return $fileInfo['dirname'] . DIRECTORY_SEPARATOR . $fileName;
     }
 
-    /**
-     * @param string $fileUrl
-     * @return string
-     */
-    protected function parseOriginalFileName($fileUrl)
-    {
-        return basename($fileUrl);
-    }
-
-    /**
-     * @param string $fileName
-     * @return string
-     */
-    protected function generateTmpFileName($fileName)
-    {
-        return Uploader::getDispretionPath($fileName) . DIRECTORY_SEPARATOR . $fileName;
-    }
-
-    /**
-     * @param string $fileName
-     * @return string
-     */
-    protected function generateFileNameWithPath($fileName)
-    {
-        return Uploader::getDispretionPath($fileName) . DIRECTORY_SEPARATOR . $fileName;
-    }
-
-    /**
-     * @param string $localTmpFile
-     * @return string
-     */
-    protected function appendFileSystemPath($localTmpFile)
-    {
-        $pathToSave = $this->mediaConfig->getBaseTmpMediaPath();
-        return $pathToSave . $localTmpFile;
-    }
-
     /**
      * @param string $localTmpFile
      * @return string
diff --git a/app/code/Magento/ProductVideo/Setup/UpgradeData.php b/app/code/Magento/ProductVideo/Setup/UpgradeData.php
index ed76fb19199..b1e418c0f39 100644
--- a/app/code/Magento/ProductVideo/Setup/UpgradeData.php
+++ b/app/code/Magento/ProductVideo/Setup/UpgradeData.php
@@ -53,7 +53,9 @@ class UpgradeData implements UpgradeDataInterface
                 $attributeSetId,
                 'Image Management'
             );
-            if (isset($attributeGroup['attribute_group_name']) && $attributeGroup['attribute_group_name'] == 'Image Management') {
+            if (isset($attributeGroup['attribute_group_name'])
+                && $attributeGroup['attribute_group_name'] == 'Image Management'
+            ) {
                 // update General Group
                 $categorySetup->updateAttributeGroup(
                     $entityTypeId,
diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
index dd184773f87..fe8e76ded23 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
+++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
@@ -467,7 +467,7 @@ define([
                 name: 'product[media_gallery][images][' + newImageId + '][save_data_from]'
             }).val(key);
 
-            oldNewFilePosition = parseInt(tmpOldImage.position);
+            oldNewFilePosition = parseInt(tmpOldImage.position, 10);
             imageData.position = oldNewFilePosition;
 
             $(this._imageWidgetSelector).trigger('setPosition', {
diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
index e5b8b801adc..16f3aa9f922 100644
--- a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
+++ b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
@@ -142,8 +142,7 @@ define([
                 dataUrl,
                 tmpVideoData,
                 tmpInputData,
-                i,
-                iPlace;
+                i;
 
             if (isJSON) {
                 inputData = $.parseJSON(inputData);
@@ -172,14 +171,14 @@ define([
                     tmpVideoData.id = dataUrl.id;
                     tmpVideoData.provider = dataUrl.type;
                 }
-                iPlace = i + 1;
+
                 if (tmpVideoData.isBase) {
                     videoData.unshift(tmpVideoData);
-                    continue;
+                } else {
+                    videoData.push(tmpVideoData);
                 }
-
-                videoData.push(tmpVideoData);
             }
+
             return videoData;
         },
 
-- 
GitLab


From d9b7daa1f193d88dfb93255bd11373890f9cb980 Mon Sep 17 00:00:00 2001
From: Volodymyr Klymenko <vklymenko@ebay.com>
Date: Wed, 28 Oct 2015 13:43:34 +0200
Subject: [PATCH 360/370] MAGETWO-44707: Remove @api sign from CatalogInventory
 module

---
 .../CatalogInventory/Api/Data/StockCollectionInterface.php       | 1 -
 app/code/Magento/CatalogInventory/Api/Data/StockInterface.php    | 1 -
 .../CatalogInventory/Api/Data/StockItemCollectionInterface.php   | 1 -
 .../Magento/CatalogInventory/Api/Data/StockItemInterface.php     | 1 -
 .../CatalogInventory/Api/Data/StockStatusCollectionInterface.php | 1 -
 .../Magento/CatalogInventory/Api/Data/StockStatusInterface.php   | 1 -
 .../Magento/CatalogInventory/Api/StockConfigurationInterface.php | 1 -
 app/code/Magento/CatalogInventory/Api/StockCriteriaInterface.php | 1 -
 app/code/Magento/CatalogInventory/Api/StockIndexInterface.php    | 1 -
 .../Magento/CatalogInventory/Api/StockItemCriteriaInterface.php  | 1 -
 .../CatalogInventory/Api/StockItemRepositoryInterface.php        | 1 -
 .../Magento/CatalogInventory/Api/StockManagementInterface.php    | 1 -
 app/code/Magento/CatalogInventory/Api/StockRegistryInterface.php | 1 -
 .../Magento/CatalogInventory/Api/StockRepositoryInterface.php    | 1 -
 app/code/Magento/CatalogInventory/Api/StockStateInterface.php    | 1 -
 .../CatalogInventory/Api/StockStatusCriteriaInterface.php        | 1 -
 .../CatalogInventory/Api/StockStatusRepositoryInterface.php      | 1 -
 .../Model/ResourceModel/Indexer/Stock/StockInterface.php         | 1 -
 18 files changed, 18 deletions(-)

diff --git a/app/code/Magento/CatalogInventory/Api/Data/StockCollectionInterface.php b/app/code/Magento/CatalogInventory/Api/Data/StockCollectionInterface.php
index a656b049c93..90e5081733e 100644
--- a/app/code/Magento/CatalogInventory/Api/Data/StockCollectionInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/Data/StockCollectionInterface.php
@@ -13,7 +13,6 @@ use Magento\Framework\Api\SearchResultsInterface;
 
 /**
  * Interface StockCollectionInterface
- * @api
  */
 interface StockCollectionInterface extends SearchResultsInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/Data/StockInterface.php b/app/code/Magento/CatalogInventory/Api/Data/StockInterface.php
index 8908ea0ee96..47bd9b85cc3 100644
--- a/app/code/Magento/CatalogInventory/Api/Data/StockInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/Data/StockInterface.php
@@ -9,7 +9,6 @@ use Magento\Framework\Api\ExtensibleDataInterface;
 
 /**
  * Interface Stock
- * @api
  */
 interface StockInterface extends ExtensibleDataInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/Data/StockItemCollectionInterface.php b/app/code/Magento/CatalogInventory/Api/Data/StockItemCollectionInterface.php
index ee670c352f1..80436c5427b 100644
--- a/app/code/Magento/CatalogInventory/Api/Data/StockItemCollectionInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/Data/StockItemCollectionInterface.php
@@ -13,7 +13,6 @@ use Magento\Framework\Api\SearchResultsInterface;
 
 /**
  * Interface StockItemCollectionInterface
- * @api
  */
 interface StockItemCollectionInterface extends SearchResultsInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/Data/StockItemInterface.php b/app/code/Magento/CatalogInventory/Api/Data/StockItemInterface.php
index 0c4216fd46a..0a620ce1562 100644
--- a/app/code/Magento/CatalogInventory/Api/Data/StockItemInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/Data/StockItemInterface.php
@@ -9,7 +9,6 @@ use Magento\Framework\Api\ExtensibleDataInterface;
 
 /**
  * Interface StockItem
- * @api
  */
 interface StockItemInterface extends ExtensibleDataInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/Data/StockStatusCollectionInterface.php b/app/code/Magento/CatalogInventory/Api/Data/StockStatusCollectionInterface.php
index a06aa1ebd0a..b46ccbf5c94 100644
--- a/app/code/Magento/CatalogInventory/Api/Data/StockStatusCollectionInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/Data/StockStatusCollectionInterface.php
@@ -9,7 +9,6 @@ use Magento\Framework\Api\SearchResultsInterface;
 
 /**
  * Stock Status collection interface
- * @api
  */
 interface StockStatusCollectionInterface extends SearchResultsInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/Data/StockStatusInterface.php b/app/code/Magento/CatalogInventory/Api/Data/StockStatusInterface.php
index f4996ac62ec..3c90ea45177 100644
--- a/app/code/Magento/CatalogInventory/Api/Data/StockStatusInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/Data/StockStatusInterface.php
@@ -9,7 +9,6 @@ use Magento\Framework\Api\ExtensibleDataInterface;
 
 /**
  * Interface StockStatusInterface
- * @api
  */
 interface StockStatusInterface extends ExtensibleDataInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/StockConfigurationInterface.php b/app/code/Magento/CatalogInventory/Api/StockConfigurationInterface.php
index 7b4179c7a71..5052ea004b2 100644
--- a/app/code/Magento/CatalogInventory/Api/StockConfigurationInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/StockConfigurationInterface.php
@@ -7,7 +7,6 @@ namespace Magento\CatalogInventory\Api;
 
 /**
  * Interface StockConfigurationInterface
- * @api
  */
 interface StockConfigurationInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/StockCriteriaInterface.php b/app/code/Magento/CatalogInventory/Api/StockCriteriaInterface.php
index 15e299f8591..537db0ce5af 100644
--- a/app/code/Magento/CatalogInventory/Api/StockCriteriaInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/StockCriteriaInterface.php
@@ -7,7 +7,6 @@ namespace Magento\CatalogInventory\Api;
 
 /**
  * Interface StockCriteriaInterface
- * @api
  */
 interface StockCriteriaInterface extends \Magento\Framework\Api\CriteriaInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/StockIndexInterface.php b/app/code/Magento/CatalogInventory/Api/StockIndexInterface.php
index f57936402f0..6edba0a23b5 100644
--- a/app/code/Magento/CatalogInventory/Api/StockIndexInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/StockIndexInterface.php
@@ -7,7 +7,6 @@ namespace Magento\CatalogInventory\Api;
 
 /**
  * Interface StockIndexInterface
- * @api
  */
 interface StockIndexInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/StockItemCriteriaInterface.php b/app/code/Magento/CatalogInventory/Api/StockItemCriteriaInterface.php
index df76cc37f31..878aa26d3c2 100644
--- a/app/code/Magento/CatalogInventory/Api/StockItemCriteriaInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/StockItemCriteriaInterface.php
@@ -7,7 +7,6 @@ namespace Magento\CatalogInventory\Api;
 
 /**
  * Interface StockItemCriteriaInterface
- * @api
  */
 interface StockItemCriteriaInterface extends \Magento\Framework\Api\CriteriaInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/StockItemRepositoryInterface.php b/app/code/Magento/CatalogInventory/Api/StockItemRepositoryInterface.php
index 97804d70437..17a22876922 100644
--- a/app/code/Magento/CatalogInventory/Api/StockItemRepositoryInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/StockItemRepositoryInterface.php
@@ -7,7 +7,6 @@ namespace Magento\CatalogInventory\Api;
 
 /**
  * Interface StockItemRepository
- * @api
  */
 interface StockItemRepositoryInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/StockManagementInterface.php b/app/code/Magento/CatalogInventory/Api/StockManagementInterface.php
index b4cd1008bf5..748ed9b39cf 100644
--- a/app/code/Magento/CatalogInventory/Api/StockManagementInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/StockManagementInterface.php
@@ -7,7 +7,6 @@ namespace Magento\CatalogInventory\Api;
 
 /**
  * Interface StockManagementInterface
- * @api
  */
 interface StockManagementInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/StockRegistryInterface.php b/app/code/Magento/CatalogInventory/Api/StockRegistryInterface.php
index 95c848f1865..27f90e740f9 100644
--- a/app/code/Magento/CatalogInventory/Api/StockRegistryInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/StockRegistryInterface.php
@@ -7,7 +7,6 @@ namespace Magento\CatalogInventory\Api;
 
 /**
  * Interface StockRegistryInterface
- * @api
  */
 interface StockRegistryInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/StockRepositoryInterface.php b/app/code/Magento/CatalogInventory/Api/StockRepositoryInterface.php
index 28b839c6fed..06f5d2f4e9c 100644
--- a/app/code/Magento/CatalogInventory/Api/StockRepositoryInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/StockRepositoryInterface.php
@@ -7,7 +7,6 @@ namespace Magento\CatalogInventory\Api;
 
 /**
  * Interface StockRepositoryInterface
- * @api
  */
 interface StockRepositoryInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/StockStateInterface.php b/app/code/Magento/CatalogInventory/Api/StockStateInterface.php
index 140ccee031b..490f92644df 100644
--- a/app/code/Magento/CatalogInventory/Api/StockStateInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/StockStateInterface.php
@@ -7,7 +7,6 @@ namespace Magento\CatalogInventory\Api;
 
 /**
  * Interface StockStateInterface
- * @api
  */
 interface StockStateInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/StockStatusCriteriaInterface.php b/app/code/Magento/CatalogInventory/Api/StockStatusCriteriaInterface.php
index 7b5dfafa311..af80ddd5c5c 100644
--- a/app/code/Magento/CatalogInventory/Api/StockStatusCriteriaInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/StockStatusCriteriaInterface.php
@@ -7,7 +7,6 @@ namespace Magento\CatalogInventory\Api;
 
 /**
  * Interface StockStatusCriteriaInterface
- * @api
  */
 interface StockStatusCriteriaInterface extends \Magento\Framework\Api\CriteriaInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/StockStatusRepositoryInterface.php b/app/code/Magento/CatalogInventory/Api/StockStatusRepositoryInterface.php
index 7a8ac825654..b531c815ceb 100644
--- a/app/code/Magento/CatalogInventory/Api/StockStatusRepositoryInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/StockStatusRepositoryInterface.php
@@ -7,7 +7,6 @@ namespace Magento\CatalogInventory\Api;
 
 /**
  * Interface StockStatusRepositoryInterface
- * @api
  */
 interface StockStatusRepositoryInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/Stock/StockInterface.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/Stock/StockInterface.php
index 8612b0ba525..32b75680fbc 100644
--- a/app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/Stock/StockInterface.php
+++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/Stock/StockInterface.php
@@ -7,7 +7,6 @@ namespace Magento\CatalogInventory\Model\ResourceModel\Indexer\Stock;
 
 /**
  * CatalogInventory Stock Indexer Interface
- * @api
  */
 interface StockInterface
 {
-- 
GitLab


From de54a9f2cec346534fc33934bc93d3a2ffef95b2 Mon Sep 17 00:00:00 2001
From: Mikalai_Shostka <mikalai_shostka@epam.com>
Date: Wed, 28 Oct 2015 14:43:54 +0300
Subject: [PATCH 361/370] Fix static tests

---
 lib/internal/Magento/Framework/Config/View.php | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/lib/internal/Magento/Framework/Config/View.php b/lib/internal/Magento/Framework/Config/View.php
index d4fdf5f10f8..cc67a3fce6c 100644
--- a/lib/internal/Magento/Framework/Config/View.php
+++ b/lib/internal/Magento/Framework/Config/View.php
@@ -27,11 +27,6 @@ class View extends \Magento\Framework\Config\AbstractXml
      */
     protected $xpath;
 
-    /**
-     * @var Reader
-     */
-    private $xsdReader;
-
     /**
      * @param array $configFiles
      * @param UrnResolver $urnResolver
-- 
GitLab


From 09c5525a5f722b590b9d5162a91c49fad3ad09e8 Mon Sep 17 00:00:00 2001
From: Mikalai_Shostka <mikalai_shostka@epam.com>
Date: Wed, 28 Oct 2015 16:49:39 +0300
Subject: [PATCH 362/370] Add supress warning

---
 .../Controller/Adminhtml/Product/Gallery/RetrieveImage.php     | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php b/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
index ad6bd76e49f..0ab24a1a2f6 100644
--- a/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
+++ b/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
@@ -8,6 +8,9 @@ namespace Magento\ProductVideo\Controller\Adminhtml\Product\Gallery;
 use Magento\Framework\App\Filesystem\DirectoryList;
 use Magento\Framework\File\Uploader;
 
+/**
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
 class RetrieveImage extends \Magento\Backend\App\Action
 {
     /**
-- 
GitLab


From c1e27365c9e15b2396899fbaa36f2ec7dcbd7402 Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Wed, 28 Oct 2015 10:02:05 -0500
Subject: [PATCH 363/370] MAGETWO-43679: Fixed XML validation happens in
 production mode

---
 .../Media/Synchronization/SuccessTest.php     | 101 ------------------
 .../Model/Attribute/Config/ReaderTest.php     |   4 +-
 .../Unit/Model/Attribute/Config/XsdTest.php   |   5 +-
 .../Config/Model/Config/Structure/Reader.php  |   2 +-
 .../Unit/Model/Address/Config/ReaderTest.php  |   4 +-
 .../Unit/Model/Address/Config/XsdTest.php     |   5 +-
 .../Unit/Model/Template/Config/ReaderTest.php |   8 +-
 .../Unit/Model/Template/Config/XsdTest.php    |   5 +-
 .../Unit/Model/Config/Integration/XsdTest.php |   5 +-
 .../Test/Unit/Model/Config/XsdTest.php        |   5 +-
 .../Model/Order/Pdf/Config/ReaderTest.php     |   4 +-
 .../Unit/Model/Order/Pdf/Config/XsdTest.php   |   5 +-
 .../TestCase/AbstractConfigFiles.php          |   8 +-
 .../Config/Structure/Reader/ReaderTest.php    |   4 +-
 .../Modular/AbstractMergedConfigTest.php      |  15 ++-
 .../Integrity/Modular/AclConfigFilesTest.php  |   5 +-
 .../Test/Integrity/Modular/CacheFilesTest.php |   2 +-
 .../Integrity/Modular/DiConfigFilesTest.php   |   2 +-
 .../Modular/EavAttributesConfigFilesTest.php  |   2 +-
 .../Modular/EventConfigFilesTest.php          |   5 +-
 .../Modular/ExportConfigFilesTest.php         |   2 +-
 .../Modular/ImportConfigFilesTest.php         |   2 +-
 .../Modular/IndexerConfigFilesTest.php        |   5 +-
 .../Catalog/AttributeConfigFilesTest.php      |   5 +-
 .../Customer/AddressFormatsFilesTest.php      |   5 +-
 .../Email/EmailTemplateConfigFilesTest.php    |   7 +-
 .../Magento/Sales/PdfConfigFilesTest.php      |   7 +-
 .../Modular/MviewConfigFilesTest.php          |   5 +-
 .../Modular/ProductOptionsConfigFilesTest.php |   2 +-
 .../Modular/ProductTypesConfigFilesTest.php   |   2 +-
 .../Modular/ResourcesConfigFilesTest.php      |   2 +-
 .../Modular/RouteConfigFilesTest.php          |  28 ++++-
 .../Integrity/Modular/ViewConfigFilesTest.php |   5 +-
 .../Test/Integrity/Theme/XmlFilesTest.php     |  25 ++++-
 .../App/Language/CircularDependencyTest.php   |  29 ++++-
 .../ExtensionAttribute/Config/XsdTest.php     |   5 +-
 .../App/Arguments/ValidationState.php         |   2 +-
 .../Framework/App/Config/Initial/Reader.php   |  16 ++-
 .../Magento/Framework/App/Language/Config.php |  21 ++--
 .../Test/Unit/Config/Initial/ReaderTest.php   |  41 +++++--
 .../App/Test/Unit/Language/ConfigTest.php     |  20 +++-
 .../Magento/Framework/Config/AbstractXml.php  |  44 ++++----
 lib/internal/Magento/Framework/Config/Dom.php |  19 +++-
 .../Magento/Framework/Config/DomFactory.php   |   5 +-
 .../Framework/Config/Reader/Filesystem.php    |  22 ++--
 .../Framework/Config/Test/Unit/DomTest.php    |  30 ++++--
 .../Test/Unit/Reader/FilesystemTest.php       |   8 +-
 .../Config/Test/Unit/ValidationStateTest.php  |   8 +-
 .../Config/ValidationStateInterface.php       |   2 +-
 .../Magento/Framework/Config/View.php         |  11 +-
 .../Indexer/Test/Unit/Config/ReaderTest.php   |   4 +-
 .../Mview/Test/Unit/Config/ReaderTest.php     |   4 +-
 .../ObjectManager/Config/Reader/Dom.php       |   8 +-
 .../Config/Reader/_files/ConfigDomMock.php    |   2 +-
 .../Magento/Framework/Validator/Config.php    |  15 +--
 .../Validator/Test/Unit/ConfigTest.php        |  21 +++-
 .../Magento/Framework/View/Config.php         |   9 +-
 .../Element/UiComponent/Config/DomMerger.php  |  26 +++--
 .../Framework/View/PageLayout/Config.php      |  12 ++-
 .../Framework/View/Test/Unit/ConfigTest.php   |   2 +-
 .../View/Test/Unit/PageLayout/ConfigTest.php  |  23 +++-
 61 files changed, 437 insertions(+), 270 deletions(-)
 delete mode 100644 app/code/Magento/AdminNotification/Test/Unit/Model/System/Message/Media/Synchronization/SuccessTest.php

diff --git a/app/code/Magento/AdminNotification/Test/Unit/Model/System/Message/Media/Synchronization/SuccessTest.php b/app/code/Magento/AdminNotification/Test/Unit/Model/System/Message/Media/Synchronization/SuccessTest.php
deleted file mode 100644
index a33e8800f2e..00000000000
--- a/app/code/Magento/AdminNotification/Test/Unit/Model/System/Message/Media/Synchronization/SuccessTest.php
+++ /dev/null
@@ -1,101 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\AdminNotification\Test\Unit\Model\System\Message\Media\Synchronization;
-
-class SuccessTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_syncFlagMock;
-
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_fileStorage;
-
-    /**
-     * @var \Magento\AdminNotification\Model\System\Message\Media\Synchronization\Success
-     */
-    protected $_model;
-
-    protected function setUp()
-    {
-        $this->_syncFlagMock = $this->getMock(
-            'Magento\MediaStorage\Model\File\Storage\Flag',
-            ['getState', 'getFlagData', 'setState', '__sleep', '__wakeup', 'save'],
-            [],
-            '',
-            false
-        );
-
-        $this->_fileStorage = $this->getMock('Magento\MediaStorage\Model\File\Storage\Flag', [], [], '', false);
-        $this->_fileStorage->expects($this->any())->method('loadSelf')->will($this->returnValue($this->_syncFlagMock));
-
-        $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $arguments = ['fileStorage' => $this->_fileStorage];
-        $this->_model = $objectManagerHelper->getObject(
-            'Magento\AdminNotification\Model\System\Message\Media\Synchronization\Success',
-            $arguments
-        );
-    }
-
-    public function testGetText()
-    {
-        $messageText = 'Synchronization of media storages has been completed';
-
-        $this->assertContains($messageText, (string)$this->_model->getText());
-    }
-
-    /**
-     * @param bool $expectedFirstRun
-     * @param array $data
-     * @param int|bool $state
-     * @return void
-     * @dataProvider isDisplayedDataProvider
-     */
-    public function testIsDisplayed($expectedFirstRun, $data, $state)
-    {
-        $arguments = ['fileStorage' => $this->_fileStorage];
-        $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-
-        $this->_syncFlagMock->expects($this->any())->method('getState')->will($this->returnValue($state));
-        $this->_syncFlagMock->expects($this->any())->method('getFlagData')->will($this->returnValue($data));
-
-        // create new instance to ensure that it hasn't been displayed yet (var $this->_isDisplayed is unset)
-        /** @var $model \Magento\AdminNotification\Model\System\Message\Media\Synchronization\Success */
-        $model = $objectManagerHelper->getObject(
-            'Magento\AdminNotification\Model\System\Message\Media\Synchronization\Success',
-            $arguments
-        );
-        //check first call
-        $this->assertEquals($expectedFirstRun, $model->isDisplayed());
-        //check second call
-        $this->assertEquals($expectedFirstRun, $model->isDisplayed());
-    }
-
-    public function isDisplayedDataProvider()
-    {
-        return [
-            [false, ['has_errors' => 1], \Magento\MediaStorage\Model\File\Storage\Flag::STATE_FINISHED],
-            [false, ['has_errors' => true], false],
-            [true, [], \Magento\MediaStorage\Model\File\Storage\Flag::STATE_FINISHED],
-            [false, ['has_errors' => 0], \Magento\MediaStorage\Model\File\Storage\Flag::STATE_RUNNING],
-            [true, ['has_errors' => 0], \Magento\MediaStorage\Model\File\Storage\Flag::STATE_FINISHED]
-        ];
-    }
-
-    public function testGetIdentity()
-    {
-        $this->assertEquals('MEDIA_SYNCHRONIZATION_SUCCESS', $this->_model->getIdentity());
-    }
-
-    public function testGetSeverity()
-    {
-        $severity = \Magento\Framework\Notification\MessageInterface::SEVERITY_MAJOR;
-        $this->assertEquals($severity, $this->_model->getSeverity());
-    }
-}
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Attribute/Config/ReaderTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Attribute/Config/ReaderTest.php
index 3121a3036b9..eceaee7d0dc 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Attribute/Config/ReaderTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Attribute/Config/ReaderTest.php
@@ -73,7 +73,9 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
         $this->_schemaLocator = new \Magento\Catalog\Model\Attribute\Config\SchemaLocator($moduleReader);
 
         $this->_validationState = $this->getMock('Magento\Framework\Config\ValidationStateInterface');
-        $this->_validationState->expects($this->once())->method('isValidated')->will($this->returnValue(false));
+        $this->_validationState->expects($this->any())
+            ->method('isValidationRequired')
+            ->willReturn(false);
 
         $this->_model = new \Magento\Catalog\Model\Attribute\Config\Reader(
             $this->_fileResolverMock,
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Attribute/Config/XsdTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Attribute/Config/XsdTest.php
index 033cd503892..da8c9b00333 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Attribute/Config/XsdTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Attribute/Config/XsdTest.php
@@ -27,7 +27,10 @@ class XsdTest extends \PHPUnit_Framework_TestCase
      */
     public function testExemplarXml($fixtureXml, array $expectedErrors)
     {
-        $dom = new \Magento\Framework\Config\Dom($fixtureXml, [], null, null, '%message%');
+        $validationStateMock = $this->getMock('\Magento\Framework\Config\ValidationStateInterface', [], [], '', false);
+        $validationStateMock->method('isValidationRequired')
+            ->willReturn(true);
+        $dom = new \Magento\Framework\Config\Dom($fixtureXml, $validationStateMock, [], null, null, '%message%');
         $actualResult = $dom->validate($this->_schemaFile, $actualErrors);
         $this->assertEquals(empty($expectedErrors), $actualResult);
         $this->assertEquals($expectedErrors, $actualErrors);
diff --git a/app/code/Magento/Config/Model/Config/Structure/Reader.php b/app/code/Magento/Config/Model/Config/Structure/Reader.php
index 45c04eeb4f0..c5a082b32fc 100644
--- a/app/code/Magento/Config/Model/Config/Structure/Reader.php
+++ b/app/code/Magento/Config/Model/Config/Structure/Reader.php
@@ -100,7 +100,7 @@ class Reader extends \Magento\Framework\Config\Reader\Filesystem
             }
         }
 
-        if ($this->_isValidated) {
+        if ($this->validationState->isValidationRequired()) {
             $errors = [];
             if ($configMerger && !$configMerger->validate($this->_schemaFile, $errors)) {
                 $message = "Invalid Document \n";
diff --git a/app/code/Magento/Customer/Test/Unit/Model/Address/Config/ReaderTest.php b/app/code/Magento/Customer/Test/Unit/Model/Address/Config/ReaderTest.php
index 751b2b8cf68..558d5845f1f 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/Address/Config/ReaderTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/Address/Config/ReaderTest.php
@@ -74,7 +74,9 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
 
         $this->_schemaLocator = new \Magento\Customer\Model\Address\Config\SchemaLocator($moduleReader);
         $this->_validationState = $this->getMock('Magento\Framework\Config\ValidationStateInterface');
-        $this->_validationState->expects($this->once())->method('isValidated')->will($this->returnValue(false));
+        $this->_validationState->expects($this->any())
+            ->method('isValidationRequired')
+            ->willReturn(false);
 
         $this->_model = new \Magento\Customer\Model\Address\Config\Reader(
             $this->_fileResolverMock,
diff --git a/app/code/Magento/Customer/Test/Unit/Model/Address/Config/XsdTest.php b/app/code/Magento/Customer/Test/Unit/Model/Address/Config/XsdTest.php
index a6926146177..3b3ac8221cb 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/Address/Config/XsdTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/Address/Config/XsdTest.php
@@ -27,7 +27,10 @@ class XsdTest extends \PHPUnit_Framework_TestCase
      */
     public function testExemplarXml($fixtureXml, array $expectedErrors)
     {
-        $dom = new \Magento\Framework\Config\Dom($fixtureXml, [], null, null, '%message%');
+        $validationStateMock = $this->getMock('\Magento\Framework\Config\ValidationStateInterface', [], [], '', false);
+        $validationStateMock->method('isValidationRequired')
+            ->willReturn(true);
+        $dom = new \Magento\Framework\Config\Dom($fixtureXml, $validationStateMock, [], null, null, '%message%');
         $actualResult = $dom->validate($this->_schemaFile, $actualErrors);
         $this->assertEquals(empty($expectedErrors), $actualResult);
         $this->assertEquals($expectedErrors, $actualErrors);
diff --git a/app/code/Magento/Email/Test/Unit/Model/Template/Config/ReaderTest.php b/app/code/Magento/Email/Test/Unit/Model/Template/Config/ReaderTest.php
index e572b67abee..baf28034f78 100644
--- a/app/code/Magento/Email/Test/Unit/Model/Template/Config/ReaderTest.php
+++ b/app/code/Magento/Email/Test/Unit/Model/Template/Config/ReaderTest.php
@@ -69,8 +69,10 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
         );
         $schemaLocator = new \Magento\Email\Model\Template\Config\SchemaLocator($moduleReader);
 
-        $validationState = $this->getMock('Magento\Framework\Config\ValidationStateInterface');
-        $validationState->expects($this->once())->method('isValidated')->will($this->returnValue(false));
+        $validationStateMock = $this->getMock('Magento\Framework\Config\ValidationStateInterface', [], [], '', true);
+        $validationStateMock->expects($this->any())
+            ->method('isValidationRequired')
+            ->willReturn(false);
 
         $this->_moduleDirResolver = $this->getMock(
             'Magento\Framework\Module\Dir\ReverseResolver',
@@ -109,7 +111,7 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
             $fileResolver,
             $this->_converter,
             $schemaLocator,
-            $validationState
+            $validationStateMock
         );
     }
 
diff --git a/app/code/Magento/Email/Test/Unit/Model/Template/Config/XsdTest.php b/app/code/Magento/Email/Test/Unit/Model/Template/Config/XsdTest.php
index f2eb7b69f76..ed03f792be1 100644
--- a/app/code/Magento/Email/Test/Unit/Model/Template/Config/XsdTest.php
+++ b/app/code/Magento/Email/Test/Unit/Model/Template/Config/XsdTest.php
@@ -113,7 +113,10 @@ class XsdTest extends \PHPUnit_Framework_TestCase
      */
     protected function _testXmlAgainstXsd($fixtureXml, $schemaFile, array $expectedErrors)
     {
-        $dom = new \Magento\Framework\Config\Dom($fixtureXml, [], null, null, '%message%');
+        $validationStateMock = $this->getMock('\Magento\Framework\Config\ValidationStateInterface', [], [], '', false);
+        $validationStateMock->method('isValidationRequired')
+            ->willReturn(true);
+        $dom = new \Magento\Framework\Config\Dom($fixtureXml, $validationStateMock, [], null, null, '%message%');
         $actualResult = $dom->validate($schemaFile, $actualErrors);
         $this->assertEquals(empty($expectedErrors), $actualResult);
         $this->assertEquals($expectedErrors, $actualErrors);
diff --git a/app/code/Magento/Integration/Test/Unit/Model/Config/Integration/XsdTest.php b/app/code/Magento/Integration/Test/Unit/Model/Config/Integration/XsdTest.php
index 5413ec66a33..e3988ecdbb1 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/Config/Integration/XsdTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/Config/Integration/XsdTest.php
@@ -30,8 +30,11 @@ class XsdTest extends \PHPUnit_Framework_TestCase
      */
     public function testExemplarXml($fixtureXml, array $expectedErrors)
     {
+        $validationStateMock = $this->getMock('\Magento\Framework\Config\ValidationStateInterface', [], [], '', false);
+        $validationStateMock->method('isValidationRequired')
+            ->willReturn(true);
         $messageFormat = '%message%';
-        $dom = new \Magento\Framework\Config\Dom($fixtureXml, [], null, null, $messageFormat);
+        $dom = new \Magento\Framework\Config\Dom($fixtureXml, $validationStateMock, [], null, null, $messageFormat);
         $actualResult = $dom->validate($this->_schemaFile, $actualErrors);
         $this->assertEquals(empty($expectedErrors), $actualResult, "Validation result is invalid.");
         $this->assertEquals($expectedErrors, $actualErrors, "Validation errors does not match.");
diff --git a/app/code/Magento/Integration/Test/Unit/Model/Config/XsdTest.php b/app/code/Magento/Integration/Test/Unit/Model/Config/XsdTest.php
index 8e1c4195a34..ee833328e24 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/Config/XsdTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/Config/XsdTest.php
@@ -30,8 +30,11 @@ class XsdTest extends \PHPUnit_Framework_TestCase
      */
     public function testExemplarXml($fixtureXml, array $expectedErrors)
     {
+        $validationStateMock = $this->getMock('\Magento\Framework\Config\ValidationStateInterface', [], [], '', false);
+        $validationStateMock->method('isValidationRequired')
+            ->willReturn(true);
         $messageFormat = '%message%';
-        $dom = new \Magento\Framework\Config\Dom($fixtureXml, [], null, null, $messageFormat);
+        $dom = new \Magento\Framework\Config\Dom($fixtureXml, $validationStateMock, [], null, null, $messageFormat);
         $actualResult = $dom->validate($this->_schemaFile, $actualErrors);
         $this->assertEquals(empty($expectedErrors), $actualResult, "Validation result is invalid.");
         $this->assertEquals($expectedErrors, $actualErrors, "Validation errors does not match.");
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/Pdf/Config/ReaderTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/Pdf/Config/ReaderTest.php
index 50407a1fbd1..b00d3207cf4 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/Pdf/Config/ReaderTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/Pdf/Config/ReaderTest.php
@@ -74,7 +74,9 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
 
         $this->_schemaLocator = new \Magento\Sales\Model\Order\Pdf\Config\SchemaLocator($moduleReader);
         $this->_validationState = $this->getMock('Magento\Framework\Config\ValidationStateInterface');
-        $this->_validationState->expects($this->once())->method('isValidated')->will($this->returnValue(false));
+        $this->_validationState->expects($this->any())
+            ->method('isValidationRequired')
+            ->willReturn(false);
 
         $this->_model = new \Magento\Sales\Model\Order\Pdf\Config\Reader(
             $this->_fileResolverMock,
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/Pdf/Config/XsdTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/Pdf/Config/XsdTest.php
index df9683026fa..01fe130398c 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/Pdf/Config/XsdTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/Pdf/Config/XsdTest.php
@@ -55,7 +55,10 @@ class XsdTest extends \PHPUnit_Framework_TestCase
      */
     protected function _testSchema($schema, $fixtureXml, array $expectedErrors)
     {
-        $dom = new \Magento\Framework\Config\Dom($fixtureXml, [], null, null, '%message%');
+        $validationStateMock = $this->getMock('\Magento\Framework\Config\ValidationStateInterface', [], [], '', false);
+        $validationStateMock->method('isValidationRequired')
+            ->willReturn(true);
+        $dom = new \Magento\Framework\Config\Dom($fixtureXml, $validationStateMock, [], null, null, '%message%');
         $actualResult = $dom->validate($schema, $actualErrors);
         $this->assertEquals(empty($expectedErrors), $actualResult);
         $this->assertEquals($expectedErrors, $actualErrors);
diff --git a/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractConfigFiles.php b/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractConfigFiles.php
index b6accb73fb6..086b657047d 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractConfigFiles.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractConfigFiles.php
@@ -51,7 +51,7 @@ abstract class AbstractConfigFiles extends \PHPUnit_Framework_TestCase
             $validateStateMock = $this->getMockBuilder(
                 'Magento\Framework\Config\ValidationStateInterface'
             )->disableOriginalConstructor()->getMock();
-            $validateStateMock->expects($this->any())->method('isValidated')->will($this->returnValue(true));
+            $validateStateMock->expects($this->any())->method('isValidationRequired')->will($this->returnValue(true));
 
             $this->_reader = $this->_objectManager->create(
                 $this->_getReaderClassName(),
@@ -79,7 +79,11 @@ abstract class AbstractConfigFiles extends \PHPUnit_Framework_TestCase
         if ($skip) {
             $this->markTestSkipped('There are no xml files in the system for this test.');
         }
-        $domConfig = new \Magento\Framework\Config\Dom($file);
+        $validationStateMock = $this->getMock('\Magento\Framework\Config\ValidationStateInterface', [], [], '', false);
+        $validationStateMock->method('isValidationRequired')
+            ->willReturn(false);
+        $domConfig = new \Magento\Framework\Config\Dom($file, $validationStateMock);
+        $errors = [];
         $result = $domConfig->validate($this->_schemaFile, $errors);
         $message = "Invalid XML-file: {$file}\n";
         foreach ($errors as $error) {
diff --git a/dev/tests/integration/testsuite/Magento/Paypal/Model/Config/Structure/Reader/ReaderTest.php b/dev/tests/integration/testsuite/Magento/Paypal/Model/Config/Structure/Reader/ReaderTest.php
index 03d1d6f2471..274825a41ca 100644
--- a/dev/tests/integration/testsuite/Magento/Paypal/Model/Config/Structure/Reader/ReaderTest.php
+++ b/dev/tests/integration/testsuite/Magento/Paypal/Model/Config/Structure/Reader/ReaderTest.php
@@ -62,7 +62,7 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
         $this->fileUtility = \Magento\Framework\App\Utility\Files::init();
 
         $this->validationStateMock = $this->getMockBuilder('Magento\Framework\Config\ValidationStateInterface')
-            ->setMethods(['isValidated'])
+            ->setMethods(['isValidationRequired'])
             ->getMockForAbstractClass();
         $this->schemaLocatorMock = $this->getMockBuilder('Magento\Config\Model\Config\SchemaLocator')
             ->disableOriginalConstructor()
@@ -72,7 +72,7 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
             ->getMockForAbstractClass();
 
         $this->validationStateMock->expects($this->atLeastOnce())
-            ->method('isValidated')
+            ->method('isValidationRequired')
             ->willReturn(false);
         $this->schemaLocatorMock->expects($this->atLeastOnce())
             ->method('getPerFileSchema')
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AbstractMergedConfigTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AbstractMergedConfigTest.php
index bc0518559ba..051b7e891ac 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AbstractMergedConfigTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AbstractMergedConfigTest.php
@@ -39,15 +39,28 @@ abstract class AbstractMergedConfigTest extends \PHPUnit_Framework_TestCase
         $invalidFiles = [];
 
         $files = $this->getConfigFiles();
+        $validationStateMock = $this->getMock('\Magento\Framework\Config\ValidationStateInterface', [], [], '', false);
+        $validationStateMock->method('isValidationRequired')
+            ->willReturn(false);
         $mergedConfig = new \Magento\Framework\Config\Dom(
             '<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></config>',
+            $validationStateMock,
             $this->getIdAttributes()
         );
 
         foreach ($files as $file) {
             $content = file_get_contents($file[0]);
             try {
-                new \Magento\Framework\Config\Dom($content, $this->getIdAttributes());
+                $validationStateMock = $this->getMock(
+                    '\Magento\Framework\Config\ValidationStateInterface',
+                    [],
+                    [],
+                    '',
+                    false
+                );
+                $validationStateMock->method('isValidationRequired')
+                    ->willReturn(true);
+                new \Magento\Framework\Config\Dom($content, $validationStateMock, $this->getIdAttributes());
                 //merge won't be performed if file is invalid because of exception thrown
                 $mergedConfig->merge($content);
             } catch (\Magento\Framework\Config\Dom\ValidationException $e) {
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AclConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AclConfigFilesTest.php
index c998094fc96..9b66e0702c0 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AclConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AclConfigFilesTest.php
@@ -35,7 +35,10 @@ class AclConfigFilesTest extends \PHPUnit_Framework_TestCase
      */
     public function testAclConfigFile($file)
     {
-        $domConfig = new \Magento\Framework\Config\Dom(file_get_contents($file));
+        $validationStateMock = $this->getMock('\Magento\Framework\Config\ValidationStateInterface', [], [], '', false);
+        $validationStateMock->method('isValidationRequired')
+            ->willReturn(true);
+        $domConfig = new \Magento\Framework\Config\Dom(file_get_contents($file), $validationStateMock);
         $result = $domConfig->validate($this->_schemeFile, $errors);
         $message = "Invalid XML-file: {$file}\n";
         foreach ($errors as $error) {
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/CacheFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/CacheFilesTest.php
index 430cced2f1a..25051e023a5 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/CacheFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/CacheFilesTest.php
@@ -14,7 +14,7 @@ class CacheFilesTest extends \PHPUnit_Framework_TestCase
     public function testCacheConfig($area)
     {
         $validationStateMock = $this->getMock('Magento\Framework\Config\ValidationStateInterface');
-        $validationStateMock->expects($this->any())->method('isValidated')->will($this->returnValue(true));
+        $validationStateMock->expects($this->any())->method('isValidationRequired')->will($this->returnValue(true));
 
         $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
 
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/DiConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/DiConfigFilesTest.php
index 42b6a74d7e0..b9c4c7cbb94 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/DiConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/DiConfigFilesTest.php
@@ -108,7 +108,7 @@ class DiConfigFilesTest extends \PHPUnit_Framework_TestCase
         $fileResolverMock = $this->getMock('Magento\Framework\Config\FileResolverInterface');
         $fileResolverMock->expects($this->any())->method('read')->will($this->returnValue($files));
         $validationStateMock = $this->getMock('Magento\Framework\Config\ValidationStateInterface');
-        $validationStateMock->expects($this->any())->method('isValidated')->will($this->returnValue(true));
+        $validationStateMock->expects($this->any())->method('isValidationRequired')->will($this->returnValue(true));
 
         /** @var \Magento\Framework\ObjectManager\Config\SchemaLocator $schemaLocator */
         $schemaLocator = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/EavAttributesConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/EavAttributesConfigFilesTest.php
index 03111c820d6..0a290d04abd 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/EavAttributesConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/EavAttributesConfigFilesTest.php
@@ -25,7 +25,7 @@ class EavAttributesConfigFilesTest extends \PHPUnit_Framework_TestCase
         );
 
         $validationStateMock = $this->getMock('Magento\Framework\Config\ValidationStateInterface');
-        $validationStateMock->expects($this->any())->method('isValidated')->will($this->returnValue(true));
+        $validationStateMock->expects($this->any())->method('isValidationRequired')->will($this->returnValue(true));
         $fileResolverMock = $this->getMock('Magento\Framework\Config\FileResolverInterface');
         $fileResolverMock->expects($this->any())->method('get')->will($this->returnValue($xmlFiles));
         $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/EventConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/EventConfigFilesTest.php
index f81c30cc040..d1f2fef8a81 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/EventConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/EventConfigFilesTest.php
@@ -25,7 +25,10 @@ class EventConfigFilesTest extends \PHPUnit_Framework_TestCase
     public function testEventConfigFiles($file)
     {
         $errors = [];
-        $dom = new \Magento\Framework\Config\Dom(file_get_contents($file));
+        $validationStateMock = $this->getMock('\Magento\Framework\Config\ValidationStateInterface', [], [], '', false);
+        $validationStateMock->method('isValidationRequired')
+            ->willReturn(true);
+        $dom = new \Magento\Framework\Config\Dom(file_get_contents($file), $validationStateMock);
         $result = $dom->validate($this->_schemaFile, $errors);
         $message = "Invalid XML-file: {$file}\n";
         foreach ($errors as $error) {
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ExportConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ExportConfigFilesTest.php
index 6229b7d06c0..00eb532d6b9 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ExportConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ExportConfigFilesTest.php
@@ -25,7 +25,7 @@ class ExportConfigFilesTest extends \PHPUnit_Framework_TestCase
         );
 
         $validationStateMock = $this->getMock('Magento\Framework\Config\ValidationStateInterface');
-        $validationStateMock->expects($this->any())->method('isValidated')->will($this->returnValue(true));
+        $validationStateMock->expects($this->any())->method('isValidationRequired')->will($this->returnValue(true));
         $fileResolverMock = $this->getMock('Magento\Framework\Config\FileResolverInterface');
         $fileResolverMock->expects($this->any())->method('get')->will($this->returnValue($xmlFiles));
         $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ImportConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ImportConfigFilesTest.php
index dd31a3287fc..61c6c66f79c 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ImportConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ImportConfigFilesTest.php
@@ -25,7 +25,7 @@ class ImportConfigFilesTest extends \PHPUnit_Framework_TestCase
         );
 
         $validationStateMock = $this->getMock('Magento\Framework\Config\ValidationStateInterface');
-        $validationStateMock->expects($this->any())->method('isValidated')->will($this->returnValue(true));
+        $validationStateMock->expects($this->any())->method('isValidationRequired')->will($this->returnValue(true));
         $fileResolverMock = $this->getMock('Magento\Framework\Config\FileResolverInterface');
         $fileResolverMock->expects($this->any())->method('get')->will($this->returnValue($xmlFiles));
         $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/IndexerConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/IndexerConfigFilesTest.php
index f12917f9c45..3f16450ae3e 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/IndexerConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/IndexerConfigFilesTest.php
@@ -36,7 +36,10 @@ class IndexerConfigFilesTest extends \PHPUnit_Framework_TestCase
      */
     public function testIndexerConfigFile($file)
     {
-        $domConfig = new \Magento\Framework\Config\Dom(file_get_contents($file));
+        $validationStateMock = $this->getMock('\Magento\Framework\Config\ValidationStateInterface', [], [], '', false);
+        $validationStateMock->method('isValidationRequired')
+            ->willReturn(true);
+        $domConfig = new \Magento\Framework\Config\Dom(file_get_contents($file), $validationStateMock);
         $result = $domConfig->validate($this->schemaFile, $errors);
         $message = "Invalid XML-file: {$file}\n";
         foreach ($errors as $error) {
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/Magento/Catalog/AttributeConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/Magento/Catalog/AttributeConfigFilesTest.php
index a0aaff1b953..1e4ceac5e7d 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/Magento/Catalog/AttributeConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/Magento/Catalog/AttributeConfigFilesTest.php
@@ -26,7 +26,10 @@ class AttributeConfigFilesTest extends \PHPUnit_Framework_TestCase
      */
     public function testFileFormat($file)
     {
-        $dom = new \Magento\Framework\Config\Dom(file_get_contents($file));
+        $validationStateMock = $this->getMock('\Magento\Framework\Config\ValidationStateInterface', [], [], '', false);
+        $validationStateMock->method('isValidationRequired')
+            ->willReturn(true);
+        $dom = new \Magento\Framework\Config\Dom(file_get_contents($file), $validationStateMock);
         $result = $dom->validate($this->_schemaFile, $errors);
         $this->assertTrue($result, print_r($errors, true));
     }
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/Magento/Customer/AddressFormatsFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/Magento/Customer/AddressFormatsFilesTest.php
index e503a543247..7cad3da12a0 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/Magento/Customer/AddressFormatsFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/Magento/Customer/AddressFormatsFilesTest.php
@@ -27,7 +27,10 @@ class AddressFormatsFilesTest extends \PHPUnit_Framework_TestCase
      */
     public function testFileFormat($file)
     {
-        $dom = new \Magento\Framework\Config\Dom(file_get_contents($file));
+        $validationStateMock = $this->getMock('\Magento\Framework\Config\ValidationStateInterface', [], [], '', false);
+        $validationStateMock->method('isValidationRequired')
+            ->willReturn(true);
+        $dom = new \Magento\Framework\Config\Dom(file_get_contents($file), $validationStateMock);
         $result = $dom->validate($this->_schemaFile, $errors);
         $this->assertTrue($result, print_r($errors, true));
     }
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/Magento/Email/EmailTemplateConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/Magento/Email/EmailTemplateConfigFilesTest.php
index 8c667e6d38c..546db270e1b 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/Magento/Email/EmailTemplateConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/Magento/Email/EmailTemplateConfigFilesTest.php
@@ -17,7 +17,10 @@ class EmailTemplateConfigFilesTest extends \PHPUnit_Framework_TestCase
     {
         $urnResolver = new \Magento\Framework\Config\Dom\UrnResolver();
         $schemaFile = $urnResolver->getRealPath('urn:magento:module:Magento_Email:etc/email_templates.xsd');
-        $dom = new \Magento\Framework\Config\Dom(file_get_contents($file));
+        $validationStateMock = $this->getMock('\Magento\Framework\Config\ValidationStateInterface', [], [], '', false);
+        $validationStateMock->method('isValidationRequired')
+            ->willReturn(true);
+        $dom = new \Magento\Framework\Config\Dom(file_get_contents($file), $validationStateMock);
         $result = $dom->validate($schemaFile, $errors);
         $this->assertTrue($result, print_r($errors, true));
     }
@@ -78,7 +81,7 @@ class EmailTemplateConfigFilesTest extends \PHPUnit_Framework_TestCase
     public function testMergedFormat()
     {
         $validationState = $this->getMock('Magento\Framework\Config\ValidationStateInterface');
-        $validationState->expects($this->any())->method('isValidated')->will($this->returnValue(true));
+        $validationState->expects($this->any())->method('isValidationRequired')->will($this->returnValue(true));
         /** @var \Magento\Email\Model\Template\Config\Reader $reader */
         $reader = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
             'Magento\Email\Model\Template\Config\Reader',
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/Magento/Sales/PdfConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/Magento/Sales/PdfConfigFilesTest.php
index 1bd81dbb001..f65f0fab665 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/Magento/Sales/PdfConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/Magento/Sales/PdfConfigFilesTest.php
@@ -19,7 +19,10 @@ class PdfConfigFilesTest extends \PHPUnit_Framework_TestCase
         );
         $schemaFile = $schemaLocator->getPerFileSchema();
 
-        $dom = new \Magento\Framework\Config\Dom(file_get_contents($file));
+        $validationStateMock = $this->getMock('\Magento\Framework\Config\ValidationStateInterface', [], [], '', false);
+        $validationStateMock->method('isValidationRequired')
+            ->willReturn(true);
+        $dom = new \Magento\Framework\Config\Dom(file_get_contents($file), $validationStateMock);
         $result = $dom->validate($schemaFile, $errors);
         $this->assertTrue($result, print_r($errors, true));
     }
@@ -35,7 +38,7 @@ class PdfConfigFilesTest extends \PHPUnit_Framework_TestCase
     public function testMergedFormat()
     {
         $validationState = $this->getMock('Magento\Framework\Config\ValidationStateInterface');
-        $validationState->expects($this->any())->method('isValidated')->will($this->returnValue(true));
+        $validationState->expects($this->any())->method('isValidationRequired')->will($this->returnValue(true));
 
         /** @var \Magento\Sales\Model\Order\Pdf\Config\Reader $reader */
         $reader = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/MviewConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/MviewConfigFilesTest.php
index d112c6d50d3..0393ef43ecd 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/MviewConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/MviewConfigFilesTest.php
@@ -36,7 +36,10 @@ class MviewConfigFilesTest extends \PHPUnit_Framework_TestCase
      */
     public function testIndexerConfigFile($file)
     {
-        $domConfig = new \Magento\Framework\Config\Dom(file_get_contents($file));
+        $validationStateMock = $this->getMock('\Magento\Framework\Config\ValidationStateInterface', [], [], '', false);
+        $validationStateMock->method('isValidationRequired')
+            ->willReturn(true);
+        $domConfig = new \Magento\Framework\Config\Dom(file_get_contents($file), $validationStateMock);
         $result = $domConfig->validate($this->schemaFile, $errors);
         $message = "Invalid XML-file: {$file}\n";
         foreach ($errors as $error) {
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ProductOptionsConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ProductOptionsConfigFilesTest.php
index 17b6e7dab79..77901d2d252 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ProductOptionsConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ProductOptionsConfigFilesTest.php
@@ -31,7 +31,7 @@ class ProductOptionsConfigFilesTest extends \PHPUnit_Framework_TestCase
         $fileResolverMock = $this->getMock('Magento\Framework\Config\FileResolverInterface');
         $fileResolverMock->expects($this->any())->method('get')->will($this->returnValue($xmlFiles));
         $validationStateMock = $this->getMock('Magento\Framework\Config\ValidationStateInterface');
-        $validationStateMock->expects($this->any())->method('isValidated')->will($this->returnValue(true));
+        $validationStateMock->expects($this->any())->method('isValidationRequired')->will($this->returnValue(true));
         $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
         $this->_model = $objectManager->create(
             'Magento\Catalog\Model\ProductOptions\Config\Reader',
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ProductTypesConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ProductTypesConfigFilesTest.php
index cf19b7a61da..0b21c161b14 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ProductTypesConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ProductTypesConfigFilesTest.php
@@ -27,7 +27,7 @@ class ProductTypesConfigFilesTest extends \PHPUnit_Framework_TestCase
         $fileResolverMock = $this->getMock('Magento\Framework\Config\FileResolverInterface');
         $fileResolverMock->expects($this->any())->method('get')->will($this->returnValue($xmlFiles));
         $validationStateMock = $this->getMock('Magento\Framework\Config\ValidationStateInterface');
-        $validationStateMock->expects($this->any())->method('isValidated')->will($this->returnValue(true));
+        $validationStateMock->expects($this->any())->method('isValidationRequired')->will($this->returnValue(true));
         $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
         $this->_model = $objectManager->create(
             'Magento\Catalog\Model\ProductTypes\Config\Reader',
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ResourcesConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ResourcesConfigFilesTest.php
index 044605bcc3b..ad967592e61 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ResourcesConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ResourcesConfigFilesTest.php
@@ -27,7 +27,7 @@ class ResourcesConfigFilesTest extends \PHPUnit_Framework_TestCase
         $fileResolverMock = $this->getMock('Magento\Framework\Config\FileResolverInterface');
         $fileResolverMock->expects($this->any())->method('get')->will($this->returnValue($xmlFiles));
         $validationStateMock = $this->getMock('Magento\Framework\Config\ValidationStateInterface');
-        $validationStateMock->expects($this->any())->method('isValidated')->will($this->returnValue(true));
+        $validationStateMock->expects($this->any())->method('isValidationRequired')->will($this->returnValue(true));
         $deploymentConfigMock = $this->getMock('Magento\Framework\App\DeploymentConfig', [], [], '', false);
         $deploymentConfigMock->expects($this->any())->method('getConfiguration')->will($this->returnValue([]));
         $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/RouteConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/RouteConfigFilesTest.php
index 16bc451c47c..cecf1bf93bd 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/RouteConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/RouteConfigFilesTest.php
@@ -9,6 +9,11 @@ use Magento\Framework\Component\ComponentRegistrar;
 
 class RouteConfigFilesTest extends \PHPUnit_Framework_TestCase
 {
+    /**
+     * @var \Magento\Framework\Config\ValidationStateInterface
+     */
+
+    protected $validationStateMock;
     /**
      * attributes represent merging rules
      * copied from original class \Magento\Framework\App\Route\Config\Reader
@@ -36,6 +41,15 @@ class RouteConfigFilesTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
+        $this->validationStateMock = $this->getMock(
+            '\Magento\Framework\Config\ValidationStateInterface',
+            [],
+            [],
+            '',
+            false
+        );
+        $this->validationStateMock->method('isValidationRequired')
+            ->willReturn(true);
         $urnResolver = new \Magento\Framework\Config\Dom\UrnResolver();
         $this->schemaFile = $urnResolver->getRealPath('urn:magento:framework:App/etc/routes.xsd');
         $this->mergedSchemaFile = $urnResolver->getRealPath('urn:magento:framework:App/etc/routes_merged.xsd');
@@ -51,12 +65,22 @@ class RouteConfigFilesTest extends \PHPUnit_Framework_TestCase
             $mask = $moduleDir . '/etc/*/routes.xml';
             $files = array_merge($files, glob($mask));
         }
-        $mergedConfig = new \Magento\Framework\Config\Dom('<config></config>', $this->_idAttributes);
+        $mergedConfig = new \Magento\Framework\Config\Dom(
+            '<config></config>',
+            $this->validationStateMock,
+            $this->_idAttributes
+        );
 
         foreach ($files as $file) {
             $content = file_get_contents($file);
             try {
-                new \Magento\Framework\Config\Dom($content, $this->_idAttributes, null, $this->schemaFile);
+                new \Magento\Framework\Config\Dom(
+                    $content,
+                    $this->validationStateMock,
+                    $this->_idAttributes,
+                    null,
+                    $this->schemaFile
+                );
 
                 //merge won't be performed if file is invalid because of exception thrown
                 $mergedConfig->merge($content);
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ViewConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ViewConfigFilesTest.php
index d65b3fa9d7c..97fbba4cb67 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ViewConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ViewConfigFilesTest.php
@@ -18,7 +18,10 @@ class ViewConfigFilesTest extends \PHPUnit_Framework_TestCase
             'Magento\Framework\View\Xsd\Reader'
         );
         $mergeXsd = $reader->read();
-        $domConfig = new \Magento\Framework\Config\Dom($file);
+        $validationStateMock = $this->getMock('\Magento\Framework\Config\ValidationStateInterface', [], [], '', false);
+        $validationStateMock->method('isValidationRequired')
+            ->willReturn(true);
+        $domConfig = new \Magento\Framework\Config\Dom($file, $validationStateMock);
         $result = $domConfig->validate(
             $mergeXsd,
             $errors
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php
index 95a9bb0d8cb..5fcdf88564f 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php
@@ -9,6 +9,24 @@ use Magento\Framework\Component\ComponentRegistrar;
 
 class XmlFilesTest extends \PHPUnit_Framework_TestCase
 {
+    /**
+     * @var \Magento\Framework\Config\ValidationStateInterface
+     */
+    protected $validationStateMock;
+
+    public function setUp()
+    {
+        $this->validationStateMock = $this->getMock(
+            'Magento\Framework\Config\ValidationStateInterface',
+            [],
+            [],
+            '',
+            false
+        );
+        $this->validationStateMock->method('isValidationRequired')
+            ->willReturn(true);
+    }
+
     /**
      * @param string $file
      * @dataProvider viewConfigFileDataProvider
@@ -19,7 +37,10 @@ class XmlFilesTest extends \PHPUnit_Framework_TestCase
             'Magento\Framework\View\Xsd\Reader'
         );
         $mergeXsd = $reader->read();
-        $domConfig = new \Magento\Framework\Config\Dom(file_get_contents($file));
+        $domConfig = new \Magento\Framework\Config\Dom(
+            file_get_contents($file),
+            $this->validationStateMock
+        );
         $errors = [];
         $result = $domConfig->validate($mergeXsd, $errors);
         $this->assertTrue($result, "Invalid XML-file: {$file}\n" . join("\n", $errors));
@@ -71,7 +92,7 @@ class XmlFilesTest extends \PHPUnit_Framework_TestCase
      */
     public function testThemeConfigFileSchema($file)
     {
-        $domConfig = new \Magento\Framework\Config\Dom(file_get_contents($file));
+        $domConfig = new \Magento\Framework\Config\Dom(file_get_contents($file), $this->validationStateMock);
         $errors = [];
         $result = $domConfig->validate('urn:magento:framework:Config/etc/theme.xsd', $errors);
         $this->assertTrue($result, "Invalid XML-file: {$file}\n" . join("\n", $errors));
diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/App/Language/CircularDependencyTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/App/Language/CircularDependencyTest.php
index d6e27c159ec..358b6a35af3 100644
--- a/dev/tests/static/testsuite/Magento/Test/Integrity/App/Language/CircularDependencyTest.php
+++ b/dev/tests/static/testsuite/Magento/Test/Integrity/App/Language/CircularDependencyTest.php
@@ -8,7 +8,6 @@ namespace Magento\Test\Integrity\App\Language;
 
 use Magento\Framework\App\Language\Config;
 use Magento\Framework\Component\ComponentRegistrar;
-use Magento\Framework\Config\Dom\UrnResolver;
 
 class CircularDependencyTest extends \PHPUnit_Framework_TestCase
 {
@@ -22,12 +21,36 @@ class CircularDependencyTest extends \PHPUnit_Framework_TestCase
      */
     public function testCircularDependencies()
     {
+        $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $componentRegistrar = new ComponentRegistrar();
         $declaredLanguages = $componentRegistrar->getPaths(ComponentRegistrar::LANGUAGE);
-        $urnResolver = new UrnResolver();
+        $validationStateMock = $this->getMock('\Magento\Framework\Config\ValidationStateInterface', [], [], '', false);
+        $validationStateMock->method('isValidationRequired')
+            ->willReturn(true);
+        $domFactoryMock = $this->getMock('Magento\Framework\Config\DomFactory', [], [], '', false);
+        $domFactoryMock->expects($this->any())
+            ->method('createDom')
+            ->willReturnCallback(
+                function ($arguments) use ($validationStateMock) {
+                    return new \Magento\Framework\Config\Dom(
+                        $arguments['xml'],
+                        $validationStateMock,
+                        [],
+                        null,
+                        $arguments['schemaFile']
+                    );
+                }
+            );
+
         $packs = [];
         foreach ($declaredLanguages as $language) {
-            $languageConfig = new Config(file_get_contents($language . '/language.xml'), $urnResolver);
+            $languageConfig = $objectManager->getObject(
+                'Magento\Framework\App\Language\Config',
+                [
+                    'source' => file_get_contents($language . '/language.xml'),
+                    'domFactory' => $domFactoryMock
+                ]
+            );
             $this->packs[$languageConfig->getVendor()][$languageConfig->getPackage()] = $languageConfig;
             $packs[] = $languageConfig;
         }
diff --git a/lib/internal/Magento/Framework/Api/Test/Unit/ExtensionAttribute/Config/XsdTest.php b/lib/internal/Magento/Framework/Api/Test/Unit/ExtensionAttribute/Config/XsdTest.php
index 90658f3120b..bd2ea71987f 100644
--- a/lib/internal/Magento/Framework/Api/Test/Unit/ExtensionAttribute/Config/XsdTest.php
+++ b/lib/internal/Magento/Framework/Api/Test/Unit/ExtensionAttribute/Config/XsdTest.php
@@ -25,8 +25,11 @@ class XsdTest extends \PHPUnit_Framework_TestCase
      */
     public function testExemplarXml($fixtureXml, array $expectedErrors)
     {
+        $validationStateMock = $this->getMock('\Magento\Framework\Config\ValidationStateInterface', [], [], '', false);
+        $validationStateMock->method('isValidationRequired')
+            ->willReturn(true);
         $messageFormat = '%message%';
-        $dom = new \Magento\Framework\Config\Dom($fixtureXml, [], null, null, $messageFormat);
+        $dom = new \Magento\Framework\Config\Dom($fixtureXml, $validationStateMock, [], null, null, $messageFormat);
         $actualResult = $dom->validate($this->_schemaFile, $actualErrors);
         $this->assertEquals($expectedErrors, $actualErrors, "Validation errors does not match.");
         $this->assertEquals(empty($expectedErrors), $actualResult, "Validation result is invalid.");
diff --git a/lib/internal/Magento/Framework/App/Arguments/ValidationState.php b/lib/internal/Magento/Framework/App/Arguments/ValidationState.php
index 55c65798c64..8af1dedc59c 100644
--- a/lib/internal/Magento/Framework/App/Arguments/ValidationState.php
+++ b/lib/internal/Magento/Framework/App/Arguments/ValidationState.php
@@ -27,7 +27,7 @@ class ValidationState implements \Magento\Framework\Config\ValidationStateInterf
      *
      * @return boolean
      */
-    public function isValidated()
+    public function isValidationRequired()
     {
         return $this->_appMode == \Magento\Framework\App\State::MODE_DEVELOPER;
     }
diff --git a/lib/internal/Magento/Framework/App/Config/Initial/Reader.php b/lib/internal/Magento/Framework/App/Config/Initial/Reader.php
index d907d22223e..33f0c4cfcb3 100644
--- a/lib/internal/Magento/Framework/App/Config/Initial/Reader.php
+++ b/lib/internal/Magento/Framework/App/Config/Initial/Reader.php
@@ -55,7 +55,7 @@ class Reader
      * @param \Magento\Framework\Config\FileResolverInterface $fileResolver
      * @param \Magento\Framework\Config\ConverterInterface $converter
      * @param SchemaLocator $schemaLocator
-     * @param \Magento\Framework\Config\ValidationStateInterface $validationState
+     * @param \Magento\Framework\Config\DomFactory $domFactory
      * @param string $fileName
      * @param string $domDocumentClass
      */
@@ -63,14 +63,13 @@ class Reader
         \Magento\Framework\Config\FileResolverInterface $fileResolver,
         \Magento\Framework\Config\ConverterInterface $converter,
         SchemaLocator $schemaLocator,
-        \Magento\Framework\Config\ValidationStateInterface $validationState,
-        $fileName = 'config.xml',
-        $domDocumentClass = 'Magento\Framework\Config\Dom'
+        \Magento\Framework\Config\DomFactory $domFactory,
+        $fileName = 'config.xml'
     ) {
-        $this->_schemaFile = $validationState->isValidated() ? $schemaLocator->getSchema() : null;
+        $this->_schemaFile = $schemaLocator->getSchema();
         $this->_fileResolver = $fileResolver;
         $this->_converter = $converter;
-        $this->_domDocumentClass = $domDocumentClass;
+        $this->domFactory = $domFactory;
         $this->_fileName = $fileName;
     }
 
@@ -99,9 +98,8 @@ class Reader
         $domDocument = null;
         foreach ($fileList as $file) {
             try {
-                if ($domDocument === null) {
-                    $class = $this->_domDocumentClass;
-                    $domDocument = new $class($file, [], null, $this->_schemaFile);
+                if (!$domDocument) {
+                    $domDocument = $this->domFactory->createDom(['xml' => $file, 'schemaFile' => $this->_schemaFile]);
                 } else {
                     $domDocument->merge($file);
                 }
diff --git a/lib/internal/Magento/Framework/App/Language/Config.php b/lib/internal/Magento/Framework/App/Language/Config.php
index 84dfdfe149c..8376e47e47c 100644
--- a/lib/internal/Magento/Framework/App/Language/Config.php
+++ b/lib/internal/Magento/Framework/App/Language/Config.php
@@ -16,6 +16,11 @@ class Config
     /** @var \Magento\Framework\Config\Dom\UrnResolver */
     protected $urnResolver;
 
+    /**
+     * @var \Magento\Framework\Config\DomFactory
+     */
+    protected $domFactory;
+
     /**
      * Data extracted from the configuration file
      *
@@ -28,22 +33,18 @@ class Config
      *
      * @param string $source
      * @param \Magento\Framework\Config\Dom\UrnResolver $urnResolver
+     * @param \Magento\Framework\Config\DomFactory $domFactory
      * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function __construct(
         $source,
-        \Magento\Framework\Config\Dom\UrnResolver $urnResolver
+        \Magento\Framework\Config\Dom\UrnResolver $urnResolver,
+        \Magento\Framework\Config\DomFactory $domFactory
     ) {
         $this->urnResolver = $urnResolver;
-        $config = new \DOMDocument();
-        $config->loadXML($source);
-        $errors = Dom::validateDomDocument($config, $this->getSchemaFile());
-        if (!empty($errors)) {
-            throw new \Magento\Framework\Exception\LocalizedException(
-                new \Magento\Framework\Phrase("Invalid Document: \n%1", [implode("\n", $errors)])
-            );
-        }
-        $this->_data = $this->_extractData($config);
+        $this->domFactory = $domFactory;
+        $dom = $this->domFactory->createDom(['xml' => $source, 'schemaFile' => $this->getSchemaFile()]);
+        $this->_data = $this->_extractData($dom->getDom());
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Config/Initial/ReaderTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Config/Initial/ReaderTest.php
index 4c1fde2796b..98b9d81e75b 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/Config/Initial/ReaderTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/Config/Initial/ReaderTest.php
@@ -20,12 +20,12 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Framework\Config\FileResolverInterface | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Config\FileResolverInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $fileResolverMock;
 
     /**
-     * @var \Magento\Framework\App\Config\Initial\Converter | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\Config\Initial\Converter|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $converterMock;
 
@@ -35,15 +35,20 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
     protected $filePath;
 
     /**
-     * @var \Magento\Framework\Config\ValidationStateInterface | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Config\ValidationStateInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $validationStateMock;
 
     /**
-     * @var \Magento\Framework\App\Config\Initial\SchemaLocator | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\Config\Initial\SchemaLocator|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $schemaLocatorMock;
 
+    /**
+     * @var \Magento\Framework\Config\DomFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $domFactoryMock;
+
     protected function setUp()
     {
         $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
@@ -58,6 +63,10 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->validationStateMock = $this->getMock('Magento\Framework\Config\ValidationStateInterface');
+        $this->validationStateMock->expects($this->any())
+            ->method('isValidationRequired')
+            ->will($this->returnValue(true));
+        $this->domFactoryMock = $this->getMock('Magento\Framework\Config\DomFactory', [], [], '', false);
     }
 
     public function testConstructor()
@@ -85,6 +94,7 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
     public function testReadValidConfig()
     {
         $this->createModelAndVerifyConstructor();
+        $this->prepareDomFactoryMock();
         $testXmlFilesList = [
             file_get_contents($this->filePath . 'initial_config1.xml'),
             file_get_contents($this->filePath . 'initial_config2.xml'),
@@ -104,6 +114,24 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals($expectedConfig, $this->model->read());
     }
 
+    private function prepareDomFactoryMock()
+    {
+        $validationStateMock = $this->validationStateMock;
+        $this->domFactoryMock->expects($this->once())
+            ->method('createDom')
+            ->willReturnCallback(
+                function ($arguments) use ($validationStateMock) {
+                    return new \Magento\Framework\Config\Dom(
+                        $arguments['xml'],
+                        $validationStateMock,
+                        [],
+                        null,
+                        $arguments['schemaFile']
+                    );
+                }
+            );
+    }
+
     /**
      * @covers \Magento\Framework\App\Config\Initial\Reader::read
      * @expectedException \Magento\Framework\Exception\LocalizedException
@@ -112,6 +140,7 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
     public function testReadInvalidConfig()
     {
         $this->createModelAndVerifyConstructor();
+        $this->prepareDomFactoryMock();
         $testXmlFilesList = [
             file_get_contents($this->filePath . 'invalid_config.xml'),
             file_get_contents($this->filePath . 'initial_config2.xml'),
@@ -133,17 +162,15 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
 
     private function createModelAndVerifyConstructor()
     {
-        $this->validationStateMock->expects($this->once())->method('isValidated')->will($this->returnValue(true));
         $schemaFile = $this->filePath . 'config.xsd';
         $this->schemaLocatorMock->expects($this->once())->method('getSchema')->will($this->returnValue($schemaFile));
-
         $this->model = $this->objectManager->getObject(
             'Magento\Framework\App\Config\Initial\Reader',
             [
                 'fileResolver' => $this->fileResolverMock,
                 'converter' => $this->converterMock,
                 'schemaLocator' => $this->schemaLocatorMock,
-                'validationState' => $this->validationStateMock
+                'domFactory' => $this->domFactoryMock
             ]
         );
     }
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Language/ConfigTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Language/ConfigTest.php
index c69c340fda1..5b2f4270d21 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/Language/ConfigTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/Language/ConfigTest.php
@@ -30,9 +30,27 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
             ->method('getRealPath')
             ->with('urn:magento:framework:App/Language/package.xsd')
             ->willReturn($this->urnResolver->getRealPath('urn:magento:framework:App/Language/package.xsd'));
+        $validationStateMock = $this->getMock('\Magento\Framework\Config\ValidationStateInterface', [], [], '', false);
+        $validationStateMock->method('isValidationRequired')
+            ->willReturn(true);
+        $domFactoryMock = $this->getMock('Magento\Framework\Config\DomFactory', [], [], '', false);
+        $domFactoryMock->expects($this->once())
+            ->method('createDom')
+            ->willReturnCallback(
+                function ($arguments) use ($validationStateMock) {
+                    return new \Magento\Framework\Config\Dom(
+                        $arguments['xml'],
+                        $validationStateMock,
+                        [],
+                        null,
+                        $arguments['schemaFile']
+                    );
+                }
+            );
         $this->config = new Config(
             file_get_contents(__DIR__ . '/_files/language.xml'),
-            $this->urnResolverMock
+            $this->urnResolverMock,
+            $domFactoryMock
         );
     }
 
diff --git a/lib/internal/Magento/Framework/Config/AbstractXml.php b/lib/internal/Magento/Framework/Config/AbstractXml.php
index acdd49eeee2..abf16d6cd17 100644
--- a/lib/internal/Magento/Framework/Config/AbstractXml.php
+++ b/lib/internal/Magento/Framework/Config/AbstractXml.php
@@ -24,14 +24,23 @@ abstract class AbstractXml
      */
     protected $_domConfig = null;
 
+    /**
+     * @var \Magento\Framework\Config\DomFactory
+     */
+    protected $domFactory;
+
     /**
      * Instantiate with the list of files to merge
      *
      * @param array $configFiles
+     * @param \Magento\Framework\Config\DomFactory $domFactory
      * @throws \InvalidArgumentException
      */
-    public function __construct($configFiles)
-    {
+    public function __construct(
+        $configFiles,
+        \Magento\Framework\Config\DomFactory $domFactory
+    ) {
+        $this->domFactory = $domFactory;
         if (empty($configFiles)) {
             throw new \InvalidArgumentException('There must be at least one configuration file specified.');
         }
@@ -81,9 +90,7 @@ abstract class AbstractXml
                 );
             }
         }
-        if ($this->_isRuntimeValidated()) {
-            $this->_performValidate();
-        }
+        $this->_performValidate();
         return $this->_getDomConfigModel()->getDom();
     }
 
@@ -96,7 +103,9 @@ abstract class AbstractXml
      */
     protected function _performValidate($file = null)
     {
-        if (!$this->_getDomConfigModel()->validate($this->getSchemaFile(), $errors)) {
+        $errors = [];
+        $this->_getDomConfigModel()->validate($this->getSchemaFile(), $errors);
+        if (!empty($errors)) {
             $phrase = (null === $file)
                 ? new \Magento\Framework\Phrase('Invalid Document %1%2', [PHP_EOL, implode("\n", $errors)])
                 : new \Magento\Framework\Phrase('Invalid XML-file: %1%2%3', [$file, PHP_EOL, implode("\n", $errors)]);
@@ -106,16 +115,6 @@ abstract class AbstractXml
         return $this;
     }
 
-    /**
-     * Get if xml files must be runtime validated
-     *
-     * @return boolean
-     */
-    protected function _isRuntimeValidated()
-    {
-        return true;
-    }
-
     /**
      * Get Dom configuration model
      *
@@ -125,13 +124,12 @@ abstract class AbstractXml
     protected function _getDomConfigModel()
     {
         if (null === $this->_domConfig) {
-            $schemaFile = $this->getPerFileSchemaFile() &&
-                $this->_isRuntimeValidated() ? $this->getPerFileSchemaFile() : null;
-            $this->_domConfig = new \Magento\Framework\Config\Dom(
-                $this->_getInitialXml(),
-                $this->_getIdAttributes(),
-                null,
-                $schemaFile
+            $this->_domConfig = $this->domFactory->createDom(
+                [
+                    'xml' => $this->_getInitialXml(),
+                    'idAttributes' => $this->_getIdAttributes(),
+                    'schemaFile' => $this->getPerFileSchemaFile()
+                ]
             );
         }
         return $this->_domConfig;
diff --git a/lib/internal/Magento/Framework/Config/Dom.php b/lib/internal/Magento/Framework/Config/Dom.php
index 4f512fd7820..f8e910c79fa 100644
--- a/lib/internal/Magento/Framework/Config/Dom.php
+++ b/lib/internal/Magento/Framework/Config/Dom.php
@@ -30,6 +30,11 @@ class Dom
      */
     const ERROR_FORMAT_DEFAULT = "%message%\nLine: %line%\n";
 
+    /**
+     * @var \Magento\Framework\Config\ValidationStateInterface
+     */
+    private $validationState;
+
     /**
      * Dom document
      *
@@ -71,7 +76,7 @@ class Dom
     protected $rootNamespace;
 
     /**
-     * \Magento\Framework\Config\Dom\UrnResolver
+     * @var \Magento\Framework\Config\Dom\UrnResolver
      */
     private static $urnResolver;
 
@@ -82,6 +87,7 @@ class Dom
      * The path to ID attribute name should not include any attribute notations or modifiers -- only node names
      *
      * @param string $xml
+     * @param \Magento\Framework\Config\ValidationStateInterface $validationState
      * @param array $idAttributes
      * @param string $typeAttributeName
      * @param string $schemaFile
@@ -89,11 +95,13 @@ class Dom
      */
     public function __construct(
         $xml,
+        \Magento\Framework\Config\ValidationStateInterface $validationState,
         array $idAttributes = [],
         $typeAttributeName = null,
         $schemaFile = null,
         $errorFormat = self::ERROR_FORMAT_DEFAULT
     ) {
+        $this->validationState = $validationState;
         $this->schema = $schemaFile;
         $this->nodeMergingConfig = new Dom\NodeMergingConfig(new Dom\NodePathMatcher(), $idAttributes);
         $this->typeAttributeName = $typeAttributeName;
@@ -353,7 +361,7 @@ class Dom
     {
         $dom = new \DOMDocument();
         $dom->loadXML($xml);
-        if ($this->schema) {
+        if ($this->validationState->isValidationRequired() && $this->schema) {
             $errors = $this->validateDomDocument($dom, $this->schema, $this->errorFormat);
             if (count($errors)) {
                 throw new \Magento\Framework\Config\Dom\ValidationException(implode("\n", $errors));
@@ -371,8 +379,11 @@ class Dom
      */
     public function validate($schemaFileName, &$errors = [])
     {
-        $errors = $this->validateDomDocument($this->dom, $schemaFileName, $this->errorFormat);
-        return !count($errors);
+        if ($this->validationState->isValidationRequired()) {
+            $errors = $this->validateDomDocument($this->dom, $schemaFileName, $this->errorFormat);
+            return !count($errors);
+        }
+        return true;
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/Config/DomFactory.php b/lib/internal/Magento/Framework/Config/DomFactory.php
index 20be79afd0f..48d000c9e02 100644
--- a/lib/internal/Magento/Framework/Config/DomFactory.php
+++ b/lib/internal/Magento/Framework/Config/DomFactory.php
@@ -24,8 +24,9 @@ class DomFactory
      *
      * @param \Magento\Framework\ObjectManagerInterface $objectManger
      */
-    public function __construct(\Magento\Framework\ObjectManagerInterface $objectManger)
-    {
+    public function __construct(
+        \Magento\Framework\ObjectManagerInterface $objectManger
+    ) {
         $this->_objectManager = $objectManger;
     }
 
diff --git a/lib/internal/Magento/Framework/Config/Reader/Filesystem.php b/lib/internal/Magento/Framework/Config/Reader/Filesystem.php
index 992158c6edf..bbe3544318f 100644
--- a/lib/internal/Magento/Framework/Config/Reader/Filesystem.php
+++ b/lib/internal/Magento/Framework/Config/Reader/Filesystem.php
@@ -63,11 +63,9 @@ class Filesystem implements \Magento\Framework\Config\ReaderInterface
     protected $_domDocumentClass;
 
     /**
-     * Should configuration be validated
-     *
-     * @var bool
+     * @var \Magento\Framework\Config\ValidationStateInterface
      */
-    protected $_isValidated;
+    protected $validationState;
 
     /**
      * Constructor
@@ -95,10 +93,10 @@ class Filesystem implements \Magento\Framework\Config\ReaderInterface
         $this->_converter = $converter;
         $this->_fileName = $fileName;
         $this->_idAttributes = array_replace($this->_idAttributes, $idAttributes);
+        $this->validationState = $validationState;
         $this->_schemaFile = $schemaLocator->getSchema();
-        $this->_isValidated = $validationState->isValidated();
-        $this->_perFileSchema = $schemaLocator->getPerFileSchema() &&
-            $this->_isValidated ? $schemaLocator->getPerFileSchema() : null;
+        $this->_perFileSchema = $schemaLocator->getPerFileSchema() && $validationState->isValidationRequired()
+            ? $schemaLocator->getPerFileSchema() : null;
         $this->_domDocumentClass = $domDocumentClass;
         $this->_defaultScope = $defaultScope;
     }
@@ -145,7 +143,7 @@ class Filesystem implements \Magento\Framework\Config\ReaderInterface
                 );
             }
         }
-        if ($this->_isValidated) {
+        if ($this->validationState->isValidationRequired()) {
             $errors = [];
             if ($configMerger && !$configMerger->validate($this->_schemaFile, $errors)) {
                 $message = "Invalid Document \n";
@@ -172,7 +170,13 @@ class Filesystem implements \Magento\Framework\Config\ReaderInterface
      */
     protected function _createConfigMerger($mergerClass, $initialContents)
     {
-        $result = new $mergerClass($initialContents, $this->_idAttributes, null, $this->_perFileSchema);
+        $result = new $mergerClass(
+            $initialContents,
+            $this->validationState,
+            $this->_idAttributes,
+            null,
+            $this->_perFileSchema
+        );
         if (!$result instanceof \Magento\Framework\Config\Dom) {
             throw new \UnexpectedValueException(
                 "Instance of the DOM config merger is expected, got {$mergerClass} instead."
diff --git a/lib/internal/Magento/Framework/Config/Test/Unit/DomTest.php b/lib/internal/Magento/Framework/Config/Test/Unit/DomTest.php
index d759359f4ef..abe3ca2a331 100644
--- a/lib/internal/Magento/Framework/Config/Test/Unit/DomTest.php
+++ b/lib/internal/Magento/Framework/Config/Test/Unit/DomTest.php
@@ -7,6 +7,24 @@ namespace Magento\Framework\Config\Test\Unit;
 
 class DomTest extends \PHPUnit_Framework_TestCase
 {
+    /**
+     * @var \Magento\Framework\Config\ValidationStateInterface
+     */
+    protected $validationStateMock;
+
+    public function setUp()
+    {
+        $this->validationStateMock = $this->getMock(
+            '\Magento\Framework\Config\ValidationStateInterface',
+            [],
+            [],
+            '',
+            false
+        );
+        $this->validationStateMock->method('isValidationRequired')
+            ->willReturn(true);
+    }
+
     /**
      * @param string $xmlFile
      * @param string $newXmlFile
@@ -19,7 +37,7 @@ class DomTest extends \PHPUnit_Framework_TestCase
     {
         $xml = file_get_contents(__DIR__ . "/_files/dom/{$xmlFile}");
         $newXml = file_get_contents(__DIR__ . "/_files/dom/{$newXmlFile}");
-        $config = new \Magento\Framework\Config\Dom($xml, $ids, $typeAttributeName);
+        $config = new \Magento\Framework\Config\Dom($xml, $this->validationStateMock, $ids, $typeAttributeName);
         $config->merge($newXml);
         $this->assertXmlStringEqualsXmlFile(__DIR__ . "/_files/dom/{$expectedXmlFile}", $config->getDom()->saveXML());
     }
@@ -87,7 +105,7 @@ class DomTest extends \PHPUnit_Framework_TestCase
     {
         $xml = file_get_contents(__DIR__ . "/_files/dom/ambiguous_two.xml");
         $newXml = file_get_contents(__DIR__ . "/_files/dom/ambiguous_new_one.xml");
-        $config = new \Magento\Framework\Config\Dom($xml);
+        $config = new \Magento\Framework\Config\Dom($xml, $this->validationStateMock);
         $config->merge($newXml);
     }
 
@@ -98,7 +116,7 @@ class DomTest extends \PHPUnit_Framework_TestCase
      */
     public function testValidate($xml, array $expectedErrors)
     {
-        $dom = new \Magento\Framework\Config\Dom($xml);
+        $dom = new \Magento\Framework\Config\Dom($xml, $this->validationStateMock);
         $actualResult = $dom->validate(__DIR__ . '/_files/sample.xsd', $actualErrors);
         $this->assertEquals(empty($expectedErrors), $actualResult);
         $this->assertEquals($expectedErrors, $actualErrors);
@@ -125,7 +143,7 @@ class DomTest extends \PHPUnit_Framework_TestCase
         $expectedErrors = [
             "Error: `Element 'unknown_node': This element is not expected. Expected is ( node ).`",
         ];
-        $dom = new \Magento\Framework\Config\Dom($xml, [], null, null, $errorFormat);
+        $dom = new \Magento\Framework\Config\Dom($xml, $this->validationStateMock, [], null, null, $errorFormat);
         $actualResult = $dom->validate(__DIR__ . '/_files/sample.xsd', $actualErrors);
         $this->assertFalse($actualResult);
         $this->assertEquals($expectedErrors, $actualErrors);
@@ -139,7 +157,7 @@ class DomTest extends \PHPUnit_Framework_TestCase
     {
         $xml = '<root><unknown_node/></root>';
         $errorFormat = '%message%,%unknown%';
-        $dom = new \Magento\Framework\Config\Dom($xml, [], null, null, $errorFormat);
+        $dom = new \Magento\Framework\Config\Dom($xml, $this->validationStateMock, [], null, null, $errorFormat);
         $dom->validate(__DIR__ . '/_files/sample.xsd');
     }
 
@@ -147,7 +165,7 @@ class DomTest extends \PHPUnit_Framework_TestCase
     {
         $xml = '<root><node id="id1"/><node id="id2"/></root>';
         $schemaFile = __DIR__ . '/_files/sample.xsd';
-        $dom = new \Magento\Framework\Config\Dom($xml);
+        $dom = new \Magento\Framework\Config\Dom($xml, $this->validationStateMock);
         $domMock = $this->getMock('DOMDocument', ['schemaValidate'], []);
         $domMock->expects($this->once())
             ->method('schemaValidate')
diff --git a/lib/internal/Magento/Framework/Config/Test/Unit/Reader/FilesystemTest.php b/lib/internal/Magento/Framework/Config/Test/Unit/Reader/FilesystemTest.php
index 57e7a97d573..7f83867d827 100644
--- a/lib/internal/Magento/Framework/Config/Test/Unit/Reader/FilesystemTest.php
+++ b/lib/internal/Magento/Framework/Config/Test/Unit/Reader/FilesystemTest.php
@@ -104,7 +104,9 @@ class FilesystemTest extends \PHPUnit_Framework_TestCase
                 $this->urnResolver->getRealPath('urn:magento:framework:Config/Test/Unit/_files/reader/schema.xsd')
             )
         );
-        $this->_validationStateMock->expects($this->any())->method('isValidated')->will($this->returnValue(true));
+        $this->_validationStateMock->expects($this->any())
+            ->method('isValidationRequired')
+            ->willReturn(true);
         $model = new Filesystem(
             $this->_fileResolverMock,
             $this->_converterMock,
@@ -133,7 +135,9 @@ class FilesystemTest extends \PHPUnit_Framework_TestCase
                 $this->urnResolver->getRealPath('urn:magento:framework:Config/Test/Unit/_files/reader/schema.xsd')
             )
         );
-        $this->_validationStateMock->expects($this->any())->method('isValidated')->will($this->returnValue(true));
+        $this->_validationStateMock->expects($this->any())
+            ->method('isValidationRequired')
+            ->willReturn(true);
 
         $model = new Filesystem(
             $this->_fileResolverMock,
diff --git a/lib/internal/Magento/Framework/Config/Test/Unit/ValidationStateTest.php b/lib/internal/Magento/Framework/Config/Test/Unit/ValidationStateTest.php
index 9e0cf08004e..6026273c1fc 100644
--- a/lib/internal/Magento/Framework/Config/Test/Unit/ValidationStateTest.php
+++ b/lib/internal/Magento/Framework/Config/Test/Unit/ValidationStateTest.php
@@ -10,18 +10,18 @@ class ValidationStateTest extends \PHPUnit_Framework_TestCase
     /**
      * @param string $appMode
      * @param boolean $expectedResult
-     * @dataProvider isValidatedDataProvider
+     * @dataProvider isValidationRequiredDataProvider
      */
-    public function testIsValidated($appMode, $expectedResult)
+    public function testIsValidationRequired($appMode, $expectedResult)
     {
         $model = new \Magento\Framework\App\Arguments\ValidationState($appMode);
-        $this->assertEquals($model->isValidated(), $expectedResult);
+        $this->assertEquals($model->isValidationRequired(), $expectedResult);
     }
 
     /**
      * @return array
      */
-    public function isValidatedDataProvider()
+    public function isValidationRequiredDataProvider()
     {
         return [
             [\Magento\Framework\App\State::MODE_DEVELOPER, true],
diff --git a/lib/internal/Magento/Framework/Config/ValidationStateInterface.php b/lib/internal/Magento/Framework/Config/ValidationStateInterface.php
index 61f39fb67cc..1ad9f7b1679 100644
--- a/lib/internal/Magento/Framework/Config/ValidationStateInterface.php
+++ b/lib/internal/Magento/Framework/Config/ValidationStateInterface.php
@@ -17,5 +17,5 @@ interface ValidationStateInterface
      *
      * @return boolean
      */
-    public function isValidated();
+    public function isValidationRequired();
 }
diff --git a/lib/internal/Magento/Framework/Config/View.php b/lib/internal/Magento/Framework/Config/View.php
index 98a96140188..cdf7ec68b72 100644
--- a/lib/internal/Magento/Framework/Config/View.php
+++ b/lib/internal/Magento/Framework/Config/View.php
@@ -9,15 +9,11 @@
  */
 namespace Magento\Framework\Config;
 
-use Magento\Framework\Config\Dom\UrnResolver;
 use Magento\Framework\View\Xsd\Reader;
 use Magento\Framework\View\Xsd\Media\TypeDataExtractorPool;
 
 class View extends \Magento\Framework\Config\AbstractXml
 {
-    /** @var UrnResolver */
-    protected $urnResolver;
-
     /**
      * @var \Magento\Framework\View\Xsd\Media\TypeDataExtractorPool
      */
@@ -35,23 +31,22 @@ class View extends \Magento\Framework\Config\AbstractXml
 
     /**
      * @param array $configFiles
+     * @param DomFactory $domFactory
      * @param Reader $xsdReader
-     * @param UrnResolver $urnResolver
      * @param TypeDataExtractorPool $extractorPool
      * @param array $xpath
      */
     public function __construct(
         $configFiles,
+        DomFactory $domFactory,
         Reader $xsdReader,
-        UrnResolver $urnResolver,
         TypeDataExtractorPool $extractorPool,
         $xpath = []
     ) {
         $this->xpath = $xpath;
         $this->extractorPool = $extractorPool;
-        $this->urnResolver = $urnResolver;
         $this->xsdReader = $xsdReader;
-        parent::__construct($configFiles);
+        parent::__construct($configFiles, $domFactory);
     }
     
     /**
diff --git a/lib/internal/Magento/Framework/Indexer/Test/Unit/Config/ReaderTest.php b/lib/internal/Magento/Framework/Indexer/Test/Unit/Config/ReaderTest.php
index 54f09ad6128..bff3d9e5264 100644
--- a/lib/internal/Magento/Framework/Indexer/Test/Unit/Config/ReaderTest.php
+++ b/lib/internal/Magento/Framework/Indexer/Test/Unit/Config/ReaderTest.php
@@ -34,7 +34,9 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
 
         $this->_converter = $this->getMock('Magento\Framework\Indexer\Config\Converter', ['convert']);
         $validationState = $this->getMock('Magento\Framework\Config\ValidationStateInterface');
-        $validationState->expects($this->once())->method('isValidated')->will($this->returnValue(false));
+        $validationState->expects($this->any())
+            ->method('isValidationRequired')
+            ->willReturn(false);
 
         $this->_model = new \Magento\Framework\Indexer\Config\Reader(
             $this->_fileResolverMock,
diff --git a/lib/internal/Magento/Framework/Mview/Test/Unit/Config/ReaderTest.php b/lib/internal/Magento/Framework/Mview/Test/Unit/Config/ReaderTest.php
index ced98682173..5f2bf50dac3 100644
--- a/lib/internal/Magento/Framework/Mview/Test/Unit/Config/ReaderTest.php
+++ b/lib/internal/Magento/Framework/Mview/Test/Unit/Config/ReaderTest.php
@@ -44,7 +44,9 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
         $schemaLocator = new \Magento\Framework\Mview\Config\SchemaLocator($urnResolverMock);
 
         $validationState = $this->getMock('Magento\Framework\Config\ValidationStateInterface');
-        $validationState->expects($this->once())->method('isValidated')->will($this->returnValue(false));
+        $validationState->expects($this->any())
+            ->method('isValidationRequired')
+            ->willReturn(false);
 
         $this->_model = new \Magento\Framework\Mview\Config\Reader(
             $this->_fileResolverMock,
diff --git a/lib/internal/Magento/Framework/ObjectManager/Config/Reader/Dom.php b/lib/internal/Magento/Framework/ObjectManager/Config/Reader/Dom.php
index 2da29257ff9..8203e4a562d 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Config/Reader/Dom.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Config/Reader/Dom.php
@@ -62,6 +62,12 @@ class Dom extends \Magento\Framework\Config\Reader\Filesystem
      */
     protected function _createConfigMerger($mergerClass, $initialContents)
     {
-        return new $mergerClass($initialContents, $this->_idAttributes, self::TYPE_ATTRIBUTE, $this->_perFileSchema);
+        return new $mergerClass(
+            $initialContents,
+            $this->validationState,
+            $this->_idAttributes,
+            self::TYPE_ATTRIBUTE,
+            $this->_perFileSchema
+        );
     }
 }
diff --git a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Config/Reader/_files/ConfigDomMock.php b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Config/Reader/_files/ConfigDomMock.php
index 492fbab7633..fffc1776bb0 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Config/Reader/_files/ConfigDomMock.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Config/Reader/_files/ConfigDomMock.php
@@ -15,7 +15,7 @@ class ConfigDomMock extends \PHPUnit_Framework_TestCase
      * @param $perFileSchema
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function __construct($initialContents, $idAttributes, $typeAttribute, $perFileSchema)
+    public function __construct($initialContents, $validationState, $idAttributes, $typeAttribute, $perFileSchema)
     {
         $this->assertEquals('first content item', $initialContents);
         $this->assertEquals('xsi:type', $typeAttribute);
diff --git a/lib/internal/Magento/Framework/Validator/Config.php b/lib/internal/Magento/Framework/Validator/Config.php
index 9b10f61bb59..b45a12914e7 100644
--- a/lib/internal/Magento/Framework/Validator/Config.php
+++ b/lib/internal/Magento/Framework/Validator/Config.php
@@ -19,7 +19,6 @@ class Config extends \Magento\Framework\Config\AbstractXml
     const CONSTRAINT_TYPE_ENTITY = 'entity';
 
     const CONSTRAINT_TYPE_PROPERTY = 'property';
-
     /**#@-*/
 
     /**
@@ -32,22 +31,18 @@ class Config extends \Magento\Framework\Config\AbstractXml
      */
     protected $_builderFactory;
 
-    /** @var \Magento\Framework\Config\Dom\UrnResolver */
-    protected $urnResolver;
-
     /**
      * @param array $configFiles
+     * @param \Magento\Framework\Config\DomFactory $domFactory
      * @param \Magento\Framework\Validator\UniversalFactory $builderFactory
-     * @param \Magento\Framework\Config\Dom\UrnResolver $urnResolver
      */
     public function __construct(
         $configFiles,
-        \Magento\Framework\Validator\UniversalFactory $builderFactory,
-        \Magento\Framework\Config\Dom\UrnResolver $urnResolver
+        \Magento\Framework\Config\DomFactory $domFactory,
+        \Magento\Framework\Validator\UniversalFactory $builderFactory
     ) {
         $this->_builderFactory = $builderFactory;
-        $this->urnResolver = $urnResolver;
-        parent::__construct($configFiles);
+        parent::__construct($configFiles, $domFactory);
     }
 
     /**
@@ -407,7 +402,7 @@ class Config extends \Magento\Framework\Config\AbstractXml
      */
     public function getSchemaFile()
     {
-        return $this->urnResolver->getRealPath('urn:magento:framework:Validator/etc/validation.xsd');
+        return __DIR__ . '/etc/validation.xsd';
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/Validator/Test/Unit/ConfigTest.php b/lib/internal/Magento/Framework/Validator/Test/Unit/ConfigTest.php
index 9a9bb9aafca..977cfb9adf0 100644
--- a/lib/internal/Magento/Framework/Validator/Test/Unit/ConfigTest.php
+++ b/lib/internal/Magento/Framework/Validator/Test/Unit/ConfigTest.php
@@ -55,20 +55,35 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
             new \Magento\Framework\ObjectManager\Relations\Runtime()
         );
         $factory = new \Magento\Framework\ObjectManager\Factory\Dynamic\Developer($config);
-        $realObjectManager = new \Magento\Framework\ObjectManager\ObjectManager($factory, $config);
-        $factory->setObjectManager($realObjectManager);
-        $universalFactory = $realObjectManager->get('Magento\Framework\Validator\UniversalFactory');
+        $appObjectManager = new \Magento\Framework\ObjectManager\ObjectManager($factory, $config);
+        $factory->setObjectManager($appObjectManager);
+        /** @var \Magento\Framework\Validator\UniversalFactory $universalFactory */
+        $universalFactory = $appObjectManager->get('Magento\Framework\Validator\UniversalFactory');
         /** @var \Magento\Framework\Config\Dom\UrnResolver $urnResolverMock */
         $urnResolverMock = $this->getMock('Magento\Framework\Config\Dom\UrnResolver', [], [], '', false);
         $urnResolverMock->expects($this->any())
             ->method('getRealPath')
             ->with('urn:magento:framework:Validator/etc/validation.xsd')
             ->willReturn($this->urnResolver->getRealPath('urn:magento:framework:Validator/etc/validation.xsd'));
+        $appObjectManager->configure(
+            [
+                'preferences' => [
+                    'Magento\Framework\Config\ValidationStateInterface' =>
+                        'Magento\Framework\App\Arguments\ValidationState',
+                ],
+                'Magento\Framework\App\Arguments\ValidationState' => [
+                    'arguments' => [
+                        'appMode' => 'developer',
+                    ]
+                ]
+            ]
+        );
         $this->_config = $this->_objectManager->getObject(
             'Magento\Framework\Validator\Config',
             [
                 'configFiles' => $configFiles,
                 'builderFactory' => $universalFactory,
+                'domFactory' => new \Magento\Framework\Config\DomFactory($appObjectManager),
                 'urnResolver' => $urnResolverMock
             ]
         );
diff --git a/lib/internal/Magento/Framework/View/Config.php b/lib/internal/Magento/Framework/View/Config.php
index fb4c687a731..85126514bb3 100644
--- a/lib/internal/Magento/Framework/View/Config.php
+++ b/lib/internal/Magento/Framework/View/Config.php
@@ -62,9 +62,6 @@ class Config implements \Magento\Framework\View\ConfigInterface
      */
     protected $fileIteratorFactory;
 
-    /** @var \Magento\Framework\Config\ViewFactory */
-    protected $viewConfigFactory;
-
     /**
      * File view factory
      *
@@ -89,7 +86,7 @@ class Config implements \Magento\Framework\View\ConfigInterface
         \Magento\Framework\View\Asset\Repository $assetRepo,
         \Magento\Framework\View\FileSystem $viewFileSystem,
         \Magento\Framework\Config\FileIteratorFactory $fileIteratorFactory,
-        \Magento\Framework\Config\ViewFactory $viewConfigFactory,
+        \Magento\Framework\Config\ViewFactory $viewFactory,
         $filename = self::CONFIG_FILE_NAME
     ) {
         $this->moduleReader = $moduleReader;
@@ -97,7 +94,7 @@ class Config implements \Magento\Framework\View\ConfigInterface
         $this->assetRepo = $assetRepo;
         $this->viewFileSystem = $viewFileSystem;
         $this->fileIteratorFactory = $fileIteratorFactory;
-        $this->viewConfigFactory = $viewConfigFactory;
+        $this->viewFactory = $viewFactory;
         $this->filename = $filename;
     }
 
@@ -131,7 +128,7 @@ class Config implements \Magento\Framework\View\ConfigInterface
                 $this->rootDirectory->getRelativePath($themeConfigFile)
             );
         }
-        $config = $this->viewConfigFactory->create($configFiles);
+        $config = $this->viewFactory->create($configFiles);
 
         $this->viewConfigs[$key] = $config;
         return $config;
diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/Config/DomMerger.php b/lib/internal/Magento/Framework/View/Element/UiComponent/Config/DomMerger.php
index ae7107665b4..554fc62e34c 100644
--- a/lib/internal/Magento/Framework/View/Element/UiComponent/Config/DomMerger.php
+++ b/lib/internal/Magento/Framework/View/Element/UiComponent/Config/DomMerger.php
@@ -8,6 +8,7 @@ namespace Magento\Framework\View\Element\UiComponent\Config;
 use Magento\Framework\Config\Dom;
 use Magento\Framework\Config\Dom\UrnResolver;
 use Magento\Framework\Module\Dir\Reader as DirectoryReader;
+use \Magento\Framework\Config\ValidationStateInterface;
 
 /**
  * Class DomMerger
@@ -19,6 +20,11 @@ class DomMerger implements DomMergerInterface
      */
     const ERROR_FORMAT_DEFAULT = "Message: %message%\nLine: %line%\n";
 
+    /**
+     * @var \Magento\Framework\Config\ValidationStateInterface
+     */
+    private $validationState;
+
     /**
      * Location schema file
      *
@@ -62,20 +68,21 @@ class DomMerger implements DomMergerInterface
      * Format of $contextXPath: array('/config/ui')
      * The path to ID attribute name should not include any attribute notations or modifiers -- only node names
      *
-     * @param UrnResolver $urnResolver
-     * @param string $schema Absolute schema file path or URN
+     * @param ValidationStateInterface $validationState
+     * @param string $schema
      * @param bool $isMergeSimpleXMLElement
      * @param array $contextXPath
      * @param array $idAttributes
      */
     public function __construct(
-        UrnResolver $urnResolver,
+        ValidationStateInterface $validationState,
         $schema,
         $isMergeSimpleXMLElement = false,
         array $contextXPath = [],
         array $idAttributes = []
     ) {
-        $this->schemaFilePath = $urnResolver->getRealPath($schema);
+        $this->validationState = $validationState;
+        $this->schema = $schema;
         $this->isMergeSimpleXMLElement = $isMergeSimpleXMLElement;
         $this->contextXPath = $contextXPath;
         $this->idAttributes = $idAttributes;
@@ -315,7 +322,7 @@ class DomMerger implements DomMergerInterface
     {
         $domDocument = new \DOMDocument();
         $domDocument->loadXML($xml);
-        if ($this->schemaFilePath) {
+        if ($this->validationState->isValidationRequired() && $this->schema) {
             $errors = $this->validateDomDocument($domDocument);
             if (count($errors)) {
                 throw new \Magento\Framework\Exception\LocalizedException(
@@ -335,12 +342,12 @@ class DomMerger implements DomMergerInterface
      * @return array of errors
      * @throws \Exception
      */
-    protected function validateDomDocument(\DOMDocument $domDocument, $schemaFilePath = null)
+    protected function validateDomDocument(\DOMDocument $domDocument, $schema = null)
     {
-        $schemaFilePath = $schemaFilePath !== null ? $schemaFilePath : $this->schemaFilePath;
+        $schema = $schema !== null ? $schema : $this->schema;
         libxml_use_internal_errors(true);
         try {
-            $errors = \Magento\Framework\Config\Dom::validateDomDocument($domDocument, $schemaFilePath);
+            $errors = \Magento\Framework\Config\Dom::validateDomDocument($domDocument, $schema);
         } catch (\Exception $exception) {
             libxml_use_internal_errors(false);
             throw $exception;
@@ -435,6 +442,9 @@ class DomMerger implements DomMergerInterface
      */
     public function validate($schemaFilePath = null)
     {
+        if (!$this->validationState->isValidationRequired()) {
+            return [];
+        }
         return $this->validateDomDocument($this->getDom(), $schemaFilePath);
     }
 }
diff --git a/lib/internal/Magento/Framework/View/PageLayout/Config.php b/lib/internal/Magento/Framework/View/PageLayout/Config.php
index 31279b31a06..ce0f173c5d8 100644
--- a/lib/internal/Magento/Framework/View/PageLayout/Config.php
+++ b/lib/internal/Magento/Framework/View/PageLayout/Config.php
@@ -17,14 +17,18 @@ class Config extends \Magento\Framework\Config\AbstractXml
     /**
      * Instantiate with the list of files to merge
      *
-     * @param \Magento\Framework\Config\Dom\UrnResolver $urnResolver
      * @param array $configFiles
+     * @param \Magento\Framework\Config\DomFactory $domFactory
+     * @param \Magento\Framework\Config\Dom\UrnResolver $urnResolver
      * @throws \InvalidArgumentException
      */
-    public function __construct($configFiles, \Magento\Framework\Config\Dom\UrnResolver $urnResolver)
-    {
+    public function __construct(
+        $configFiles,
+        \Magento\Framework\Config\DomFactory $domFactory,
+        \Magento\Framework\Config\Dom\UrnResolver $urnResolver
+    ) {
         $this->urnResolver = $urnResolver;
-        parent::__construct($configFiles);
+        parent::__construct($configFiles, $domFactory);
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/ConfigTest.php b/lib/internal/Magento/Framework/View/Test/Unit/ConfigTest.php
index c6c980ee74c..dd2270d310a 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/ConfigTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/ConfigTest.php
@@ -68,7 +68,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
                 'assetRepo' => $this->repositoryMock,
                 'viewFileSystem' => $this->fileSystemMock,
                 'fileIteratorFactory' => $this->fileIteratorFactoryMock,
-                'viewConfigFactory' => $this->viewConfigFactoryMock
+                'viewFactory' => $this->viewConfigFactoryMock
             ]
         );
     }
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/PageLayout/ConfigTest.php b/lib/internal/Magento/Framework/View/Test/Unit/PageLayout/ConfigTest.php
index 8bdac494e98..2b10c2a26d4 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/PageLayout/ConfigTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/PageLayout/ConfigTest.php
@@ -23,6 +23,26 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
             ->method('getRealPath')
             ->with('urn:magento:framework:View/PageLayout/etc/layouts.xsd')
             ->willReturn($urnResolver->getRealPath('urn:magento:framework:View/PageLayout/etc/layouts.xsd'));
+        $validationStateMock = $this->getMock('\Magento\Framework\Config\ValidationStateInterface', [], [], '', false);
+        $validationStateMock->method('isValidationRequired')
+            ->willReturn(true);
+        $domFactoryMock = $this->getMock('Magento\Framework\Config\DomFactory', [], [], '', false);
+        $domFactoryMock->expects($this->once())
+            ->method('createDom')
+            ->willReturnCallback(
+                function ($arguments) use ($validationStateMock) {
+                    // @codingStandardsIgnoreStart
+                    return new \Magento\Framework\Config\Dom(
+                        '<?xml version="1.0" encoding="UTF-8"?>'
+                            . '<page_layouts xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"></page_layouts>',
+                        $validationStateMock,
+                        ['/page_layouts/layout' => 'id'],
+                        null,
+                        $arguments['schemaFile']
+                    );
+                    // @codingStandardsIgnoreEnd
+                }
+            );
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->config = $objectManagerHelper->getObject(
             'Magento\Framework\View\PageLayout\Config',
@@ -31,7 +51,8 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
                 'configFiles' => [
                     'layouts_one.xml' => file_get_contents(__DIR__ . '/_files/layouts_one.xml'),
                     'layouts_two.xml' => file_get_contents(__DIR__ . '/_files/layouts_two.xml'),
-                ]
+                ],
+                'domFactory' => $domFactoryMock
             ]
         );
     }
-- 
GitLab


From 2640503c89d5bbdcf2d55cc7960b9e64a7112e42 Mon Sep 17 00:00:00 2001
From: "Korshenko, Olexii(okorshenko)" <okorshenko@ebay.com>
Date: Wed, 28 Oct 2015 17:17:25 +0200
Subject: [PATCH 364/370] Revert "MAGETWO-44707: Remove @api sign from
 CatalogInventory module"

---
 .../CatalogInventory/Api/Data/StockCollectionInterface.php       | 1 +
 app/code/Magento/CatalogInventory/Api/Data/StockInterface.php    | 1 +
 .../CatalogInventory/Api/Data/StockItemCollectionInterface.php   | 1 +
 .../Magento/CatalogInventory/Api/Data/StockItemInterface.php     | 1 +
 .../CatalogInventory/Api/Data/StockStatusCollectionInterface.php | 1 +
 .../Magento/CatalogInventory/Api/Data/StockStatusInterface.php   | 1 +
 .../Magento/CatalogInventory/Api/StockConfigurationInterface.php | 1 +
 app/code/Magento/CatalogInventory/Api/StockCriteriaInterface.php | 1 +
 app/code/Magento/CatalogInventory/Api/StockIndexInterface.php    | 1 +
 .../Magento/CatalogInventory/Api/StockItemCriteriaInterface.php  | 1 +
 .../CatalogInventory/Api/StockItemRepositoryInterface.php        | 1 +
 .../Magento/CatalogInventory/Api/StockManagementInterface.php    | 1 +
 app/code/Magento/CatalogInventory/Api/StockRegistryInterface.php | 1 +
 .../Magento/CatalogInventory/Api/StockRepositoryInterface.php    | 1 +
 app/code/Magento/CatalogInventory/Api/StockStateInterface.php    | 1 +
 .../CatalogInventory/Api/StockStatusCriteriaInterface.php        | 1 +
 .../CatalogInventory/Api/StockStatusRepositoryInterface.php      | 1 +
 .../Model/ResourceModel/Indexer/Stock/StockInterface.php         | 1 +
 18 files changed, 18 insertions(+)

diff --git a/app/code/Magento/CatalogInventory/Api/Data/StockCollectionInterface.php b/app/code/Magento/CatalogInventory/Api/Data/StockCollectionInterface.php
index 90e5081733e..a656b049c93 100644
--- a/app/code/Magento/CatalogInventory/Api/Data/StockCollectionInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/Data/StockCollectionInterface.php
@@ -13,6 +13,7 @@ use Magento\Framework\Api\SearchResultsInterface;
 
 /**
  * Interface StockCollectionInterface
+ * @api
  */
 interface StockCollectionInterface extends SearchResultsInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/Data/StockInterface.php b/app/code/Magento/CatalogInventory/Api/Data/StockInterface.php
index 47bd9b85cc3..8908ea0ee96 100644
--- a/app/code/Magento/CatalogInventory/Api/Data/StockInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/Data/StockInterface.php
@@ -9,6 +9,7 @@ use Magento\Framework\Api\ExtensibleDataInterface;
 
 /**
  * Interface Stock
+ * @api
  */
 interface StockInterface extends ExtensibleDataInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/Data/StockItemCollectionInterface.php b/app/code/Magento/CatalogInventory/Api/Data/StockItemCollectionInterface.php
index 80436c5427b..ee670c352f1 100644
--- a/app/code/Magento/CatalogInventory/Api/Data/StockItemCollectionInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/Data/StockItemCollectionInterface.php
@@ -13,6 +13,7 @@ use Magento\Framework\Api\SearchResultsInterface;
 
 /**
  * Interface StockItemCollectionInterface
+ * @api
  */
 interface StockItemCollectionInterface extends SearchResultsInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/Data/StockItemInterface.php b/app/code/Magento/CatalogInventory/Api/Data/StockItemInterface.php
index 0a620ce1562..0c4216fd46a 100644
--- a/app/code/Magento/CatalogInventory/Api/Data/StockItemInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/Data/StockItemInterface.php
@@ -9,6 +9,7 @@ use Magento\Framework\Api\ExtensibleDataInterface;
 
 /**
  * Interface StockItem
+ * @api
  */
 interface StockItemInterface extends ExtensibleDataInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/Data/StockStatusCollectionInterface.php b/app/code/Magento/CatalogInventory/Api/Data/StockStatusCollectionInterface.php
index b46ccbf5c94..a06aa1ebd0a 100644
--- a/app/code/Magento/CatalogInventory/Api/Data/StockStatusCollectionInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/Data/StockStatusCollectionInterface.php
@@ -9,6 +9,7 @@ use Magento\Framework\Api\SearchResultsInterface;
 
 /**
  * Stock Status collection interface
+ * @api
  */
 interface StockStatusCollectionInterface extends SearchResultsInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/Data/StockStatusInterface.php b/app/code/Magento/CatalogInventory/Api/Data/StockStatusInterface.php
index 3c90ea45177..f4996ac62ec 100644
--- a/app/code/Magento/CatalogInventory/Api/Data/StockStatusInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/Data/StockStatusInterface.php
@@ -9,6 +9,7 @@ use Magento\Framework\Api\ExtensibleDataInterface;
 
 /**
  * Interface StockStatusInterface
+ * @api
  */
 interface StockStatusInterface extends ExtensibleDataInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/StockConfigurationInterface.php b/app/code/Magento/CatalogInventory/Api/StockConfigurationInterface.php
index 5052ea004b2..7b4179c7a71 100644
--- a/app/code/Magento/CatalogInventory/Api/StockConfigurationInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/StockConfigurationInterface.php
@@ -7,6 +7,7 @@ namespace Magento\CatalogInventory\Api;
 
 /**
  * Interface StockConfigurationInterface
+ * @api
  */
 interface StockConfigurationInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/StockCriteriaInterface.php b/app/code/Magento/CatalogInventory/Api/StockCriteriaInterface.php
index 537db0ce5af..15e299f8591 100644
--- a/app/code/Magento/CatalogInventory/Api/StockCriteriaInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/StockCriteriaInterface.php
@@ -7,6 +7,7 @@ namespace Magento\CatalogInventory\Api;
 
 /**
  * Interface StockCriteriaInterface
+ * @api
  */
 interface StockCriteriaInterface extends \Magento\Framework\Api\CriteriaInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/StockIndexInterface.php b/app/code/Magento/CatalogInventory/Api/StockIndexInterface.php
index 6edba0a23b5..f57936402f0 100644
--- a/app/code/Magento/CatalogInventory/Api/StockIndexInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/StockIndexInterface.php
@@ -7,6 +7,7 @@ namespace Magento\CatalogInventory\Api;
 
 /**
  * Interface StockIndexInterface
+ * @api
  */
 interface StockIndexInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/StockItemCriteriaInterface.php b/app/code/Magento/CatalogInventory/Api/StockItemCriteriaInterface.php
index 878aa26d3c2..df76cc37f31 100644
--- a/app/code/Magento/CatalogInventory/Api/StockItemCriteriaInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/StockItemCriteriaInterface.php
@@ -7,6 +7,7 @@ namespace Magento\CatalogInventory\Api;
 
 /**
  * Interface StockItemCriteriaInterface
+ * @api
  */
 interface StockItemCriteriaInterface extends \Magento\Framework\Api\CriteriaInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/StockItemRepositoryInterface.php b/app/code/Magento/CatalogInventory/Api/StockItemRepositoryInterface.php
index 17a22876922..97804d70437 100644
--- a/app/code/Magento/CatalogInventory/Api/StockItemRepositoryInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/StockItemRepositoryInterface.php
@@ -7,6 +7,7 @@ namespace Magento\CatalogInventory\Api;
 
 /**
  * Interface StockItemRepository
+ * @api
  */
 interface StockItemRepositoryInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/StockManagementInterface.php b/app/code/Magento/CatalogInventory/Api/StockManagementInterface.php
index 748ed9b39cf..b4cd1008bf5 100644
--- a/app/code/Magento/CatalogInventory/Api/StockManagementInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/StockManagementInterface.php
@@ -7,6 +7,7 @@ namespace Magento\CatalogInventory\Api;
 
 /**
  * Interface StockManagementInterface
+ * @api
  */
 interface StockManagementInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/StockRegistryInterface.php b/app/code/Magento/CatalogInventory/Api/StockRegistryInterface.php
index 27f90e740f9..95c848f1865 100644
--- a/app/code/Magento/CatalogInventory/Api/StockRegistryInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/StockRegistryInterface.php
@@ -7,6 +7,7 @@ namespace Magento\CatalogInventory\Api;
 
 /**
  * Interface StockRegistryInterface
+ * @api
  */
 interface StockRegistryInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/StockRepositoryInterface.php b/app/code/Magento/CatalogInventory/Api/StockRepositoryInterface.php
index 06f5d2f4e9c..28b839c6fed 100644
--- a/app/code/Magento/CatalogInventory/Api/StockRepositoryInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/StockRepositoryInterface.php
@@ -7,6 +7,7 @@ namespace Magento\CatalogInventory\Api;
 
 /**
  * Interface StockRepositoryInterface
+ * @api
  */
 interface StockRepositoryInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/StockStateInterface.php b/app/code/Magento/CatalogInventory/Api/StockStateInterface.php
index 490f92644df..140ccee031b 100644
--- a/app/code/Magento/CatalogInventory/Api/StockStateInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/StockStateInterface.php
@@ -7,6 +7,7 @@ namespace Magento\CatalogInventory\Api;
 
 /**
  * Interface StockStateInterface
+ * @api
  */
 interface StockStateInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/StockStatusCriteriaInterface.php b/app/code/Magento/CatalogInventory/Api/StockStatusCriteriaInterface.php
index af80ddd5c5c..7b5dfafa311 100644
--- a/app/code/Magento/CatalogInventory/Api/StockStatusCriteriaInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/StockStatusCriteriaInterface.php
@@ -7,6 +7,7 @@ namespace Magento\CatalogInventory\Api;
 
 /**
  * Interface StockStatusCriteriaInterface
+ * @api
  */
 interface StockStatusCriteriaInterface extends \Magento\Framework\Api\CriteriaInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Api/StockStatusRepositoryInterface.php b/app/code/Magento/CatalogInventory/Api/StockStatusRepositoryInterface.php
index b531c815ceb..7a8ac825654 100644
--- a/app/code/Magento/CatalogInventory/Api/StockStatusRepositoryInterface.php
+++ b/app/code/Magento/CatalogInventory/Api/StockStatusRepositoryInterface.php
@@ -7,6 +7,7 @@ namespace Magento\CatalogInventory\Api;
 
 /**
  * Interface StockStatusRepositoryInterface
+ * @api
  */
 interface StockStatusRepositoryInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/Stock/StockInterface.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/Stock/StockInterface.php
index 32b75680fbc..8612b0ba525 100644
--- a/app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/Stock/StockInterface.php
+++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/Stock/StockInterface.php
@@ -7,6 +7,7 @@ namespace Magento\CatalogInventory\Model\ResourceModel\Indexer\Stock;
 
 /**
  * CatalogInventory Stock Indexer Interface
+ * @api
  */
 interface StockInterface
 {
-- 
GitLab


From 7480f9a2206a771edf7bc18b76f7a4b726c6934a Mon Sep 17 00:00:00 2001
From: Paul Lewis <plewis@ebay.com>
Date: Wed, 28 Oct 2015 10:55:30 -0500
Subject: [PATCH 365/370] MAGETWO-44581: Contribute Ogre Bugfixes

- move and merge remaining less files
---
 .../web/css/source/module.less                | 18 +++-----
 .../web/css/source/_module.less               | 41 +++++++++++++++++++
 .../web/css/source/_module.less               | 35 ++++++++++++++++
 3 files changed, 82 insertions(+), 12 deletions(-)
 create mode 100644 app/design/adminhtml/Magento/backend/Magento_Reward/web/css/source/_module.less
 create mode 100644 app/design/adminhtml/Magento/backend/Magento_VersionsCms/web/css/source/_module.less

diff --git a/app/design/adminhtml/Magento/backend/Magento_GiftCard/web/css/source/module.less b/app/design/adminhtml/Magento/backend/Magento_GiftCard/web/css/source/module.less
index 12ccb3531ea..d3a921dc16d 100644
--- a/app/design/adminhtml/Magento/backend/Magento_GiftCard/web/css/source/module.less
+++ b/app/design/adminhtml/Magento/backend/Magento_GiftCard/web/css/source/module.less
@@ -3,19 +3,13 @@
 //  * See COPYING.txt for license details.
 //  */
 
-//
-//  IE9 styles
-//  ---------------------------------------------
-
-.ie9 {
+.ie9 & {
     .giftcard-info-container {
-        .fieldset {
-            .admin__field {
-                .admin__field-label {
-                    display: table;
-                    span {
-                        display: table-cell;
-                    }
+        .admin__field {
+            .admin__field-label {
+                display: table;
+                span {
+                    display: table-cell;
                 }
             }
         }
diff --git a/app/design/adminhtml/Magento/backend/Magento_Reward/web/css/source/_module.less b/app/design/adminhtml/Magento/backend/Magento_Reward/web/css/source/_module.less
new file mode 100644
index 00000000000..b44b2bc3aa7
--- /dev/null
+++ b/app/design/adminhtml/Magento/backend/Magento_Reward/web/css/source/_module.less
@@ -0,0 +1,41 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  Reward Page
+//  _____________________________________________
+
+//
+//  Variables
+//  ---------------------------------------------
+
+@boundary__margin: 30px;
+@boundary__ratio: 1.75;
+
+.adminhtml-reward-rate-edit {
+    .field-rate {
+        .admin__field-control {
+            &:extend(.abs-clearfix all);
+        }
+        .boundary {
+            float: left;
+            width: 125px;
+        }
+        .boundary-upper {
+            margin-left: @boundary__margin;
+            position: relative;
+            &:before {
+                content: '»';
+                left: -(@boundary__margin / @boundary__ratio);
+                position: absolute;
+                top: 25%;
+            }
+            label {
+                .lib-visibility-hidden();
+                display: block;
+            }
+        }
+    }
+}
diff --git a/app/design/adminhtml/Magento/backend/Magento_VersionsCms/web/css/source/_module.less b/app/design/adminhtml/Magento/backend/Magento_VersionsCms/web/css/source/_module.less
new file mode 100644
index 00000000000..5aba4abd3f4
--- /dev/null
+++ b/app/design/adminhtml/Magento/backend/Magento_VersionsCms/web/css/source/_module.less
@@ -0,0 +1,35 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  Hierarchy styles
+//  _____________________________________________
+
+.cms-hierarchy {
+    &:extend(.abs-clearfix all);
+
+    .cms-hierarchy-tree,
+    .cms-hierarchy-node {
+        float: left;
+        width: 50%;
+    }
+
+    .cms_page_grid_container {
+        clear: both;
+    }
+
+    .admin__page-section-title {
+        .actions {
+            float: right;
+        }
+    }
+
+    .buttons-set {
+        margin: 0 0 1.14rem;
+        button {
+            margin-right: 0.36rem;
+        }
+    }
+}
-- 
GitLab


From 8e7a3307b610c6bb4e11e29534dcc35e4f4272f1 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Wed, 28 Oct 2015 11:37:07 -0500
Subject: [PATCH 366/370] MAGETWO-44681: page cache entries not tagged with
 "FPC" cache type  - use plugin to add cache tag

---
 .../PageCache/Model/App/PageCachePlugin.php   | 31 +++++++++++++++++++
 .../Unit/Model/App/PageCachePluginTest.php    | 28 +++++++++++++++++
 app/code/Magento/PageCache/etc/di.xml         |  3 ++
 3 files changed, 62 insertions(+)
 create mode 100644 app/code/Magento/PageCache/Model/App/PageCachePlugin.php
 create mode 100644 app/code/Magento/PageCache/Test/Unit/Model/App/PageCachePluginTest.php

diff --git a/app/code/Magento/PageCache/Model/App/PageCachePlugin.php b/app/code/Magento/PageCache/Model/App/PageCachePlugin.php
new file mode 100644
index 00000000000..8a5e3b8932d
--- /dev/null
+++ b/app/code/Magento/PageCache/Model/App/PageCachePlugin.php
@@ -0,0 +1,31 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\PageCache\Model\App;
+
+class PageCachePlugin
+{
+    /**
+     * Attach FPC tag to all saved entries to enable cache type management
+     *
+     * @param \Magento\Framework\App\PageCache\Cache $subject
+     * @param $data
+     * @param $identifier
+     * @param array $tags
+     * @param null $lifeTime
+     * @return array
+     */
+    public function beforeSave(
+        \Magento\Framework\App\PageCache\Cache $subject,
+        $data,
+        $identifier,
+        $tags = [],
+        $lifeTime = null
+    ) {
+        $tags[] = \Magento\PageCache\Model\Cache\Type::CACHE_TAG;
+        return [$data, $identifier, $tags, $lifeTime];
+    }
+}
diff --git a/app/code/Magento/PageCache/Test/Unit/Model/App/PageCachePluginTest.php b/app/code/Magento/PageCache/Test/Unit/Model/App/PageCachePluginTest.php
new file mode 100644
index 00000000000..b0a115f3860
--- /dev/null
+++ b/app/code/Magento/PageCache/Test/Unit/Model/App/PageCachePluginTest.php
@@ -0,0 +1,28 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+use Magento\PageCache\Model\Cache\Type;
+
+class PageCachePluginTest extends \PHPUnit_Framework_TestCase
+{
+    public function testBeforeSave()
+    {
+        /** @var \Magento\PageCache\Model\App\PageCachePlugin $plugin */
+        $plugin = (new ObjectManager($this))->getObject('\Magento\PageCache\Model\App\PageCachePlugin');
+        $subjectMock = $this->getMockBuilder('\Magento\Framework\App\PageCache\Cache')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $initTags = ['tag', 'otherTag'];
+        $result = $plugin->beforeSave($subjectMock, 'data', 'identifier', $initTags);
+        $tags = isset($result[2]) ? $result[2] : null;
+        $expectedTags = array_merge($initTags, [Type::CACHE_TAG]);
+        $this->assertNotNull($tags);
+        foreach ($expectedTags as $expected) {
+            $this->assertContains($expected, $tags);
+        }
+    }
+}
diff --git a/app/code/Magento/PageCache/etc/di.xml b/app/code/Magento/PageCache/etc/di.xml
index b5a248f714a..1543abaa277 100644
--- a/app/code/Magento/PageCache/etc/di.xml
+++ b/app/code/Magento/PageCache/etc/di.xml
@@ -10,4 +10,7 @@
         <plugin name="core-app-area-design-exception-plugin"
                 type="Magento\PageCache\Model\App\CacheIdentifierPlugin" sortOrder="10"/>
     </type>
+    <type name="Magento\Framework\App\PageCache\Cache">
+        <plugin name="fpc-tag-addition-plugin" type="Magento\PageCache\Model\App\PageCachePlugin"/>
+    </type>
 </config>
-- 
GitLab


From 7de2154aaf07f1d2f22d851ddd6a5b1bff8223e9 Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Wed, 28 Oct 2015 15:21:23 -0500
Subject: [PATCH 367/370] MAGETWO-37820: [GITHUB] Preference in the wrong
 di.xml file #1291

---
 app/code/Magento/Bundle/Setup/InstallData.php |  10 +-
 .../Product/Attribute/Edit/Tab/Advanced.php   |   8 +-
 .../Adminhtml/Product/Attribute/Grid.php      |   6 +-
 .../Catalog/Model/Attribute/Source/Scopes.php |   8 +-
 .../Model/Product/Attribute/Backend/Price.php |   8 +-
 .../Catalog/Model/ResourceModel/Attribute.php |   2 +-
 .../Model/ResourceModel/Eav/Attribute.php     |   8 +-
 .../ResourceModel/Setup/PropertyMapper.php    |   2 +-
 .../Magento/Catalog/Setup/CategorySetup.php   | 104 +++++++++---------
 .../Model/ResourceModel/Eav/AttributeTest.php |  10 +-
 .../CatalogUrlRewrite/Setup/InstallData.php   |   8 +-
 .../Model/ConfigurableAttributeHandler.php    |   2 +-
 .../Model/Product/Type/Configurable.php       |   2 +-
 .../Downloadable/Setup/InstallData.php        |   6 +-
 .../Attribute/ScopedAttributeInterface.php    |  15 +++
 .../Eav/Model/Entity/Setup/PropertyMapper.php |   6 +-
 app/code/Magento/Msrp/Setup/InstallData.php   |   4 +-
 .../Model/ResourceModel/Catalog/Product.php   |   2 +-
 .../Magento/Swatches/Setup/InstallData.php    |   2 +-
 app/code/Magento/Tax/Setup/InstallData.php    |   2 +-
 .../Adminhtml/Product/AttributeTest.php       |   2 +-
 .../Product/Attribute/Backend/PriceTest.php   |   6 +-
 22 files changed, 118 insertions(+), 105 deletions(-)
 create mode 100644 app/code/Magento/Eav/Model/Entity/Attribute/ScopedAttributeInterface.php

diff --git a/app/code/Magento/Bundle/Setup/InstallData.php b/app/code/Magento/Bundle/Setup/InstallData.php
index 0df0acd5734..57a3ab0851e 100644
--- a/app/code/Magento/Bundle/Setup/InstallData.php
+++ b/app/code/Magento/Bundle/Setup/InstallData.php
@@ -86,7 +86,7 @@ class InstallData implements InstallDataInterface
                 'input' => '',
                 'class' => '',
                 'source' => '',
-                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
+                'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL,
                 'visible' => true,
                 'required' => true,
                 'user_defined' => false,
@@ -112,7 +112,7 @@ class InstallData implements InstallDataInterface
                 'input' => '',
                 'class' => '',
                 'source' => '',
-                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
+                'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL,
                 'visible' => false,
                 'required' => true,
                 'user_defined' => false,
@@ -137,7 +137,7 @@ class InstallData implements InstallDataInterface
                 'input' => '',
                 'class' => '',
                 'source' => '',
-                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
+                'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL,
                 'visible' => false,
                 'required' => true,
                 'user_defined' => false,
@@ -164,7 +164,7 @@ class InstallData implements InstallDataInterface
                 'input' => 'select',
                 'class' => '',
                 'source' => 'Magento\Bundle\Model\Product\Attribute\Source\Price\View',
-                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
+                'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL,
                 'visible' => true,
                 'required' => true,
                 'user_defined' => false,
@@ -190,7 +190,7 @@ class InstallData implements InstallDataInterface
                 'input' => '',
                 'class' => '',
                 'source' => '',
-                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
+                'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL,
                 'visible' => false,
                 'required' => true,
                 'user_defined' => false,
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Advanced.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Advanced.php
index 5ed9016a59f..db69fe00f5c 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Advanced.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Advanced.php
@@ -213,14 +213,14 @@ class Advanced extends Generic
         }
 
         $scopes = [
-            \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE => __('Store View'),
-            \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE => __('Website'),
-            \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL => __('Global'),
+            \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE => __('Store View'),
+            \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_WEBSITE => __('Website'),
+            \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL => __('Global'),
         ];
 
         if ($attributeObject->getAttributeCode() == 'status' || $attributeObject->getAttributeCode() == 'tax_class_id'
         ) {
-            unset($scopes[\Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE]);
+            unset($scopes[\Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE]);
         }
 
         $fieldset->addField(
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Grid.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Grid.php
index b2619647601..575a12c4308 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Grid.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Grid.php
@@ -83,9 +83,9 @@ class Grid extends AbstractGrid
                 'index' => 'is_global',
                 'type' => 'options',
                 'options' => [
-                    \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE => __('Store View'),
-                    \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE => __('Web Site'),
-                    \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL => __('Global'),
+                    \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE => __('Store View'),
+                    \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_WEBSITE => __('Web Site'),
+                    \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL => __('Global'),
                 ],
                 'align' => 'center'
             ],
diff --git a/app/code/Magento/Catalog/Model/Attribute/Source/Scopes.php b/app/code/Magento/Catalog/Model/Attribute/Source/Scopes.php
index f471a474320..62e02652527 100644
--- a/app/code/Magento/Catalog/Model/Attribute/Source/Scopes.php
+++ b/app/code/Magento/Catalog/Model/Attribute/Source/Scopes.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Catalog\Model\Attribute\Source;
 
-use \Magento\Catalog\Model\ResourceModel\Eav\Attribute;
+use \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface;
 
 class Scopes implements \Magento\Framework\Data\OptionSourceInterface
 {
@@ -16,15 +16,15 @@ class Scopes implements \Magento\Framework\Data\OptionSourceInterface
     {
         return [
             [
-                'value' => Attribute::SCOPE_STORE,
+                'value' => ScopedAttributeInterface::SCOPE_STORE,
                 'label' => __('Store View'),
             ],
             [
-                'value' => Attribute::SCOPE_WEBSITE,
+                'value' => ScopedAttributeInterface::SCOPE_WEBSITE,
                 'label' => __('Web Site'),
             ],
             [
-                'value' => Attribute::SCOPE_GLOBAL,
+                'value' => ScopedAttributeInterface::SCOPE_GLOBAL,
                 'label' => __('Global'),
             ],
         ];
diff --git a/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Price.php b/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Price.php
index ed6612507d2..9dc0dce6f51 100644
--- a/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Price.php
+++ b/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Price.php
@@ -5,6 +5,8 @@
  */
 namespace Magento\Catalog\Model\Product\Attribute\Backend;
 
+use \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface;
+
 /**
  * Catalog product price attribute backend model
  *
@@ -91,9 +93,9 @@ class Price extends \Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend
     public function setScope($attribute)
     {
         if ($this->_helper->isPriceGlobal()) {
-            $attribute->setIsGlobal(\Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL);
+            $attribute->setIsGlobal(ScopedAttributeInterface::SCOPE_GLOBAL);
         } else {
-            $attribute->setIsGlobal(\Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE);
+            $attribute->setIsGlobal(ScopedAttributeInterface::SCOPE_WEBSITE);
         }
 
         return $this;
@@ -118,7 +120,7 @@ class Price extends \Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend
             return $this;
         }
 
-        if ($this->getAttribute()->getIsGlobal() == \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE) {
+        if ($this->getAttribute()->getIsGlobal() == ScopedAttributeInterface::SCOPE_WEBSITE) {
             $baseCurrency = $this->_config->getValue(
                 \Magento\Directory\Model\Currency::XML_PATH_CURRENCY_BASE,
                 'default'
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Attribute.php b/app/code/Magento/Catalog/Model/ResourceModel/Attribute.php
index dd522da5888..ec7bfafeee1 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Attribute.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Attribute.php
@@ -86,7 +86,7 @@ class Attribute extends \Magento\Eav\Model\ResourceModel\Entity\Attribute
 
         if ($object->isScopeGlobal() && isset(
             $origData['is_global']
-        ) && \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL != $origData['is_global']
+        ) && \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL != $origData['is_global']
         ) {
             $attributeStoreIds = array_keys($this->_storeManager->getStores());
             if (!empty($attributeStoreIds)) {
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Eav/Attribute.php b/app/code/Magento/Catalog/Model/ResourceModel/Eav/Attribute.php
index 2f4d6769131..cde304b004a 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Eav/Attribute.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Eav/Attribute.php
@@ -32,14 +32,8 @@ use Magento\Framework\Stdlib\DateTime\DateTimeFormatterInterface;
  * @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
  */
 class Attribute extends \Magento\Eav\Model\Entity\Attribute implements
-    \Magento\Catalog\Api\Data\ProductAttributeInterface
+    \Magento\Catalog\Api\Data\ProductAttributeInterface, \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface
 {
-    const SCOPE_STORE = 0;
-
-    const SCOPE_GLOBAL = 1;
-
-    const SCOPE_WEBSITE = 2;
-
     const MODULE_NAME = 'Magento_Catalog';
 
     const ENTITY = 'catalog_eav_attribute';
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Setup/PropertyMapper.php b/app/code/Magento/Catalog/Model/ResourceModel/Setup/PropertyMapper.php
index b7d5bbb301e..2f2814b5aff 100644
--- a/app/code/Magento/Catalog/Model/ResourceModel/Setup/PropertyMapper.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Setup/PropertyMapper.php
@@ -26,7 +26,7 @@ class PropertyMapper extends PropertyMapperAbstract
             'is_global' => $this->_getValue(
                 $input,
                 'global',
-                \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL
+                \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL
             ),
             'is_visible' => $this->_getValue($input, 'visible', 1),
             'is_searchable' => $this->_getValue($input, 'searchable', 0),
diff --git a/app/code/Magento/Catalog/Setup/CategorySetup.php b/app/code/Magento/Catalog/Setup/CategorySetup.php
index 0efc0ac0837..23d14d9c7cf 100644
--- a/app/code/Magento/Catalog/Setup/CategorySetup.php
+++ b/app/code/Magento/Catalog/Setup/CategorySetup.php
@@ -78,7 +78,7 @@ class CategorySetup extends EavSetup
                         'label' => 'Name',
                         'input' => 'text',
                         'sort_order' => 1,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'General Information',
                     ],
                     'is_active' => [
@@ -87,7 +87,7 @@ class CategorySetup extends EavSetup
                         'input' => 'select',
                         'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',
                         'sort_order' => 2,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'General Information',
                     ],
                     'description' => [
@@ -96,7 +96,7 @@ class CategorySetup extends EavSetup
                         'input' => 'textarea',
                         'required' => false,
                         'sort_order' => 4,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'wysiwyg_enabled' => true,
                         'is_html_allowed_on_front' => true,
                         'group' => 'General Information',
@@ -108,7 +108,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Catalog\Model\Category\Attribute\Backend\Image',
                         'required' => false,
                         'sort_order' => 5,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'General Information',
                     ],
                     'meta_title' => [
@@ -117,7 +117,7 @@ class CategorySetup extends EavSetup
                         'input' => 'text',
                         'required' => false,
                         'sort_order' => 6,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'General Information',
                     ],
                     'meta_keywords' => [
@@ -126,7 +126,7 @@ class CategorySetup extends EavSetup
                         'input' => 'textarea',
                         'required' => false,
                         'sort_order' => 7,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'General Information',
                     ],
                     'meta_description' => [
@@ -135,7 +135,7 @@ class CategorySetup extends EavSetup
                         'input' => 'textarea',
                         'required' => false,
                         'sort_order' => 8,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'General Information',
                     ],
                     'display_mode' => [
@@ -145,7 +145,7 @@ class CategorySetup extends EavSetup
                         'source' => 'Magento\Catalog\Model\Category\Attribute\Source\Mode',
                         'required' => false,
                         'sort_order' => 10,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'Display Settings',
                     ],
                     'landing_page' => [
@@ -155,7 +155,7 @@ class CategorySetup extends EavSetup
                         'source' => 'Magento\Catalog\Model\Category\Attribute\Source\Page',
                         'required' => false,
                         'sort_order' => 20,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'Display Settings',
                     ],
                     'is_anchor' => [
@@ -211,7 +211,7 @@ class CategorySetup extends EavSetup
                         'source' => 'Magento\Theme\Model\Theme\Source\Theme',
                         'required' => false,
                         'sort_order' => 10,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'Custom Design',
                     ],
                     'custom_design_from' => [
@@ -221,7 +221,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Catalog\Model\Attribute\Backend\Startdate',
                         'required' => false,
                         'sort_order' => 30,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'Custom Design',
                     ],
                     'custom_design_to' => [
@@ -231,7 +231,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Eav\Model\Entity\Attribute\Backend\Datetime',
                         'required' => false,
                         'sort_order' => 40,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'Custom Design',
                     ],
                     'page_layout' => [
@@ -241,7 +241,7 @@ class CategorySetup extends EavSetup
                         'source' => 'Magento\Catalog\Model\Category\Attribute\Source\Layout',
                         'required' => false,
                         'sort_order' => 50,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'Custom Design',
                     ],
                     'custom_layout_update' => [
@@ -251,7 +251,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Catalog\Model\Attribute\Backend\Customlayoutupdate',
                         'required' => false,
                         'sort_order' => 60,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'Custom Design',
                     ],
                     'level' => [
@@ -278,7 +278,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Catalog\Model\Category\Attribute\Backend\Sortby',
                         'sort_order' => 40,
                         'input_renderer' => 'Magento\Catalog\Block\Adminhtml\Category\Helper\Sortby\Available',
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'Display Settings',
                     ],
                     'default_sort_by' => [
@@ -289,7 +289,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Catalog\Model\Category\Attribute\Backend\Sortby',
                         'sort_order' => 50,
                         'input_renderer' => 'Magento\Catalog\Block\Adminhtml\Category\Helper\Sortby\DefaultSortby',
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'Display Settings',
                     ],
                     'include_in_menu' => [
@@ -299,7 +299,7 @@ class CategorySetup extends EavSetup
                         'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',
                         'default' => '1',
                         'sort_order' => 10,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'General Information',
                     ],
                     'custom_use_parent_settings' => [
@@ -309,7 +309,7 @@ class CategorySetup extends EavSetup
                         'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',
                         'required' => false,
                         'sort_order' => 5,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'Custom Design',
                     ],
                     'custom_apply_to_products' => [
@@ -319,7 +319,7 @@ class CategorySetup extends EavSetup
                         'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',
                         'required' => false,
                         'sort_order' => 6,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'Custom Design',
                     ],
                     'filter_price_range' => [
@@ -329,7 +329,7 @@ class CategorySetup extends EavSetup
                         'required' => false,
                         'sort_order' => 51,
                         'input_renderer' => 'Magento\Catalog\Block\Adminhtml\Category\Helper\Pricestep',
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'Display Settings',
                     ],
                 ],
@@ -347,7 +347,7 @@ class CategorySetup extends EavSetup
                         'input' => 'text',
                         'frontend_class' => 'validate-length maximum-length-255',
                         'sort_order' => 1,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'searchable' => true,
                         'visible_in_advanced_search' => true,
                         'used_in_product_listing' => true,
@@ -370,7 +370,7 @@ class CategorySetup extends EavSetup
                         'label' => 'Description',
                         'input' => 'textarea',
                         'sort_order' => 3,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'searchable' => true,
                         'comparable' => true,
                         'wysiwyg_enabled' => true,
@@ -382,7 +382,7 @@ class CategorySetup extends EavSetup
                         'label' => 'Short Description',
                         'input' => 'textarea',
                         'sort_order' => 4,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'searchable' => true,
                         'comparable' => true,
                         'wysiwyg_enabled' => true,
@@ -399,7 +399,7 @@ class CategorySetup extends EavSetup
                         'input' => 'price',
                         'backend' => 'Magento\Catalog\Model\Product\Attribute\Backend\Price',
                         'sort_order' => 1,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_WEBSITE,
                         'searchable' => true,
                         'filterable' => true,
                         'visible_in_advanced_search' => true,
@@ -415,7 +415,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Catalog\Model\Product\Attribute\Backend\Price',
                         'required' => false,
                         'sort_order' => 3,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_WEBSITE,
                         'used_in_product_listing' => true,
                         'apply_to' => 'simple,virtual',
                         'group' => 'Prices',
@@ -430,7 +430,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Catalog\Model\Attribute\Backend\Startdate',
                         'required' => false,
                         'sort_order' => 4,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_WEBSITE,
                         'used_in_product_listing' => true,
                         'apply_to' => 'simple,virtual',
                         'group' => 'Prices',
@@ -445,7 +445,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Eav\Model\Entity\Attribute\Backend\Datetime',
                         'required' => false,
                         'sort_order' => 5,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_WEBSITE,
                         'used_in_product_listing' => true,
                         'apply_to' => 'simple,virtual',
                         'group' => 'Prices',
@@ -461,7 +461,7 @@ class CategorySetup extends EavSetup
                         'required' => false,
                         'user_defined' => true,
                         'sort_order' => 6,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_WEBSITE,
                         'apply_to' => 'simple,virtual',
                         'group' => 'Prices',
                         'is_used_in_grid' => true,
@@ -501,7 +501,7 @@ class CategorySetup extends EavSetup
                         'input' => 'text',
                         'required' => false,
                         'sort_order' => 20,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'Meta Information',
                         'is_used_in_grid' => true,
                         'is_visible_in_grid' => false,
@@ -513,7 +513,7 @@ class CategorySetup extends EavSetup
                         'input' => 'textarea',
                         'required' => false,
                         'sort_order' => 30,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'Meta Information',
                         'is_used_in_grid' => true,
                         'is_visible_in_grid' => false,
@@ -527,7 +527,7 @@ class CategorySetup extends EavSetup
                         'note' => 'Maximum 255 chars',
                         'class' => 'validate-length maximum-length-255',
                         'sort_order' => 40,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'Meta Information',
                         'is_used_in_grid' => true,
                         'is_visible_in_grid' => false,
@@ -541,7 +541,7 @@ class CategorySetup extends EavSetup
                         'input_renderer' => 'Magento\Catalog\Block\Adminhtml\Product\Helper\Form\BaseImage',
                         'required' => false,
                         'sort_order' => 0,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'used_in_product_listing' => true,
                         'group' => 'General',
                     ],
@@ -552,7 +552,7 @@ class CategorySetup extends EavSetup
                         'frontend' => 'Magento\Catalog\Model\Product\Attribute\Frontend\Image',
                         'required' => false,
                         'sort_order' => 2,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'used_in_product_listing' => true,
                         'group' => 'Images',
                     ],
@@ -563,7 +563,7 @@ class CategorySetup extends EavSetup
                         'frontend' => 'Magento\Catalog\Model\Product\Attribute\Frontend\Image',
                         'required' => false,
                         'sort_order' => 3,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'used_in_product_listing' => true,
                         'group' => 'Images',
                     ],
@@ -584,7 +584,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Catalog\Model\Product\Attribute\Backend\Tierprice',
                         'required' => false,
                         'sort_order' => 7,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_WEBSITE,
                         'apply_to' => 'simple,virtual',
                         'group' => 'Prices',
                     ],
@@ -610,7 +610,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Catalog\Model\Attribute\Backend\Startdate',
                         'required' => false,
                         'sort_order' => 7,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_WEBSITE,
                         'used_in_product_listing' => true,
                         'is_used_in_grid' => true,
                         'is_visible_in_grid' => false,
@@ -623,7 +623,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Eav\Model\Entity\Attribute\Backend\Datetime',
                         'required' => false,
                         'sort_order' => 8,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_WEBSITE,
                         'used_in_product_listing' => true,
                         'is_used_in_grid' => true,
                         'is_visible_in_grid' => false,
@@ -643,7 +643,7 @@ class CategorySetup extends EavSetup
                         'input' => 'select',
                         'source' => 'Magento\Catalog\Model\Product\Attribute\Source\Status',
                         'sort_order' => 9,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_WEBSITE,
                         'searchable' => true,
                         'used_in_product_listing' => true,
                     ],
@@ -653,7 +653,7 @@ class CategorySetup extends EavSetup
                         'input' => 'price',
                         'required' => false,
                         'sort_order' => 8,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'visible' => false,
                         'apply_to' => 'simple,virtual',
                         'group' => 'Prices',
@@ -665,7 +665,7 @@ class CategorySetup extends EavSetup
                         'source' => 'Magento\Catalog\Model\Product\Visibility',
                         'default' => '4',
                         'sort_order' => 12,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                     ],
                     'custom_design' => [
                         'type' => 'varchar',
@@ -674,7 +674,7 @@ class CategorySetup extends EavSetup
                         'source' => 'Magento\Theme\Model\Theme\Source\Theme',
                         'required' => false,
                         'sort_order' => 1,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'Design',
                         'is_used_in_grid' => true,
                         'is_visible_in_grid' => false,
@@ -687,7 +687,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Catalog\Model\Attribute\Backend\Startdate',
                         'required' => false,
                         'sort_order' => 2,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'Design',
                         'is_used_in_grid' => true,
                         'is_visible_in_grid' => false,
@@ -700,7 +700,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Eav\Model\Entity\Attribute\Backend\Datetime',
                         'required' => false,
                         'sort_order' => 3,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'Design',
                         'is_used_in_grid' => true,
                         'is_visible_in_grid' => false,
@@ -713,7 +713,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Catalog\Model\Attribute\Backend\Customlayoutupdate',
                         'required' => false,
                         'sort_order' => 4,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'Design',
                     ],
                     'page_layout' => [
@@ -723,7 +723,7 @@ class CategorySetup extends EavSetup
                         'source' => 'Magento\Catalog\Model\Product\Attribute\Source\Layout',
                         'required' => false,
                         'sort_order' => 5,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'Design',
                         'is_used_in_grid' => true,
                         'is_visible_in_grid' => false,
@@ -732,7 +732,7 @@ class CategorySetup extends EavSetup
                     'category_ids' => [
                         'type' => 'static',
                         'label' => 'Categories',
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL,
                         'backend' => 'Magento\Catalog\Model\Product\Attribute\Backend\Category',
                         'input_renderer' => 'Magento\Catalog\Block\Adminhtml\Product\Helper\Form\Category',
                         'required' => false,
@@ -748,7 +748,7 @@ class CategorySetup extends EavSetup
                         'required' => false,
                         'default' => 'container2',
                         'sort_order' => 6,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'group' => 'Design',
                     ],
                     'required_options' => [
@@ -772,7 +772,7 @@ class CategorySetup extends EavSetup
                         'input' => 'text',
                         'required' => false,
                         'sort_order' => 16,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'visible' => false,
                         'used_in_product_listing' => true,
                     ],
@@ -782,7 +782,7 @@ class CategorySetup extends EavSetup
                         'input' => 'text',
                         'required' => false,
                         'sort_order' => 17,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'visible' => false,
                         'used_in_product_listing' => true,
                     ],
@@ -792,7 +792,7 @@ class CategorySetup extends EavSetup
                         'input' => 'text',
                         'required' => false,
                         'sort_order' => 18,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                         'visible' => false,
                         'used_in_product_listing' => true,
                     ],
@@ -816,7 +816,7 @@ class CategorySetup extends EavSetup
                         'input' => 'select',
                         'source' => 'Magento\Catalog\Model\Product\Attribute\Source\Countryofmanufacture',
                         'required' => false,
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_WEBSITE,
                         'visible' => true,
                         'user_defined' => false,
                         'searchable' => false,
@@ -838,7 +838,7 @@ class CategorySetup extends EavSetup
                         'input' => 'select',
                         'input_renderer' => 'Magento\CatalogInventory\Block\Adminhtml\Form\Field\Stock',
                         'source' => 'Magento\\CatalogInventory\\Model\\Source\\Stock',
-                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
+                        'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL,
                         'default' => \Magento\CatalogInventory\Model\Stock::STOCK_IN_STOCK,
                         'user_defined' => false,
                         'visible' => true,
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Eav/AttributeTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Eav/AttributeTest.php
index ab8d0328ca6..38e97bbc108 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Eav/AttributeTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Eav/AttributeTest.php
@@ -8,8 +8,6 @@
 
 namespace Magento\Catalog\Test\Unit\Model\ResourceModel\Eav;
 
-use \Magento\Catalog\Model\ResourceModel\Eav\Attribute;
-
 class AttributeTest extends \PHPUnit_Framework_TestCase
 {
     /**
@@ -131,9 +129,9 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     {
         $this->_processor->expects($this->once())->method('markIndexerAsInvalid');
 
-        $this->_model->setOrigData('is_global', \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE);
+        $this->_model->setOrigData('is_global', \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE);
         $this->_model->setOrigData('used_in_product_listing', 1);
-        $this->_model->setIsGlobal(\Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL);
+        $this->_model->setIsGlobal(\Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL);
         $this->_model->afterSave();
     }
 
@@ -172,7 +170,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
                 'indexerEavProcessor' => $this->_eavProcessor,
                 'resource' => $this->resourceMock,
                 'data' => [
-                    'is_global' => Attribute::SCOPE_GLOBAL
+                    'is_global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL
                 ]
             ]
         );
@@ -190,7 +188,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
                 'indexerEavProcessor' => $this->_eavProcessor,
                 'resource' => $this->resourceMock,
                 'data' => [
-                    'is_global' => Attribute::SCOPE_WEBSITE
+                    'is_global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_WEBSITE
                 ]
             ]
         );
diff --git a/app/code/Magento/CatalogUrlRewrite/Setup/InstallData.php b/app/code/Magento/CatalogUrlRewrite/Setup/InstallData.php
index 56ae25a6bbb..46a0f9bea79 100644
--- a/app/code/Magento/CatalogUrlRewrite/Setup/InstallData.php
+++ b/app/code/Magento/CatalogUrlRewrite/Setup/InstallData.php
@@ -50,7 +50,7 @@ class InstallData implements InstallDataInterface
                 'input' => 'text',
                 'required' => false,
                 'sort_order' => 3,
-                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                 'group' => 'General Information',
             ]
         );
@@ -62,7 +62,7 @@ class InstallData implements InstallDataInterface
                 'type' => 'varchar',
                 'required' => false,
                 'sort_order' => 17,
-                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                 'visible' => false,
                 'group' => 'General Information',
             ]
@@ -77,7 +77,7 @@ class InstallData implements InstallDataInterface
                 'input' => 'text',
                 'required' => false,
                 'sort_order' => 10,
-                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                 'used_in_product_listing' => true,
                 'group' => 'Search Engine Optimization',
                 'is_used_in_grid' => true,
@@ -93,7 +93,7 @@ class InstallData implements InstallDataInterface
                 'type' => 'varchar',
                 'required' => false,
                 'sort_order' => 11,
-                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                 'visible' => false,
             ]
         );
diff --git a/app/code/Magento/ConfigurableProduct/Model/ConfigurableAttributeHandler.php b/app/code/Magento/ConfigurableProduct/Model/ConfigurableAttributeHandler.php
index 239f6d697d7..a2f9231a79d 100644
--- a/app/code/Magento/ConfigurableProduct/Model/ConfigurableAttributeHandler.php
+++ b/app/code/Magento/ConfigurableProduct/Model/ConfigurableAttributeHandler.php
@@ -40,7 +40,7 @@ class ConfigurableAttributeHandler
             1
         )->addFieldToFilter(
             'is_global',
-            \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL
+            \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL
         );
     }
 
diff --git a/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php b/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php
index 85eae4dae7c..93f2588d214 100644
--- a/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php
+++ b/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php
@@ -248,7 +248,7 @@ class Configurable extends \Magento\Catalog\Model\Product\Type\AbstractType
      */
     public function canUseAttribute(\Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute)
     {
-        return $attribute->getIsGlobal() == \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL &&
+        return $attribute->getIsGlobal() == \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL &&
             $attribute->getIsVisible() &&
             $attribute->usesSource() &&
             $attribute->getIsUserDefined();
diff --git a/app/code/Magento/Downloadable/Setup/InstallData.php b/app/code/Magento/Downloadable/Setup/InstallData.php
index 28b92d361ce..594f08fad3d 100644
--- a/app/code/Magento/Downloadable/Setup/InstallData.php
+++ b/app/code/Magento/Downloadable/Setup/InstallData.php
@@ -56,7 +56,7 @@ class InstallData implements InstallDataInterface
                 'input' => '',
                 'class' => '',
                 'source' => '',
-                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
+                'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL,
                 'visible' => false,
                 'required' => true,
                 'user_defined' => false,
@@ -82,7 +82,7 @@ class InstallData implements InstallDataInterface
                 'input' => '',
                 'class' => '',
                 'source' => '',
-                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                 'visible' => false,
                 'required' => true,
                 'user_defined' => false,
@@ -107,7 +107,7 @@ class InstallData implements InstallDataInterface
                 'input' => '',
                 'class' => '',
                 'source' => '',
-                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                 'visible' => false,
                 'required' => true,
                 'user_defined' => false,
diff --git a/app/code/Magento/Eav/Model/Entity/Attribute/ScopedAttributeInterface.php b/app/code/Magento/Eav/Model/Entity/Attribute/ScopedAttributeInterface.php
new file mode 100644
index 00000000000..2b2412fe05b
--- /dev/null
+++ b/app/code/Magento/Eav/Model/Entity/Attribute/ScopedAttributeInterface.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Eav\Model\Entity\Attribute;
+
+interface ScopedAttributeInterface
+{
+    const SCOPE_STORE = 0;
+
+    const SCOPE_GLOBAL = 1;
+
+    const SCOPE_WEBSITE = 2;
+}
diff --git a/app/code/Magento/Eav/Model/Entity/Setup/PropertyMapper.php b/app/code/Magento/Eav/Model/Entity/Setup/PropertyMapper.php
index 0a1587fc8fc..f7b565f9055 100644
--- a/app/code/Magento/Eav/Model/Entity/Setup/PropertyMapper.php
+++ b/app/code/Magento/Eav/Model/Entity/Setup/PropertyMapper.php
@@ -35,7 +35,11 @@ class PropertyMapper extends PropertyMapperAbstract
             'default_value' => $this->_getValue($input, 'default'),
             'is_unique' => $this->_getValue($input, 'unique', 0),
             'note' => $this->_getValue($input, 'note'),
-            'is_global' => $this->_getValue($input, 'global', Attribute::SCOPE_GLOBAL)
+            'is_global' => $this->_getValue(
+                $input,
+                'global',
+                \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL
+            )
         ];
     }
 }
diff --git a/app/code/Magento/Msrp/Setup/InstallData.php b/app/code/Magento/Msrp/Setup/InstallData.php
index 080637c88e3..e9e76b117c1 100644
--- a/app/code/Magento/Msrp/Setup/InstallData.php
+++ b/app/code/Magento/Msrp/Setup/InstallData.php
@@ -60,7 +60,7 @@ class InstallData implements InstallDataInterface
                 'label' => 'Manufacturer\'s Suggested Retail Price',
                 'type' => 'decimal',
                 'input' => 'price',
-                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
+                'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_WEBSITE,
                 'visible' => true,
                 'required' => false,
                 'user_defined' => false,
@@ -86,7 +86,7 @@ class InstallData implements InstallDataInterface
                 'input' => 'select',
                 'source' => 'Magento\Msrp\Model\Product\Attribute\Source\Type\Price',
                 'source_model' => 'Magento\Msrp\Model\Product\Attribute\Source\Type\Price',
-                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
+                'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_WEBSITE,
                 'visible' => true,
                 'required' => false,
                 'user_defined' => false,
diff --git a/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Product.php b/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Product.php
index 5a93ef13583..302d9689e1e 100644
--- a/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Product.php
+++ b/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Product.php
@@ -234,7 +234,7 @@ class Product extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
                 'attribute_id' => $attribute->getId(),
                 'table' => $attribute->getBackend()->getTable(),
                 'is_global' => $attribute->getIsGlobal() ==
-                \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
+                \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL,
                 'backend_type' => $attribute->getBackendType(),
             ];
         }
diff --git a/app/code/Magento/Swatches/Setup/InstallData.php b/app/code/Magento/Swatches/Setup/InstallData.php
index ac3a9020954..a97bd81215e 100644
--- a/app/code/Magento/Swatches/Setup/InstallData.php
+++ b/app/code/Magento/Swatches/Setup/InstallData.php
@@ -60,7 +60,7 @@ class InstallData implements InstallDataInterface
                 'frontend' => 'Magento\Catalog\Model\Product\Attribute\Frontend\Image',
                 'required' => false,
                 'sort_order' => 3,
-                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+                'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
                 'used_in_product_listing' => true
             ]
         );
diff --git a/app/code/Magento/Tax/Setup/InstallData.php b/app/code/Magento/Tax/Setup/InstallData.php
index 75f636abb3e..2400deda8bd 100644
--- a/app/code/Magento/Tax/Setup/InstallData.php
+++ b/app/code/Magento/Tax/Setup/InstallData.php
@@ -56,7 +56,7 @@ class InstallData implements InstallDataInterface
                 'input' => 'select',
                 'class' => '',
                 'source' => 'Magento\Tax\Model\TaxClass\Source\Product',
-                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
+                'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_WEBSITE,
                 'visible' => true,
                 'required' => false,
                 'user_defined' => false,
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php
index 664fdee2198..479ffa633c8 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php
@@ -249,7 +249,7 @@ class AttributeTest extends \Magento\TestFramework\TestCase\AbstractBackendContr
     protected function _getAttributeData()
     {
         return [
-            'is_global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
+            'is_global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
             'default_value_text' => '0',
             'default_value_yesno' => '0',
             'default_value_date' => '',
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/Backend/PriceTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/Backend/PriceTest.php
index 5a8a484ac6e..1ba80dc05c4 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/Backend/PriceTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/Backend/PriceTest.php
@@ -36,12 +36,12 @@ class PriceTest extends \PHPUnit_Framework_TestCase
     {
         /* validate result of setAttribute */
         $this->assertEquals(
-            \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
+            \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL,
             $this->_model->getAttribute()->getIsGlobal()
         );
         $this->_model->setScope($this->_model->getAttribute());
         $this->assertEquals(
-            \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
+            \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL,
             $this->_model->getAttribute()->getIsGlobal()
         );
     }
@@ -53,7 +53,7 @@ class PriceTest extends \PHPUnit_Framework_TestCase
     {
         $this->_model->setScope($this->_model->getAttribute());
         $this->assertEquals(
-            \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
+            \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_WEBSITE,
             $this->_model->getAttribute()->getIsGlobal()
         );
     }
-- 
GitLab


From a33e4d35995d1e129fbba11859f305569990ebd6 Mon Sep 17 00:00:00 2001
From: Joan He <joan@x.com>
Date: Wed, 28 Oct 2015 15:59:35 -0500
Subject: [PATCH 368/370] MAGETWO-37820: [GITHUB] Preference in the wrong
 di.xml file #1291

- fixed typo
---
 app/code/Magento/Catalog/Setup/CategorySetup.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/app/code/Magento/Catalog/Setup/CategorySetup.php b/app/code/Magento/Catalog/Setup/CategorySetup.php
index 23d14d9c7cf..c0dddb276cb 100644
--- a/app/code/Magento/Catalog/Setup/CategorySetup.php
+++ b/app/code/Magento/Catalog/Setup/CategorySetup.php
@@ -837,7 +837,7 @@ class CategorySetup extends EavSetup
                         'label' => 'Quantity',
                         'input' => 'select',
                         'input_renderer' => 'Magento\CatalogInventory\Block\Adminhtml\Form\Field\Stock',
-                        'source' => 'Magento\\CatalogInventory\\Model\\Source\\Stock',
+                        'source' => 'Magento\CatalogInventory\Model\Source\Stock',
                         'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL,
                         'default' => \Magento\CatalogInventory\Model\Stock::STOCK_IN_STOCK,
                         'user_defined' => false,
-- 
GitLab


From 4b9a7c7cbacc76d3b45094d5e3197f193467d33a Mon Sep 17 00:00:00 2001
From: Yu Tang <ytang1@ebay.com>
Date: Wed, 28 Oct 2015 16:36:47 -0500
Subject: [PATCH 369/370] MAGETWO-44491: [TD] ActionInterface has Method
 dispatch() Instead of execute()

    - Fix merge error
---
 .../Unit/Controller/Adminhtml/Email/Template/PreviewTest.php  | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/PreviewTest.php b/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/PreviewTest.php
index 59fccebfe38..e1f80f7f133 100644
--- a/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/PreviewTest.php
+++ b/app/code/Magento/Email/Test/Unit/Controller/Adminhtml/Email/Template/PreviewTest.php
@@ -95,7 +95,7 @@ class PreviewTest extends \PHPUnit_Framework_TestCase
         ]);
     }
 
-    public function testExecute()
+    public function testExecuteInternal()
     {
         $this->viewMock->expects($this->once())
             ->method('getPage')
@@ -110,6 +110,6 @@ class PreviewTest extends \PHPUnit_Framework_TestCase
             ->method('prepend')
             ->willReturnSelf();
 
-        $this->assertNull($this->object->execute());
+        $this->assertNull($this->object->executeInternal());
     }
 }
-- 
GitLab


From 3cd46941dfeeed4990fd3f03f2038381c82d1605 Mon Sep 17 00:00:00 2001
From: Dale Sikkema <dsikkema@ebay.com>
Date: Wed, 28 Oct 2015 19:36:12 -0500
Subject: [PATCH 370/370] MAGETWO-44681: page cache entries not tagged with
 "FPC" cache type  - fix static tests

---
 .../Magento/PageCache/Model/App/PageCachePlugin.php    | 10 ++++++----
 .../Test/Unit/Model/App/PageCachePluginTest.php        |  2 ++
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/app/code/Magento/PageCache/Model/App/PageCachePlugin.php b/app/code/Magento/PageCache/Model/App/PageCachePlugin.php
index 8a5e3b8932d..afb43a516f4 100644
--- a/app/code/Magento/PageCache/Model/App/PageCachePlugin.php
+++ b/app/code/Magento/PageCache/Model/App/PageCachePlugin.php
@@ -12,11 +12,13 @@ class PageCachePlugin
      * Attach FPC tag to all saved entries to enable cache type management
      *
      * @param \Magento\Framework\App\PageCache\Cache $subject
-     * @param $data
-     * @param $identifier
-     * @param array $tags
-     * @param null $lifeTime
+     * @param string $data
+     * @param string $identifier
+     * @param string[] $tags
+     * @param int|null $lifeTime
      * @return array
+     *
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function beforeSave(
         \Magento\Framework\App\PageCache\Cache $subject,
diff --git a/app/code/Magento/PageCache/Test/Unit/Model/App/PageCachePluginTest.php b/app/code/Magento/PageCache/Test/Unit/Model/App/PageCachePluginTest.php
index b0a115f3860..5f10bbc7479 100644
--- a/app/code/Magento/PageCache/Test/Unit/Model/App/PageCachePluginTest.php
+++ b/app/code/Magento/PageCache/Test/Unit/Model/App/PageCachePluginTest.php
@@ -4,6 +4,8 @@
  * See COPYING.txt for license details.
  */
 
+namespace Magento\PageCache\Test\Unit\Model\App;
+
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 use Magento\PageCache\Model\Cache\Type;
 
-- 
GitLab