Repository: go-swagger/go-swagger
Pull request #2074 (2019-10-02 12:14:02)

Keep spec orders for mixin command
This PR keeps order for fields in swagger mixin command. Adresses this request https://github.com/go-swagger/go-swagger/pull/1939#issuecomment-531051971.


Patch:
diff --git a/cmd/swagger/commands/mixin.go b/cmd/swagger/commands/mixin.go
index 15b7ec80..cae05846 100644
--- a/cmd/swagger/commands/mixin.go
+++ b/cmd/swagger/commands/mixin.go
@@ -10,6 +10,8 @@ import (
 	"github.com/go-openapi/loads"
 	"github.com/go-openapi/spec"
 	flags "github.com/jessevdk/go-flags"
+
+	"github.com/go-swagger/go-swagger/generator"
 )
 
 const (
@@ -24,6 +26,7 @@ type MixinSpec struct {
 	ExpectedCollisionCount uint           `short:"c" description:"expected # of rejected mixin paths, defs, etc due to existing key. Non-zero exit if does not match actual."`
 	Compact                bool           `long:"compact" description:"applies to JSON formatted specs. When present, doesn't prettify the json"`
 	Output                 flags.Filename `long:"output" short:"o" description:"the file to write to"`
+	KeepSpecOrder          bool           `long:"keep-spec-order" description:"Keep schema properties order identical to spec file"`
 	Format                 string         `long:"format" description:"the format for the spec document" default:"json" choice:"yaml" choice:"json"`
 }
 
@@ -89,6 +92,9 @@ func (c *MixinSpec) MixinFiles(primaryFile string, mixinFiles []string, w io.Wri
 
 	var mixins []*spec.Swagger
 	for _, mixinFile := range mixinFiles {
+		if c.KeepSpecOrder {
+			mixinFile = generator.WithAutoXOrder(mixinFile)
+		}
 		mixin, lerr := loads.Spec(mixinFile)
 		if lerr != nil {
 			return nil, lerr
diff --git a/fixtures/bugs/2071/.gitignore b/fixtures/bugs/2071/.gitignore
new file mode 100644
index 00000000..1e16265b
--- /dev/null
+++ b/fixtures/bugs/2071/.gitignore
@@ -0,0 +1,3 @@
+gen-*
+!gen-fixtures.sh
+*.log
diff --git a/fixtures/bugs/2071/fixture-2071.yaml b/fixtures/bugs/2071/fixture-2071.yaml
new file mode 100644
index 00000000..a4c33cca
--- /dev/null
+++ b/fixtures/bugs/2071/fixture-2071.yaml
@@ -0,0 +1,42 @@
+---
+  swagger: "2.0"
+  info:
+    title: "gen operation with body param, --skip-flatten mode"
+    version: "0.0.1"
+    description: "repro issue 1537"
+    license:
+      name: "Apache 2.0"
+      url: "http://www.apache.org/licenses/LICENSE-2.0.html"
+  paths:
+    /getPet:
+      get:
+        responses:
+          200:
+            description: "OK"
+            schema:
+              $ref: '#/definitions/Pet'
+    /getCat:
+      get:
+        responses:
+          200:
+            description: "OK"
+            schema:
+              $ref: '#/definitions/Cat'
+
+  definitions:
+    Pet:
+        type: object
+        properties:
+            name:
+                type: string
+                x-go-name: Name
+                x-nullable: true
+    Cat:
+        allOf:
+            - $ref: "#/definitions/Pet"
+            - type: "object"
+              properties:
+                ability:
+                    type: string
+                    x-go-name: SomeAbility
+                    x-nullable: true
diff --git a/fixtures/bugs/2071/gen-fixtures.sh b/fixtures/bugs/2071/gen-fixtures.sh
new file mode 100755
index 00000000..e35ed885
--- /dev/null
+++ b/fixtures/bugs/2071/gen-fixtures.sh
@@ -0,0 +1,73 @@
+#! /bin/bash
+if [[ ${1} == "--clean" ]] ; then
+    clean=1
+fi
+continueOnError=
+# A small utility to build fixture servers
+testcases="${testcases} fixture-2071.yaml"
+for opts in  "" "--with-expand" ; do
+for testcase in ${testcases} ; do
+    grep -q discriminator ${testcase}
+    discriminated=$?
+    if [[ ${discriminated} -eq 0 && ${opts} == "--with-expand" ]] ; then
+        echo "Skipped ${testcase} with ${opts}: discriminator not supported with ${opts}"
+        continue
+    fi
+    if [[ ${testcase} == "../1479/fixture-1479-part.yaml" && ${opts} == "--with-expand" ]] ; then
+        echo "Skipped ${testcase} with ${opts}: known issue with enum in anonymous allOf not validated. See you next PR"
+        continue
+    fi
+
+    spec=${testcase}
+    testcase=`basename ${testcase}`
+    if [[ -z ${opts} ]]; then
+        target=./gen-${testcase%.*}-flatten
+    else
+        target=./gen-${testcase%.*}-expand
+    fi
+    serverName="codegensrv"
+    rm -rf ${target}
+    mkdir ${target}
+    echo "Model generation for ${spec} with opts=${opts}"
+    serverName="nrcodegen"
+    swagger generate server --skip-validation ${opts} --spec ${spec} --target ${target} --name=${serverName} 1>${testcase%.*}.log 2>&1
+    # 1>x.log 2>&1
+    #
+    if [[ $? != 0 ]] ; then
+        echo "Generation failed for ${spec}"
+        if [[ ! -z ${continueOnError} ]] ; then
+            failures="${failures} codegen:${spec}"
+            continue
+        else
+            exit 1
+        fi
+    fi
+    echo "${spec}: Generation OK"
+    if [[ ! -d ${target}/models ]] ; then
+        echo "No model in this spec! Continue building server"
+    fi
+    if [[ -d ${target}/cmd/${serverName}"-server" ]] ; then
+        (cd ${target}/cmd/${serverName}"-server"; go build)
+        #(cd ${target}/models; go build)
+        if [[ $? != 0 ]] ; then
+            echo "Build failed for ${spec}"
+            if [[ ! -z ${continueOnError} ]] ; then
+                failures="${failures} build:${spec}"
+                continue
+            else
+                exit 1
+            fi
+        fi
+        echo "${spec}: Build OK"
+        if [[ -n ${clean} ]] ; then
+             rm -rf ${target}
+        fi
+    fi
+done
+done
+if [[ ! -z ${failures} ]] ; then
+    echo ${failures}|tr ' ' '\n'
+else
+    echo "No failures"
+fi
+exit
diff --git a/generator/bindata.go b/generator/bindata.go
index 0bec83aa..d2ff442c 100644
--- a/generator/bindata.go
+++ b/generator/bindata.go
@@ -28,7 +28,7 @@
 // templates/server/urlbuilder.gotmpl (7.641kB)
 // templates/structfield.gotmpl (1.522kB)
 // templates/swagger_json_embed.gotmpl (848B)
-// templates/tupleserializer.gotmpl (16.449kB)
+// templates/tupleserializer.gotmpl (16.512kB)
 // templates/validation/customformat.gotmpl (611B)
 // templates/validation/primitive.gotmpl (2.173kB)
 // templates/validation/structfield.gotmpl (909B)
@@ -115,7 +115,7 @@ func templatesAdditionalpropertiesserializerGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/additionalpropertiesserializer.gotmpl", size: 2813, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/additionalpropertiesserializer.gotmpl", size: 2813, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x34, 0xfe, 0xa9, 0x3a, 0xd0, 0x9a, 0x6d, 0x64, 0x2f, 0x4c, 0x3b, 0x33, 0x7c, 0xfb, 0x8b, 0x89, 0x14, 0x21, 0x56, 0x9e, 0x41, 0x9c, 0x30, 0x30, 0x13, 0xf8, 0x23, 0x36, 0x7e, 0xf1, 0xaf, 0x91}}
 	return a, nil
 }
@@ -135,7 +135,7 @@ func templatesClientClientGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/client/client.gotmpl", size: 4702, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/client/client.gotmpl", size: 4702, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x73, 0xb2, 0x83, 0x60, 0xa9, 0x9b, 0xc5, 0xf6, 0x7e, 0x25, 0xa0, 0x91, 0xf4, 0x4a, 0x31, 0x2e, 0x4b, 0x8, 0xf9, 0xda, 0x18, 0xa9, 0xb6, 0xb7, 0x11, 0x3b, 0x28, 0xf, 0xa7, 0xa1, 0x55, 0x49}}
 	return a, nil
 }
@@ -155,7 +155,7 @@ func templatesClientFacadeGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/client/facade.gotmpl", size: 3932, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/client/facade.gotmpl", size: 3932, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb9, 0x2e, 0xbf, 0x0, 0xaf, 0xc1, 0xff, 0x75, 0x86, 0x0, 0x51, 0xe9, 0xb9, 0x2d, 0x58, 0x1d, 0x9e, 0xca, 0x82, 0x15, 0xf4, 0xa2, 0x7b, 0x6a, 0x41, 0x12, 0x24, 0x3a, 0x8, 0x5e, 0x5e, 0xa9}}
 	return a, nil
 }
@@ -175,7 +175,7 @@ func templatesClientParameterGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/client/parameter.gotmpl", size: 12349, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/client/parameter.gotmpl", size: 12349, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf8, 0xe8, 0x6f, 0x8f, 0xfc, 0x7e, 0xc1, 0xb6, 0xd8, 0x28, 0x41, 0x7d, 0x34, 0x8, 0x3c, 0xe3, 0xaa, 0x53, 0x5c, 0x7b, 0x67, 0x78, 0x8e, 0x81, 0x74, 0x3e, 0x4a, 0x36, 0x3e, 0x43, 0xd8, 0x34}}
 	return a, nil
 }
@@ -195,7 +195,7 @@ func templatesClientResponseGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/client/response.gotmpl", size: 6436, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/client/response.gotmpl", size: 6436, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2a, 0x28, 0xb9, 0x15, 0x9f, 0x1a, 0x7a, 0x38, 0x12, 0xb5, 0x7a, 0x55, 0xaa, 0xe9, 0x20, 0x89, 0xda, 0xaf, 0xf7, 0x76, 0xc6, 0x97, 0x48, 0xcf, 0x12, 0xcf, 0xb0, 0x15, 0x8a, 0x3d, 0x50, 0xdb}}
 	return a, nil
 }
@@ -215,7 +215,7 @@ func templatesContribStratoscaleClientClientGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/contrib/stratoscale/client/client.gotmpl", size: 3680, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/contrib/stratoscale/client/client.gotmpl", size: 3680, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x21, 0x84, 0xe6, 0x79, 0x4a, 0xea, 0x52, 0x84, 0xf0, 0x99, 0x30, 0x82, 0x3, 0x3, 0xd7, 0xea, 0x3a, 0xd6, 0x55, 0xcf, 0x42, 0x8c, 0x4b, 0xb1, 0xee, 0xea, 0x55, 0x8f, 0x76, 0xd1, 0x34, 0x43}}
 	return a, nil
 }
@@ -235,7 +235,7 @@ func templatesContribStratoscaleClientFacadeGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/contrib/stratoscale/client/facade.gotmpl", size: 2159, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/contrib/stratoscale/client/facade.gotmpl", size: 2159, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6a, 0x65, 0x26, 0xb9, 0x2f, 0x21, 0x1, 0x23, 0x14, 0xda, 0x91, 0xf9, 0x12, 0x59, 0x62, 0xb, 0x98, 0x78, 0x1e, 0x96, 0xb5, 0xb2, 0xa4, 0x73, 0x92, 0x8b, 0xde, 0x1, 0x3, 0x1, 0x98, 0x3}}
 	return a, nil
 }
@@ -255,7 +255,7 @@ func templatesContribStratoscaleServerConfigureapiGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/contrib/stratoscale/server/configureapi.gotmpl", size: 5930, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/contrib/stratoscale/server/configureapi.gotmpl", size: 5930, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9f, 0xe7, 0xab, 0x9c, 0xfb, 0xa9, 0xfe, 0xe4, 0x65, 0xe7, 0x8e, 0xd9, 0x98, 0xce, 0x54, 0xfd, 0x7d, 0x8b, 0xdc, 0x7d, 0xa, 0x7c, 0xf3, 0x61, 0xfe, 0x93, 0x4a, 0x7f, 0x26, 0xe3, 0xb4, 0xe1}}
 	return a, nil
 }
@@ -275,7 +275,7 @@ func templatesContribStratoscaleServerServerGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/contrib/stratoscale/server/server.gotmpl", size: 236, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/contrib/stratoscale/server/server.gotmpl", size: 236, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa2, 0x7d, 0x4f, 0x36, 0x58, 0x28, 0x19, 0xa4, 0x74, 0xeb, 0xf1, 0xd5, 0x9e, 0xf2, 0x58, 0x68, 0x9a, 0x5a, 0xc8, 0x58, 0x99, 0x36, 0xaf, 0x14, 0xd6, 0x80, 0x71, 0xf4, 0xfc, 0x40, 0x31, 0xf1}}
 	return a, nil
 }
@@ -295,7 +295,7 @@ func templatesDocstringGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/docstring.gotmpl", size: 265, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/docstring.gotmpl", size: 265, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe3, 0xe7, 0x27, 0x1f, 0x51, 0x5c, 0x3b, 0x4d, 0x96, 0x68, 0x52, 0x9f, 0x19, 0x4e, 0xab, 0xe9, 0x1d, 0x17, 0x4a, 0x4d, 0x6d, 0xb8, 0x33, 0xe, 0xff, 0xe1, 0xcf, 0x48, 0x56, 0xac, 0x24, 0xe8}}
 	return a, nil
 }
@@ -315,7 +315,7 @@ func templatesHeaderGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/header.gotmpl", size: 519, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/header.gotmpl", size: 519, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xcd, 0xca, 0x67, 0x57, 0x80, 0x72, 0xe7, 0xc3, 0x16, 0x8c, 0x5b, 0x2c, 0x57, 0x38, 0x73, 0x77, 0x87, 0x97, 0xb9, 0x95, 0x4f, 0x5d, 0x95, 0x92, 0x40, 0xcf, 0x74, 0xa2, 0x63, 0xf2, 0xf8, 0x30}}
 	return a, nil
 }
@@ -335,7 +335,7 @@ func templatesModelGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/model.gotmpl", size: 785, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/model.gotmpl", size: 785, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa, 0x57, 0x3, 0xb6, 0x3c, 0x95, 0xb2, 0x39, 0x19, 0xdb, 0x48, 0xb4, 0xa8, 0x28, 0xa2, 0x10, 0xbd, 0x53, 0xe7, 0xc2, 0xe, 0xd1, 0x22, 0x17, 0x28, 0xc6, 0x10, 0x7a, 0x2a, 0xf5, 0x52, 0x51}}
 	return a, nil
 }
@@ -355,7 +355,7 @@ func templatesModelvalidatorGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/modelvalidator.gotmpl", size: 447, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/modelvalidator.gotmpl", size: 447, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc6, 0x56, 0x93, 0xbc, 0xe3, 0x93, 0xee, 0x31, 0x24, 0xfd, 0x3b, 0xd2, 0x6, 0xdf, 0x96, 0x98, 0x88, 0x54, 0x60, 0xd8, 0x4e, 0x3f, 0xa5, 0xe, 0x36, 0x0, 0xe8, 0xa4, 0xef, 0x48, 0x51, 0xd1}}
 	return a, nil
 }
@@ -375,7 +375,7 @@ func templatesSchemaGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/schema.gotmpl", size: 11283, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/schema.gotmpl", size: 11283, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x53, 0x1b, 0x51, 0xcb, 0x5f, 0x6c, 0x3f, 0x1, 0xb8, 0xdc, 0x9a, 0x41, 0xff, 0x90, 0xd3, 0xfa, 0x99, 0x35, 0xf5, 0xd2, 0x7, 0xad, 0x68, 0x6b, 0xfa, 0x4c, 0x85, 0xd4, 0x32, 0x4d, 0x38, 0x3d}}
 	return a, nil
 }
@@ -395,7 +395,7 @@ func templatesSchemabodyGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/schemabody.gotmpl", size: 12811, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/schemabody.gotmpl", size: 12811, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5e, 0xd4, 0xa2, 0xde, 0xa8, 0x23, 0xfd, 0xa0, 0x6a, 0xf9, 0x1f, 0x3c, 0x2f, 0x94, 0xb8, 0xb, 0xd3, 0x63, 0x18, 0xcb, 0xe7, 0xfc, 0xd3, 0x6d, 0x5e, 0xd8, 0xb7, 0xb9, 0x82, 0x97, 0xe9, 0xe5}}
 	return a, nil
 }
@@ -415,7 +415,7 @@ func templatesSchematypeGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/schematype.gotmpl", size: 854, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/schematype.gotmpl", size: 854, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1, 0x3d, 0x4d, 0x98, 0x68, 0xdf, 0x6c, 0x32, 0x73, 0x9a, 0x5a, 0x5e, 0x30, 0x52, 0xf3, 0xef, 0xf7, 0x79, 0x7, 0x61, 0x0, 0x3d, 0x3a, 0xbb, 0x4d, 0x16, 0xcc, 0xab, 0x6b, 0x9f, 0xc3, 0x31}}
 	return a, nil
 }
@@ -435,7 +435,7 @@ func templatesSchemavalidatorGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/schemavalidator.gotmpl", size: 31015, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/schemavalidator.gotmpl", size: 31015, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc, 0xc4, 0xc9, 0x40, 0xf4, 0x19, 0xfb, 0x67, 0x5d, 0xc6, 0x7f, 0x84, 0x5d, 0x86, 0xd9, 0x0, 0xbd, 0x22, 0x4a, 0x2e, 0xf4, 0x7, 0x8, 0x50, 0xf1, 0xbc, 0x6, 0xb1, 0x8, 0x56, 0xac, 0x99}}
 	return a, nil
 }
@@ -455,7 +455,7 @@ func templatesServerBuilderGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/server/builder.gotmpl", size: 16812, mode: os.FileMode(0644), modTime: time.Unix(1568949030, 0)}
+	info := bindataFileInfo{name: "templates/server/builder.gotmpl", size: 16812, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x93, 0xde, 0x22, 0x72, 0x72, 0x82, 0xf0, 0x64, 0x30, 0xf4, 0xdf, 0x23, 0x74, 0x41, 0x39, 0x49, 0x20, 0xb3, 0xe7, 0xa, 0x7e, 0xea, 0x2b, 0xd7, 0xb, 0x8b, 0x1, 0x1d, 0xb, 0x1a, 0x93, 0x9e}}
 	return a, nil
 }
@@ -475,7 +475,7 @@ func templatesServerConfigureapiGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/server/configureapi.gotmpl", size: 6171, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/server/configureapi.gotmpl", size: 6171, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xbb, 0x96, 0xda, 0x4, 0x85, 0x1a, 0xb7, 0x14, 0xb9, 0x13, 0x38, 0x8c, 0xf2, 0x58, 0xa9, 0x26, 0xad, 0x62, 0xb7, 0xa3, 0x32, 0x55, 0x1, 0x46, 0xc7, 0xc5, 0x1, 0xf8, 0x60, 0x6c, 0xb9, 0x33}}
 	return a, nil
 }
@@ -495,7 +495,7 @@ func templatesServerDocGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/server/doc.gotmpl", size: 1247, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/server/doc.gotmpl", size: 1247, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7b, 0xee, 0x9c, 0xf5, 0xc6, 0x25, 0x6a, 0xc6, 0x8d, 0x3d, 0x62, 0x9d, 0x29, 0x7d, 0x93, 0xd6, 0x99, 0x6f, 0x82, 0x8d, 0xdd, 0xbf, 0x29, 0xb8, 0xa0, 0x50, 0x2f, 0xb8, 0x1c, 0xbd, 0xb1, 0xaa}}
 	return a, nil
 }
@@ -515,7 +515,7 @@ func templatesServerMainGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/server/main.gotmpl", size: 5969, mode: os.FileMode(0644), modTime: time.Unix(1569387757, 0)}
+	info := bindataFileInfo{name: "templates/server/main.gotmpl", size: 5969, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xde, 0x50, 0x3a, 0x42, 0xa1, 0xc1, 0x64, 0xa8, 0x5b, 0xcc, 0x8d, 0xa, 0x1d, 0x38, 0x6b, 0xa7, 0x97, 0x56, 0xae, 0xff, 0xba, 0xbd, 0x52, 0x2c, 0x8a, 0x6d, 0x57, 0xc4, 0x38, 0xcb, 0xfd, 0x7b}}
 	return a, nil
 }
@@ -535,7 +535,7 @@ func templatesServerOperationGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/server/operation.gotmpl", size: 3803, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/server/operation.gotmpl", size: 3803, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x49, 0xa, 0xe2, 0x73, 0xf, 0x62, 0x1d, 0x67, 0xb9, 0xa2, 0xb2, 0x1d, 0x7b, 0x4f, 0xe2, 0x8b, 0xca, 0x9, 0x95, 0x33, 0x36, 0x76, 0xe5, 0xc3, 0x28, 0xdb, 0x36, 0x3b, 0xe1, 0x9c, 0xa1, 0xb5}}
 	return a, nil
 }
@@ -555,7 +555,7 @@ func templatesServerParameterGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/server/parameter.gotmpl", size: 28790, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/server/parameter.gotmpl", size: 28790, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x37, 0x9f, 0x40, 0x42, 0xd3, 0x19, 0xb5, 0xaa, 0xd7, 0x86, 0x7, 0xb2, 0x39, 0x79, 0x9a, 0xee, 0x52, 0x8f, 0x51, 0x65, 0x98, 0xa2, 0xbd, 0xd5, 0x1a, 0xb5, 0x94, 0x4a, 0x4f, 0x3e, 0xb0, 0x2f}}
 	return a, nil
 }
@@ -575,7 +575,7 @@ func templatesServerResponsesGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/server/responses.gotmpl", size: 11315, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/server/responses.gotmpl", size: 11315, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x29, 0xae, 0x2a, 0x6c, 0xf8, 0x44, 0x5b, 0x94, 0x6e, 0x4b, 0xd2, 0xa4, 0xb, 0x7c, 0xac, 0xcf, 0xe, 0x6e, 0x81, 0x70, 0x4e, 0x55, 0x6b, 0x15, 0x47, 0xf1, 0x9d, 0x52, 0xcf, 0xab, 0xdb, 0x5d}}
 	return a, nil
 }
@@ -595,7 +595,7 @@ func templatesServerServerGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/server/server.gotmpl", size: 23074, mode: os.FileMode(0644), modTime: time.Unix(1569388148, 0)}
+	info := bindataFileInfo{name: "templates/server/server.gotmpl", size: 23074, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfa, 0x5d, 0xf2, 0xfe, 0xe2, 0xab, 0x28, 0xe5, 0x67, 0x51, 0x2, 0xfa, 0x1c, 0x9f, 0x68, 0x15, 0xb0, 0xa6, 0x9a, 0xe6, 0xda, 0x80, 0xdc, 0xc, 0x65, 0x77, 0xcd, 0x42, 0x91, 0x7, 0x2f, 0x7}}
 	return a, nil
 }
@@ -615,7 +615,7 @@ func templatesServerUrlbuilderGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/server/urlbuilder.gotmpl", size: 7641, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/server/urlbuilder.gotmpl", size: 7641, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x77, 0xac, 0xa8, 0x65, 0xb1, 0xe6, 0x78, 0x19, 0xa2, 0xaf, 0xf8, 0xa0, 0x36, 0x65, 0xef, 0xea, 0x1b, 0xb8, 0xe6, 0xa3, 0xa0, 0xfb, 0x6a, 0x79, 0x3c, 0xd9, 0xef, 0xa0, 0xb, 0x1f, 0x7c, 0xdd}}
 	return a, nil
 }
@@ -635,7 +635,7 @@ func templatesStructfieldGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/structfield.gotmpl", size: 1522, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/structfield.gotmpl", size: 1522, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc2, 0x6c, 0xf7, 0x9a, 0xf2, 0xd2, 0xba, 0x1b, 0xe, 0x9b, 0xd0, 0x12, 0xcd, 0xdc, 0x1f, 0xba, 0xab, 0x3b, 0xea, 0xf5, 0xa4, 0x6e, 0x1e, 0x9a, 0x8e, 0xb9, 0x9a, 0xc, 0x33, 0xbe, 0x46, 0xc8}}
 	return a, nil
 }
@@ -655,12 +655,12 @@ func templatesSwagger_json_embedGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/swagger_json_embed.gotmpl", size: 848, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/swagger_json_embed.gotmpl", size: 848, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x42, 0xd7, 0xa7, 0x80, 0xfd, 0xe8, 0xcb, 0x6d, 0xa5, 0x9c, 0x80, 0x99, 0xa8, 0x5b, 0xb0, 0xa4, 0x52, 0x8d, 0x77, 0x82, 0x7a, 0xe2, 0x27, 0xf2, 0xf, 0xd6, 0xc8, 0xf1, 0xfe, 0x7f, 0xd0, 0x98}}
 	return a, nil
 }
 
-var _templatesTupleserializerGotmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5b\xdd\x73\x9c\x38\x12\x7f\x36\x7f\x45\xdf\x94\xd7\x37\xf8\x30\xb3\x49\xee\xc9\x57\xde\xaa\x7c\xed\x6d\xb6\x6a\xed\x54\x9c\xbd\x7b\x70\xb9\xb2\xf2\xa0\xb1\x49\x00\x11\x21\x3c\xf1\x51\xfc\xef\x57\x92\x00\x49\x20\x01\x4e\x1c\x67\x53\xeb\x97\xc4\x33\xe8\xa3\xbf\xfb\xd7\xdd\x4c\x55\x41\x84\x37\x71\x86\x61\xc1\xca\x3c\xc1\xa7\x98\xc6\x28\x89\xff\x87\xe9\x02\xea\xda\x5b\xad\xe0\xf7\x2c\x45\xb4\xb8\x42\xc9\xaf\xa7\x27\xc7\x50\xb6\x9f\x0a\x60\x57\x71\x01\x62\x13\xb0\x9b\x1c\xc3\x86\x92\x14\x10\x88\x65\x88\x52\x74\xe3\x6d\xca\x6c\x0d\xcb\xaa\x0a\xdf\xe0\x35\x8e\xaf\x31\x3d\x46\x29\xae\x6b\xd8\xaf\x2a\xc8\x51\xb1\x16\x17\x41\xc8\xbf\x85\xba\xf6\xcd\xab\x96\x14\x6d\xe1\xec\xfc\xe2\x86\x61\x1f\x30\xa5\x84\x42\xe5\x01\xac\x56\x50\x30\x74\x89\xe1\x51\x00\x97\x98\x01\xbb\xc2\xf2\x36\xb8\x28\x19\xbc\x2f\x0b\xed\x2b\x0f\xe0\x1a\x51\xb9\xfe\x11\x9c\x9d\xbf\x2f\x48\x16\xbe\x41\xdb\xdf\x70\x51\xa0\x4b\xec\x01\x5c\x94\x1b\x38\x3c\x02\x7e\x49\x11\x1e\xe3\xed\xb3\x72\xb3\xc1\x94\x5f\xed\x7b\x00\x11\x5e\xf3\xa7\x62\xdb\x31\xde\xbe\xc0\x6b\x12\x61\xba\xbc\x28\x37\xcd\xd3\xf0\xf7\x02\x1f\x97\xe9\x05\xa6\x4b\xdf\xf3\x00\xe2\x0d\xa7\x94\xef\xe1\x0f\xe5\xfa\xe5\x9e\xbc\xdf\xff\x97\x78\xf6\xb7\x23\xc8\xe2\x44\xb0\x02\x40\x31\x2b\x69\xc6\xbf\xf7\x00\x6a\x4f\x67\xef\xf1\x21\x5c\xdd\x44\x14\x31\x5c\x40\xc1\x68\xb9\x66\x90\x62\x7e\x53\x01\xdb\x98\x5d\x35\x82\xc7\x09\x4e\x71\xc6\x0a\x0f\xa0\xaa\xf8\xf5\xe1\xd3\x28\x8a\x59\x4c\x32\x94\xbc\x62\x38\x2d\xb8\x12\xa5\x14\x12\x54\xb0\x57\x59\x84\x3f\x41\x9c\x31\xb9\x1e\x67\x91\x7c\x5e\x55\x40\x51\x76\x89\x61\x37\x8e\x3e\x05\xb0\x7b\x8d\x12\xce\x44\xf8\x9a\x92\x1c\x53\x16\x63\x7e\x4e\xbc\x81\x04\x67\xcb\x86\x1b\xf8\x89\xef\xe2\xeb\xa1\xae\x1b\x76\xf8\x35\x11\x62\xc8\xaa\x5e\xbe\x9c\xe1\x34\x4f\x10\xc3\xb0\x88\x30\xc5\x9b\x0d\x8e\x4e\xd7\x57\x38\x45\x6f\x6f\x72\xbc\x80\x50\x12\x23\xb5\x32\x54\x8a\xbc\xf8\x4c\xdd\x7a\xee\x8b\xd5\xe3\x5a\x1a\xea\x89\x7f\x67\x57\x94\x93\x76\x9b\xee\x7a\xda\xe3\xfa\xe3\xff\x56\x15\x18\xe6\x0e\x75\x1d\x36\xaa\x79\x55\xbc\xfc\x94\x13\xca\x30\x97\xba\xf5\x1e\xae\x93\xa4\x68\xfe\x5a\xa3\x14\x0f\x9e\x0a\x8d\xc1\x11\x74\x47\x1e\x97\x49\x82\x2e\x12\xfe\x7c\xaf\x5b\xe0\x64\xa4\x25\x31\xde\xc0\xae\xdd\x54\x40\x33\x94\x23\x4d\xc5\xed\xce\xce\x66\xea\xa1\x0d\x39\xed\xaf\xb3\xea\x27\x9a\x55\xf7\x56\x4a\xf7\x31\x2d\xac\x23\xe5\x1f\x8f\x1a\xa9\x6f\x08\x85\x77\x01\x34\x06\x2a\x8d\xb6\x31\x0c\x6d\xf1\xe1\x79\xa7\x24\x6e\x93\x8c\xa0\x28\x32\xed\xaf\xd0\xed\xce\x21\x08\x97\x21\x5e\xa3\xc4\x6f\x16\x4c\xd9\x9e\xdd\xfa\x1c\xf6\x27\x25\x98\x11\x36\xa0\xc8\xa5\x67\xc1\x98\xdd\x38\x07\xe6\xd9\x1a\xa8\xd0\x94\x08\x21\x03\xbe\x0f\x3a\xc6\xc5\xa2\xdd\xf0\x3f\x28\x29\xf1\xcb\x4f\x39\xc5\x45\x11\x93\x4c\xda\xf2\xc1\x9d\x1b\x33\xca\x73\x9c\x45\xcb\x7b\xbb\x32\x90\x16\xe1\x77\xf2\x38\x50\x66\x2c\xc5\xd4\x37\xee\x46\x96\x59\x9c\x78\xb5\xc7\xb3\xe2\x6f\x5a\x4e\x74\x66\xc4\x38\x63\x64\x5e\x46\x74\x24\x44\xed\x96\xa5\x0f\x4b\x99\x0d\x03\x99\x0d\x7d\xa1\x6a\xee\xe9\xdc\x8c\xce\xce\xe3\x8c\x61\xba\x41\x6b\x5c\xd5\x95\x1e\xd2\xf5\x20\x7e\xd0\xf9\x71\x8f\x80\xd0\x4a\x40\xe0\x59\x5d\xde\x6e\x3c\x62\x45\xeb\x9e\xca\x39\xdd\x4a\xbd\x63\x33\x92\x86\x2f\xe4\xd1\x59\x14\xff\x14\xc0\xb5\xef\xd6\xa8\xf0\xdc\x46\xcc\x62\xb9\xef\xd5\x9e\x5a\xe7\x69\xf8\xe8\x0a\x15\x2f\xe2\x62\x4d\xe3\x34\xce\x10\xc3\xd1\x6d\xa1\x12\xb9\x78\x8f\xd7\x4c\x4a\x0f\x41\x4e\x92\x9b\x94\xd0\xfc\x2a\x5e\x0f\xe1\x93\x4c\xf8\x25\xc5\x5f\x05\x42\xb5\x69\xda\x8c\x88\x9c\x2e\x52\xb2\x67\xa8\xc0\x3c\x2c\x3e\x23\xd1\x4d\x97\x92\xef\x05\x26\x09\xe9\x0f\x62\xd9\xce\x10\x23\x49\xd3\x21\x94\x5b\x4f\x4b\x2e\xff\xfb\xb4\xbc\x10\x7f\x76\x90\xe7\x02\x15\xd8\x64\xf2\xd7\xb2\x70\x73\x38\xca\xe0\x97\xf3\xc7\xa9\x99\x01\x02\x75\x33\x35\xfc\xf8\x69\x92\x9c\x6c\xcc\x1c\x2e\x72\x85\x26\x84\x5a\x0b\xf1\x43\xef\x37\xa3\xfb\x50\x84\xcb\xe6\xb8\xd6\x23\x7d\x7d\x87\x71\xe5\x1b\xfc\xb1\x8c\x29\x8e\x94\xa8\x11\x27\xce\x89\xfb\xa4\xa7\x3f\x15\x30\xbd\xae\xcf\xce\xcd\x85\x32\xc5\xfd\x9b\x34\x2c\x18\x0e\xaf\x2d\x33\x16\xb4\x6e\x1c\x6f\xb8\xb3\xc4\xd9\xa5\x70\x5e\x7b\x18\xf3\xb9\xbc\x17\x59\x99\x24\x8b\x46\xe4\xb6\x48\x12\xb4\x3a\xeb\x5c\x68\x40\xf8\x28\xd9\xa7\x49\xbc\xc6\xf3\x69\x5f\xf6\x6d\x6d\x84\xfe\x00\x68\x99\xb1\x38\xc5\x21\xf7\xea\xe7\x24\x2b\xca\x94\xdb\x9a\x81\x65\x1b\x9b\xda\xdb\x6b\x3f\xc5\x24\x7c\x79\xf2\xf3\x38\x5a\x1d\x51\xdb\x91\x55\x4a\x9e\x82\x11\x52\x90\x9c\x5d\xf1\xb5\xfb\xa8\xef\x54\xb2\xb3\xe4\x3a\x70\x5e\xcd\x5b\x34\x4c\x61\xfb\xc6\xfc\xdc\x83\xd2\xc3\xd2\xcc\xe2\xc9\xb7\xf5\xe2\x51\x0f\xce\x29\xc9\x1f\x1c\xf8\x7b\x73\x60\xb7\xd6\x26\xfd\x57\xf3\x5d\xe7\x29\xdf\xa9\x4c\x3f\xdf\x75\xe7\x38\x65\xe3\x30\x14\x17\x65\xc2\xec\xd0\xdd\xc8\xdc\xbb\xef\x02\xd8\xcd\x11\xc5\x19\x13\x5d\x15\x4b\x22\x6f\x1e\x73\xb1\x66\x24\xbb\x49\x49\x59\xf4\xdd\x56\x2d\x19\xa6\x7b\x67\x07\xa7\xdd\x64\x47\x01\x5d\x44\xc0\xdd\x42\x0d\xe1\x12\xfa\x73\x8c\x93\x48\x9c\x65\xf4\x0f\xcc\xcd\xe2\xb1\x01\xe3\x05\xba\xe6\xb2\x09\x75\x0b\xd4\x8f\x91\x07\x1f\x09\x80\x66\xaa\x77\xec\xb2\xc6\x88\xe6\x1f\x3f\x4c\x49\xa3\xc7\x9b\xe1\xba\x77\x65\xbc\x99\xa0\x96\xdb\x97\xa2\xcb\xbe\x66\xe9\x37\xb6\xb7\xda\x87\x63\x22\x3b\x95\x02\xfc\x6f\xf1\xdf\x29\x86\x84\x90\x0f\x71\x76\xc9\xab\xa8\x10\xf6\x57\x3d\x2b\x25\x54\x78\xc6\xf2\x9f\x8f\x1f\x07\xb0\x88\xb3\x6b\x94\xc4\x11\x54\x55\x77\x41\x5d\xc3\x35\x2f\xb4\x0e\xe1\x87\x8f\x8b\x60\x82\x5c\xff\xb3\xf2\x55\x27\x8e\x3b\xb0\xba\xc6\x70\x4c\x6b\xbe\x6b\xcd\x3a\xcc\xc6\xa1\xc2\x23\x18\x06\x9c\x91\x83\x6f\x9b\xdf\x0d\xe9\x49\x21\xa0\x2c\xb2\x79\xb6\xfa\xca\xf4\xab\x07\x67\x7f\x70\xf6\xfb\x77\x76\xc5\x69\x6b\x39\x5d\xea\xd6\x5c\x66\xf0\xec\x8e\x70\xee\x6a\x25\x9a\xea\x4a\x91\x8a\x1c\x89\x44\xb4\x08\x62\x83\x3c\xc2\x40\x5c\x18\x64\xac\xb5\xae\x9d\xeb\x04\x48\xea\x5c\x07\x54\x31\xd1\xae\xfe\xf7\xbe\x65\x54\x00\xad\x59\xa9\x3e\x07\xc7\x04\x5d\xab\xcd\x22\x1b\xf5\x10\xd4\xd3\x43\xa0\x18\x45\x40\xd1\x36\x00\x8a\x53\x72\x8d\x21\x43\x29\x8e\x04\xd2\x93\x4b\x02\x11\x7b\x50\x14\x01\x23\x90\xa2\x9c\x0b\x16\x6d\xf9\x11\x05\x0f\x26\x29\xfa\x80\x97\x29\xca\xcf\x24\x3a\x3f\x1f\xb4\xf7\x0d\x52\x7a\x93\x35\x25\x15\xbd\x2b\xd9\xf2\xee\x1b\x2d\x12\xb1\xb5\x83\x97\x4b\x41\xf2\x5e\x4b\xc9\xbc\xa1\xd9\x68\xb7\x33\xc2\x09\x66\x78\xd9\x9e\x18\x08\xc0\x46\xe3\x8c\x6d\x60\xf1\xc3\xc7\x05\xe8\x3e\xd2\x43\x79\x96\xa1\x46\x5f\x01\xcd\xc8\xa2\xa3\x17\x7e\x82\x1f\x55\x8d\x62\x69\x7c\x82\x55\xb4\x93\x83\x09\xe3\x5e\xbf\x1b\x85\x7c\x30\x7a\xad\x9d\xfe\x3e\x6f\xf8\x61\xcb\x1b\x4e\x3d\x5d\x73\x41\x0e\xc7\x15\xea\x8c\x3b\x9f\x59\x58\x84\x79\xf6\xe1\x1c\x8e\x24\x87\x46\xeb\xde\x9e\x6e\xed\xda\x68\x85\x36\x0e\xf8\x6f\x31\x00\x98\xe8\xf3\xaa\x91\xc0\x74\x97\xf7\xf3\xc6\x02\xa2\xe7\x4e\xf5\xc0\xc2\xab\x8e\x5e\xa4\xf1\x76\x44\x87\xf4\x51\x00\x17\x8f\x03\xb8\x78\xd2\xf4\x89\xe5\xd7\x5c\x37\xe2\x34\x6f\x87\xaf\xe0\x1f\x8f\xcc\x56\xf9\x54\xeb\xf8\x84\x1e\x93\xac\x85\x09\xb2\xcb\xea\x7b\x3b\x66\x5d\x56\x79\x3b\x3b\x4a\xae\xe2\x1a\x6f\xa7\xf6\x76\x38\x41\x73\xae\xd4\xef\x7b\x9a\x45\x9f\x7d\xe1\xac\x48\xdb\x38\xba\xdd\x8c\x74\xb7\x5f\xad\x84\x83\x4b\x15\x37\xb6\xc0\x5d\x55\xbc\x95\xa0\x62\xb5\x0a\xc4\x72\xe4\xfd\xc4\xc5\xb3\xed\x3a\x4b\xdb\xa0\xd7\x25\xe8\xf8\x03\xeb\x44\xcb\x6b\xe5\x50\x6c\xd1\x65\xf8\x9c\x64\x6b\xc4\x84\x39\x29\x83\xf0\x83\xc6\xda\xed\xd3\x10\x01\xb7\xcc\x11\x08\x78\x72\x96\x36\x6d\x7b\x73\x67\x25\xf7\x37\x13\xe1\x74\xdb\xfa\xec\x12\x7c\x38\x07\xe9\x07\x2d\x86\x37\x2a\x77\x13\xc2\x54\xd5\x6a\x5f\x31\x98\x70\xcc\xa7\x94\x0f\x71\xc6\x91\x2b\x10\x7e\x4c\xbb\x5f\x72\x5f\xc0\xfe\x4a\x0b\x5f\x07\x02\x60\x89\x0e\x82\x8b\x1e\xe3\x0d\x0c\xb9\xba\xae\xdb\xb7\x47\x2a\xed\xa4\x89\xd9\xc0\xc1\xe8\x6c\xa1\xb7\x66\xd7\x51\xa4\x34\xe1\x54\xb9\x6c\x4e\xe3\x6b\x49\xcb\x86\x23\x32\xed\x7d\x0f\x75\x66\xbf\xc0\x6c\x0e\x19\x60\xaa\x91\x7c\xc6\x59\xfe\x83\x3b\xd1\xe1\x42\x83\x8d\xaa\xda\x5a\x1a\xfd\x4f\x5f\xb4\x4a\xd3\x9c\xdd\x9c\xa4\x31\x93\x2c\x04\x24\x8d\xf9\xe1\xec\xa6\x33\xfd\xc5\x1f\x7d\x42\x87\xf0\x79\x40\xba\x6a\xb7\xde\xa1\x8c\xe6\x8b\xa8\x87\xc9\xbe\xba\x50\xa6\x4b\x8a\x83\xe1\x17\x3c\xec\xfe\x82\x46\xe2\xae\x8d\x41\x2b\xdc\x30\x78\xea\xf5\xc0\xf5\x2a\x40\xc2\xfc\x2f\x81\x5f\xad\x24\x0f\x3a\x01\x38\x59\x73\xbe\x59\xe2\x66\x49\x76\x50\x0d\x6e\x08\xb5\x74\xf5\x8d\x81\x67\x8f\xbb\xb3\x59\x4c\xb5\x24\x4d\xf0\x53\x1b\x70\x5d\x24\x8c\x37\x18\x45\x6d\x30\x0d\x60\xaf\x17\x71\x66\x0d\x39\x61\x74\x4a\x39\x40\x30\xae\x57\x14\x9a\xfa\x53\xbb\xdd\xbe\xce\x51\x8b\x36\x11\xa7\x49\xfe\x66\xeb\x95\xc7\xd2\xaa\xe2\xff\xf1\xd2\xc9\x18\x87\x18\x35\xae\x92\xcd\xa0\x72\xac\x6b\xbd\x6f\xae\x76\x0d\xfa\xdc\x14\x6d\xfd\x00\xf6\x2c\xd7\xf9\xca\xe5\xad\xb2\x77\x6d\x11\x5c\xce\x9c\x36\xdb\x81\xb1\xe5\x64\xcf\x62\xec\x66\xba\xd0\x65\x68\x49\x7c\x02\x35\x34\xa5\x68\x2f\xcb\xfd\x85\xc4\x6d\x79\x3f\x90\xc7\xa2\xfc\x35\x5a\x7f\xe0\x91\xba\xa5\x7c\xb1\x98\xd2\x84\xab\x97\x22\xa3\xcf\x30\x96\xae\x56\x90\x91\xad\xc0\xa3\x14\x5f\x96\x49\x33\xf7\xd3\x80\xe8\x2c\xa0\xd1\xce\x0b\x0b\x27\xce\x98\x40\x19\xd3\x18\x63\x16\xc2\xb8\x45\xee\xb4\xa3\x8b\x3f\x19\xb6\xb0\xe6\x91\x61\xd3\xfd\x9b\x49\xe6\x3e\x21\x85\x5d\x16\xf6\x46\x62\x9b\x52\xc6\xd3\x54\xdf\x62\x1d\x4d\x08\xc7\x6b\xbd\x13\xf6\x3c\x3f\x5f\xf5\xc9\x18\x49\x58\x7d\xa7\xee\xbf\x6c\x3b\x8a\x9c\x56\x2b\x78\x7b\xf2\xe2\xe4\x10\x6c\x4b\x86\x07\x8e\x00\x16\xcb\x49\xed\x2b\xbb\xc6\x21\xb7\x6f\x92\x7c\xfd\x66\x88\x07\xf0\x8e\x0b\x5a\x35\x35\xcf\xce\xdb\x35\x3f\x8a\x66\x60\x82\x33\x55\xf4\xf9\x63\xaf\x5c\xcd\xa9\xf6\xe6\xd7\x6b\xf7\x57\xab\x7d\xd3\x32\xe4\xdb\x56\x6a\xc3\xa2\xc4\x11\xec\xfe\x6a\x95\x5a\x5f\x26\xee\xc9\xe5\xbc\x68\x63\x63\xef\x4f\x58\xa7\x59\x19\xfb\x6e\xab\x34\xbd\x48\x9b\xac\xa9\x66\xd5\x49\xcd\x6f\x3e\x66\xe5\xb2\x01\x19\x1e\x08\x53\x7e\x61\x5e\x24\x62\xb1\x1e\xe4\xda\xf4\xfc\x5f\x1a\x33\x2c\xe2\x76\xbf\x80\xec\x60\xbe\xbe\xcd\x86\xab\xdb\x36\xa7\xb6\xae\xc1\xd9\x4d\xd0\xef\x5e\x05\x97\x9f\x03\x1b\x81\xfe\x54\x31\x68\x2b\x64\xba\xc7\xa2\xa9\xbf\x26\x69\x4e\x0a\xa1\xb1\xb6\x9e\xb1\x80\xf6\xc0\x40\x27\x8a\x7d\x77\x97\xd7\xd6\xe3\x1d\x76\x78\xc7\xf8\xb5\x15\x2c\xf6\x32\xce\x51\xc5\xdd\x9a\x15\x9b\xf1\xb8\xcb\x9b\xaf\xce\xe5\x43\x89\xf4\x50\x22\x3d\x94\x48\xf3\x0a\x99\x79\xa5\xc9\xad\x73\x84\x49\x47\x1b\x81\x5f\xf7\x2e\x9b\x91\x27\x06\x15\x9c\x56\xf5\x39\x53\xc5\x64\xba\x68\x45\x33\x95\x32\xfa\x04\xfb\xae\x22\x6a\x14\x28\x4d\xef\xd0\x40\x88\xad\xbc\xea\x8f\xec\x24\x99\x61\x18\x4e\x4c\xec\xa4\x9b\xf6\x7e\xb5\xd4\x2f\x6b\x5a\xb0\x22\x4d\xf3\x17\xd4\x05\x1e\x5f\x53\xa6\x72\x9b\xb1\xdf\x44\x85\x2a\xea\xaa\xb4\xfa\x56\xfc\x3a\xce\x76\xd4\xe0\xe7\xe7\x96\xfd\x1a\x3d\xda\x6f\xd9\xbe\x84\x9e\x31\x40\x6b\x9c\x8c\x2c\x0b\xad\xa7\x2b\x14\x21\x5c\xfc\x92\xc1\x52\x55\x98\x3e\xfc\xe8\x77\x28\xb1\x95\xb5\x6f\xe7\x65\x30\x61\x1d\x32\xd0\x28\xed\x39\x49\xf3\x04\x7f\x3a\x91\x35\x75\x78\xca\x68\xbc\x66\xb3\x39\xcb\x88\x6d\xa9\xe3\xe2\x2c\x12\xc4\x2a\x0b\xfb\x7f\x00\x00\x00\xff\xff\xa6\xfc\x83\x0a\x41\x40\x00\x00")
+var _templatesTupleserializerGotmpl = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5b\x5b\x6f\xdc\x36\x16\x7e\xb6\x7e\xc5\xd9\x81\xeb\x1d\x79\x65\x4d\x93\xec\x93\x17\x2e\x90\x5b\xb7\x29\x50\x3b\x88\xd3\xdd\x07\xc3\x48\xe9\x11\xc7\x66\xa2\x5b\x28\xca\x13\xaf\xa0\xff\xbe\x20\x29\x89\xa4\x44\x4a\x72\xe2\x38\x0d\xea\x97\xc4\x33\xe2\xe5\xdc\xcf\x77\xce\xd1\x54\x15\x44\x78\x43\x52\x0c\x0b\x56\xe6\x31\x3e\xc5\x94\xa0\x98\xfc\x0f\xd3\x05\xd4\xb5\xb7\x5a\xc1\xef\x69\x82\x68\x71\x85\xe2\x5f\x4f\x4f\x8e\xa1\x6c\x3f\x15\xc0\xae\x48\x01\x62\x13\xb0\x9b\x1c\xc3\x86\x66\x09\x20\x10\xcb\x10\xa5\xe8\xc6\xdb\x94\xe9\x1a\x96\x55\x15\xbe\xc1\x6b\x4c\xae\x31\x3d\x46\x09\xae\x6b\xd8\xaf\x2a\xc8\x51\xb1\x16\x17\x41\xc8\xbf\x85\xba\xf6\xcd\xab\x96\x14\x6d\xe1\xec\xfc\xe2\x86\x61\x1f\x30\xa5\x19\x85\xca\x03\x58\xad\xa0\x60\xe8\x12\xc3\xa3\x00\x2e\x31\x03\x76\x85\xe5\x6d\x70\x51\x32\x78\x5f\x16\xda\x57\x1e\xc0\x35\xa2\x72\xfd\x23\x38\x3b\x7f\x5f\x64\x69\xf8\x06\x6d\x7f\xc3\x45\x81\x2e\xb1\x07\x70\x51\x6e\xe0\xf0\x08\xf8\x25\x45\x78\x8c\xb7\xcf\xca\xcd\x06\x53\x7e\xb5\xef\x01\x44\x78\xcd\x9f\x8a\x6d\xc7\x78\xfb\x02\xaf\xb3\x08\xd3\xe5\x45\xb9\x69\x9e\x86\xbf\x17\xf8\xb8\x4c\x2e\x30\x5d\xfa\x9e\x07\x40\x36\x9c\x52\xbe\x87\x3f\x94\xeb\x97\x7b\xf2\x7e\xff\x5f\xe2\xd9\xdf\x8e\x20\x25\xb1\x60\x05\x80\x62\x56\xd2\x94\x7f\xef\x01\xd4\x9e\xce\xde\xe3\x43\xb8\xba\x89\x28\x62\xb8\x80\x82\xd1\x72\xcd\x20\xc1\xfc\xa6\x02\xb6\x84\x5d\x35\x82\xc7\x31\x4e\x70\xca\x0a\x0f\xa0\xaa\xf8\xf5\xe1\xd3\x28\x22\x8c\x64\x29\x8a\x5f\x31\x9c\x14\x5c\x89\x52\x0a\x31\x2a\xd8\xab\x34\xc2\x9f\x80\xa4\x4c\xae\xc7\x69\x24\x9f\x57\x15\x50\x94\x5e\x62\xd8\x25\xd1\xa7\x00\x76\xaf\x51\xcc\x99\x08\x5f\xd3\x2c\xc7\x94\x11\xcc\xcf\x21\x1b\x88\x71\xba\x6c\xb8\x81\x9f\xf8\x2e\xbe\x1e\xea\xba\x61\x87\x5f\x13\x21\x86\xac\xea\xe5\xcb\x19\x4e\xf2\x18\x31\x0c\x8b\x08\x53\xbc\xd9\xe0\xe8\x74\x7d\x85\x13\xf4\xf6\x26\xc7\x0b\x08\x25\x31\x52\x2b\x43\xa5\xc8\x8b\xcf\xd4\xad\xe7\xbe\x58\x3d\xae\xa5\xa1\x9e\xf8\x77\x76\x45\x39\x69\xb7\xe9\xae\xa7\x3d\xae\x3f\xfe\x6f\x55\x81\x61\xee\x50\xd7\x61\xa3\x9a\x57\xc5\xcb\x4f\x79\x46\x19\xe6\x52\xb7\xde\xc3\x75\x12\x17\xcd\x5f\x6b\x94\xe0\xc1\x53\xa1\x31\x38\x82\xee\xc8\xe3\x32\x8e\xd1\x45\xcc\x9f\xef\x75\x0b\x9c\x8c\xb4\x24\x92\x0d\xec\xda\x4d\x05\x34\x43\x39\xd2\x54\xdc\xee\xec\x6c\xa6\x1e\xda\x90\xd3\xfe\x3a\xab\x7e\xa2\x59\x75\x6f\xa5\x74\x1f\xd3\xc2\x3a\x52\xfe\xf1\xa8\x91\xfa\x26\xa3\xf0\x2e\x80\xc6\x40\xa5\xd1\x36\x86\xa1\x2d\x3e\x3c\xef\x94\xc4\x6d\x92\x65\x28\x8a\x4c\xfb\x2b\x74\xbb\x73\x08\xc2\x65\x88\xd7\x28\xf6\x9b\x05\x53\xb6\x67\xb7\x3e\x87\xfd\x49\x09\xa6\x19\x1b\x50\xe4\xd2\xb3\x60\xcc\x6e\x9c\x03\xf3\x6c\x0d\x54\x68\x4a\x84\x90\x01\xdf\x07\x1d\xe3\x62\xd1\x6e\xf8\x1f\x14\x97\xf8\xe5\xa7\x9c\xe2\xa2\x20\x59\x2a\x6d\xf9\xe0\xce\x8d\x19\xe5\x39\x4e\xa3\xe5\xbd\x5d\x19\x48\x8b\xf0\x3b\x79\x1c\x28\x33\x96\x62\xea\x1b\x77\x23\xcb\x94\xc4\x5e\xed\xf1\xac\xf8\x9b\x96\x13\x9d\x19\x91\xa4\x2c\x9b\x97\x11\x1d\x09\x51\xbb\x65\xe9\xc3\x52\x66\xc3\x40\x66\x43\x5f\xa8\x9a\x7b\x3a\x37\xa3\xb3\x73\x92\x32\x4c\x37\x68\x8d\xab\xba\xd2\x43\xba\x1e\xc4\x0f\x3a\x3f\xee\x11\x10\x5a\x09\x08\x3c\xab\xcb\xdb\x8d\x47\xac\x68\xdd\x53\x39\xa7\x5b\xa9\x77\x6c\x46\xd2\xf0\x85\x3c\x3a\x8b\xe2\x9f\x02\xb8\xf6\xdd\x1a\x15\x9e\xdb\x88\x59\x2c\xf7\xbd\xda\x53\xeb\x3c\x0d\x1f\x5d\xa1\xe2\x05\x29\xd6\x94\x24\x24\x45\x0c\x47\xb7\x85\x4a\xd9\xc5\x7b\xbc\x66\x52\x7a\x08\xf2\x2c\xbe\x49\x32\x9a\x5f\x91\xf5\x10\x3e\xc9\x84\x5f\x52\xfc\x55\x20\x54\x9b\xa6\xcd\x88\xc8\xe9\xca\x4a\xf6\x0c\x15\x98\x87\xc5\x67\x59\x74\xd3\xa5\xe4\x7b\x81\x49\x42\xfa\x83\x58\xb6\x33\xc4\x48\xd2\x74\x32\xca\xad\xa7\x25\x97\xff\x7d\x5a\x5e\x88\x3f\x3b\xc8\x73\x81\x0a\x6c\x32\xf9\x6b\x59\xb8\x39\x1c\x65\xf0\xcb\xf9\xe3\xd4\xcc\x00\x81\xba\x99\x1a\x7e\xfc\x34\x8e\x4f\x36\x66\x0e\x17\xb9\x42\x13\x42\xad\x85\xf8\xa1\xf7\x9b\xd1\x7d\x28\xc2\x65\x73\x5c\xeb\x91\xbe\xbe\xc3\xb8\xf2\x0d\xfe\x58\x12\x8a\x23\x25\x6a\xc4\x89\x73\xe2\x3e\xe9\xe9\x4f\x05\x4c\xaf\xeb\xb3\x73\x73\xa1\x4c\x71\xff\xce\x1a\x16\x0c\x87\xd7\x96\x19\x0b\x5a\x37\x26\x1b\xee\x2c\x24\xbd\x14\xce\x6b\x0f\x63\x3e\x97\xf7\x22\x2d\xe3\x78\xd1\x88\xdc\x16\x49\x82\x56\x67\x9d\x0b\x0d\x08\x1f\x25\xfb\x34\x26\x6b\x3c\x9f\xf6\x65\xdf\xd6\x46\xe8\x0f\x80\x96\x29\x23\x09\x0e\xb9\x57\x3f\xcf\xd2\xa2\x4c\xb8\xad\x19\x58\xb6\xb1\xa9\xbd\xbd\xf6\x13\xc9\xc2\x97\x27\x3f\x8f\xa3\xd5\x11\xb5\x1d\x59\xa5\xe4\x29\x18\x21\x05\xc9\xd9\x15\x5f\xbb\x8f\xfa\x4e\x25\x3b\x4b\xae\x03\xe7\xd5\xbc\x45\xc3\x14\xb6\x6f\xcc\xcf\x3d\x28\x3d\x2c\xcd\x2c\x9e\x7c\x5b\x2f\x1e\xf5\xe0\x9c\x66\xf9\x83\x03\x7f\x6f\x0e\xec\xd6\xda\xa4\xff\x6a\xbe\xeb\x3c\xe5\x3b\x95\xe9\xe7\xbb\xee\x1c\xa7\x6c\x1c\x86\xe2\xa2\x8c\x99\x1d\xba\x1b\x99\x7b\xf7\x5d\x00\xbb\x39\xa2\x38\x65\xa2\xab\x62\x49\xe4\xcd\x63\x2e\xd6\x34\x4b\x6f\x92\xac\x2c\xfa\x6e\xab\x96\x0c\xd3\xbd\xb3\x83\xd3\x6e\xb2\xa3\x80\x2e\x22\xe0\x6e\xa1\x86\x70\x33\xfa\x33\xc1\x71\x24\xce\x32\xfa\x07\xe6\x66\xf1\xd8\x80\xf1\x02\x5d\x73\xd9\x84\xba\x05\xea\xc7\xc8\x83\x8f\x04\x40\x33\xd5\x3b\x76\x59\x63\x44\xf3\x8f\x1f\xa6\xa4\xd1\xe3\xcd\x70\xdd\xbb\x92\x6c\x26\xa8\xe5\xf6\xa5\xe8\xb2\xaf\x59\xfa\x8d\xed\xad\xf6\xe1\x38\x93\x9d\x4a\x01\xfe\xb7\xf8\xef\x14\x43\x9c\x65\x1f\x48\x7a\xc9\xab\xa8\x10\xf6\x57\x3d\x2b\xcd\xa8\xf0\x8c\xe5\x3f\x1f\x3f\x0e\x60\x41\xd2\x6b\x14\x93\x08\xaa\xaa\xbb\xa0\xae\xe1\x9a\x17\x5a\x87\xf0\xc3\xc7\x45\x30\x41\xae\xff\x59\xf9\xaa\x13\xc7\x1d\x58\x5d\x63\x38\xa6\x35\xdf\xb5\x66\x1d\x66\xe3\x50\xe1\x11\x0c\x03\xce\xc8\xc1\xb7\xcd\xef\x86\xf4\xa4\x10\x50\x1a\xd9\x3c\x5b\x7d\x65\xfa\xd5\x83\xb3\x3f\x38\xfb\xfd\x3b\xbb\xe2\xb4\xb5\x9c\x2e\x75\x6b\x2e\x33\x78\x76\x47\x38\x77\xb5\x12\x4d\x75\xa5\x48\x45\x8e\x44\x22\x5a\x04\xb1\x41\x1e\x61\x20\x2e\x0c\x32\xd6\x5a\xd7\xce\x75\x02\x24\x75\xae\x03\xaa\x98\x68\x57\xff\x7b\xdf\x32\x2a\x80\xd6\xac\x54\x9f\x83\x63\x82\xae\xd5\x66\x91\x8d\x7a\x08\xea\xe9\x21\x50\x8c\x22\xa0\x68\x1b\x00\xc5\x49\x76\x8d\x21\x45\x09\x8e\x04\xd2\x93\x4b\x02\x11\x7b\x50\x14\x01\xcb\x20\x41\x39\x17\x2c\xda\xf2\x23\x0a\x1e\x4c\x12\xf4\x01\x2f\x13\x94\x9f\x49\x74\x7e\x3e\x68\xef\x1b\xa4\xf4\x26\x6b\x4a\x2a\x7a\x57\xb2\xe5\xdd\x37\x5a\x24\x62\x6b\x07\x2f\x97\x82\xe4\xbd\x96\x92\x79\x43\xb3\xd1\x6e\x67\x84\x63\xcc\xf0\xb2\x3d\x31\x10\x80\x8d\x92\x94\x6d\x60\xf1\xc3\xc7\x05\xe8\x3e\xd2\x43\x79\x96\xa1\x46\x5f\x01\xcd\xc8\xa2\xa3\x17\x7e\x82\x1f\x55\x8d\x62\x69\x7c\x82\x55\xb4\x93\x83\x09\xe3\x5e\xbf\x1b\x85\x7c\x30\x7a\xad\x9d\xfe\x3e\x6f\xf8\x61\xcb\x1b\x4e\x3d\x5d\x73\x41\x0e\xc7\x15\xea\x8c\x3b\x9f\x59\x58\x84\x79\xf6\xe1\x1c\x8e\x24\x87\x46\xeb\xde\x9e\x6e\xed\xda\x68\x85\x36\x0e\xf8\x6f\x31\x00\x98\xe8\xf3\xaa\x91\xc0\x74\x97\xf7\xf3\xc6\x02\xa2\xe7\x4e\xf5\xc0\xc2\xab\x8e\x5e\xa4\xf1\x76\x44\x87\xf4\x51\x00\x17\x8f\x03\xb8\x78\xd2\xf4\x89\xe5\xd7\x5c\x37\xe2\x34\x6f\x87\xaf\xe0\x1f\x8f\xcc\x56\xf9\x54\xeb\xf8\x84\x1e\x67\x69\x0b\x13\x64\x97\xd5\xf7\x76\xcc\xba\xac\xf2\x76\x76\x94\x5c\xc5\x35\xde\x4e\xed\xed\x70\x82\xe6\x5c\xa9\xdf\xf7\x34\x8d\x3e\xfb\xc2\x59\x91\xb6\x71\x74\xbb\x19\xe9\x6e\xbf\x5a\x09\x07\x97\x2a\x6e\x6c\x81\xbb\xaa\x78\x2b\x41\xc5\x6a\x15\x88\xe5\xc8\xfb\x89\x8b\x67\xdb\x75\x96\xb6\x41\xaf\x4b\xd0\xf1\x07\xd6\x89\x96\xd7\xca\xa1\xd8\xa2\xcb\xf0\x79\x96\xae\x11\x13\xe6\xa4\x0c\xc2\x0f\x1a\x6b\xb7\x4f\x43\x04\xdc\xea\x8d\x40\xe4\x28\x6d\xda\xf4\xe6\x8e\x4a\xee\x6f\x24\xc2\xe9\xb6\xb5\xd9\x25\xf6\x70\xce\xd1\x0f\x5a\x08\x6f\x14\xee\x26\x82\xa9\xaa\xd5\xbe\x62\x30\xe6\x90\x4f\xe9\x1e\x48\xca\x81\x2b\x64\xfc\x98\x76\xbf\xe4\xbe\x80\xfd\x95\x16\xbd\x0e\x04\xbe\x12\x0d\x04\x17\x3d\xc6\x0b\x18\x72\x75\x5d\xb7\x2f\x8f\x54\xda\x49\x13\xa3\x81\x83\xd1\xd1\x42\x6f\xcd\xae\xa3\x46\x69\xa2\xa9\xf2\xd8\x9c\x92\x6b\x49\xcb\x86\x03\x32\xed\x75\x0f\x75\x66\xbf\xbe\x6c\x0e\x19\x40\xaa\x91\x74\xc6\x59\xfe\x83\xfb\xd0\xe1\x82\x3b\xcf\x09\x25\x97\x24\x45\xb1\x82\x6b\x8d\xc6\x96\x46\x1b\xd4\x17\x1d\xd3\x24\x67\x37\x27\x09\x61\x92\x95\x20\x4b\x08\xbf\x84\xdd\x74\x1e\xb0\xf8\xa3\x4f\xf0\x10\x45\x0f\x58\x50\x5d\xd7\x3b\x94\xd5\x7c\x51\xf5\xa0\xd9\xbd\x09\x67\xba\xc2\x38\x18\x7e\xc1\xa3\xf0\x2f\x68\x24\x0c\xdb\x18\xb5\xa2\x0f\x83\xa7\x5e\x4b\x5c\x2f\x0a\x24\xea\xff\x12\x34\xd6\x4a\xf4\xa0\x13\x80\x93\x35\xe7\x8b\x26\x6e\x96\x64\x43\xd5\xe0\x26\xa3\x96\x26\xbf\x31\xff\xec\x71\x77\x36\x8b\xa9\x96\xa4\x09\x7e\x6a\x03\xbd\x8b\xfc\xf1\x06\xa3\xa8\x0d\xae\x01\xec\xf5\x22\xd0\xac\x99\x27\x8c\x0e\x2d\x07\x80\xc6\xf5\xc6\x42\x53\x8e\x6a\xb7\xdb\xd7\x39\x4a\xd3\x26\x02\x35\x58\xc0\xec\xc4\xf2\xd8\x5a\x55\xfc\x3f\x5e\x49\x19\xd3\x11\xa3\xe4\x55\xb2\x19\x14\x92\x75\xad\xb7\xd1\xd5\xae\x41\xdb\x9b\xa2\xad\x1f\xc0\x9e\xe5\x3a\x5f\xb9\xbe\x55\xf6\xae\x2d\x82\xcb\x99\xc3\x67\x3b\x4e\xb6\x9c\xec\x59\x8c\xdd\x4c\x1f\xba\x0c\x2d\x89\x50\x80\x88\xa6\x32\xed\x65\xbd\xbf\x90\xb8\x2d\xaf\x0b\xf2\x58\x94\xbf\x46\xeb\x0f\x3c\x62\xb7\x94\x2f\x16\x53\x9a\x70\xb5\x56\x64\xf4\x19\xc6\xd2\xd5\x0a\xd2\x6c\x2b\xe0\x29\xc5\x97\x65\xdc\x8c\x01\x35\x5c\x3a\x0b\x78\xb4\xe3\xc3\xc2\x89\x3b\x26\x50\xc7\x34\xe6\x98\x85\x38\x6e\x91\x43\xed\x68\xe3\x4f\x8a\x35\xac\xf9\x64\xd8\x8b\xff\x66\x12\xfa\x16\x10\xc3\x2e\x13\x7b\x9f\xb1\x4d\x31\xe3\x69\xab\x6f\xc1\x8e\x1e\x85\xe3\xad\xdf\x09\xfb\x9e\x9f\xbf\xfa\x64\x8c\x24\xb0\xbe\x93\xf7\xdf\xc5\x1d\x45\x52\xab\x15\xbc\x3d\x79\x71\x72\x08\xb6\x25\xc3\x03\x47\x00\x8c\xe5\xa4\xf6\x8d\x5e\xe3\x90\xdb\xf7\x50\xbe\x7e\xaf\xc4\x03\x78\xc7\x05\xad\x7a\x9e\x67\xe7\xed\x9a\x1f\x45\xaf\x30\xc6\xa9\x2a\x0a\xfd\xb1\x37\xb2\xe6\x54\x83\xf3\xeb\xb9\xfb\xab\xe5\xbe\x69\x79\xf2\xed\xa3\xab\xbd\x58\x71\x04\xbf\xbf\x6a\x25\xd7\x97\x8d\x7b\xd0\x39\x2f\xfa\xd8\xd8\xfc\x13\xd6\x71\x56\xc6\xbe\xdb\x2a\x4e\x2f\xe2\x26\x6b\xae\x59\x75\x54\xf3\x13\x91\x59\xb9\x6d\x40\x86\x07\xc2\xa4\x5f\x98\x17\x89\xd8\xac\x07\xbd\x36\x5d\xff\x97\x12\x86\x45\x1c\xef\x17\x98\x5d\x19\xa0\x6f\xb3\xe1\xee\xb6\x2b\xaa\xad\x6b\x70\x78\x93\x04\xba\x37\xc7\xe5\xe7\xc0\x46\xa0\x3f\x55\x2c\xda\x0a\x9d\xee\xb1\x98\x01\xac\xb3\x24\xcf\x0a\xa1\xb1\xb6\xde\xb1\x80\xfa\xc0\x40\x2b\x8a\x7d\x77\x53\xd8\xd6\x12\x1e\x36\x84\xc7\xf8\xb5\x15\x34\xf6\x32\xcf\x51\xe5\xdd\x9a\x15\x9b\xf1\xb8\xcb\x9f\xaf\xce\xe5\x43\x09\xf5\x50\x42\x3d\x94\x50\xce\x12\x6a\xd4\x0a\xe7\x95\x2e\xb7\xce\x19\x26\x1d\x6d\x44\x7e\xdd\xbb\x6c\x46\xde\x18\x54\x78\x5a\x55\xe8\x4c\x1d\x93\xe9\xa3\x15\xcd\x54\x0a\xe9\x13\xec\xbb\x8a\xac\x51\xe0\x34\xbd\x43\x03\x25\xb6\xf2\xab\x3f\xf1\x93\x64\x86\x61\x38\x31\xf0\x93\x6e\x6b\x9d\xf8\xa9\xb2\xa7\x05\x2f\xd2\x34\x7f\x41\x5d\x20\xf2\x35\x65\x2a\xf7\x19\xfb\x49\x55\xa8\xa2\xb0\x4a\xb3\x6f\xc5\x8f\xeb\x6c\x47\x0d\x7e\xbd\x6e\xd9\xaf\xd1\xa3\xfd\x14\xee\x4b\xe8\x19\x03\xb8\xc6\xc9\xc8\xb2\xd0\x7a\xba\x42\x15\xc2\xc5\x2f\x19\x2c\x55\x05\xea\xc3\x8f\x7e\x87\x1a\x5b\x59\xfb\x76\x5e\x06\x03\xda\x21\x03\x8d\xd2\x9e\x67\x49\x1e\xe3\x4f\x27\xb2\xe6\x0e\x4f\x19\x25\x6b\x36\x9b\xb3\x34\xb3\x2d\x75\x5c\x9c\x46\x82\x58\x65\x61\xff\x0f\x00\x00\xff\xff\xf7\x50\xc1\x64\x80\x40\x00\x00")
 
 func templatesTupleserializerGotmplBytes() ([]byte, error) {
 	return bindataRead(
@@ -675,8 +675,8 @@ func templatesTupleserializerGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/tupleserializer.gotmpl", size: 16449, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
-	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x54, 0x2b, 0xea, 0xa9, 0x39, 0x75, 0x5c, 0x29, 0x29, 0x76, 0xb4, 0x2, 0x34, 0x6a, 0xdc, 0x5, 0x95, 0x56, 0x85, 0x87, 0xce, 0xc, 0xbd, 0x1f, 0x70, 0xca, 0x8e, 0x9e, 0x66, 0x17, 0xa3, 0x1c}}
+	info := bindataFileInfo{name: "templates/tupleserializer.gotmpl", size: 16512, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
+	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2b, 0xb6, 0xfd, 0xcf, 0x74, 0x6, 0x9a, 0x2a, 0x84, 0xef, 0x17, 0x4b, 0x97, 0x48, 0x4c, 0x3a, 0x69, 0x42, 0x61, 0x93, 0xb2, 0x26, 0x23, 0xf, 0x53, 0x13, 0x6f, 0x39, 0xd9, 0xd9, 0x9b, 0x42}}
 	return a, nil
 }
 
@@ -695,7 +695,7 @@ func templatesValidationCustomformatGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/validation/customformat.gotmpl", size: 611, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/validation/customformat.gotmpl", size: 611, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x92, 0xe7, 0x93, 0x76, 0x84, 0x44, 0xed, 0x9b, 0x9, 0xdf, 0xa, 0xaa, 0x1d, 0x36, 0xf, 0xff, 0x66, 0x5f, 0xbf, 0xa5, 0xa5, 0x42, 0x83, 0x88, 0xe9, 0xf0, 0xeb, 0x6, 0xb2, 0xe6, 0xe1, 0xd3}}
 	return a, nil
 }
@@ -715,7 +715,7 @@ func templatesValidationPrimitiveGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/validation/primitive.gotmpl", size: 2173, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/validation/primitive.gotmpl", size: 2173, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x25, 0xbe, 0x74, 0x9c, 0x71, 0xed, 0xcf, 0xcd, 0xb, 0x28, 0x65, 0x23, 0xe9, 0x2e, 0xb1, 0x83, 0x23, 0x14, 0x82, 0xb0, 0x5d, 0x77, 0xa1, 0x0, 0x72, 0x9f, 0xd6, 0xa2, 0x24, 0xd, 0x91, 0xb5}}
 	return a, nil
 }
@@ -735,7 +735,7 @@ func templatesValidationStructfieldGotmpl() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "templates/validation/structfield.gotmpl", size: 909, mode: os.FileMode(0644), modTime: time.Unix(1568810519, 0)}
+	info := bindataFileInfo{name: "templates/validation/structfield.gotmpl", size: 909, mode: os.FileMode(0644), modTime: time.Unix(1482416923, 0)}
 	a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf6, 0x13, 0x95, 0x70, 0x16, 0x59, 0x7, 0x37, 0x93, 0xb, 0x23, 0xc4, 0x1f, 0xd2, 0xb4, 0x7, 0x7, 0x84, 0xf7, 0xb2, 0x67, 0x1b, 0x9d, 0x7f, 0x24, 0x5b, 0x50, 0x51, 0x88, 0x64, 0xb0, 0xaa}}
 	return a, nil
 }
diff --git a/generator/support.go b/generator/support.go
index 6d2131ab..742f0bdd 100644
--- a/generator/support.go
+++ b/generator/support.go
@@ -91,7 +91,7 @@ func newAppGenerator(name string, modelNames, operationIDs []string, opts *GenOp
 	}
 
 	if opts.PropertiesSpecOrder {
-		opts.Spec = withAutoXOrder(opts.Spec)
+		opts.Spec = WithAutoXOrder(opts.Spec)
 	}
 
 	opts.Spec, specDoc, err = loadSpec(opts.Spec)
@@ -178,7 +178,7 @@ type appGenerator struct {
 	GenOpts           *GenOpts
 }
 
-func withAutoXOrder(specPath string) string {
+func WithAutoXOrder(specPath string) string {
 	lookFor := func(ele interface{}, key string) (yaml.MapSlice, bool) {
 		if slice, ok := ele.(yaml.MapSlice); ok {
 			for _, v := range slice {
diff --git a/generator/templates/tupleserializer.gotmpl b/generator/templates/tupleserializer.gotmpl
index fa854ccd..de4fccd5 100644
--- a/generator/templates/tupleserializer.gotmpl
+++ b/generator/templates/tupleserializer.gotmpl
@@ -242,7 +242,7 @@ func ({{.ReceiverName}} {{ pascalize .Name }}) MarshalJSON() ([]byte, error) { {
 }
 {{ end }}
 
-{{ define "allOfSerializer" }} 
+{{ define "allOfSerializer" }}
   {{- $receiverName := .ReceiverName }}
 // UnmarshalJSON unmarshals this object from a JSON structure
 func ({{.ReceiverName}} *{{ pascalize .Name }}) UnmarshalJSON(raw []byte) error {
@@ -256,13 +256,13 @@ func ({{.ReceiverName}} *{{ pascalize .Name }}) UnmarshalJSON(raw []byte) error
           {{- if not $.IsExported }}
             {{ template "privstructfield" . }}
           {{- else }}
-            {{ pascalize .Name}} {{ template "schemaType" . }} `json:"{{ .Name }}{{ if and (not .Required) .IsEmptyOmitted }},omitempty{{ end }}"`
+            {{ pascalize .Name}} {{ template "schemaType" . }} `json:"{{ .OriginalName }}{{ if and (not .Required) .IsEmptyOmitted }},omitempty{{ end }}"`
           {{- end }}
         {{ else }}
           {{ if not $.IsExported }}
             {{ template "privstructfield" . }}
           {{ else }}
-            {{ pascalize .Name}} json.RawMessage `json:"{{ .Name }}{{ if and (not .Required) .IsEmptyOmitted }},omitempty{{ end }}"`
+            {{ pascalize .Name}} json.RawMessage `json:"{{ .OriginalName }}{{ if and (not .Required) .IsEmptyOmitted }},omitempty{{ end }}"`
           {{ end }}
         {{ end }}
       {{- end }}
@@ -303,13 +303,13 @@ func ({{.ReceiverName}} *{{ pascalize .Name }}) UnmarshalJSON(raw []byte) error
         {{- if not $.IsExported }}
           {{ template "privstructfield" . }}
         {{- else }}
-          {{ pascalize .Name}} {{ template "schemaType" . }} `json:"{{ .Name }}{{ if and (not .Required) .IsEmptyOmitted }},omitempty{{ end }}"`
+          {{ pascalize .Name}} {{ template "schemaType" . }} `json:"{{ .OriginalName }}{{ if and (not .Required) .IsEmptyOmitted }},omitempty{{ end }}"`
         {{- end }}
       {{- else }}
         {{- if not $.IsExported }}
           {{ template "privstructfield" . }}
         {{- else }}
-          {{ pascalize .Name}} json.RawMessage `json:"{{ .Name }}{{ if and (not .Required) .IsEmptyOmitted }},omitempty{{ end }}"`
+          {{ pascalize .Name}} json.RawMessage `json:"{{ .OriginalName }}{{ if and (not .Required) .IsEmptyOmitted }},omitempty{{ end }}"`
         {{- end }}
       {{- end }}
     {{ end }}
@@ -342,13 +342,13 @@ func ({{.ReceiverName}} {{ pascalize .Name }}) MarshalJSON() ([]byte, error) {
           {{ if not $.IsExported }}
             {{ template "privstructfield" . }}
           {{ else }}
-            {{ pascalize .Name}} {{ template "schemaType" . }} `json:"{{ .Name }}{{ if and (not .Required) .IsEmptyOmitted }},omitempty{{ end }}"`
+            {{ pascalize .Name}} {{ template "schemaType" . }} `json:"{{ .OriginalName }}{{ if and (not .Required) .IsEmptyOmitted }},omitempty{{ end }}"`
           {{ end }}
         {{- else }}
           {{ if not $.IsExported }}
             {{ template "privstructfield" . }}
           {{ else }}
-            {{ pascalize .Name}} json.RawMessage `json:"{{ .Name }}{{ if and (not .Required) .IsEmptyOmitted }},omitempty{{ end }}"`
+            {{ pascalize .Name}} json.RawMessage `json:"{{ .OriginalName }}{{ if and (not .Required) .IsEmptyOmitted }},omitempty{{ end }}"`
           {{ end}}
         {{- end }}
       {{ end }}
@@ -393,13 +393,13 @@ func ({{.ReceiverName}} {{ pascalize .Name }}) MarshalJSON() ([]byte, error) {
         {{- if not $.IsExported }}
           {{ template "privstructfield" . }}
         {{- else }}
-          {{ pascalize .Name}} {{ template "schemaType" . }} `json:"{{ .Name }}{{ if and (not .Required) .IsEmptyOmitted }},omitempty{{ end }}"`
+          {{ pascalize .Name}} {{ template "schemaType" . }} `json:"{{ .OriginalName }}{{ if and (not .Required) .IsEmptyOmitted }},omitempty{{ end }}"`
         {{- end }}
       {{- else }}
         {{- if not $.IsExported }}
           {{ template "privstructfield" . }}
         {{- else }}
-          {{ pascalize .Name}} json.RawMessage `json:"{{ .Name }}{{ if and (not .Required) .IsEmptyOmitted }},omitempty{{ end }}"`
+          {{ pascalize .Name}} json.RawMessage `json:"{{ .OriginalName }}{{ if and (not .Required) .IsEmptyOmitted }},omitempty{{ end }}"`
         {{- end }}
       {{- end }}
     {{ end }}


Test patch:
diff --git a/generator/model_test.go b/generator/model_test.go
index f4d7d2b4..70d68aaa 100644
--- a/generator/model_test.go
+++ b/generator/model_test.go
@@ -2499,7 +2499,7 @@ func TestGenModel_KeepSpecPropertiesOrder(t *testing.T) {
 
 	specDoc, err := loads.Spec(ymlFile)
 	assert.NoError(t, err)
-	orderedSpecDoc, err := loads.Spec(withAutoXOrder(ymlFile))
+	orderedSpecDoc, err := loads.Spec(WithAutoXOrder(ymlFile))
 	assert.NoError(t, err)
 
 	definitions := specDoc.Spec().Definitions
diff --git a/generator/moreschemavalidation_fixtures_test.go b/generator/moreschemavalidation_fixtures_test.go
index f045db01..25dd0f52 100644
--- a/generator/moreschemavalidation_fixtures_test.go
+++ b/generator/moreschemavalidation_fixtures_test.go
@@ -1,5 +1,32 @@
+// Copyright 2015 go-swagger maintainers
+//
+// Licensed 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 generator
 
+func initFixture2071() {
+	f := newModelFixture("../fixtures/bugs/2071/fixture-2071.yaml", "check allOf serializer when x-go-name is present")
+	flattenRun := f.AddRun(false).WithMinimalFlatten(true)
+	flattenRun.AddExpectations("cat.go", []string{
+		"var dataAO1 struct {\n\t\tSomeAbility *string `json:\"ability,omitempty\"`",
+	},
+		// not expected
+		append(todo, "SomeAbility *string `json:\"SomeAbility,omitempty\"`"),
+		// output in log
+		noLines,
+		noLines)
+}
+
 func initFixture1479Part() {
 	// testing ../fixtures/bugs/1479/fixture-1479-part.yaml with flatten and expand (--skip-flatten)
 
diff --git a/generator/moreschemavalidation_test.go b/generator/moreschemavalidation_test.go
index 0eb7bea0..8ba4eead 100644
--- a/generator/moreschemavalidation_test.go
+++ b/generator/moreschemavalidation_test.go
@@ -203,6 +203,9 @@ func initModelFixtures() {
 
 	// required base type
 	initFixture1993()
+
+	// allOf marshallers
+	initFixture2071()
 }
 
 /* Template initTxxx() to prepare and load a fixture: