You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@openwhisk.apache.org by GitBox <gi...@apache.org> on 2018/06/07 21:13:18 UTC

[GitHub] mrutkows closed pull request #946: runtimes

mrutkows closed pull request #946: runtimes
URL: https://github.com/apache/incubator-openwhisk-wskdeploy/pull/946
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/cmd/export.go b/cmd/export.go
index 746854c0..5135dba6 100644
--- a/cmd/export.go
+++ b/cmd/export.go
@@ -27,6 +27,7 @@ import (
 	"github.com/apache/incubator-openwhisk-client-go/whisk"
 	"github.com/apache/incubator-openwhisk-wskdeploy/deployers"
 	"github.com/apache/incubator-openwhisk-wskdeploy/parsers"
+	"github.com/apache/incubator-openwhisk-wskdeploy/runtimes"
 	"github.com/apache/incubator-openwhisk-wskdeploy/utils"
 	"github.com/apache/incubator-openwhisk-wskdeploy/wski18n"
 	"github.com/spf13/cobra"
@@ -389,7 +390,7 @@ func saveCode(action whisk.Action, directory string) (string, error) {
 
 		filename = action.Name + getBinaryKindExtension(runtime)
 	} else {
-		filename = action.Name + "." + utils.FileRuntimeExtensionsMap[action.Exec.Kind]
+		filename = action.Name + "." + runtimes.FileRuntimeExtensionsMap[action.Exec.Kind]
 	}
 
 	os.MkdirAll(directory, os.ModePerm)
diff --git a/cmd/root.go b/cmd/root.go
index 2af84240..7ceaf2a2 100644
--- a/cmd/root.go
+++ b/cmd/root.go
@@ -24,7 +24,9 @@ import (
 	"strings"
 
 	"github.com/apache/incubator-openwhisk-client-go/whisk"
+	"github.com/apache/incubator-openwhisk-wskdeploy/dependencies"
 	"github.com/apache/incubator-openwhisk-wskdeploy/deployers"
+	"github.com/apache/incubator-openwhisk-wskdeploy/runtimes"
 	"github.com/apache/incubator-openwhisk-wskdeploy/utils"
 	"github.com/apache/incubator-openwhisk-wskdeploy/wskderrors"
 	"github.com/apache/incubator-openwhisk-wskdeploy/wski18n"
@@ -118,14 +120,16 @@ func initConfig() {
 }
 
 // TODO() add Trace of runtimes found at apihost
-func setSupportedRuntimes(apiHost string) {
-	op, error := utils.ParseOpenWhisk(apiHost)
-	if error == nil {
-		utils.SupportedRunTimes = utils.ConvertToMap(op)
-		utils.DefaultRunTimes = utils.DefaultRuntimes(op)
-		utils.FileExtensionRuntimeKindMap = utils.FileExtensionRuntimes(op)
-		utils.FileRuntimeExtensionsMap = utils.FileRuntimeExtensions(op)
+func setSupportedRuntimes(apiHost string) error {
+	op, err := runtimes.ParseOpenWhisk(apiHost)
+	if err != nil {
+		return err
 	}
+	runtimes.SupportedRunTimes = runtimes.ConvertToMap(op)
+	runtimes.DefaultRunTimes = runtimes.DefaultRuntimes(op)
+	runtimes.FileExtensionRuntimeKindMap = runtimes.FileExtensionRuntimes(op)
+	runtimes.FileRuntimeExtensionsMap = runtimes.FileRuntimeExtensions(op)
+	return nil
 }
 
 func displayCommandUsingFilenameMessage(command string, filetype string, path string) {
@@ -206,7 +210,7 @@ func Deploy() error {
 		deployer.Report = utils.Flags.Report
 
 		// master record of any dependency that has been downloaded
-		deployer.DependencyMaster = make(map[string]utils.DependencyRecord)
+		deployer.DependencyMaster = make(map[string]dependencies.DependencyRecord)
 
 		// Read credentials from Configuration file, manifest file or deployment file
 		clientConfig, error := deployers.NewWhiskConfig(
@@ -226,10 +230,13 @@ func Deploy() error {
 		deployer.ClientConfig = clientConfig
 
 		// The auth, apihost and namespace have been chosen, so that we can check the supported runtimes here.
-		setSupportedRuntimes(clientConfig.Host)
+		err := setSupportedRuntimes(clientConfig.Host)
+		if err != nil {
+			return err
+		}
 
 		// Construct Deployment Plan
-		err := deployer.ConstructDeploymentPlan()
+		err = deployer.ConstructDeploymentPlan()
 		if err != nil {
 			return err
 		}
@@ -275,9 +282,12 @@ func Undeploy() error {
 		deployer.ClientConfig = clientConfig
 
 		// The auth, apihost and namespace have been chosen, so that we can check the supported runtimes here.
-		setSupportedRuntimes(clientConfig.Host)
+		err := setSupportedRuntimes(clientConfig.Host)
+		if err != nil {
+			return err
+		}
 
-		err := deployer.UnDeployProject()
+		err = deployer.UnDeployProject()
 		if err != nil {
 			return err
 		}
@@ -327,7 +337,10 @@ func Undeploy() error {
 		deployer.ClientConfig = clientConfig
 
 		// The auth, apihost and namespace have been chosen, so that we can check the supported runtimes here.
-		setSupportedRuntimes(clientConfig.Host)
+		err := setSupportedRuntimes(clientConfig.Host)
+		if err != nil {
+			return err
+		}
 
 		verifiedPlan, err := deployer.ConstructUnDeploymentPlan()
 		if err != nil {
diff --git a/utils/conductor.go b/conductor/conductor.go
similarity index 98%
rename from utils/conductor.go
rename to conductor/conductor.go
index 8688d81f..8f833d14 100644
--- a/utils/conductor.go
+++ b/conductor/conductor.go
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package utils
+package conductor
 
 import "github.com/apache/incubator-openwhisk-client-go/whisk"
 
diff --git a/utils/conductor_test.go b/conductor/conductor_test.go
similarity index 98%
rename from utils/conductor_test.go
rename to conductor/conductor_test.go
index ffaab6b6..0a007fbf 100644
--- a/utils/conductor_test.go
+++ b/conductor/conductor_test.go
@@ -17,7 +17,7 @@
  * limitations under the License.
  */
 
-package utils
+package conductor
 
 import (
 	"testing"
diff --git a/utils/dependencies.go b/dependencies/dependencies.go
similarity index 99%
rename from utils/dependencies.go
rename to dependencies/dependencies.go
index eba29b8a..062b2d6c 100644
--- a/utils/dependencies.go
+++ b/dependencies/dependencies.go
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package utils
+package dependencies
 
 import (
 	"strings"
diff --git a/utils/dependencies_test.go b/dependencies/dependencies_test.go
similarity index 99%
rename from utils/dependencies_test.go
rename to dependencies/dependencies_test.go
index 7ed5c24a..2f4ccb04 100644
--- a/utils/dependencies_test.go
+++ b/dependencies/dependencies_test.go
@@ -17,7 +17,7 @@
  * limitations under the License.
  */
 
-package utils
+package dependencies
 
 import (
 	"testing"
diff --git a/utils/gitreader.go b/dependencies/gitreader.go
similarity index 99%
rename from utils/gitreader.go
rename to dependencies/gitreader.go
index 741da885..09a62a2f 100644
--- a/utils/gitreader.go
+++ b/dependencies/gitreader.go
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package utils
+package dependencies
 
 import (
 	"archive/zip"
diff --git a/deployers/manifestreader.go b/deployers/manifestreader.go
index 29fbd941..64349076 100644
--- a/deployers/manifestreader.go
+++ b/deployers/manifestreader.go
@@ -22,6 +22,7 @@ import (
 
 	"fmt"
 	"github.com/apache/incubator-openwhisk-client-go/whisk"
+	"github.com/apache/incubator-openwhisk-wskdeploy/dependencies"
 	"github.com/apache/incubator-openwhisk-wskdeploy/parsers"
 	"github.com/apache/incubator-openwhisk-wskdeploy/utils"
 	"github.com/apache/incubator-openwhisk-wskdeploy/wskderrors"
@@ -161,7 +162,7 @@ func (reader *ManifestReader) SetPackages(packages map[string]*whisk.Package, in
 	return nil
 }
 
-func (reader *ManifestReader) SetDependencies(deps map[string]utils.DependencyRecord) error {
+func (reader *ManifestReader) SetDependencies(deps map[string]dependencies.DependencyRecord) error {
 
 	dep := reader.serviceDeployer
 
@@ -176,7 +177,7 @@ func (reader *ManifestReader) SetDependencies(deps map[string]utils.DependencyRe
 		}
 		if !dependency.IsBinding && !reader.IsUndeploy {
 			if _, exists := dep.DependencyMaster[depName]; exists {
-				if !utils.CompareDependencyRecords(dep.DependencyMaster[depName], dependency) {
+				if !dependencies.CompareDependencyRecords(dep.DependencyMaster[depName], dependency) {
 					location := strings.Join([]string{dep.DependencyMaster[depName].Location, dependency.Location}, ",")
 					errmsg := wski18n.T(wski18n.ID_ERR_DEPENDENCIES_WITH_SAME_LABEL_X_dependency_X_location_X,
 						map[string]interface{}{wski18n.KEY_DEPENDENCY: depName,
@@ -184,7 +185,7 @@ func (reader *ManifestReader) SetDependencies(deps map[string]utils.DependencyRe
 					return wskderrors.NewYAMLParserErr(dep.ManifestPath, errmsg)
 				}
 			}
-			gitReader := utils.NewGitReader(depName, dependency)
+			gitReader := dependencies.NewGitReader(depName, dependency)
 			err := gitReader.CloneDependency()
 			if err != nil {
 				return err
diff --git a/deployers/manifestreader_test.go b/deployers/manifestreader_test.go
index c0ea0d75..475608a9 100644
--- a/deployers/manifestreader_test.go
+++ b/deployers/manifestreader_test.go
@@ -24,7 +24,9 @@ import (
 	"testing"
 
 	"github.com/apache/incubator-openwhisk-client-go/whisk"
+	"github.com/apache/incubator-openwhisk-wskdeploy/dependencies"
 	"github.com/apache/incubator-openwhisk-wskdeploy/parsers"
+	"github.com/apache/incubator-openwhisk-wskdeploy/runtimes"
 	"github.com/apache/incubator-openwhisk-wskdeploy/utils"
 	"github.com/apache/incubator-openwhisk-wskdeploy/wskprint"
 	"github.com/stretchr/testify/assert"
@@ -63,7 +65,7 @@ func buildServiceDeployer(manifestFile string) (*ServiceDeployer, error) {
 	deployer.DeploymentPath = deploymentFile
 	deployer.Preview = utils.Flags.Preview
 
-	deployer.DependencyMaster = make(map[string]utils.DependencyRecord)
+	deployer.DependencyMaster = make(map[string]dependencies.DependencyRecord)
 
 	config := whisk.Config{
 		Namespace:        "test",
@@ -73,12 +75,12 @@ func buildServiceDeployer(manifestFile string) (*ServiceDeployer, error) {
 	}
 	deployer.ClientConfig = &config
 
-	op, error := utils.ParseOpenWhisk(deployer.ClientConfig.Host)
+	op, error := runtimes.ParseOpenWhisk(deployer.ClientConfig.Host)
 	if error == nil {
-		utils.SupportedRunTimes = utils.ConvertToMap(op)
-		utils.DefaultRunTimes = utils.DefaultRuntimes(op)
-		utils.FileExtensionRuntimeKindMap = utils.FileExtensionRuntimes(op)
-		utils.FileRuntimeExtensionsMap = utils.FileRuntimeExtensions(op)
+		runtimes.SupportedRunTimes = runtimes.ConvertToMap(op)
+		runtimes.DefaultRunTimes = runtimes.DefaultRuntimes(op)
+		runtimes.FileExtensionRuntimeKindMap = runtimes.FileExtensionRuntimes(op)
+		runtimes.FileRuntimeExtensionsMap = runtimes.FileRuntimeExtensions(op)
 	}
 
 	return deployer, nil
diff --git a/deployers/servicedeployer.go b/deployers/servicedeployer.go
index d5447c05..a0e84e7c 100644
--- a/deployers/servicedeployer.go
+++ b/deployers/servicedeployer.go
@@ -29,6 +29,7 @@ import (
 	"time"
 
 	"github.com/apache/incubator-openwhisk-client-go/whisk"
+	"github.com/apache/incubator-openwhisk-wskdeploy/dependencies"
 	"github.com/apache/incubator-openwhisk-wskdeploy/parsers"
 	"github.com/apache/incubator-openwhisk-wskdeploy/utils"
 	"github.com/apache/incubator-openwhisk-wskdeploy/wskderrors"
@@ -61,7 +62,7 @@ func NewDeploymentProject() *DeploymentProject {
 
 type DeploymentPackage struct {
 	Package      *whisk.Package
-	Dependencies map[string]utils.DependencyRecord
+	Dependencies map[string]dependencies.DependencyRecord
 	Actions      map[string]utils.ActionRecord
 	Sequences    map[string]utils.ActionRecord
 	Inputs       parsers.PackageInputs
@@ -69,7 +70,7 @@ type DeploymentPackage struct {
 
 func NewDeploymentPackage() *DeploymentPackage {
 	var dep DeploymentPackage
-	dep.Dependencies = make(map[string]utils.DependencyRecord)
+	dep.Dependencies = make(map[string]dependencies.DependencyRecord)
 	dep.Actions = make(map[string]utils.ActionRecord)
 	dep.Sequences = make(map[string]utils.ActionRecord)
 	dep.Inputs = parsers.PackageInputs{}
@@ -94,7 +95,7 @@ type ServiceDeployer struct {
 	ProjectPath       string
 	DeploymentPath    string
 	ClientConfig      *whisk.Config
-	DependencyMaster  map[string]utils.DependencyRecord
+	DependencyMaster  map[string]dependencies.DependencyRecord
 	ManagedAnnotation whisk.KeyValue
 }
 
@@ -103,7 +104,7 @@ func NewServiceDeployer() *ServiceDeployer {
 	var dep ServiceDeployer
 	dep.Deployment = NewDeploymentProject()
 	dep.Preview = true
-	dep.DependencyMaster = make(map[string]utils.DependencyRecord)
+	dep.DependencyMaster = make(map[string]dependencies.DependencyRecord)
 	dep.ProjectInputs = make(map[string]parsers.Parameter, 0)
 	return &dep
 }
@@ -1594,7 +1595,7 @@ func (deployer *ServiceDeployer) printDeploymentAssets(assets *DeploymentProject
 
 }
 
-func (deployer *ServiceDeployer) getDependentDeployer(depName string, depRecord utils.DependencyRecord) (*ServiceDeployer, error) {
+func (deployer *ServiceDeployer) getDependentDeployer(depName string, depRecord dependencies.DependencyRecord) (*ServiceDeployer, error) {
 	depServiceDeployer := NewServiceDeployer()
 	projectPath := path.Join(depRecord.ProjectPath, depName+"-"+depRecord.Version)
 	if len(depRecord.SubFolder) > 0 {
diff --git a/parsers/manifest_parser.go b/parsers/manifest_parser.go
index b41a7bee..f7853be6 100644
--- a/parsers/manifest_parser.go
+++ b/parsers/manifest_parser.go
@@ -20,15 +20,20 @@ package parsers
 import (
 	"encoding/base64"
 	"errors"
-	"gopkg.in/yaml.v2"
 	"io/ioutil"
 	"os"
 	"path"
 	"path/filepath"
 	"strings"
 
+	"gopkg.in/yaml.v2"
+
 	"github.com/apache/incubator-openwhisk-client-go/whisk"
+	"github.com/apache/incubator-openwhisk-wskdeploy/conductor"
+	"github.com/apache/incubator-openwhisk-wskdeploy/dependencies"
+	"github.com/apache/incubator-openwhisk-wskdeploy/runtimes"
 	"github.com/apache/incubator-openwhisk-wskdeploy/utils"
+	"github.com/apache/incubator-openwhisk-wskdeploy/webaction"
 	"github.com/apache/incubator-openwhisk-wskdeploy/wskderrors"
 	"github.com/apache/incubator-openwhisk-wskdeploy/wskenv"
 	"github.com/apache/incubator-openwhisk-wskdeploy/wski18n"
@@ -184,8 +189,8 @@ func (dm *YAMLParser) composeAnnotations(annotations map[string]interface{}) whi
 	return listOfAnnotations
 }
 
-func (dm *YAMLParser) ComposeDependenciesFromAllPackages(manifest *YAML, projectPath string, filePath string, managedAnnotations whisk.KeyValue, packageInputs map[string]PackageInputs) (map[string]utils.DependencyRecord, error) {
-	dependencies := make(map[string]utils.DependencyRecord)
+func (dm *YAMLParser) ComposeDependenciesFromAllPackages(manifest *YAML, projectPath string, filePath string, managedAnnotations whisk.KeyValue, packageInputs map[string]PackageInputs) (map[string]dependencies.DependencyRecord, error) {
+	dependencies := make(map[string]dependencies.DependencyRecord)
 	packages := make(map[string]Package)
 
 	if len(manifest.Packages) != 0 {
@@ -207,9 +212,9 @@ func (dm *YAMLParser) ComposeDependenciesFromAllPackages(manifest *YAML, project
 	return dependencies, nil
 }
 
-func (dm *YAMLParser) ComposeDependencies(pkg Package, projectPath string, filePath string, packageName string, managedAnnotations whisk.KeyValue, packageInputs PackageInputs) (map[string]utils.DependencyRecord, error) {
+func (dm *YAMLParser) ComposeDependencies(pkg Package, projectPath string, filePath string, packageName string, managedAnnotations whisk.KeyValue, packageInputs PackageInputs) (map[string]dependencies.DependencyRecord, error) {
 
-	depMap := make(map[string]utils.DependencyRecord)
+	depMap := make(map[string]dependencies.DependencyRecord)
 	for key, dependency := range pkg.Dependencies {
 		version := dependency.Version
 		if len(version) == 0 {
@@ -219,12 +224,12 @@ func (dm *YAMLParser) ComposeDependencies(pkg Package, projectPath string, fileP
 		location := dependency.Location
 
 		isBinding := false
-		if utils.LocationIsBinding(location) {
+		if dependencies.LocationIsBinding(location) {
 			if !strings.HasPrefix(location, PATH_SEPARATOR) {
 				location = PATH_SEPARATOR + dependency.Location
 			}
 			isBinding = true
-		} else if utils.LocationIsGithub(location) {
+		} else if dependencies.LocationIsGithub(location) {
 
 			// TODO() define const for the protocol prefix, etc.
 			if !strings.HasPrefix(location, HTTPS) && !strings.HasPrefix(location, HTTP) {
@@ -250,7 +255,7 @@ func (dm *YAMLParser) ComposeDependencies(pkg Package, projectPath string, fileP
 
 		packDir := path.Join(projectPath, strings.Title(YAML_KEY_PACKAGES))
 		depName := packageName + ":" + key
-		depMap[depName] = utils.NewDependencyRecord(packDir, packageName, location, version, inputs, annotations, isBinding)
+		depMap[depName] = dependencies.NewDependencyRecord(packDir, packageName, location, version, inputs, annotations, isBinding)
 	}
 
 	return depMap, nil
@@ -504,7 +509,7 @@ func (dm *YAMLParser) ComposeSequences(namespace string, sequences map[string]Se
 		// when web-export is set to raw, treat sequence as a raw HTTP web action,
 		// when web-export is set to no | false, treat sequence as a standard action
 		if len(sequence.Web) != 0 {
-			wskaction.Annotations, errorParser = utils.WebAction(manifestFilePath, wskaction.Name, sequence.Web, wskaction.Annotations, false)
+			wskaction.Annotations, errorParser = webaction.WebAction(manifestFilePath, wskaction.Name, sequence.Web, wskaction.Annotations, false)
 			if errorParser != nil {
 				return nil, errorParser
 			}
@@ -566,10 +571,10 @@ func (dm *YAMLParser) readActionCode(manifestFilePath string, action Action) (*w
 	// even if runtime is invalid, deploy action with specified runtime in strict mode
 	if utils.Flags.Strict {
 		exec.Kind = action.Runtime
-	} else if utils.CheckExistRuntime(action.Runtime, utils.SupportedRunTimes) {
+	} else if runtimes.CheckExistRuntime(action.Runtime, runtimes.SupportedRunTimes) {
 		exec.Kind = action.Runtime
-	} else if len(utils.DefaultRunTimes[action.Runtime]) != 0 {
-		exec.Kind = utils.DefaultRunTimes[action.Runtime]
+	} else if len(runtimes.DefaultRunTimes[action.Runtime]) != 0 {
+		exec.Kind = runtimes.DefaultRunTimes[action.Runtime]
 	} else {
 		err := wski18n.T(wski18n.ID_ERR_RUNTIME_INVALID_X_runtime_X_action_X,
 			map[string]interface{}{
@@ -590,16 +595,16 @@ func (dm *YAMLParser) validateActionFunction(manifestFileName string, action Act
 	// and its not explicitly specified in the manifest YAML file
 	// and action source is not a zip file
 	if len(action.Runtime) == 0 && len(action.Docker) == 0 && !action.Native {
-		if ext == utils.ZIP_FILE_EXTENSION {
+		if ext == runtimes.ZIP_FILE_EXTENSION {
 			errMessage := wski18n.T(wski18n.ID_ERR_RUNTIME_INVALID_X_runtime_X_action_X,
 				map[string]interface{}{
-					wski18n.KEY_RUNTIME: utils.RUNTIME_NOT_SPECIFIED,
+					wski18n.KEY_RUNTIME: runtimes.RUNTIME_NOT_SPECIFIED,
 					wski18n.KEY_ACTION:  action.Name})
 			return wskderrors.NewInvalidRuntimeError(errMessage,
 				manifestFileName,
 				action.Name,
-				utils.RUNTIME_NOT_SPECIFIED,
-				utils.ListOfSupportedRuntimes(utils.SupportedRunTimes))
+				runtimes.RUNTIME_NOT_SPECIFIED,
+				runtimes.ListOfSupportedRuntimes(runtimes.SupportedRunTimes))
 		} else if len(kind) == 0 {
 			errMessage := wski18n.T(wski18n.ID_ERR_RUNTIME_ACTION_SOURCE_NOT_SUPPORTED_X_ext_X_action_X,
 				map[string]interface{}{
@@ -608,8 +613,8 @@ func (dm *YAMLParser) validateActionFunction(manifestFileName string, action Act
 			return wskderrors.NewInvalidRuntimeError(errMessage,
 				manifestFileName,
 				action.Name,
-				utils.RUNTIME_NOT_SPECIFIED,
-				utils.ListOfSupportedRuntimes(utils.SupportedRunTimes))
+				runtimes.RUNTIME_NOT_SPECIFIED,
+				runtimes.ListOfSupportedRuntimes(runtimes.SupportedRunTimes))
 		}
 	}
 	return nil
@@ -639,7 +644,7 @@ func (dm *YAMLParser) readActionFunction(manifestFilePath string, manifestFileNa
 	}
 
 	if utils.IsDirectory(actionFilePath) {
-		zipFileName = actionFilePath + "." + utils.ZIP_FILE_EXTENSION
+		zipFileName = actionFilePath + "." + runtimes.ZIP_FILE_EXTENSION
 		err := utils.NewZipWritter(actionFilePath, zipFileName).Zip()
 		if err != nil {
 			return actionFilePath, nil, err
@@ -659,8 +664,8 @@ func (dm *YAMLParser) readActionFunction(manifestFilePath string, manifestFileNa
 
 	// determine default runtime for the given file extension
 	var kind string
-	r := utils.FileExtensionRuntimeKindMap[ext]
-	kind = utils.DefaultRunTimes[r]
+	r := runtimes.FileExtensionRuntimeKindMap[ext]
+	kind = runtimes.DefaultRunTimes[r]
 	if err := dm.validateActionFunction(manifestFileName, action, ext, kind); err != nil {
 		return actionFilePath, nil, err
 	}
@@ -671,7 +676,7 @@ func (dm *YAMLParser) readActionFunction(manifestFilePath string, manifestFileNa
 		return actionFilePath, nil, err
 	}
 	code := string(dat)
-	if ext == utils.ZIP_FILE_EXTENSION || ext == utils.JAR_FILE_EXTENSION {
+	if ext == runtimes.ZIP_FILE_EXTENSION || ext == runtimes.JAR_FILE_EXTENSION {
 		code = base64.StdEncoding.EncodeToString([]byte(dat))
 	}
 	exec.Code = &code
@@ -684,13 +689,13 @@ func (dm *YAMLParser) readActionFunction(manifestFilePath string, manifestFileNa
 	*  Set the action runtime to match with the source file extension, if wskdeploy is not invoked in strict mode
 	 */
 	if len(action.Runtime) != 0 {
-		if utils.CheckExistRuntime(action.Runtime, utils.SupportedRunTimes) {
+		if runtimes.CheckExistRuntime(action.Runtime, runtimes.SupportedRunTimes) {
 			// for zip actions, rely on the runtimes from the manifest file as it can not be derived from the action source file extension
 			// pick runtime from manifest file if its supported by OpenWhisk server
-			if ext == utils.ZIP_FILE_EXTENSION {
+			if ext == runtimes.ZIP_FILE_EXTENSION {
 				exec.Kind = action.Runtime
 			} else {
-				if utils.CheckRuntimeConsistencyWithFileExtension(ext, action.Runtime) {
+				if runtimes.CheckRuntimeConsistencyWithFileExtension(ext, action.Runtime) {
 					exec.Kind = action.Runtime
 				} else {
 					warnStr := wski18n.T(wski18n.ID_ERR_RUNTIME_MISMATCH_X_runtime_X_ext_X_action_X,
@@ -719,20 +724,24 @@ func (dm *YAMLParser) readActionFunction(manifestFilePath string, manifestFileNa
 					wski18n.KEY_ACTION:  action.Name})
 			wskprint.PrintOpenWhiskWarning(warnStr)
 
-			if ext == utils.ZIP_FILE_EXTENSION {
+			if ext == runtimes.ZIP_FILE_EXTENSION {
 				// for zip action, error out if specified runtime is not supported by
 				// OpenWhisk server
 				return actionFilePath, nil, wskderrors.NewInvalidRuntimeError(warnStr,
 					manifestFileName,
 					action.Name,
 					action.Runtime,
-					utils.ListOfSupportedRuntimes(utils.SupportedRunTimes))
+					runtimes.ListOfSupportedRuntimes(runtimes.SupportedRunTimes))
 			} else {
-				warnStr := wski18n.T(wski18n.ID_WARN_RUNTIME_CHANGED_X_runtime_X_action_X,
-					map[string]interface{}{
-						wski18n.KEY_RUNTIME: exec.Kind,
-						wski18n.KEY_ACTION:  action.Name})
-				wskprint.PrintOpenWhiskWarning(warnStr)
+				if utils.Flags.Strict {
+					exec.Kind = action.Runtime
+				} else {
+					warnStr := wski18n.T(wski18n.ID_WARN_RUNTIME_CHANGED_X_runtime_X_action_X,
+						map[string]interface{}{
+							wski18n.KEY_RUNTIME: exec.Kind,
+							wski18n.KEY_ACTION:  action.Name})
+					wskprint.PrintOpenWhiskWarning(warnStr)
+				}
 			}
 
 		}
@@ -769,7 +778,7 @@ func (dm *YAMLParser) composeActionExec(manifestFilePath string, manifestFileNam
 	// when an action Native is set to true,
 	// set exec.Image to openwhisk/skeleton
 	if len(action.Docker) != 0 || action.Native {
-		exec.Kind = utils.BLACKBOX
+		exec.Kind = runtimes.BLACKBOX
 		if action.Native {
 			exec.Image = NATIVE_DOCKER_IMAGE
 		} else {
@@ -900,7 +909,7 @@ func (dm *YAMLParser) ComposeActions(manifestFilePath string, actions map[string
 		// when web-export is set to no | false, treat action as a standard action
 		dm.validateActionWebFlag(action)
 		if len(action.GetWeb()) != 0 {
-			wskaction.Annotations, errorParser = utils.WebAction(manifestFilePath, action.Name, action.GetWeb(), wskaction.Annotations, false)
+			wskaction.Annotations, errorParser = webaction.WebAction(manifestFilePath, action.Name, action.GetWeb(), wskaction.Annotations, false)
 			if errorParser != nil {
 				return listOfActions, errorParser
 			}
@@ -914,7 +923,7 @@ func (dm *YAMLParser) ComposeActions(manifestFilePath string, actions map[string
 		}
 		// Conductor Action
 		if action.Conductor {
-			wskaction.Annotations = append(wskaction.Annotations, utils.ConductorAction())
+			wskaction.Annotations = append(wskaction.Annotations, conductor.ConductorAction())
 		}
 
 		wskaction.Name = actionName
@@ -1154,7 +1163,7 @@ func (dm *YAMLParser) ComposeApiRecords(client *whisk.Config, packageName string
 						// verify that the action is defined as web action
 						// web or web-export set to any of [true, yes, raw]
 						a := pkg.Actions[actionName]
-						if !utils.IsWebAction(a.GetWeb()) {
+						if !webaction.IsWebAction(a.GetWeb()) {
 							warningString := wski18n.T(wski18n.ID_WARN_API_MISSING_WEB_ACTION_X_action_X_api_X,
 								map[string]interface{}{
 									wski18n.KEY_ACTION: actionName,
@@ -1163,7 +1172,7 @@ func (dm *YAMLParser) ComposeApiRecords(client *whisk.Config, packageName string
 							if a.Annotations == nil {
 								a.Annotations = make(map[string]interface{}, 0)
 							}
-							a.Annotations[utils.WEB_EXPORT_ANNOT] = true
+							a.Annotations[webaction.WEB_EXPORT_ANNOT] = true
 							pkg.Actions[actionName] = a
 						}
 						// verify that the sequence is defined under sequences sections
@@ -1171,7 +1180,7 @@ func (dm *YAMLParser) ComposeApiRecords(client *whisk.Config, packageName string
 						// verify that the sequence is defined as web sequence
 						// web set to any of [true, yes, raw]
 						a := pkg.Sequences[actionName]
-						if !utils.IsWebSequence(a.Web) {
+						if !webaction.IsWebSequence(a.Web) {
 							warningString := wski18n.T(wski18n.ID_WARN_API_MISSING_WEB_SEQUENCE_X_sequence_X_api_X,
 								map[string]interface{}{
 									wski18n.KEY_SEQUENCE: actionName,
@@ -1180,7 +1189,7 @@ func (dm *YAMLParser) ComposeApiRecords(client *whisk.Config, packageName string
 							if a.Annotations == nil {
 								a.Annotations = make(map[string]interface{}, 0)
 							}
-							a.Annotations[utils.WEB_EXPORT_ANNOT] = true
+							a.Annotations[webaction.WEB_EXPORT_ANNOT] = true
 							pkg.Sequences[actionName] = a
 						}
 						// return failure since action or sequence are not defined in the manifest
diff --git a/parsers/manifest_parser_test.go b/parsers/manifest_parser_test.go
index 8cbe6443..b4a3cc80 100644
--- a/parsers/manifest_parser_test.go
+++ b/parsers/manifest_parser_test.go
@@ -30,7 +30,7 @@ import (
 	"testing"
 
 	"github.com/apache/incubator-openwhisk-client-go/whisk"
-	"github.com/apache/incubator-openwhisk-wskdeploy/utils"
+	"github.com/apache/incubator-openwhisk-wskdeploy/runtimes"
 	"github.com/apache/incubator-openwhisk-wskdeploy/wskderrors"
 	"github.com/apache/incubator-openwhisk-wskdeploy/wskprint"
 	"github.com/stretchr/testify/assert"
@@ -49,7 +49,7 @@ const (
 	TEST_MSG_PARAMETER_NUMBER_MISMATCH              = "Number of Paramaters mismatched."
 	TEST_MSG_MANIFEST_UNMARSHALL_ERROR_EXPECTED     = "Manifest [%s]: Expected Unmarshal error."
 	TEST_MSG_ACTION_FUNCTION_RUNTIME_ERROR_EXPECTED = "Manifest [%s]: Expected runtime error."
-	TEST_MSG_ACTION_DOCKER_KIND_MISMATCH            = "Docker action kind is set to [%s] instead of " + utils.BLACKBOX
+	TEST_MSG_ACTION_DOCKER_KIND_MISMATCH            = "Docker action kind is set to [%s] instead of " + runtimes.BLACKBOX
 	TEST_MSG_ACTION_DOCKER_IMAGE_MISMATCH           = "Docker action image had a value mismatch."
 	TEST_MSG_ACTION_CODE_MISSING                    = "Action code is missing."
 	TEST_MSG_ACTION_FUNCTION_PATH_MISSING           = "Action function path missing"
@@ -66,11 +66,11 @@ const (
 )
 
 func init() {
-	op, error := utils.ParseOpenWhisk("")
+	op, error := runtimes.ParseOpenWhisk("")
 	if error == nil {
-		utils.SupportedRunTimes = utils.ConvertToMap(op)
-		utils.DefaultRunTimes = utils.DefaultRuntimes(op)
-		utils.FileExtensionRuntimeKindMap = utils.FileExtensionRuntimes(op)
+		runtimes.SupportedRunTimes = runtimes.ConvertToMap(op)
+		runtimes.DefaultRunTimes = runtimes.DefaultRuntimes(op)
+		runtimes.FileExtensionRuntimeKindMap = runtimes.FileExtensionRuntimes(op)
 	}
 }
 
@@ -507,13 +507,13 @@ func TestComposeActionsForImplicitRuntimes(t *testing.T) {
 	var expectedResult string
 	for i := 0; i < len(actions); i++ {
 		if actions[i].Action.Name == "helloNodejs" {
-			expectedResult = utils.DefaultRunTimes[utils.FileExtensionRuntimeKindMap["js"]]
+			expectedResult = runtimes.DefaultRunTimes[runtimes.FileExtensionRuntimeKindMap["js"]]
 		} else if actions[i].Action.Name == "helloJava" {
-			expectedResult = utils.DefaultRunTimes[utils.FileExtensionRuntimeKindMap["jar"]]
+			expectedResult = runtimes.DefaultRunTimes[runtimes.FileExtensionRuntimeKindMap["jar"]]
 		} else if actions[i].Action.Name == "helloPython" {
-			expectedResult = utils.DefaultRunTimes[utils.FileExtensionRuntimeKindMap["py"]]
+			expectedResult = runtimes.DefaultRunTimes[runtimes.FileExtensionRuntimeKindMap["py"]]
 		} else if actions[i].Action.Name == "helloSwift" {
-			expectedResult = utils.DefaultRunTimes[utils.FileExtensionRuntimeKindMap["swift"]]
+			expectedResult = runtimes.DefaultRunTimes[runtimes.FileExtensionRuntimeKindMap["swift"]]
 		}
 		actualResult := actions[i].Action.Exec.Kind
 		assert.Equal(t, expectedResult, actualResult, TEST_MSG_ACTION_FUNCTION_RUNTIME_MISMATCH)
@@ -916,23 +916,23 @@ func TestComposeActionsForDocker(t *testing.T) {
 		switch action.Action.Name {
 		case "OpenWhiskSkeleton":
 		case "OpenWhiskSkeletonWithNative":
-			assert.Equal(t, utils.BLACKBOX, action.Action.Exec.Kind, fmt.Sprintf(TEST_MSG_ACTION_DOCKER_KIND_MISMATCH, action.Action.Exec.Kind))
+			assert.Equal(t, runtimes.BLACKBOX, action.Action.Exec.Kind, fmt.Sprintf(TEST_MSG_ACTION_DOCKER_KIND_MISMATCH, action.Action.Exec.Kind))
 			assert.Equal(t, NATIVE_DOCKER_IMAGE, action.Action.Exec.Image, TEST_MSG_ACTION_DOCKER_IMAGE_MISMATCH)
 		case "CustomDockerAction1":
 		case "CustomDockerAction2":
 			expectedResult, _ = filepath.Abs(actionFile)
 			actualResult, _ = filepath.Abs(action.Filepath)
 			assert.Equal(t, expectedResult, actualResult, TEST_MSG_ACTION_FUNCTION_PATH_MISMATCH)
-			assert.Equal(t, utils.BLACKBOX, action.Action.Exec.Kind, fmt.Sprintf(TEST_MSG_ACTION_DOCKER_KIND_MISMATCH, action.Action.Exec.Kind))
+			assert.Equal(t, runtimes.BLACKBOX, action.Action.Exec.Kind, fmt.Sprintf(TEST_MSG_ACTION_DOCKER_KIND_MISMATCH, action.Action.Exec.Kind))
 			assert.Equal(t, NATIVE_DOCKER_IMAGE, action.Action.Exec.Image, TEST_MSG_ACTION_DOCKER_IMAGE_MISMATCH)
 		case "CustomDockerAction3":
 		case "CustomDockerAction4":
 			assert.NotNil(t, action.Action.Exec.Code, TEST_MSG_ACTION_CODE_MISSING)
-			assert.Equal(t, utils.BLACKBOX, action.Action.Exec.Kind, fmt.Sprintf(TEST_MSG_ACTION_DOCKER_KIND_MISMATCH, action.Action.Exec.Kind))
+			assert.Equal(t, runtimes.BLACKBOX, action.Action.Exec.Kind, fmt.Sprintf(TEST_MSG_ACTION_DOCKER_KIND_MISMATCH, action.Action.Exec.Kind))
 			assert.Equal(t, NATIVE_DOCKER_IMAGE, action.Action.Exec.Image, TEST_MSG_ACTION_DOCKER_IMAGE_MISMATCH)
 		case "CustomDockerAction5":
 			assert.NotNil(t, action.Action.Exec.Code, TEST_MSG_ACTION_CODE_MISSING)
-			assert.Equal(t, utils.BLACKBOX, action.Action.Exec.Kind, fmt.Sprintf(TEST_MSG_ACTION_DOCKER_KIND_MISMATCH, action.Action.Exec.Kind))
+			assert.Equal(t, runtimes.BLACKBOX, action.Action.Exec.Kind, fmt.Sprintf(TEST_MSG_ACTION_DOCKER_KIND_MISMATCH, action.Action.Exec.Kind))
 			assert.Equal(t, "mydockerhub/myimage", action.Action.Exec.Image, TEST_MSG_ACTION_DOCKER_IMAGE_MISMATCH)
 		}
 	}
diff --git a/utils/runtimes.go b/runtimes/runtimes.go
similarity index 71%
rename from utils/runtimes.go
rename to runtimes/runtimes.go
index 15399efb..361c614d 100644
--- a/utils/runtimes.go
+++ b/runtimes/runtimes.go
@@ -15,18 +15,23 @@
  * limitations under the License.
  */
 
-package utils
+package runtimes
 
 import (
 	"crypto/tls"
 	"encoding/json"
-	"github.com/apache/incubator-openwhisk-client-go/whisk"
-	"github.com/apache/incubator-openwhisk-wskdeploy/wski18n"
-	"github.com/apache/incubator-openwhisk-wskdeploy/wskprint"
 	"io/ioutil"
 	"net/http"
 	"strings"
 	"time"
+
+	"github.com/apache/incubator-openwhisk-client-go/whisk"
+	"github.com/apache/incubator-openwhisk-wskdeploy/utils"
+	"github.com/apache/incubator-openwhisk-wskdeploy/wskderrors"
+	"github.com/apache/incubator-openwhisk-wskdeploy/wski18n"
+	"github.com/apache/incubator-openwhisk-wskdeploy/wskprint"
+	"path/filepath"
+	"runtime"
 )
 
 const (
@@ -41,14 +46,15 @@ const (
 	HTTP_CONTENT_TYPE_VALUE = "application/json; charset=UTF-8"
 	RUNTIME_NOT_SPECIFIED   = "NOT SPECIFIED"
 	BLACKBOX                = "blackbox"
-	HTTP_FILE_EXTENSION     = "http"
+	RUNTIMES_FILE_NAME      = "runtimes.json"
+	HTTPS                   = "https://"
 )
 
 // Structs used to denote the OpenWhisk Runtime information
 type Limit struct {
-	Apm       uint16 `json:"actions_per_minute"`
-	Tpm       uint16 `json:"triggers_per_minute"`
-	ConAction uint16 `json:"concurrent_actions"`
+	Apm       uint `json:"actions_per_minute"`
+	Tpm       uint `json:"triggers_per_minute"`
+	ConAction uint `json:"concurrent_actions"`
 }
 
 type Runtime struct {
@@ -82,7 +88,7 @@ var FileRuntimeExtensionsMap map[string]string
 // `curl -k https://openwhisk.ng.bluemix.net`
 // hard coding it here in case of network unavailable or failure.
 func ParseOpenWhisk(apiHost string) (op OpenWhiskInfo, err error) {
-	url := "https://" + apiHost
+	url := HTTPS + apiHost
 	req, _ := http.NewRequest("GET", url, nil)
 	req.Header.Set(HTTP_CONTENT_TYPE_KEY, HTTP_CONTENT_TYPE_VALUE)
 	tlsConfig := &tls.Config{
@@ -94,7 +100,7 @@ func ParseOpenWhisk(apiHost string) (op OpenWhiskInfo, err error) {
 	}
 
 	var netClient = &http.Client{
-		Timeout:   time.Second * DEFAULT_HTTP_TIMEOUT,
+		Timeout:   time.Second * utils.DEFAULT_HTTP_TIMEOUT,
 		Transport: netTransport,
 	}
 
@@ -104,6 +110,12 @@ func ParseOpenWhisk(apiHost string) (op OpenWhiskInfo, err error) {
 		errString := wski18n.T(wski18n.ID_ERR_RUNTIMES_GET_X_err_X,
 			map[string]interface{}{"err": err.Error()})
 		whisk.Debug(whisk.DbgWarn, errString)
+		if utils.Flags.Strict {
+			errMessage := wski18n.T(wski18n.ID_ERR_RUNTIME_PARSER_ERROR,
+				map[string]interface{}{wski18n.KEY_ERR: err.Error()})
+			err = wskderrors.NewRuntimeParserError(errMessage)
+			return
+		}
 	}
 
 	if res != nil {
@@ -114,7 +126,15 @@ func ParseOpenWhisk(apiHost string) (op OpenWhiskInfo, err error) {
 	if err != nil || !strings.Contains(HTTP_CONTENT_TYPE_VALUE, res.Header.Get(HTTP_CONTENT_TYPE_KEY)) {
 		stdout := wski18n.T(wski18n.ID_MSG_UNMARSHAL_LOCAL)
 		wskprint.PrintOpenWhiskInfo(stdout)
-		err = json.Unmarshal(RUNTIME_DETAILS, &op)
+		runtimeDetails := readRuntimes()
+		if runtimeDetails != nil {
+			err = json.Unmarshal(runtimeDetails, &op)
+			if err != nil {
+				errMessage := wski18n.T(wski18n.ID_ERR_RUNTIME_PARSER_ERROR,
+					map[string]interface{}{wski18n.KEY_ERR: err.Error()})
+				err = wskderrors.NewRuntimeParserError(errMessage)
+			}
+		}
 	} else {
 		b, _ := ioutil.ReadAll(res.Body)
 		if b != nil && len(b) > 0 {
@@ -122,6 +142,11 @@ func ParseOpenWhisk(apiHost string) (op OpenWhiskInfo, err error) {
 				map[string]interface{}{"url": url})
 			wskprint.PrintOpenWhiskInfo(stdout)
 			err = json.Unmarshal(b, &op)
+			if err != nil {
+				errMessage := wski18n.T(wski18n.ID_ERR_RUNTIME_PARSER_ERROR,
+					map[string]interface{}{wski18n.KEY_ERR: err.Error()})
+				err = wskderrors.NewRuntimeParserError(errMessage)
+			}
 		}
 	}
 	return
@@ -226,101 +251,14 @@ func ListOfSupportedRuntimes(runtimes map[string][]string) (rt []string) {
 	return
 }
 
-var RUNTIME_DETAILS = []byte(`{
-	"support":{
-		"github":"https://github.com/apache/incubator-openwhisk/issues",
-		"slack":"http://slack.openwhisk.org"
-	},
-	"description":"OpenWhisk",
-	"api_paths":["/api/v1"],
-	"runtimes":{
-		"nodejs":[{
-			"image":"openwhisk/nodejsaction:latest",
-			"deprecated":true,
-			"requireMain":false,
-			"default":false,
-			"attached":false,
-			"kind":"nodejs"
-		},{
-			"image":"openwhisk/nodejs6action:latest",
-			"deprecated":false,
-			"requireMain":false,
-			"default":true,
-			"attached":false,
-			"kind":"nodejs:6"
-		},{
-			"image":"openwhisk/action-nodejs-v8:latest",
-			"deprecated":false,
-			"requireMain":false,
-			"default":false,
-			"attached":false,
-			"kind":"nodejs:8"
-		}],
-		"java":[{
-			"image":"openwhisk/java8action:latest",
-			"deprecated":false,
-			"requireMain":true,
-			"default":true,
-			"attached":true,
-			"kind":"java"
-		}],
-		"php":[{
-			"image":"openwhisk/action-php-v7.1:latest",
-			"deprecated":false,
-			"requireMain":false,
-			"default":true,
-			"attached":false,
-			"kind":"php:7.1"
-		}],
-		"python":[{
-			"image":"openwhisk/python2action:latest",
-			"deprecated":false,
-			"requireMain":false,
-			"default":false,
-			"attached":false,
-			"kind":"python"
-		},{
-			"image":"openwhisk/python2action:latest",
-			"deprecated":false,
-			"requireMain":false,
-			"default":true,
-			"attached":false,
-			"kind":"python:2"
-		},{
-			"image":"openwhisk/python3action:latest",
-			"deprecated":false,
-			"requireMain":false,
-			"default":false,
-			"attached":false,
-			"kind":"python:3"
-		}],
-		"swift":[{
-			"image":"openwhisk/swiftaction:latest",
-			"deprecated":true,
-			"requireMain":false,
-			"default":false,
-			"attached":false,
-			"kind":"swift"
-		},{
-			"image":"openwhisk/swift3action:latest",
-			"deprecated":true,
-			"requireMain":false,
-			"default":false,
-			"attached":false,
-			"kind":"swift:3"
-		},{
-			"image":"openwhisk/action-swift-v3.1.1:latest",
-			"deprecated":false,
-			"requireMain":false,
-			"default":true,
-			"attached":false,
-			"kind":"swift:3.1.1"
-		}]
-	},
-	"limits":{
-		"actions_per_minute":5000,
-		"triggers_per_minute":5000,
-		"concurrent_actions":1000
-	}
+func readRuntimes() []byte {
+	_, b, _, _ := runtime.Caller(0)
+	basepath := filepath.Dir(b)
+	runtimesFileWithPath := filepath.Join(basepath, RUNTIMES_FILE_NAME)
+	file, readErr := ioutil.ReadFile(runtimesFileWithPath)
+	if readErr != nil {
+		wskprint.PrintlnOpenWhiskWarning(readErr.Error())
+		return nil
 	}
-`)
+	return file
+}
diff --git a/runtimes/runtimes.json b/runtimes/runtimes.json
new file mode 100644
index 00000000..857331ff
--- /dev/null
+++ b/runtimes/runtimes.json
@@ -0,0 +1,131 @@
+{
+    "support": {
+        "github": "https://github.com/apache/incubator-openwhisk/issues",
+        "slack": "http://slack.openwhisk.org"
+    },
+    "description": "OpenWhisk",
+    "api_paths": [
+        "/api/v1"
+    ],
+    "runtimes": {
+        "nodejs": [
+            {
+                "image": "openwhisk/nodejsaction:latest",
+                "deprecated": true,
+                "requireMain": false,
+                "default": false,
+                "attached": false,
+                "kind": "nodejs"
+            },
+            {
+                "image": "openwhisk/nodejs6action:latest",
+                "deprecated": false,
+                "requireMain": false,
+                "default": true,
+                "attached": false,
+                "kind": "nodejs:6"
+            },
+            {
+                "image": "ibmfunctions/action-nodejs-v8:1.13.0",
+                "deprecated": false,
+                "requireMain": false,
+                "default": false,
+                "attached": false,
+                "kind": "nodejs:8"
+            }
+        ],
+        "java": [
+            {
+                "image": "openwhisk/java8action:latest",
+                "deprecated": false,
+                "requireMain": true,
+                "default": true,
+                "attached": true,
+                "kind": "java"
+            }
+        ],
+        "php": [
+            {
+                "image": "openwhisk/action-php-v7.1:latest",
+                "deprecated": false,
+                "requireMain": false,
+                "default": true,
+                "attached": false,
+                "kind": "php:7.1"
+            }
+        ],
+        "python": [
+            {
+                "image": "openwhisk/python2action:latest",
+                "deprecated": false,
+                "requireMain": false,
+                "default": false,
+                "attached": false,
+                "kind": "python"
+            },
+            {
+                "image": "openwhisk/python2action:latest",
+                "deprecated": false,
+                "requireMain": false,
+                "default": true,
+                "attached": false,
+                "kind": "python:2"
+            },
+            {
+                "image": "openwhisk/python3action:latest",
+                "deprecated": false,
+                "requireMain": false,
+                "default": false,
+                "attached": false,
+                "kind": "python:3"
+            },
+            {
+                "image": "ibmfunctions/action-python-v3:1.6.0",
+                "deprecated": false,
+                "requireMain": false,
+                "default": false,
+                "attached": false,
+                "kind": "python-jessie:3"
+            }
+        ],
+        "swift": [
+            {
+                "image": "openwhisk/swiftaction:latest",
+                "deprecated": true,
+                "requireMain": false,
+                "default": false,
+                "attached": false,
+                "kind": "swift"
+            },
+            {
+                "image": "openwhisk/swift3action:latest",
+                "deprecated": true,
+                "requireMain": false,
+                "default": false,
+                "attached": false,
+                "kind": "swift:3"
+            },
+            {
+                "image": "openwhisk/action-swift-v3.1.1:latest",
+                "deprecated": false,
+                "requireMain": false,
+                "default": true,
+                "attached": false,
+                "kind": "swift:3.1.1"
+            },
+            {
+                "image": "ibmfunctions/action-swift-v4.1:1.5.0",
+                "deprecated": false,
+                "requireMain": false,
+                "default": false,
+                "attached": false,
+                "kind": "swift:4.1"
+            }
+        ]
+    },
+    "limits": {
+        "actions_per_minute": 5000,
+        "triggers_per_minute": 5000,
+        "concurrent_actions": 1000
+    }
+}
diff --git a/runtimes/runtimes_test.go b/runtimes/runtimes_test.go
new file mode 100644
index 00000000..f7650e3c
--- /dev/null
+++ b/runtimes/runtimes_test.go
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package runtimes
+
+import (
+	"github.com/stretchr/testify/assert"
+	"testing"
+)
+
+func TestParseOpenWhisk(t *testing.T) {
+	openwhiskHost := "https://openwhisk.ng.bluemix.net"
+	openwhisk, err := ParseOpenWhisk(openwhiskHost)
+	assert.Equal(t, nil, err, "parse openwhisk info error happened.")
+	converted := ConvertToMap(openwhisk)
+	assert.Equal(t, 2, len(converted["nodejs"]), "not expected length")
+	assert.Equal(t, 1, len(converted["php"]), "not expected length")
+	assert.Equal(t, 1, len(converted["java"]), "not expected length")
+	assert.Equal(t, 4, len(converted["python"]), "not expected length")
+	assert.Equal(t, 2, len(converted["swift"]), "not expected length")
+}
diff --git a/tests/src/integration/common/wskdeploy.go b/tests/src/integration/common/wskdeploy.go
index 32938a23..5dddf563 100644
--- a/tests/src/integration/common/wskdeploy.go
+++ b/tests/src/integration/common/wskdeploy.go
@@ -28,7 +28,9 @@ import (
 	"strings"
 
 	"github.com/apache/incubator-openwhisk-client-go/whisk"
+	"github.com/apache/incubator-openwhisk-wskdeploy/dependencies"
 	"github.com/apache/incubator-openwhisk-wskdeploy/deployers"
+	"github.com/apache/incubator-openwhisk-wskdeploy/runtimes"
 	"github.com/apache/incubator-openwhisk-wskdeploy/utils"
 	"github.com/apache/incubator-openwhisk-wskdeploy/wskderrors"
 	"github.com/fatih/color"
@@ -197,7 +199,7 @@ func (wskdeploy *Wskdeploy) GetDeploymentObjects(manifestPath string, deployment
 	deployer.ProjectPath = filepath.Dir(manifestPath)
 	deployer.ManifestPath = manifestPath
 	deployer.DeploymentPath = deploymentPath
-	deployer.DependencyMaster = make(map[string]utils.DependencyRecord)
+	deployer.DependencyMaster = make(map[string]dependencies.DependencyRecord)
 
 	//create client config with namespace, apihost, authkey and etc.
 	//these values might be mock values because it's only for testing
@@ -211,11 +213,11 @@ func (wskdeploy *Wskdeploy) GetDeploymentObjects(manifestPath string, deployment
 
 	//setSupportedRuntimes(apiHost string)
 	//only for testing, mock values
-	op, err := utils.ParseOpenWhisk(clientConfig.Host)
+	op, err := runtimes.ParseOpenWhisk(clientConfig.Host)
 	if err == nil {
-		utils.SupportedRunTimes = utils.ConvertToMap(op)
-		utils.DefaultRunTimes = utils.DefaultRuntimes(op)
-		utils.FileExtensionRuntimeKindMap = utils.FileExtensionRuntimes(op)
+		runtimes.SupportedRunTimes = runtimes.ConvertToMap(op)
+		runtimes.DefaultRunTimes = runtimes.DefaultRuntimes(op)
+		runtimes.FileExtensionRuntimeKindMap = runtimes.FileExtensionRuntimes(op)
 	}
 
 	//invoke ConstructDeploymentPlan to create the in memory objects for deployment
diff --git a/utils/misc.go b/utils/misc.go
index 5280f7bf..177fe105 100644
--- a/utils/misc.go
+++ b/utils/misc.go
@@ -36,6 +36,7 @@ import (
 const (
 	DEFAULT_HTTP_TIMEOUT = 30
 	DEFAULT_PROJECT_PATH = "."
+	HTTP_FILE_EXTENSION  = "http"
 	// name of manifest and deployment files
 	ManifestFileNameYaml   = "manifest.yaml"
 	ManifestFileNameYml    = "manifest.yml"
@@ -154,26 +155,6 @@ func (zw *ZipWritter) Zip() error {
 	return nil
 }
 
-func deleteKey(key string, keyValueArr whisk.KeyValueArr) whisk.KeyValueArr {
-	for i := 0; i < len(keyValueArr); i++ {
-		if keyValueArr[i].Key == key {
-			keyValueArr = append(keyValueArr[:i], keyValueArr[i+1:]...)
-			break
-		}
-	}
-
-	return keyValueArr
-}
-
-func addKeyValue(key string, value interface{}, keyValueArr whisk.KeyValueArr) whisk.KeyValueArr {
-	keyValue := whisk.KeyValue{
-		Key:   key,
-		Value: value,
-	}
-
-	return append(keyValueArr, keyValue)
-}
-
 func GetManifestFilePath(projectPath string) string {
 	if _, err := os.Stat(path.Join(projectPath, ManifestFileNameYaml)); err == nil {
 		return path.Join(projectPath, ManifestFileNameYaml)
diff --git a/utils/misc_test.go b/utils/misc_test.go
index d4841e23..72d518b0 100644
--- a/utils/misc_test.go
+++ b/utils/misc_test.go
@@ -20,6 +20,7 @@
 package utils
 
 import (
+	"github.com/apache/incubator-openwhisk-wskdeploy/dependencies"
 	"github.com/stretchr/testify/assert"
 	"os"
 	"testing"
@@ -44,31 +45,19 @@ func TestURLReader_ReadUrl(t *testing.T) {
 }
 
 func TestDependencies(t *testing.T) {
-	var record = NewDependencyRecord("projectPath", "packageName", "http://github.com/user/repo", "master", nil, nil, false)
+	var record = dependencies.NewDependencyRecord("projectPath", "packageName", "http://github.com/user/repo", "master", nil, nil, false)
 	assert.Equal(t, "projectPath", record.ProjectPath, "ProjectPath is wrong")
 	assert.Equal(t, "http://github.com/user/repo", record.Location, "URL is wrong")
 	assert.Equal(t, "http://github.com/user/repo", record.BaseRepo, "BaseRepo is wrong")
 	assert.Equal(t, "", record.SubFolder, "SubFolder is wrong")
 
-	record = NewDependencyRecord("projectPath", "packageName", "http://github.com/user/repo/subfolder1/subfolder2", "master", nil, nil, false)
+	record = dependencies.NewDependencyRecord("projectPath", "packageName", "http://github.com/user/repo/subfolder1/subfolder2", "master", nil, nil, false)
 	assert.Equal(t, "projectPath", record.ProjectPath, "ProjectPath is wrong")
 	assert.Equal(t, "http://github.com/user/repo/subfolder1/subfolder2", record.Location, "URL is wrong")
 	assert.Equal(t, "http://github.com/user/repo", record.BaseRepo, "BaseRepo is wrong")
 	assert.Equal(t, "/subfolder1/subfolder2", record.SubFolder, "SubFolder is wrong")
 }
 
-func TestParseOpenWhisk(t *testing.T) {
-	openwhiskHost := "https://openwhisk.ng.bluemix.net"
-	openwhisk, err := ParseOpenWhisk(openwhiskHost)
-	assert.Equal(t, nil, err, "parse openwhisk info error happened.")
-	converted := ConvertToMap(openwhisk)
-	assert.Equal(t, 2, len(converted["nodejs"]), "not expected length")
-	assert.Equal(t, 1, len(converted["php"]), "not expected length")
-	assert.Equal(t, 1, len(converted["java"]), "not expected length")
-	assert.Equal(t, 3, len(converted["python"]), "not expected length")
-	assert.Equal(t, 1, len(converted["swift"]), "not expected length")
-}
-
 func TestNewZipWritter(t *testing.T) {
 	filePath := "../tests/src/integration/zipaction/actions/cat"
 	zipName := filePath + ".zip"
diff --git a/utils/webaction.go b/webaction/webaction.go
similarity index 89%
rename from utils/webaction.go
rename to webaction/webaction.go
index 64fe346c..b339eaeb 100644
--- a/utils/webaction.go
+++ b/webaction/webaction.go
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package utils
+package webaction
 
 import (
 	"github.com/apache/incubator-openwhisk-client-go/whisk"
@@ -39,6 +39,26 @@ var webExport map[string]string = map[string]string{
 	"RAW":   "raw",
 }
 
+func deleteKey(key string, keyValueArr whisk.KeyValueArr) whisk.KeyValueArr {
+	for i := 0; i < len(keyValueArr); i++ {
+		if keyValueArr[i].Key == key {
+			keyValueArr = append(keyValueArr[:i], keyValueArr[i+1:]...)
+			break
+		}
+	}
+
+	return keyValueArr
+}
+
+func addKeyValue(key string, value interface{}, keyValueArr whisk.KeyValueArr) whisk.KeyValueArr {
+	keyValue := whisk.KeyValue{
+		Key:   key,
+		Value: value,
+	}
+
+	return append(keyValueArr, keyValue)
+}
+
 func WebAction(filePath string, action string, webMode string, annotations whisk.KeyValueArr, fetch bool) (whisk.KeyValueArr, error) {
 	switch strings.ToLower(webMode) {
 	case webExport["TRUE"]:
diff --git a/wskderrors/wskdeployerror.go b/wskderrors/wskdeployerror.go
index baa39560..978d1d37 100644
--- a/wskderrors/wskdeployerror.go
+++ b/wskderrors/wskdeployerror.go
@@ -64,6 +64,7 @@ const (
 	ERROR_YAML_INVALID_RUNTIME            = "ERROR_YAML_INVALID_RUNTIME"
 	ERROR_YAML_INVALID_WEB_EXPORT         = "ERROR_YAML_INVALID_WEB_EXPORT"
 	ERROR_YAML_INVALID_API_GATEWAY_METHOD = "ERROR_YAML_INVALID_API_GATEWAY_METHOD"
+	ERROR_RUNTIME_PARSER_FAILURE          = "ERROR_RUNTIME_PARSER_FAILURE"
 )
 
 /*
@@ -436,6 +437,21 @@ func NewInvalidAPIGatewayMethodError(fpath string, api string, method string, su
 	return err
 }
 
+/*
+ * Failed to Retrieve/Parse Runtime
+ */
+type RuntimeParserError struct {
+	WskDeployBaseErr
+}
+
+func NewRuntimeParserError(errorMsg string) *RuntimeParserError {
+	var err = &RuntimeParserError{}
+	err.SetErrorType(ERROR_RUNTIME_PARSER_FAILURE)
+	err.SetCallerByStackFrameSkip(2)
+	err.SetMessage(errorMsg)
+	return err
+}
+
 func IsCustomError(err error) bool {
 
 	switch err.(type) {
diff --git a/wski18n/i18n_ids.go b/wski18n/i18n_ids.go
index 4d519089..dc978720 100644
--- a/wski18n/i18n_ids.go
+++ b/wski18n/i18n_ids.go
@@ -199,6 +199,7 @@ const (
 	ID_ERR_ARG_MISSING_KEY_VALUE_X_arg_X                                 = "msg_err_arg_missing_key_value"
 	ID_ERR_INVALID_PARAM_FILE_X_file_X                                   = "msg_err_invalid_param_file"
 	ID_ERR_REQUIRED_INPUTS_MISSING_VALUE_X_inputs_X                      = "msg_err_required_inputs_missing_value"
+	ID_ERR_RUNTIME_PARSER_ERROR                                          = "msg_err_runtime_parser_error"
 
 	// Server-side Errors (wskdeploy as an Action)
 	ID_ERR_JSON_MISSING_KEY_CMD = "msg_err_json_missing_cmd_key"
diff --git a/wski18n/i18n_resources.go b/wski18n/i18n_resources.go
index 34596187..eb033ff0 100755
--- a/wski18n/i18n_resources.go
+++ b/wski18n/i18n_resources.go
@@ -97,7 +97,7 @@ func wski18nResourcesDe_deAllJson() (*asset, error) {
 	return a, nil
 }
 
-var _wski18nResourcesEn_usAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x5b\x5f\x6f\x1b\x39\x92\x7f\xcf\xa7\x28\x0c\x0e\x98\x19\x40\x91\x33\x7b\x38\xe0\x10\x20\x0f\xb9\xc4\xd9\xf5\x6d\x12\x07\x76\xbc\xc1\x22\x67\xb4\xa9\xee\x92\xc4\x55\x37\xd9\x43\xb2\xa5\x68\x0c\x7d\xf7\x43\x15\xc9\xee\x96\xac\xfe\x23\x25\x73\x97\x97\x48\x26\x59\xf5\xab\x62\xb1\x58\x7f\xa8\xaf\xcf\x00\x1e\x9f\x01\x00\xfc\x24\xb3\x9f\x5e\xc2\x4f\x85\x5d\x24\xa5\xc1\xb9\xfc\x96\xa0\x31\xda\xfc\x34\xf1\xa3\xce\x08\x65\x73\xe1\xa4\x56\x34\xed\x92\xc7\x9e\x01\xec\x26\x3d\x14\xa4\x9a\xeb\x0e\x02\x57\x34\x34\xb4\xde\x56\x69\x8a\xd6\x76\x90\xb8\x0d\xa3\x43\x54\x36\xc2\x28\xa9\x16\x1d\x54\xbe\x84\xd1\x4e\x2a\x69\x91\x25\x19\xda\x34\xc9\xb5\x5a\x24\x06\x4b\x6d\x5c\x07\xad\x1b\x1e\xb4\xa0\x15\x64\x58\xe6\x7a\x8b\x19\xa0\x72\xd2\x49\xb4\xf0\x8b\x9c\xe2\x74\x02\x9f\x44\xba\x12\x0b\xb4\x13\x78\x9d\xd2\x3a\x3b\x81\xcf\x46\x2e\x16\x68\xec\x04\x6e\xaa\x9c\x46\xd0\xa5\xd3\x5f\x41\x58\xd8\x60\x9e\xd3\xff\x06\x53\x54\x8e\x57\xac\x99\x9b\x05\xa9\xc0\x2d\x11\x6c\x89\xa9\x9c\x4b\xcc\x40\x89\x02\x6d\x29\x52\x9c\x8e\x96\x45\xeb\x2e\x49\x5e\x83\xd3\x3a\x07\xa7\x83\x20\x13\xa8\x94\xff\x04\x42\x65\x60\xb7\x2a\x05\x5d\xa2\xda\x2c\xa5\x5d\x41\x19\x64\x82\xca\x4a\xb5\x00\x01\x85\x50\x72\x8e\xd6\xf1\x64\x5d\x12\x55\x91\x07\x52\x05\x49\x32\x97\x79\x3d\xfd\x9f\xaf\x3f\xbc\x1f\x83\xd9\x2e\xb5\x71\xfd\x1b\xf0\xc9\xe8\xb5\xcc\xd0\x82\x00\x5b\x15\x85\x30\x5b\xf0\xf3\x41\xcf\x61\xb3\x14\xee\x67\x0b\x33\xc4\xd6\xf6\x7c\x9f\x1a\x03\xa4\x41\x3d\x5a\x74\xa4\xcb\x25\xe6\x65\x60\x0d\x5b\x5d\x99\x51\x2a\x24\x55\x8d\xc7\xb2\x46\x63\x89\x77\x97\x7e\xa4\x72\x2c\x70\x98\x07\xaa\x2a\x66\x68\x58\x3d\x76\xe5\xa1\x8d\xe6\x45\x56\x30\x68\x3f\x6c\x2a\x2c\xec\x75\x89\xea\xcb\xbe\xb0\x33\x74\x1b\xda\x8e\x34\x97\x64\x15\x6c\x5a\x68\xd6\x68\x46\xdb\xf0\x78\x0c\x2d\xeb\x23\x3e\xd1\x9e\xf9\x0f\x7a\xfe\x7f\x69\xcd\xf3\x5c\x2c\x12\x51\xca\x64\xa9\x6d\x97\xe1\x78\x28\xaf\x3f\x5d\xc1\xc3\xdf\xae\x6f\x3f\x3f\x8c\xa4\xd8\xbf\xfd\x2d\xa2\xff\xb8\xbc\xb9\xbd\xba\xfe\x38\x8a\x6e\xe5\x96\xc9\x0a\xb7\x1d\x44\x69\x58\x1b\xf9\x07\xff\x01\x1e\xfe\x7e\xf9\xcf\x31\x44\x53\x34\x2e\x21\xbd\x75\x50\x2d\x85\x5b\xd2\xb6\x90\xad\x4e\x69\x32\x2b\x79\x0c\x61\xad\xe6\xb2\xcb\xd9\xfb\x41\x26\x05\xbf\x64\x38\x17\x55\xee\x40\x5a\xf8\xb7\xbf\x5d\x7f\xb8\xbc\x98\x6e\xec\xaa\x34\xba\xb4\xbf\x8e\xd1\x4a\x9e\xeb\x4d\x12\x68\x74\x5d\x51\x3c\x09\xea\x49\xc3\x54\x1b\xa3\xea\xd3\x4b\xed\x96\x6b\xeb\x1b\x41\xba\x34\xb8\x96\xb8\xe9\xa0\x6b\x97\x0c\x34\x12\xbd\xd8\x3b\x1e\x65\x2e\xd4\x08\x0e\x2b\xdc\x8e\xde\xd2\x15\x6e\xc7\x02\xf7\x9a\x2e\x84\x12\x0b\xcc\x7a\x15\x5d\x1a\xfd\x2f\x4c\x5d\x73\xe7\x3a\x0d\x33\x84\x42\x98\x15\x66\x10\x29\x8c\x51\x15\xd3\x49\xe8\x2e\xe8\x12\x26\xb0\xe2\x29\xc3\x14\xa3\x0b\x19\xd8\xd5\x3d\xa7\x3f\x82\x6c\x7d\x59\x75\xd0\x6d\xc6\x47\x0b\x3d\x80\xd0\xbb\xe7\x1c\xad\x8d\xda\x1e\x41\xda\x3a\x23\x3b\x29\xfb\xad\xab\x2c\x1a\x3a\x28\x52\x61\x06\xa6\x52\x4e\x16\xf5\x25\x35\x82\x83\x33\xdd\x4a\xe0\x31\xd0\x95\x2b\xab\x31\x60\xbd\xb9\xad\xd1\xcc\xb4\xed\x22\x19\x46\x4f\x25\x5a\x0a\x23\x8a\x4e\x05\x1b\x51\xa0\x43\x03\x6b\x91\x57\xc8\x01\x1e\x39\x53\xf8\xc7\xeb\xf7\x77\x97\x0f\x30\xd7\xa6\x10\x27\xb2\xea\x3b\x8d\x0f\xef\xae\xde\x5f\x3e\x40\xaa\x95\x13\x92\x22\x60\x38\x86\xe0\xbf\x6f\xaf\x3f\x0e\xb3\x66\xaf\x9a\x14\xd2\xd2\x0d\xc8\xf7\x45\xf7\x75\xf1\x79\x89\x40\x33\xe8\x8c\xa6\xfe\xce\x20\x5f\x20\x2d\x28\xed\xc0\x93\xaa\x0c\x66\xd3\xff\xe9\xdb\xf7\x03\x8e\xa5\xec\xb9\x4a\x89\x23\xdd\x79\x34\xe5\xfb\xf8\x0c\x1d\x37\xe2\x54\xcf\x39\x8f\x55\x10\xa5\x2f\x75\x3a\x94\xe7\xeb\xe3\xe3\x94\x3e\xef\x76\xf7\x13\x98\x1b\x5d\xc0\xe3\xe3\xd4\xea\xca\xa4\xb8\xdb\x8d\xe2\xe9\x37\x6c\x88\x27\x4d\x8b\x7b\x65\xd1\x9d\xc7\xab\x56\xcf\x10\xb7\x3d\x3d\x92\x88\xf5\x1f\xce\x97\xb3\x94\x8b\x4d\x22\x38\x6b\x4c\x9c\x5e\xa1\x1a\x14\x99\x56\x80\x5f\x01\xbc\xe2\x3c\xe1\x2b\x55\x08\x63\x97\x22\x4f\x72\x9d\x8a\xbc\x83\xe3\x5d\x9c\xd5\x0a\x95\x83\x2b\xb4\x9e\x1f\xaf\x0e\xc7\x73\x24\x43\x85\x6e\xa3\xcd\xea\x6c\x96\x52\x39\x34\x0a\x1d\x08\x47\xe2\x56\x26\x1f\x90\xb5\x89\x1b\x92\x54\xa8\x14\xf3\xbc\xf3\xd6\xbe\xfe\xfb\x14\xde\xf8\x39\xe4\x80\x9a\x95\x63\x19\xcc\x85\xec\xa6\xfe\xb6\x09\x60\x32\x99\x85\xb3\x58\x94\x39\x3a\x04\x5b\xd1\x96\xce\xab\x3c\xdf\x4e\xe1\xa6\x52\xf0\x50\xa7\x3f\x75\x66\xf0\x40\xf7\x9d\xc1\x42\xaf\x91\x7c\xa3\x93\x22\xcf\xb7\x4d\xe6\x28\xac\x45\xd7\xbf\x0b\x2d\xa4\x3e\x0d\x4d\xac\x13\xae\xea\x8a\x16\x9f\x3f\x7f\xfe\xfc\xd5\xab\x57\xaf\x5a\x7b\xd1\x92\xe1\x96\x97\x02\x4d\xa0\x89\xa3\xb8\x72\x01\x05\xb3\x31\x2a\x8a\xaa\xc9\x20\x54\x5d\xbc\x72\xfa\x8d\xec\xfc\xbd\x6e\xaf\x1d\xcf\xa4\x77\xbf\xef\xda\x21\x6b\xef\x8e\x8f\xe6\x37\xa4\xbf\x3d\x96\x67\x68\x30\xd5\x45\x21\x54\x96\x70\xea\xc8\xb7\x35\x79\xb9\x44\xb8\x84\xe2\xad\x0e\xa6\x8f\x8f\xd3\xb4\xc8\x76\xbb\x90\x70\x3e\x3e\x4e\x69\xa1\xdb\x96\xb8\xdb\xb1\xa7\xa4\xb5\xbb\xdd\xfd\x74\xda\xcb\x9b\x83\xe4\x6d\x12\xed\x79\xa0\xd8\xf6\xf8\x48\x21\x7b\x60\x40\x20\x77\xbb\x7b\x58\x8a\x50\x4e\x69\x0b\x5c\x9f\x90\xf1\xdc\xbb\xab\x73\x6f\xe3\x38\x1c\x05\x30\x9d\xf6\xa4\xda\x81\x45\xdc\xd0\x1f\x29\x62\x43\x73\x8c\x90\x71\x76\xb7\x98\x77\xcd\x8c\xa3\x82\xf6\xca\x99\x61\x89\x2a\x43\x95\x9e\xa2\xce\x66\xd1\xf9\x7c\x9a\x23\xd2\xa9\xd3\xb7\x47\xd9\x7c\x8f\xe1\x1c\x47\x41\x8e\xa1\x32\x5d\x71\xd9\xdb\xbd\x4a\xcf\x71\xd1\xff\x1f\xef\x88\x28\xcf\x69\x76\xf2\x7d\x3b\xf8\xd4\xcd\xfd\x98\x3d\x1c\x79\x32\xba\x90\xf4\xef\xe3\xdd\x41\xcd\xee\x9c\x9d\xec\x43\x15\x2a\x04\xe7\xde\x39\x8c\xc8\xdf\x00\x75\x05\xa2\x0f\x0b\x64\x95\xa1\x9d\x0c\x6c\xdb\xf1\xcf\x9f\x67\x6f\x51\xc6\xb9\xae\x54\x96\x04\xbc\xc1\x53\x75\x1a\x40\x8e\xae\xd3\x07\x6f\x96\x32\x5d\xc2\x86\xbb\x14\x84\x2b\xf3\x71\xa3\x5b\x22\xa4\x95\x31\xa4\x98\x28\x60\x2c\x9a\xf0\x25\xe5\x3f\x13\x05\x61\x59\x16\xd2\xdf\xe8\xb0\x20\xd4\xd4\x92\x50\xac\xed\xaa\x77\xfb\x51\x4e\x26\xa0\x55\xef\x33\xc8\x75\x8c\x6c\x02\x22\x6f\x87\xbe\xf5\xb6\x11\x0e\x53\xaf\x08\x4c\x40\x18\xac\x75\x7d\xd1\x58\x3a\x64\xd2\x60\xea\x82\xf5\x1b\x5f\xed\x1e\xea\x23\x5c\xde\xdc\x5c\xdf\xdc\x76\xe0\x7e\x75\xf8\x0f\xfc\x74\x78\x32\xf0\xea\x55\xcf\xf5\x63\xcc\xfe\x41\x5b\x29\xbd\x51\x09\x45\x0a\xc3\x47\x9d\x66\x91\xaa\xc2\xaa\x29\x34\x0d\x02\xd0\x2a\xdf\x82\xad\x4a\xdf\xed\xba\xe0\xb2\xf2\xd4\x6e\xad\xc3\x02\x66\x52\x65\x52\x2d\x2c\x68\x03\x0b\xe9\x96\xd5\x6c\x9a\xea\xa2\x2e\xaa\xf7\xdf\x97\xc6\xc4\x3b\x33\x35\x28\x5c\x17\x4c\xee\x3e\x02\x4f\xd9\x33\xcb\x8d\x74\x4b\xe0\xb6\x25\x14\x68\xad\x58\xe0\x4b\x1a\x44\x63\x76\x3b\x2e\xde\xfb\xb1\x54\x67\x7e\x80\x3e\x0c\x64\x33\x2d\x48\xfe\xac\xf4\x42\xca\x9e\x9c\x94\x3f\x09\xd2\x1c\x31\x4b\xa4\x5a\xeb\x55\x17\xa0\x77\xec\xb6\xc8\x5d\xf8\x69\x7c\x20\x69\x19\x6c\x96\xdc\x00\x0b\x48\x9d\x6f\x3e\x86\xa1\x3f\x07\xed\x0a\xb7\x75\x0d\x85\xe2\x5d\xe1\xb4\xe9\xab\x0f\xd5\x73\xb8\xdc\xf0\x35\x2a\xf3\x9e\xec\x31\xd0\x19\xe4\x19\x4b\xa9\x89\xd2\xce\x3b\xbb\x0e\x86\x1f\xda\x35\x57\xf6\xd5\x3c\x9b\xf2\x5d\x2e\x7a\xb6\x23\xea\x21\xa6\x1c\xbd\x17\xd2\x16\xc2\xa5\x5d\xe1\x3b\x09\x58\x9b\x07\x2d\xc8\x98\x45\x16\xfd\xa9\x54\x87\xc5\x7d\x3f\x1e\x30\x40\xa6\xd1\x17\x96\x98\x09\x6f\x2b\xbb\x37\x9a\x54\xb4\x88\xec\xd5\x92\xfd\x68\x14\xa3\x5f\x88\x90\xff\x93\x79\x89\x5c\x76\xa9\xed\xca\x8f\xd2\x31\x0f\x5b\x52\x97\x6d\x89\x57\xf8\x4c\x58\x9a\xde\xea\x1e\x2a\x6d\x18\xbb\xe0\x2e\x38\xaf\xf1\x1f\xc7\xe8\x39\x42\x1c\x50\xf5\xcd\x29\x80\x0e\xf4\xca\x47\xc1\x23\xfa\xd9\x82\xaf\xf2\x78\x55\xe2\x37\x87\xca\x46\xd0\xf8\x8d\xef\x30\x12\xe7\x7b\x44\xb1\xc9\x02\xbb\x0a\x98\xcd\x51\x5e\xa0\xef\xde\x06\xdf\xdb\x94\xca\x43\xb1\xa6\xb9\xc9\xe8\x7e\x93\x69\xeb\xf8\x8e\xd6\xa9\x87\x9e\x78\x89\xf9\xf4\xd4\xdc\x3a\xf0\xed\x09\xcc\x71\x21\xa9\xb1\xd1\xb2\x50\xdb\xda\x36\xc8\x89\xb4\xb6\x7d\x50\xaf\xa1\x88\x5a\x43\x18\x14\xa3\x32\xf9\xe9\x96\xeb\x0b\x5b\x21\x85\xbe\xbb\x79\xcf\x08\xb8\xd4\xc5\x47\xe9\xeb\x5e\x8e\x7d\xef\x5b\xf2\x63\x80\x14\x22\x9f\x6b\x53\x74\x6a\xee\x43\x1c\xef\x43\x30\x85\xcf\x66\x0b\x62\x21\xa4\x1a\x4a\xe9\x8d\x49\xfe\x65\xb5\xaa\x9d\x6d\x5a\x64\x3d\x9d\x5b\x2e\xee\x4b\x55\x56\x0e\x32\xe1\x04\x7c\x08\xda\xf8\x39\x2d\xb2\x9f\xc9\xf5\xf6\x73\x12\xa5\x6c\x2a\xf0\xde\x68\xb4\x49\x2c\xfe\x5e\xa1\xea\x2c\x91\xfb\x47\x2f\x17\xb7\x61\xd6\xfe\x61\x69\xf9\x77\x6f\xcf\x7b\x3e\x6c\xc2\x55\x6f\x5e\x50\x4a\x9a\x9d\x0a\xe5\x43\x91\x19\xfa\x60\x00\x33\x98\x09\x8b\x19\x68\xd5\x32\xb2\x8b\x08\xe9\x08\xcd\x29\x7c\xca\x51\x58\x84\xaa\xcc\x84\xc3\x03\xa7\xc9\x97\x67\x9a\x57\xd9\x21\x4e\x61\x41\xc0\x06\x67\x87\x1c\x06\x77\x27\xe8\xa9\xdf\x40\x5f\x1f\xf1\x23\xa4\x9a\xb0\x6a\x0a\x57\xce\x67\x5f\xda\x2d\xf9\x2e\xe6\x53\x35\xaf\x54\x38\x53\xf1\xe0\x4d\xbc\x76\xb4\xc2\xd0\x76\x2d\x88\x0a\x7e\x2b\x31\x1d\x73\x92\x02\xd6\xb8\xc5\xd1\x3f\x90\x63\x4c\x88\xeb\x77\xa2\x67\xe0\x8d\x93\x20\xb2\xba\x72\x6d\x67\x31\x85\x2f\x8d\x13\x8e\xae\x82\x96\x4d\x6a\x77\x42\x06\x13\x83\x85\x81\x6b\x2d\x88\x13\xd5\x94\x50\xb6\xe2\x30\xc9\xa4\x19\xe5\xe4\x8e\x8a\x45\x72\xd4\x7a\x2f\xb5\x54\x3e\xa4\xf2\x29\x9a\xc3\x90\x18\x50\x20\xd3\x1c\xe7\x09\xa5\x80\x51\x2a\xcb\x39\xc5\xbe\x87\xeb\x17\x23\x15\x94\xb0\x8b\x35\x26\x99\x4e\x57\xd8\xf5\x40\xef\x8d\x50\x4c\x55\xac\x11\xde\xf2\x44\x90\x05\x07\xe0\x03\x81\xa5\xcc\x31\x11\xb9\x41\x91\x6d\x13\xfc\x26\x6d\xe7\xdb\x86\x77\x74\x42\xc2\x4c\xf0\x33\x07\x68\x67\x72\x3e\x47\x4a\x08\x9b\xac\x44\xa2\xf5\x06\x65\x29\x72\xca\xc5\x0c\xbb\x9a\x23\xd7\x0a\x81\xec\x30\xc7\xc3\xb4\xbf\xf9\x1a\xb7\xc4\x6d\x34\xd4\xcc\xb8\x69\xe2\x75\x4d\xb3\xe3\x37\xef\x58\x97\xd2\xc2\x4a\xaa\x8c\x0e\x48\xb0\xc5\xd0\x94\x7c\x72\xf1\x1c\x78\x0a\xf2\x2f\x2d\x20\x0c\xfd\x08\x9c\xf0\xbe\xec\x89\x5f\x61\x63\xe1\x86\x3a\xc5\x6e\x11\x14\xc4\xb4\x06\x59\x06\x8b\xa5\x30\xf4\x85\xa9\x5b\x1f\x33\x1d\x97\x6d\x9c\xf1\x87\x43\x96\x90\xc8\xa7\xda\xb9\xd2\x5e\x53\x16\xdd\x69\xcc\x4e\xf5\x15\x81\x59\xeb\xbc\x0f\xf0\x8b\xde\x37\x59\x8a\x35\x79\x2a\xb6\x25\x5f\x48\xb7\x01\x4c\xd7\x13\xd2\xf6\x35\x14\xc9\x04\x7f\x15\x4d\x3b\x3e\x4a\x20\x9f\xaf\xa2\x33\xf2\x89\x3e\x87\x62\xb4\x7f\x21\xbb\x9d\xc6\x37\x9d\xe1\x25\x9b\xa7\x67\xf9\xa2\x22\x63\x5a\xd2\x69\xe4\x05\x1c\xb1\x4b\x05\x22\xda\x74\xa4\x30\x70\xf8\xb5\x9a\xe7\x32\x25\x2f\x93\x84\xc4\x8d\x24\x34\xda\xda\x58\x09\xe9\x3a\xae\xad\xf3\x13\x53\x3e\x12\x3a\x7c\x0e\x32\x47\x59\x39\xf8\x2d\xaa\xdc\xc9\x32\xf7\x59\xa3\x3f\x3c\xf4\x29\x44\x24\x9e\x39\xbb\xaf\x78\xf7\x1e\x94\x41\x5c\xbb\x8b\x3b\x01\xe9\xfc\x89\x2a\xb5\xb5\x72\xe6\x4f\x01\x2b\x24\x0a\xe2\xb9\x36\xea\x99\x51\x5c\x52\x5b\x3a\x83\x78\x72\x08\x83\x24\xcc\xe6\x49\xd2\x73\x82\x32\x4d\x95\xe3\x19\x9a\xa4\x65\x21\xbb\xc8\xf1\x98\x0e\x1b\xfc\xd1\xdf\x1f\x04\x12\x2a\xbb\xa0\x43\x1d\x55\xb0\xbf\x25\x53\xff\x20\xf8\x47\x28\x99\x05\x3c\xa6\x61\x61\xad\x4e\x25\x93\x3e\x8e\xf8\x22\x82\x3b\x54\x3e\x0b\x7f\x96\xe6\x85\x69\xde\x54\x70\x33\xbb\xf3\x05\x67\x68\x90\x41\x2e\x15\x82\x30\x8b\x8a\x93\x62\x52\xa1\x59\xec\x76\xed\x78\x91\xe9\x4c\xa0\xf4\x10\xbd\x2f\xdf\xb2\x3e\x78\xe4\x04\x44\x2b\xdc\xfe\x30\x54\x2b\xdc\x5e\x30\x2d\x28\x85\x34\x4f\xe0\xed\x0f\xb3\x7f\xc7\x6f\xa2\x28\x29\xd8\xad\xc9\xad\x70\x3b\x4a\x86\x10\x60\x0d\x3f\xfd\xe9\x12\xe0\x97\xc8\xf2\x57\xf6\xc1\x81\x9e\x7f\x17\xe4\x2f\xae\xba\x14\x32\xf1\x05\xc9\x56\x7a\x19\x8d\x23\x8a\x26\xc0\xaf\xe6\x24\xa3\x21\x31\x54\x7b\xc0\xdf\x2b\x69\xb8\xb6\x55\x56\xce\x8e\xb2\x92\x9b\xb0\xc6\xa7\x32\xfe\xb4\xec\x59\x85\x05\x5c\xa3\x02\x31\x77\x68\x40\x94\x65\xce\xfd\x13\x7e\xd8\x50\x6a\x4f\x27\xf4\x52\x51\xad\xa7\xb0\x16\x46\x8a\x59\x8e\x8d\xc1\x5b\x74\x35\xc5\xfd\x29\xf1\x00\xfb\x2c\xaa\x79\x37\x15\x4f\xc3\xc5\x61\x29\x47\x1b\x4a\x4e\xde\xbc\xbf\xe2\xcd\x9e\xeb\x3c\xd7\x1b\x8f\x86\xb0\xb3\x3e\xfd\xc7\xdd\x2e\x68\xea\x50\x55\x5f\x5e\xdf\x7c\xbc\xfa\xf8\xd7\xf1\xa5\xe3\xb8\xe0\xb4\xe2\xf1\x46\x18\x55\xf7\xa7\x0d\xba\xce\x82\xdd\x0d\x8d\x91\x08\x5f\x63\x63\xfa\x3e\xa8\x9a\x8b\x85\x2f\x7d\x36\x4f\x36\x72\xdf\x97\x71\x04\x7e\xfc\x50\xe7\xe4\xfc\xbd\xfd\xae\xb7\x55\xaf\x83\x0c\xdd\x70\xae\xc3\x9c\xe9\xd0\x67\x58\x1a\x4c\xc9\x15\x26\x06\xcb\x5c\xa4\x9d\xc9\xc0\xe7\xa5\xe7\xa3\xf3\x2c\x54\x26\xf9\x5d\x94\x8f\xf5\xf6\x1b\xf2\x1b\x99\xe7\x60\xb5\x56\x94\xa5\x36\x1c\x6a\x57\x50\x59\x1f\x4b\x72\x4b\x05\x37\x7b\xe4\xac\x43\x31\x12\x7b\xd0\xc4\x39\x45\x55\xbb\xd4\x55\x9e\x11\x3c\x0a\xed\xe0\xce\xfa\xee\xa2\x6f\x7d\x78\xef\x44\xb3\xf9\xd3\xf0\xb3\x82\x1a\x11\xcf\x1f\xd8\x4a\xc2\xe5\x39\xd0\x69\x78\x5a\xec\xa5\xab\xcc\x67\x8d\x27\xb0\xe4\x6c\x4e\xac\x7b\x37\x6f\x88\x29\xaf\x8f\x1b\x1a\xdb\x58\xf1\x37\x13\xed\x1f\x4b\x0c\x03\xcb\x65\x21\x5d\x22\x17\x4a\x9b\x4e\x48\xd1\xa4\x43\x74\xc9\x4b\x7c\xb6\x42\x9f\x0e\x0b\xba\x94\x4c\x7b\x72\x63\xb9\xa7\x4b\xa1\x16\x48\x1e\xab\x03\xc0\xfb\x9a\x63\x5d\x41\xb6\x51\xee\x7c\xeb\x3b\x98\x35\x8d\x29\x5c\x11\x7b\xa9\x16\x63\x6c\x81\x11\xd8\x24\xd7\x8b\xc4\xca\x3f\xba\x00\xe4\x7a\x71\x2b\xff\xe0\x42\x85\x5f\xb0\x27\x71\x63\xa2\x42\xb1\xe3\xa6\xa0\x2f\xfe\x78\xe4\x05\x47\xdb\xbf\xbd\x18\x0d\xa5\xc0\x42\x9b\x6d\x1f\x1a\x3f\xe3\x5c\x40\xbf\xfd\xe5\x3f\x19\xd2\x7f\xfc\xf6\x97\xd1\x98\x9c\x2c\x50\x57\x5d\x15\xe0\x30\x7a\x16\x98\x17\x5e\x3f\xff\xfe\x82\xfe\x0d\xe3\xe1\x66\x5e\x52\x1a\x5d\xa2\x71\xb2\x33\x08\x8e\x1e\xb0\xe5\xaf\x7c\x0b\xd8\x19\x89\x75\x13\xd8\x77\x06\x1b\x62\xb1\x59\x7c\xdc\x27\x46\x97\x98\x69\x36\x38\xf2\x8c\xd2\x81\xae\x9c\x95\x19\x6f\xc4\x67\x23\xd6\xd2\xc2\xac\x92\x79\xd6\xdf\x49\x64\x51\xbc\x3b\x30\x64\xb6\xa3\x5c\x41\x6d\xfd\x7b\x0e\x41\x1d\x38\xf4\xa0\x6d\xee\x8f\x52\xb4\xee\xff\x1a\xd5\xfd\xf8\x38\x2d\xa4\x0a\xdd\x32\xfa\x22\xd2\x81\xda\x3b\x43\x8d\xc5\x35\x7f\xc8\xba\xdc\x44\xec\x67\x84\x59\x14\xdc\x1f\xb4\x36\x8e\x94\x3f\x3b\xbb\x17\x67\xb5\x2c\x18\x6d\x68\x88\x72\x8a\xdd\x5b\x23\x7a\xd2\xeb\xda\x73\x31\x07\xc5\xa3\x26\xda\xca\x31\x75\x20\x94\x76\xcb\x90\xdb\x0d\x43\x8a\x39\xdb\x60\xbb\xef\xf3\x93\x6a\x4c\x3b\x60\x08\xcf\xe1\x31\x03\xa5\xc7\xf5\xac\x99\x7b\xeb\xb9\x08\x2b\x65\x0c\x88\xa3\x8f\x29\xc2\x8d\x73\x18\x35\x6e\x42\x4f\xc5\x77\x26\x8f\xd5\x94\x46\x68\xa8\xf5\xa3\x96\x44\xaf\xd1\x18\x99\x65\xd8\x55\x19\x21\x84\xed\xdf\xb8\x34\xcf\x7d\x9a\xa5\x31\x56\x68\xbf\xe6\x18\xbb\x51\x89\xb4\x49\x59\xcd\x72\xd9\xf5\xeb\x3d\xbf\x2b\x3c\x37\x76\x06\xfc\xcf\x78\x84\x05\xbf\xf0\x49\xd6\x49\xe9\xaf\xf7\x2d\x33\x84\xb5\xf4\x09\x30\x9d\xc3\x54\xb0\xa7\xf1\xef\xb8\x31\x83\xd9\x16\x84\xda\x6a\xd5\xf3\xb3\x18\xc6\x1a\x0b\x59\x38\x4b\xf0\x1b\xbf\xdf\xed\xbf\xc6\x9f\xd6\xb1\xb8\x44\xcf\x8d\x02\x95\xd1\xff\xcf\x3d\x9d\x27\x35\x7a\x3a\x08\xa4\xca\x0d\xce\x26\xfe\x72\x0f\xdf\xc2\x82\x9e\xb4\xc9\x23\x6d\xf5\x62\x08\x6e\x6f\xd5\xab\xab\x42\x4f\x16\xd6\x6e\x6b\x8c\x6a\xb8\xf8\xc4\xa9\x59\x34\x85\x37\x5a\xad\xc9\xdd\x87\x94\xa0\x61\xe1\xf4\x1e\xf9\x61\x93\x3d\x94\x6a\xa0\xb7\xd4\x57\xcd\x6b\x64\x8b\x03\x27\x4a\x57\xb7\x78\x0e\xe5\x6b\x33\xaa\x25\x1c\x6c\x08\xbd\xbd\xfc\xaf\xbb\xbf\x8e\x4e\xe1\x78\xf6\x69\xf9\x5b\x36\x5b\x24\x16\x85\x49\x97\xa4\xbd\x78\xf8\xeb\x86\x44\xa7\x0a\xc3\x8a\xfa\xf0\xef\xb7\x30\xa2\x9f\xa4\xbb\xa3\xb9\x24\x07\xc2\x40\x82\x72\xe8\x21\x7f\xb4\x77\x3c\xd3\x33\x12\xb4\xfa\xea\xf0\x4f\xe2\x7a\x7e\xcd\xfd\xf6\xc8\xbb\x8c\xa0\x91\x97\xf0\x8e\x11\x34\x3f\x1e\xe6\xf2\x1c\x11\x3b\x15\x40\xff\x0f\xf1\x4e\xc7\xd0\x7e\x75\x17\x5f\x89\x06\x48\xcf\xee\x9f\xfd\x6f\x00\x00\x00\xff\xff\x8f\xdc\xdb\x56\x02\x42\x00\x00")
+var _wski18nResourcesEn_usAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xc4\x5b\x5f\x6f\x1b\x39\x92\x7f\xcf\xa7\x28\x0c\x0e\x98\x19\x40\x91\x33\x7b\x38\xe0\x10\x20\x0f\xb9\xc4\xd9\xf5\x6d\x12\x07\x76\xbc\xc1\x22\x67\xb4\xa9\xee\x92\xc4\x55\x37\xd9\x43\xb2\xa5\x68\x0c\x7d\xf7\x43\x15\xc9\xee\x96\xac\xfe\x23\x25\x73\x97\x97\x48\x26\x59\xf5\xab\x62\xb1\x58\x7f\xa8\xaf\xcf\x00\x1e\x9f\x01\x00\xfc\x24\xb3\x9f\x5e\xc2\x4f\x85\x5d\x24\xa5\xc1\xb9\xfc\x96\xa0\x31\xda\xfc\x34\xf1\xa3\xce\x08\x65\x73\xe1\xa4\x56\x34\xed\x92\xc7\x9e\x01\xec\x26\x3d\x14\xa4\x9a\xeb\x0e\x02\x57\x34\x34\xb4\xde\x56\x69\x8a\xd6\x76\x90\xb8\x0d\xa3\x43\x54\x36\xc2\x28\xa9\x16\x1d\x54\xbe\x84\xd1\x4e\x2a\x69\x91\x25\x19\xda\x34\xc9\xb5\x5a\x24\x06\x4b\x6d\x5c\x07\xad\x1b\x1e\xb4\xa0\x15\x64\x58\xe6\x7a\x8b\x19\xa0\x72\xd2\x49\xb4\xf0\x8b\x9c\xe2\x74\x02\x9f\x44\xba\x12\x0b\xb4\x13\x78\x9d\xd2\x3a\x3b\x81\xcf\x46\x2e\x16\x68\xec\x04\x6e\xaa\x9c\x46\xd0\xa5\xd3\x5f\x41\x58\xd8\x60\x9e\xd3\xff\x06\x53\x54\x8e\x57\xac\x99\x9b\x05\xa9\xc0\x2d\x11\x6c\x89\xa9\x9c\x4b\xcc\x40\x89\x02\x6d\x29\x52\x9c\x8e\x96\x45\xeb\x2e\x49\x5e\x83\xd3\x3a\x07\xa7\x83\x20\x13\xa8\x94\xff\x04\x42\x65\x60\xb7\x2a\x05\x5d\xa2\xda\x2c\xa5\x5d\x41\x19\x64\x82\xca\x4a\xb5\x00\x01\x85\x50\x72\x8e\xd6\xf1\x64\x5d\x12\x55\x91\x07\x52\x05\x49\x32\x97\x79\x3d\xfd\x9f\xaf\x3f\xbc\x1f\x83\xd9\x2e\xb5\x71\xfd\x1b\xf0\xc9\xe8\xb5\xcc\xd0\x82\x00\x5b\x15\x85\x30\x5b\xf0\xf3\x41\xcf\x61\xb3\x14\xee\x67\x0b\x33\xc4\xd6\xf6\x7c\x9f\x1a\x03\xa4\x41\x3d\x5a\x74\xa4\xcb\x25\xe6\x65\x60\x0d\x5b\x5d\x99\x51\x2a\x24\x55\x8d\xc7\xb2\x46\x63\x89\x77\x97\x7e\xa4\x72\x2c\x70\x98\x07\xaa\x2a\x66\x68\x58\x3d\x76\xe5\xa1\x8d\xe6\x45\x56\x30\x68\x3f\x6c\x2a\x2c\xec\x75\x89\xea\xcb\xbe\xb0\x33\x74\x1b\xda\x8e\x34\x97\x64\x15\x6c\x5a\x68\xd6\x68\x46\xdb\xf0\x78\x0c\x2d\xeb\x23\x3e\xd1\x9e\xf9\x0f\x7a\xfe\x7f\x69\xcd\xf3\x5c\x2c\x12\x51\xca\x64\xa9\x6d\x97\xe1\x78\x28\xaf\x3f\x5d\xc1\xc3\xdf\xae\x6f\x3f\x3f\x8c\xa4\xd8\xbf\xfd\x2d\xa2\xff\xb8\xbc\xb9\xbd\xba\xfe\x38\x8a\x6e\xe5\x96\xc9\x0a\xb7\x1d\x44\x69\x58\x1b\xf9\x07\xff\x01\x1e\xfe\x7e\xf9\xcf\x31\x44\x53\x34\x2e\x21\xbd\x75\x50\x2d\x85\x5b\xd2\xb6\x90\xad\x4e\x69\x32\x2b\x79\x0c\x61\xad\xe6\xb2\xcb\xd9\xfb\x41\x26\x05\xbf\x64\x38\x17\x55\xee\x40\x5a\xf8\xb7\xbf\x5d\x7f\xb8\xbc\x98\x6e\xec\xaa\x34\xba\xb4\xbf\x8e\xd1\x4a\x9e\xeb\x4d\x12\x68\x74\x5d\x51\x3c\x09\xea\x49\xc3\x54\x1b\xa3\xea\xd3\x4b\xed\x96\x6b\xeb\x1b\x41\xba\x34\xb8\x96\xb8\xe9\xa0\x6b\x97\x0c\x34\x12\xbd\xd8\x3b\x1e\x65\x2e\xd4\x08\x0e\x2b\xdc\x8e\xde\xd2\x15\x6e\xc7\x02\xf7\x9a\x2e\x84\x12\x0b\xcc\x7a\x15\x5d\x1a\xfd\x2f\x4c\x5d\x73\xe7\x3a\x0d\x33\x84\x42\x98\x15\x66\x10\x29\x8c\x51\x15\xd3\x49\xe8\x2e\xe8\x12\x26\xb0\xe2\x29\xc3\x14\xa3\x0b\x19\xd8\xd5\x3d\xa7\x3f\x82\x6c\x7d\x59\x75\xd0\x6d\xc6\x47\x0b\x3d\x80\xd0\xbb\xe7\x1c\xad\x8d\xda\x1e\x41\xda\x3a\x23\x3b\x29\xfb\xad\xab\x2c\x1a\x3a\x28\x52\x61\x06\xa6\x52\x4e\x16\xf5\x25\x35\x82\x83\x33\xdd\x4a\xe0\x31\xd0\x95\x2b\xab\x31\x60\xbd\xb9\xad\xd1\xcc\xb4\xed\x22\x19\x46\x4f\x25\x5a\x0a\x23\x8a\x4e\x05\x1b\x51\xa0\x43\x03\x6b\x91\x57\xc8\x01\x1e\x39\x53\xf8\xc7\xeb\xf7\x77\x97\x0f\x30\xd7\xa6\x10\x27\xb2\xea\x3b\x8d\x0f\xef\xae\xde\x5f\x3e\x40\xaa\x95\x13\x92\x22\x60\x38\x86\xe0\xbf\x6f\xaf\x3f\x0e\xb3\x66\xaf\x9a\x14\xd2\xd2\x0d\xc8\xf7\x45\xf7\x75\xf1\x79\x89\x40\x33\xe8\x8c\xa6\xfe\xce\x20\x5f\x20\x2d\x28\xed\xc0\x93\xaa\x0c\x66\xd3\xff\xe9\xdb\xf7\x03\x8e\xa5\xec\xb9\x4a\x89\x23\xdd\x79\x34\xe5\xfb\xf8\x0c\x1d\x37\xe2\x54\xcf\x39\x8f\x55\x10\xa5\x2f\x75\x3a\x94\xe7\xeb\xe3\xe3\x94\x3e\xef\x76\xf7\x13\x98\x1b\x5d\xc0\xe3\xe3\xd4\xea\xca\xa4\xb8\xdb\x8d\xe2\xe9\x37\x6c\x88\x27\x4d\x8b\x7b\x65\xd1\x9d\xc7\xab\x56\xcf\x10\xb7\x3d\x3d\x92\x88\xf5\x1f\xce\x97\xb3\x94\x8b\x4d\x22\x38\x6b\x4c\x9c\x5e\xa1\x1a\x14\x99\x56\x80\x5f\x01\xbc\xe2\x3c\xe1\x2b\x55\x08\x63\x97\x22\x4f\x72\x9d\x8a\xbc\x83\xe3\x5d\x9c\xd5\x0a\x95\x83\x2b\xb4\x9e\x1f\xaf\x0e\xc7\x73\x24\x43\x85\x6e\xa3\xcd\xea\x6c\x96\x52\x39\x34\x0a\x1d\x08\x47\xe2\x56\x26\x1f\x90\xb5\x89\x1b\x92\x54\xa8\x14\xf3\xbc\xf3\xd6\xbe\xfe\xfb\x14\xde\xf8\x39\xe4\x80\x9a\x95\x63\x19\xcc\x85\xec\xa6\xfe\xb6\x09\x60\x32\x99\x85\xb3\x58\x94\x39\x3a\x04\x5b\xd1\x96\xce\xab\x3c\xdf\x4e\xe1\xa6\x52\xf0\x50\xa7\x3f\x75\x66\xf0\x40\xf7\x9d\xc1\x42\xaf\x91\x7c\xa3\x93\x22\xcf\xb7\x4d\xe6\x28\xac\x45\xd7\xbf\x0b\x2d\xa4\x3e\x0d\x4d\xac\x13\xae\xea\x8a\x16\x9f\x3f\x7f\xfe\xfc\xd5\xab\x57\xaf\x5a\x7b\xd1\x92\xe1\x96\x97\x02\x4d\xa0\x89\xa3\xb8\x72\x01\x05\xb3\x31\x2a\x8a\xaa\xc9\x20\x54\x5d\xbc\x72\xfa\x8d\xec\xfc\xbd\x6e\xaf\x1d\xcf\xa4\x77\xbf\xef\xda\x21\x6b\xef\x8e\x8f\xe6\x37\xa4\xbf\x3d\x96\x67\x68\x30\xd5\x45\x21\x54\x96\x70\xea\xc8\xb7\x35\x79\xb9\x44\xb8\x84\xe2\xad\x0e\xa6\x8f\x8f\xd3\xb4\xc8\x76\xbb\x90\x70\x3e\x3e\x4e\x69\xa1\xdb\x96\xb8\xdb\xb1\xa7\xa4\xb5\xbb\xdd\xfd\x74\xda\xcb\x9b\x83\xe4\x6d\x12\xed\x79\xa0\xd8\xf6\xf8\x48\x21\x7b\x60\x40\x20\x77\xbb\x7b\x58\x8a\x50\x4e\x69\x0b\x5c\x9f\x90\xf1\xdc\xbb\xab\x73\x6f\xe3\x38\x1c\x05\x30\x9d\xf6\xa4\xda\x81\x45\xdc\xd0\x1f\x29\x62\x43\x73\x8c\x90\x71\x76\xb7\x98\x77\xcd\x8c\xa3\x82\xf6\xca\x99\x61\x89\x2a\x43\x95\x9e\xa2\xce\x66\xd1\xf9\x7c\x9a\x23\xd2\xa9\xd3\xb7\x47\xd9\x7c\x8f\xe1\x1c\x47\x41\x8e\xa1\x32\x5d\x71\xd9\xdb\xbd\x4a\xcf\x71\xd1\xff\x1f\xef\x88\x28\xcf\x69\x76\xf2\x7d\x3b\xf8\xd4\xcd\xfd\x98\x3d\x1c\x79\x32\xba\x90\xf4\xef\xe3\xdd\x41\xcd\xee\x9c\x9d\xec\x43\x15\x2a\x04\xe7\xde\x39\x8c\xc8\xdf\x00\x75\x05\xa2\x0f\x0b\x64\x95\xa1\x9d\x0c\x6c\xdb\xf1\xcf\x9f\x67\x6f\x51\xc6\xb9\xae\x54\x96\x04\xbc\xc1\x53\x75\x1a\x40\x8e\xae\xd3\x07\x6f\x96\x32\x5d\xc2\x86\xbb\x14\x84\x2b\xf3\x71\xa3\x5b\x22\xa4\x95\x31\xa4\x98\x28\x60\x2c\x9a\xf0\x25\xe5\x3f\x13\x05\x61\x59\x16\xd2\xdf\xe8\xb0\x20\xd4\xd4\x92\x50\xac\xed\xaa\x77\xfb\x51\x4e\x26\xa0\x55\xef\x33\xc8\x75\x8c\x6c\x02\x22\x6f\x87\xbe\xf5\xb6\x11\x0e\x53\xaf\x08\x4c\x40\x18\xac\x75\x7d\xd1\x58\x3a\x64\xd2\x60\xea\x82\xf5\x1b\x5f\xed\x1e\xea\x23\x5c\xde\xdc\x5c\xdf\xdc\x76\xe0\x7e\x75\xf8\x0f\xfc\x74\x78\x32\xf0\xea\x55\xcf\xf5\x63\xcc\xfe\x41\x5b\x29\xbd\x51\x09\x45\x0a\xc3\x47\x9d\x66\x91\xaa\xc2\xaa\x29\x34\x0d\x02\xd0\x2a\xdf\x82\xad\x4a\xdf\xed\xba\xe0\xb2\xf2\xd4\x6e\xad\xc3\x02\x66\x52\x65\x52\x2d\x2c\x68\x03\x0b\xe9\x96\xd5\x6c\x9a\xea\xa2\x2e\xaa\xf7\xdf\x97\xc6\xc4\x3b\x33\x35\x28\x5c\x17\x4c\xee\x3e\x02\x4f\xd9\x33\xcb\x8d\x74\x4b\xe0\xb6\x25\x14\x68\xad\x58\xe0\x4b\x1a\x44\x63\x76\x3b\x2e\xde\xfb\xb1\x54\x67\x7e\x80\x3e\x0c\x64\x33\x2d\x48\xfe\xac\xf4\x42\xca\x9e\x9c\x94\x3f\x09\xd2\x1c\x31\x4b\xa4\x5a\xeb\x55\x17\xa0\x77\xec\xb6\xc8\x5d\xf8\x69\x7c\x20\x69\x19\x6c\x96\xdc\x00\x0b\x48\x9d\x6f\x3e\x86\xa1\x3f\x07\xed\x0a\xb7\x75\x0d\x85\xe2\x5d\xe1\xb4\xe9\xab\x0f\xd5\x73\xb8\xdc\xf0\x35\x2a\xf3\x9e\xec\x31\xd0\x19\xe4\x19\x4b\xa9\x89\xd2\xce\x3b\xbb\x0e\x86\x1f\xda\x35\x57\xf6\xd5\x3c\x9b\xf2\x5d\x2e\x7a\xb6\x23\xea\x21\xa6\x1c\xbd\x17\xd2\x16\xc2\xa5\x5d\xe1\x3b\x09\x58\x9b\x07\x2d\xc8\x98\x45\x16\xfd\xa9\x54\x87\xc5\x7d\x3f\x1e\x30\x40\xa6\xd1\x17\x96\x98\x09\x6f\x2b\xbb\x37\x9a\x54\xb4\x88\xec\xd5\x92\xfd\x68\x14\xa3\x5f\x88\x90\xff\x93\x79\x89\x5c\x76\xa9\xed\xca\x8f\xd2\x31\x0f\x5b\x52\x97\x6d\x89\x57\xf8\x4c\x58\x9a\xde\xea\x1e\x2a\x6d\x18\xbb\xe0\x2e\x38\xaf\xf1\x1f\xc7\xe8\x39\x42\x1c\x50\xf5\xcd\x29\x80\x0e\xf4\xca\x47\xc1\x23\xfa\xd9\x82\xaf\xf2\x78\x55\xe2\x37\x87\xca\x46\xd0\xf8\x8d\xef\x30\x12\xe7\x7b\x44\xb1\xc9\x02\xbb\x0a\x98\xcd\x51\x5e\xa0\xef\xde\x06\xdf\xdb\x94\xca\x43\xb1\xa6\xb9\xc9\xe8\x7e\x93\x69\xeb\xf8\x8e\xd6\xa9\x87\x9e\x78\x89\xf9\xf4\xd4\xdc\x3a\xf0\xed\x09\xcc\x71\x21\xa9\xb1\xd1\xb2\x50\xdb\xda\x36\xc8\x89\xb4\xb6\x7d\x50\xaf\xa1\x88\x5a\x43\x18\x14\xa3\x32\xf9\xe9\x96\xeb\x0b\x5b\x21\x85\xbe\xbb\x79\xcf\x08\xb8\xd4\xc5\x47\xe9\xeb\x5e\x8e\x7d\xef\x5b\xf2\x63\x80\x14\x22\x9f\x6b\x53\x74\x6a\xee\x43\x1c\xef\x43\x30\x85\xcf\x66\x0b\x62\x21\xa4\x1a\x4a\xe9\x8d\x49\xfe\x65\xb5\xaa\x9d\x6d\x5a\x64\x3d\x9d\x5b\x2e\xee\x4b\x55\x56\x0e\x32\xe1\x04\x7c\x08\xda\xf8\x39\x2d\xb2\x9f\xc9\xf5\xf6\x73\x12\xa5\x6c\x2a\xf0\xde\x68\xb4\x49\x2c\xfe\x5e\xa1\xea\x2c\x91\xfb\x47\x2f\x17\xb7\x61\xd6\xfe\x61\x69\xf9\x77\x6f\xcf\x7b\x3e\x6c\xc2\x55\x6f\x5e\x50\x4a\x9a\x9d\x0a\xe5\x43\x91\x19\xfa\x60\x00\x33\x98\x09\x8b\x19\x68\xd5\x32\xb2\x8b\x08\xe9\x08\xcd\x29\x7c\xca\x51\x58\x84\xaa\xcc\x84\xc3\x03\xa7\xc9\x97\x67\x9a\x57\xd9\x21\x4e\x61\x41\xc0\x06\x67\x87\x1c\x06\x77\x27\xe8\xa9\xdf\x40\x5f\x1f\xf1\x23\xa4\x9a\xb0\x6a\x0a\x57\xce\x67\x5f\xda\x2d\xf9\x2e\xe6\x53\x35\xaf\x54\x38\x53\xf1\xe0\x4d\xbc\x76\xb4\xc2\xd0\x76\x2d\x88\x0a\x7e\x2b\x31\x1d\x73\x92\x02\xd6\xb8\xc5\xd1\x3f\x90\x63\x4c\x88\xeb\x77\xa2\x67\xe0\x8d\x93\x20\xb2\xba\x72\x6d\x67\x31\x85\x2f\x8d\x13\x8e\xae\x82\x96\x4d\x6a\x77\x42\x06\x13\x83\x85\x81\x6b\x2d\x88\x13\xd5\x94\x50\xb6\xe2\x30\xc9\xa4\x19\xe5\xe4\x8e\x8a\x45\x72\xd4\x7a\x2f\xb5\x54\x3e\xa4\xf2\x29\x9a\xc3\x90\x18\x50\x20\xd3\x1c\xe7\x09\xa5\x80\x51\x2a\xcb\x39\xc5\xbe\x87\xeb\x17\x23\x15\x94\xb0\x8b\x35\x26\x99\x4e\x57\xd8\xf5\x40\xef\x8d\x50\x4c\x55\xac\x11\xde\xf2\x44\x90\x05\x07\xe0\x03\x81\xa5\xcc\x31\x11\xb9\x41\x91\x6d\x13\xfc\x26\x6d\xe7\xdb\x86\x77\x74\x42\xc2\x4c\xf0\x33\x07\x68\x67\x72\x3e\x47\x4a\x08\x9b\xac\x44\xa2\xf5\x06\x65\x29\x72\xca\xc5\x0c\xbb\x9a\x23\xd7\x0a\x81\xec\x30\xc7\xc3\xb4\xbf\xf9\x1a\xb7\xc4\x6d\x34\xd4\xcc\xb8\x69\xe2\x75\x4d\xb3\xe3\x37\xef\x58\x97\xd2\xc2\x4a\xaa\x8c\x0e\x48\xb0\xc5\xd0\x94\x7c\x72\xf1\x1c\x78\x0a\xf2\x2f\x2d\x20\x0c\xfd\x08\x9c\xf0\xbe\xec\x89\x5f\x61\x63\xe1\x86\x3a\xc5\x6e\x11\x14\xc4\xb4\x06\x59\x06\x8b\xa5\x30\xf4\x85\xa9\x5b\x1f\x33\x1d\x97\x6d\x9c\xf1\x87\x43\x96\x90\xc8\xa7\xda\xb9\xd2\x5e\x53\x16\xdd\x69\xcc\x4e\xf5\x15\x81\x59\xeb\xbc\x0f\xf0\x8b\xde\x37\x59\x8a\x35\x79\x2a\xb6\x25\x5f\x48\xb7\x01\x4c\xd7\x13\xd2\xf6\x35\x14\xc9\x04\x7f\x15\x4d\x3b\x3e\x4a\x20\x9f\xaf\xa2\x33\xf2\x89\x3e\x87\x62\xb4\x7f\x21\xbb\x9d\xc6\x37\x9d\xe1\x25\x9b\xa7\x67\xf9\xa2\x22\x63\x5a\xd2\x69\xe4\x05\x1c\xb1\x4b\x05\x22\xda\x74\xa4\x30\x70\xf8\xb5\x9a\xe7\x32\x25\x2f\x93\x84\xc4\x8d\x24\x34\xda\xda\x58\x09\xe9\x3a\xae\xad\xf3\x13\x53\x3e\x12\x3a\x7c\x0e\x32\x47\x59\x39\xf8\x2d\xaa\xdc\xc9\x32\xf7\x59\xa3\x3f\x3c\xf4\x29\x44\x24\x9e\x39\xbb\xaf\x78\xf7\x1e\x94\x41\x5c\xbb\x8b\x3b\x01\xe9\xfc\x89\x2a\xb5\xb5\x72\xe6\x4f\x01\x2b\x24\x0a\xe2\xb9\x36\xea\x99\x51\x5c\x52\x5b\x3a\x83\x78\x72\x08\x83\x24\xcc\xe6\x49\xd2\x73\x82\x32\x4d\x95\xe3\x19\x9a\xa4\x65\x21\xbb\xc8\xf1\x98\x0e\x1b\xfc\xd1\xdf\x1f\x04\x12\x2a\xbb\xa0\x43\x1d\x55\xb0\xbf\x25\x53\xff\x20\xf8\x47\x28\x99\x05\x3c\xa6\x61\x61\xad\x4e\x25\x93\x3e\x8e\xf8\x22\x82\x3b\x54\x3e\x0b\x7f\x96\xe6\x85\x69\xde\x54\x70\x33\xbb\xf3\x05\x67\x68\x90\x41\x2e\x15\x82\x30\x8b\x8a\x93\x62\x52\xa1\x59\xec\x76\xed\x78\x91\xe9\x4c\xa0\xf4\x10\xbd\x2f\xdf\xb2\x3e\x78\xe4\x04\x44\x2b\xdc\xfe\x30\x54\x2b\xdc\x5e\x30\x2d\x28\x85\x34\x4f\xe0\xed\x0f\xb3\x7f\xc7\x6f\xa2\x28\x29\xd8\xad\xc9\xad\x70\x3b\x4a\x86\x10\x60\x0d\x3f\xfd\xe9\x12\xe0\x97\xc8\xf2\x57\xf6\xc1\x81\x9e\x7f\x17\xe4\x2f\xae\xba\x14\x32\xf1\x05\xc9\x56\x7a\x19\x8d\x23\x8a\x26\xc0\xaf\xe6\x24\xa3\x21\x31\x54\x7b\xc0\xdf\x2b\x69\xb8\xb6\x55\x56\xce\x8e\xb2\x92\x9b\xb0\xc6\xa7\x32\xfe\xb4\xec\x59\x85\x05\x5c\xa3\x02\x31\x77\x68\x40\x94\x65\xce\xfd\x13\x7e\xd8\x50\x6a\x4f\x27\xf4\x52\x51\xad\xa7\xb0\x16\x46\x8a\x59\x8e\x8d\xc1\x5b\x74\x35\xc5\xfd\x29\xf1\x00\xfb\x2c\xaa\x79\x37\x15\x4f\xc3\xc5\x61\x29\x47\x1b\x4a\x4e\xde\xbc\xbf\xe2\xcd\x9e\xeb\x3c\xd7\x1b\x8f\x86\xb0\xb3\x3e\xfd\xc7\xdd\x6e\x5c\xba\x5e\x0a\x63\xd1\xf4\xfe\x58\xa3\xa9\x1f\x18\x74\x46\x22\xbb\x83\x50\x36\xa8\xf7\x2f\x70\x3b\x64\xf7\xe5\xf5\xcd\xc7\xab\x8f\x7f\x1d\x5f\xa8\x8e\x0b\x4e\x2b\x55\x6f\x84\x51\x75\x37\x9c\x50\x76\xe5\xac\x37\x34\x46\x0a\xfb\x1a\xdb\xe0\xf7\x61\x63\x59\x03\x2f\x7d\xed\x80\x24\xba\xef\xcb\x6f\x02\x3f\x7e\x16\x74\x72\xb5\xa0\xfd\x8a\xb8\x55\x1d\x84\x0c\xdd\x70\x66\xc5\x9c\xc9\xc5\x64\x58\x1a\x4c\xc9\xf1\x26\x06\xcb\x5c\xa4\x9d\xa9\xc7\xe7\xa5\xe7\xa3\xf3\x2c\xd4\x41\xf9\x15\x96\x8f\x2c\xf7\xdb\xff\x1b\x99\xe7\x60\xb5\x56\x94\x13\x37\x1c\x6a\xc7\x53\x59\x1f\xb9\x72\x03\x07\x37\x7b\xe4\xac\x43\x31\x12\x7b\xd0\xc4\x39\x25\x5c\xbb\xd4\x55\x9e\x11\x3c\x0a\x24\xe1\xce\xfa\x5e\xa6\x6f\xb4\x78\x5f\x48\xb3\xf9\xd3\xf0\x23\x86\x1a\x11\xcf\x1f\xd8\x4a\xc2\xe5\x39\xd0\xd9\x7b\x5a\x5a\xa6\x8b\xd3\xe7\xa8\x27\xb0\xe4\xdc\x51\xac\x7b\x37\x6f\x88\x29\xaf\x8f\x1b\x1a\x9b\x66\xf1\x17\x1a\xed\x9f\x66\x0c\x03\xcb\x65\x21\x5d\x22\x17\x4a\x9b\x4e\x48\xd1\xa4\x43\x2c\xcb\x4b\x7c\x6e\x44\x9f\x0e\xcb\xc7\x94\xba\x7b\x72\x63\xb9\xa7\x4b\xa1\x16\x48\xfe\xb1\x03\xc0\xfb\x9a\x63\x5d\xaf\xb6\x51\xee\x7c\xeb\xfb\xa5\x35\x8d\x29\x5c\x11\x7b\xa9\x16\x63\x6c\x81\x11\xd8\x24\xd7\x8b\xc4\xca\x3f\xba\x00\xe4\x7a\x71\x2b\xff\xe0\xb2\x88\x5f\xb0\x27\x71\x63\xa2\x42\xf1\x35\x41\x21\x66\xfc\xa9\xca\x0b\x8e\xed\x7f\x7b\x31\x1a\x4a\x81\x85\x36\xdb\x3e\x34\x7e\xc6\xb9\x80\x7e\xfb\xcb\x7f\x32\xa4\xff\xf8\xed\x2f\xa3\x31\x91\xef\xd7\x55\x57\xbd\x39\x8c\x9e\x05\xe6\x85\xd7\xcf\xbf\xbf\xa0\x7f\xc3\x78\xb8\x75\x98\x94\x46\x97\x68\x9c\xec\x0c\xb9\xa3\x07\x6c\xf9\x2b\xdf\x70\xf6\xd7\x59\x68\x39\xfb\x3e\x64\x43\x2c\xb6\xa6\x8f\xfb\xc4\xe8\x12\x33\xcd\x06\x47\x9e\x51\x3a\xd0\x95\xb3\x32\xe3\x8d\xf8\x6c\xc4\x5a\x5a\x98\x55\x32\xcf\xfa\xfb\x96\x2c\x8a\x77\x07\x86\xcc\x76\x94\x2b\xa8\xad\x7f\xcf\x21\xa8\x03\x87\x1e\xb4\xcd\xdd\x58\xca\x0d\xfc\x5f\xa3\xba\x1f\x1f\xa7\x85\x54\xa1\x37\x47\x5f\x44\x3a\x50\xe9\x67\xa8\x31\x76\xf0\x87\xac\xcb\x4d\xc4\xee\x49\x98\x45\xf1\xc3\x41\x23\xe5\x48\xb1\xb5\xb3\x57\x72\x56\x83\x84\xd1\x86\xf6\x2b\x27\xf4\xbd\x15\xa9\x27\x9d\xb5\x3d\x17\x73\x50\xaa\x6a\x62\xbb\x1c\x53\x07\x42\x69\xb7\x0c\x99\xe4\x30\xa4\x98\x21\x0e\x36\x17\x3f\x3f\xa9\xfd\xb4\x03\x86\xf0\xf8\x1e\x33\x50\x7a\x5c\x87\x9c\xb9\xb7\x1e\xa7\xb0\x52\xc6\x80\x38\xfa\x74\x23\xdc\x38\x87\x31\xea\x26\x74\x70\x7c\x1f\xf4\x58\x05\x6b\x84\x86\x5a\x3f\xa1\x49\xf4\x1a\x8d\x91\x59\x86\x5d\x75\x18\x42\xd8\xfe\x45\x4d\xf3\xb8\xa8\x59\x1a\x63\x85\xf6\xdb\x91\xb1\x1b\x95\x48\x9b\x94\xd5\x2c\x97\x5d\xbf\x15\xf4\xbb\xc2\x73\x63\x1f\xc2\xff\x68\x48\x58\xf0\x0b\x9f\xe4\xb8\x94\x6c\x7b\xdf\x32\x43\x58\x4b\x9f\x6e\xd3\x39\x4c\x05\x7b\x1a\xff\x6a\x1c\x33\x98\x6d\x41\xa8\xad\x56\x3d\x3f\xc2\x61\xac\xb1\x6c\x86\xb3\x04\xbf\xf1\x6b\xe1\xfe\x6b\xfc\x69\xd5\x8c\x1b\x02\xdc\x96\x50\x19\xfd\xff\xdc\xd3\x79\xd2\x11\xa0\x83\x40\xaa\xdc\xe0\x6c\xe2\x2f\xf7\xf0\x2d\x2c\xe8\x49\xd2\x3c\xd2\x56\xe7\x87\xe0\xf6\xd6\xd8\xba\xfa\x01\x64\x61\xed\x26\xca\xa8\xf6\x8e\x4f\xd3\x9a\x45\x53\x78\xa3\xd5\x9a\xdc\x7d\x48\x09\x1a\x16\x4e\xef\x91\x1f\x36\xd9\x43\xa9\x06\x3a\x59\x7d\xb5\xc3\x46\xb6\x38\x70\xa2\x74\x75\x43\xe9\x50\xbe\x36\xa3\x5a\xc2\xc1\xf6\xd3\xdb\xcb\xff\xba\xfb\xeb\xe8\x14\x8e\x67\x9f\x96\xbf\x65\xb3\x45\x62\x51\x98\x74\x49\xda\x8b\x87\xbf\x6e\x7f\x74\xaa\x30\xac\xa8\x0f\xff\x7e\xc3\x24\xfa\x49\xba\x3b\x9a\x4b\x72\x20\x0c\x24\x28\x87\x1e\xf2\x47\x7b\xc7\x33\x3d\x23\x41\xab\xaf\x0e\xff\x00\xaf\xe7\xb7\xe3\x6f\x8f\xbc\x02\x09\x1a\x79\x09\xef\x18\x41\xf3\x53\x65\x2e\x06\x12\xb1\x53\x01\xf4\xff\xec\xef\x74\x0c\xed\x37\x7e\xf1\x4d\x6a\x80\xf4\xec\xfe\xd9\xff\x06\x00\x00\xff\xff\x64\x87\x26\x11\x70\x42\x00\x00")
 
 func wski18nResourcesEn_usAllJsonBytes() ([]byte, error) {
 	return bindataRead(
@@ -112,7 +112,7 @@ func wski18nResourcesEn_usAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 16898, mode: os.FileMode(420), modTime: time.Unix(1525997024, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 17008, mode: os.FileMode(420), modTime: time.Unix(1528157319, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
diff --git a/wski18n/resources/en_US.all.json b/wski18n/resources/en_US.all.json
index ea6505ee..614d434d 100644
--- a/wski18n/resources/en_US.all.json
+++ b/wski18n/resources/en_US.all.json
@@ -363,6 +363,10 @@
     "id": "msg_err_required_inputs_missing_value",
     "translation": "Required inputs are missing values even after applying interpolation using env. variables. Please set missing env. variables and/or input values in manifest/deployment file or on CLI for following inputs: {{.inputs}}"
   },
+  {
+    "id": "msg_err_runtime_parser_error",
+    "translation": "Failed to retrieve runtimes {{.err}}."
+  },
 
   {
     "id": "WARNINGS",


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services