From 90295cd6899f032ee9832f91c200c8e96c437ee8 Mon Sep 17 00:00:00 2001 From: Jonathan Amsterdam Date: Mon, 26 Oct 2020 10:31:27 -0400 Subject: internal/testing/sample,etc.: add package source Add encoded source to the sample Documentation value, and render it to get the documentation HTML. Use the package in internal/godoc/testdata. I had hoped to use the godoc package in an init function to create the needed values, but that caused an import cycle between sample and the godoc test package. So instead, a small program invoked with `go generate` uses godoc to generate the values and embed them in a Go file. This change required a few other changes: internal/postgres: Always insert source when comparing Documentation. internal/frontend: Change the strings we look for in doc to match the one in the sample package. internal/frontend: Remove the check on HTML ids. This was added when I was doing safehtml, when I was being strict about HTML ids. The safehtml package wants ids to conform to some strict rules to avoid certain attacks, and I tried to follow those rules. But in the end I had to be more forgiving, or I would have broken anchor tags to Go symbols, like pkg.go.dev/fmt#Println. (safehtml does not consider "Println" a safe identifier unless it is a constant string.) The checkIDs function was added somewhere in the middle of that process, and it worked until now because the value of sample.DocumentationHTML was an ordinary text string with no ids, not real HTML doc. It was actually only checking the ids for license files, and those do contain a hyphen. I don't think its loss is important. Change-Id: I4019c56b216aaf1a4e92a6167c2af1eef4cfbf89 Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/265297 Trust: Jonathan Amsterdam Run-TryBot: Jonathan Amsterdam TryBot-Result: kokoro Reviewed-by: Jamal Carvalho --- internal/testing/sample/documentation.gen.go | 362 +++++++++++++++++++++++++++ internal/testing/sample/gen_documentation.go | 85 +++++++ internal/testing/sample/sample.go | 31 +-- 3 files changed, 460 insertions(+), 18 deletions(-) create mode 100644 internal/testing/sample/documentation.gen.go create mode 100644 internal/testing/sample/gen_documentation.go (limited to 'internal/testing/sample') diff --git a/internal/testing/sample/documentation.gen.go b/internal/testing/sample/documentation.gen.go new file mode 100644 index 00000000..3ee3c776 --- /dev/null +++ b/internal/testing/sample/documentation.gen.go @@ -0,0 +1,362 @@ + +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sample + +import ( + "github.com/google/safehtml/testconversions" + "golang.org/x/pkgsite/internal" +) + + + +var ( + DocumentationHTML = testconversions.MakeHTMLForTest(` + + + + +
+

Overview

+ +

Package p is for testing godoc.Render. There are a lot +of other things to say, but that's the gist of it. +

+
+

Index

+ + +
+

Examples

+ +
+

Constants

+
+const C = 1
+

const +

+
+

Variables

+
+var V = unexp()
+

var +

+

func F

+
+func F(t time.Time)
+

exported func +

+
+Example +
+

executable example +

+

Code:

+ +
+package main
+
+import (
+	"golang.org/x/pkgsite/internal/godoc/testdata/p"
+)
+
+func main() {
+	// example comment
+	p.F()
+}
+
+ +
+ok
+
+
+
+ + +
+ +

type I

+
+type I interface {
+	M1()
+}
+

I is an interface. +

+

type S1

+
+type S1 struct {
+	F int // field
+}
+ +

type S2

+
+type S2 struct {
+	S1 // embedded struct
+
+	H int
+	// contains filtered or unexported fields
+}
+ +

type T

+
+type T int
+

type +

+
+const CT T = 3
+

typeConstant +

+ +
+var VT T
+

typeVariable +

+ +

func TF

+
+func TF() T
+

typeFunc +

+
+Example +
+

non-executable example +

+

Code:

+ +
+// example comment
+app := App{}
+app.Name = "greet"
+_ = app.Run([]string{"greet"})
+
+ +
+
+ +

func (T) M

+
+func (T) M()
+

method +BUG(uid): this verifies that notes are rendered +

+
+ +
+

Package Files

+ +
+

BUGs

+
    +
  • this verifies that notes are rendered +

+
`) + DocumentationSource = []byte{0x41, 0x53, 0x54, 0x31, 0x33, 0xff, 0x81, 0x3, 0x1, 0x1, 0x11, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x65, 0x74, 0x1, 0xff, 0x82, 0x0, 0x1, 0x2, 0x1, 0x4, 0x42, 0x61, 0x73, 0x65, 0x1, 0x4, 0x0, 0x1, 0x5, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x1, 0xff, 0x8c, 0x0, 0x0, 0x0, 0x25, 0xff, 0x8b, 0x2, 0x1, 0x1, 0x16, 0x5b, 0x5d, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x1, 0xff, 0x8c, 0x0, 0x1, 0xff, 0x84, 0x0, 0x0, 0x4d, 0xff, 0x83, 0x3, 0x1, 0x1, 0xe, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x1, 0xff, 0x84, 0x0, 0x1, 0x5, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xc, 0x0, 0x1, 0x4, 0x42, 0x61, 0x73, 0x65, 0x1, 0x4, 0x0, 0x1, 0x4, 0x53, 0x69, 0x7a, 0x65, 0x1, 0x4, 0x0, 0x1, 0x5, 0x4c, 0x69, 0x6e, 0x65, 0x73, 0x1, 0xff, 0x86, 0x0, 0x1, 0x5, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x1, 0xff, 0x8a, 0x0, 0x0, 0x0, 0x13, 0xff, 0x85, 0x2, 0x1, 0x1, 0x5, 0x5b, 0x5d, 0x69, 0x6e, 0x74, 0x1, 0xff, 0x86, 0x0, 0x1, 0x4, 0x0, 0x0, 0x1f, 0xff, 0x89, 0x2, 0x1, 0x1, 0x10, 0x5b, 0x5d, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x1, 0xff, 0x8a, 0x0, 0x1, 0xff, 0x88, 0x0, 0x0, 0x42, 0xff, 0x87, 0x3, 0x1, 0x1, 0x8, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x1, 0xff, 0x88, 0x0, 0x1, 0x4, 0x1, 0x6, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x1, 0x4, 0x0, 0x1, 0x8, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x1, 0xc, 0x0, 0x1, 0x4, 0x4c, 0x69, 0x6e, 0x65, 0x1, 0x4, 0x0, 0x1, 0x6, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x1, 0x4, 0x0, 0x0, 0x0, 0xfe, 0x1, 0x66, 0xff, 0x82, 0x1, 0xfe, 0xa, 0x8c, 0x1, 0x2, 0x1, 0x26, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x67, 0x6f, 0x1, 0x2, 0x1, 0xfe, 0x3, 0x8e, 0x1, 0x17, 0x0, 0x6e, 0xff, 0xda, 0xfe, 0x1, 0x3e, 0xfe, 0x1, 0x40, 0xfe, 0x1, 0x5e, 0xfe, 0x1, 0x60, 0xfe, 0x1, 0xd0, 0xfe, 0x1, 0xd2, 0xfe, 0x2, 0x6, 0xfe, 0x2, 0x2c, 0xfe, 0x2, 0x54, 0xfe, 0x2, 0x70, 0xfe, 0x2, 0x98, 0xfe, 0x2, 0xd8, 0xfe, 0x2, 0xdc, 0xfe, 0x2, 0xde, 0xfe, 0x3, 0xa, 0xfe, 0x3, 0x2e, 0xfe, 0x3, 0x56, 0xfe, 0x3, 0x64, 0xfe, 0x3, 0x7c, 0xfe, 0x3, 0x8a, 0x0, 0x1, 0x1b, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x2f, 0x70, 0x2e, 0x67, 0x6f, 0x1, 0xfe, 0x3, 0x92, 0x1, 0xfe, 0x6, 0xf8, 0x1, 0x43, 0x0, 0x6e, 0xff, 0xda, 0xfe, 0x1, 0x3e, 0xfe, 0x1, 0x40, 0xfe, 0x1, 0xb4, 0xfe, 0x2, 0x20, 0xfe, 0x2, 0x34, 0xfe, 0x2, 0x36, 0xfe, 0x2, 0x48, 0xfe, 0x2, 0x56, 0xfe, 0x2, 0x66, 0xfe, 0x2, 0x6a, 0xfe, 0x2, 0x6c, 0xfe, 0x2, 0x7e, 0xfe, 0x2, 0x96, 0xfe, 0x2, 0x98, 0xfe, 0x2, 0xa6, 0xfe, 0x2, 0xc6, 0xfe, 0x2, 0xc8, 0xfe, 0x2, 0xea, 0xfe, 0x3, 0x16, 0xfe, 0x3, 0x36, 0xfe, 0x3, 0x3a, 0xfe, 0x3, 0x3c, 0xfe, 0x3, 0x62, 0xfe, 0x3, 0x80, 0xfe, 0x3, 0x84, 0xfe, 0x3, 0x86, 0xfe, 0x3, 0x96, 0xfe, 0x3, 0xac, 0xfe, 0x3, 0xae, 0xfe, 0x3, 0xce, 0xfe, 0x3, 0xec, 0xfe, 0x3, 0xee, 0xfe, 0x4, 0xe, 0xfe, 0x4, 0x20, 0xfe, 0x4, 0x22, 0xfe, 0x4, 0x3a, 0xfe, 0x4, 0x56, 0xfe, 0x4, 0x70, 0xfe, 0x4, 0x74, 0xfe, 0x4, 0x76, 0xfe, 0x4, 0x8a, 0xfe, 0x4, 0xf0, 0xfe, 0x5, 0x10, 0xfe, 0x5, 0x12, 0xfe, 0x5, 0x3c, 0xfe, 0x5, 0x5c, 0xfe, 0x5, 0x5e, 0xfe, 0x5, 0x80, 0xfe, 0x5, 0xa0, 0xfe, 0x5, 0xa4, 0xfe, 0x5, 0xa6, 0xfe, 0x5, 0xc8, 0xfe, 0x5, 0xd8, 0xfe, 0x5, 0xe6, 0xfe, 0x5, 0xea, 0xfe, 0x6, 0xc, 0xfe, 0x6, 0x3a, 0xfe, 0x6, 0x80, 0xfe, 0x6, 0x90, 0xfe, 0x6, 0x94, 0xfe, 0x6, 0x96, 0xfe, 0x6, 0xc2, 0xfe, 0x6, 0xe8, 0xfe, 0x6, 0xf4, 0x0, 0x0, 0x4f, 0xff, 0x8d, 0x3, 0x1, 0x1, 0xa, 0x65, 0x6e, 0x63, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x1, 0xff, 0x8e, 0x0, 0x1, 0x4, 0x1, 0x4, 0x47, 0x4f, 0x4f, 0x53, 0x1, 0xc, 0x0, 0x1, 0x6, 0x47, 0x4f, 0x41, 0x52, 0x43, 0x48, 0x1, 0xc, 0x0, 0x1, 0x5, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x1, 0xff, 0xb2, 0x0, 0x1, 0x12, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x50, 0x61, 0x74, 0x68, 0x73, 0x1, 0xff, 0xb4, 0x0, 0x0, 0x0, 0x1c, 0xff, 0xb1, 0x2, 0x1, 0x1, 0xd, 0x5b, 0x5d, 0x2a, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x1, 0xff, 0xb2, 0x0, 0x1, 0xff, 0x90, 0x0, 0x0, 0x42, 0xff, 0x8f, 0x3, 0x1, 0x2, 0xff, 0x90, 0x0, 0x1, 0x4, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xc, 0x0, 0x1, 0x3, 0x41, 0x53, 0x54, 0x1, 0xff, 0x92, 0x0, 0x1, 0xe, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x4e, 0x75, 0x6d, 0x73, 0x1, 0xff, 0x86, 0x0, 0x1, 0xa, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x1, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x72, 0xff, 0x91, 0x3, 0x1, 0x1, 0x4, 0x46, 0x69, 0x6c, 0x65, 0x1, 0xff, 0x92, 0x0, 0x1, 0x8, 0x1, 0x3, 0x44, 0x6f, 0x63, 0x1, 0xff, 0x94, 0x0, 0x1, 0x7, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x1, 0x4, 0x0, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xff, 0x9a, 0x0, 0x1, 0x5, 0x44, 0x65, 0x63, 0x6c, 0x73, 0x1, 0xff, 0x9e, 0x0, 0x1, 0x5, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x1, 0xff, 0xa0, 0x0, 0x1, 0x7, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x1, 0xff, 0xa8, 0x0, 0x1, 0xa, 0x55, 0x6e, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x1, 0xff, 0xaa, 0x0, 0x1, 0x8, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1, 0xff, 0xac, 0x0, 0x0, 0x0, 0x24, 0xff, 0x93, 0x3, 0x1, 0x1, 0xc, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1, 0xff, 0x94, 0x0, 0x1, 0x1, 0x1, 0x4, 0x4c, 0x69, 0x73, 0x74, 0x1, 0xff, 0x98, 0x0, 0x0, 0x0, 0x1d, 0xff, 0x97, 0x2, 0x1, 0x1, 0xe, 0x5b, 0x5d, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x1, 0xff, 0x98, 0x0, 0x1, 0xff, 0x96, 0x0, 0x0, 0x1f, 0xff, 0x95, 0x3, 0x1, 0x2, 0xff, 0x96, 0x0, 0x1, 0x2, 0x1, 0x5, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x1, 0x4, 0x0, 0x1, 0x4, 0x54, 0x65, 0x78, 0x74, 0x1, 0xc, 0x0, 0x0, 0x0, 0x31, 0xff, 0x99, 0x3, 0x1, 0x1, 0x5, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x1, 0xff, 0x9a, 0x0, 0x1, 0x3, 0x1, 0x7, 0x4e, 0x61, 0x6d, 0x65, 0x50, 0x6f, 0x73, 0x1, 0x4, 0x0, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xc, 0x0, 0x1, 0x3, 0x4f, 0x62, 0x6a, 0x1, 0xff, 0x9c, 0x0, 0x0, 0x0, 0x41, 0xff, 0x9b, 0x3, 0x1, 0x1, 0x6, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x1, 0xff, 0x9c, 0x0, 0x1, 0x5, 0x1, 0x4, 0x4b, 0x69, 0x6e, 0x64, 0x1, 0x4, 0x0, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xc, 0x0, 0x1, 0x4, 0x44, 0x65, 0x63, 0x6c, 0x1, 0x10, 0x0, 0x1, 0x4, 0x44, 0x61, 0x74, 0x61, 0x1, 0x10, 0x0, 0x1, 0x4, 0x54, 0x79, 0x70, 0x65, 0x1, 0x10, 0x0, 0x0, 0x0, 0x18, 0xff, 0x9d, 0x2, 0x1, 0x1, 0xa, 0x5b, 0x5d, 0x61, 0x73, 0x74, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x1, 0xff, 0x9e, 0x0, 0x1, 0x10, 0x0, 0x0, 0x2b, 0xff, 0x9f, 0x3, 0x1, 0x1, 0x5, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x1, 0xff, 0xa0, 0x0, 0x1, 0x2, 0x1, 0x5, 0x4f, 0x75, 0x74, 0x65, 0x72, 0x1, 0xff, 0xa0, 0x0, 0x1, 0x7, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x1, 0xff, 0xa2, 0x0, 0x0, 0x0, 0x27, 0xff, 0xa1, 0x4, 0x1, 0x1, 0x16, 0x6d, 0x61, 0x70, 0x5b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5d, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x1, 0xff, 0xa2, 0x0, 0x1, 0xc, 0x1, 0xff, 0x9c, 0x0, 0x0, 0x20, 0xff, 0xa7, 0x2, 0x1, 0x1, 0x11, 0x5b, 0x5d, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x1, 0xff, 0xa8, 0x0, 0x1, 0xff, 0xa4, 0x0, 0x0, 0x41, 0xff, 0xa3, 0x3, 0x1, 0x2, 0xff, 0xa4, 0x0, 0x1, 0x5, 0x1, 0x3, 0x44, 0x6f, 0x63, 0x1, 0xff, 0x94, 0x0, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xff, 0x9a, 0x0, 0x1, 0x4, 0x50, 0x61, 0x74, 0x68, 0x1, 0xff, 0xa6, 0x0, 0x1, 0x7, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x1, 0xff, 0x94, 0x0, 0x1, 0x6, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x73, 0x1, 0x4, 0x0, 0x0, 0x0, 0x36, 0xff, 0xa5, 0x3, 0x1, 0x1, 0x8, 0x42, 0x61, 0x73, 0x69, 0x63, 0x4c, 0x69, 0x74, 0x1, 0xff, 0xa6, 0x0, 0x1, 0x3, 0x1, 0x8, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x6f, 0x73, 0x1, 0x4, 0x0, 0x1, 0x4, 0x4b, 0x69, 0x6e, 0x64, 0x1, 0x4, 0x0, 0x1, 0x5, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1, 0xc, 0x0, 0x0, 0x0, 0x1b, 0xff, 0xa9, 0x2, 0x1, 0x1, 0xc, 0x5b, 0x5d, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x1, 0xff, 0xaa, 0x0, 0x1, 0xff, 0x9a, 0x0, 0x0, 0x22, 0xff, 0xab, 0x2, 0x1, 0x1, 0x13, 0x5b, 0x5d, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1, 0xff, 0xac, 0x0, 0x1, 0xff, 0x94, 0x0, 0x0, 0x20, 0xff, 0xaf, 0x2, 0x1, 0x1, 0x11, 0x5b, 0x5d, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2e, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x1, 0xff, 0xb0, 0x0, 0x1, 0xff, 0xae, 0x0, 0x0, 0x28, 0xff, 0xad, 0x3, 0x1, 0x1, 0x9, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x1, 0xff, 0xae, 0x0, 0x1, 0x2, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xc, 0x0, 0x1, 0x3, 0x4e, 0x75, 0x6d, 0x1, 0x4, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xb3, 0x4, 0x1, 0x1, 0xf, 0x6d, 0x61, 0x70, 0x5b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5d, 0x62, 0x6f, 0x6f, 0x6c, 0x1, 0xff, 0xb4, 0x0, 0x1, 0xc, 0x1, 0x2, 0x0, 0x0, 0xff, 0xae, 0xff, 0x8e, 0x1, 0x5, 0x6c, 0x69, 0x6e, 0x75, 0x78, 0x1, 0x5, 0x61, 0x6d, 0x64, 0x36, 0x34, 0x1, 0x2, 0x1, 0x26, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x67, 0x6f, 0x1, 0x2, 0xfe, 0x1, 0x42, 0x1, 0x1, 0xfe, 0x1, 0x52, 0x1, 0x6, 0x70, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x0, 0x1, 0x3, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb5, 0x3, 0x1, 0x1, 0x7, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0x1, 0xff, 0xb6, 0x0, 0x1, 0x6, 0x1, 0x3, 0x44, 0x6f, 0x63, 0x1, 0xff, 0x94, 0x0, 0x1, 0x6, 0x54, 0x6f, 0x6b, 0x50, 0x6f, 0x73, 0x1, 0x4, 0x0, 0x1, 0x3, 0x54, 0x6f, 0x6b, 0x1, 0x4, 0x0, 0x1, 0x6, 0x4c, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x1, 0x4, 0x0, 0x1, 0x5, 0x53, 0x70, 0x65, 0x63, 0x73, 0x1, 0xff, 0xb8, 0x0, 0x1, 0x6, 0x52, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x1, 0x4, 0x0, 0x0, 0x0, 0x18, 0xff, 0xb7, 0x2, 0x1, 0x1, 0xa, 0x5b, 0x5d, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x70, 0x65, 0x63, 0x1, 0xff, 0xb8, 0x0, 0x1, 0x10, 0x0, 0x0, 0xff, 0xb0, 0xff, 0xb6, 0x58, 0x2, 0xfe, 0x1, 0x62, 0x1, 0xff, 0x96, 0x2, 0x1, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0xff, 0xa4, 0x3b, 0x3, 0x1, 0xfe, 0x1, 0x70, 0x1, 0x12, 0x1, 0x30, 0x22, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x78, 0x2f, 0x70, 0x6b, 0x67, 0x73, 0x69, 0x74, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x22, 0x0, 0x0, 0x0, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb9, 0x3, 0x1, 0x1, 0x8, 0x46, 0x75, 0x6e, 0x63, 0x44, 0x65, 0x63, 0x6c, 0x1, 0xff, 0xba, 0x0, 0x1, 0x5, 0x1, 0x3, 0x44, 0x6f, 0x63, 0x1, 0xff, 0x94, 0x0, 0x1, 0x4, 0x52, 0x65, 0x63, 0x76, 0x1, 0xff, 0xbc, 0x0, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xff, 0x9a, 0x0, 0x1, 0x4, 0x54, 0x79, 0x70, 0x65, 0x1, 0xff, 0xc2, 0x0, 0x1, 0x4, 0x42, 0x6f, 0x64, 0x79, 0x1, 0xff, 0xc4, 0x0, 0x0, 0x0, 0x39, 0xff, 0xbb, 0x3, 0x1, 0x1, 0x9, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x1, 0xff, 0xbc, 0x0, 0x1, 0x3, 0x1, 0x7, 0x4f, 0x70, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x1, 0x4, 0x0, 0x1, 0x4, 0x4c, 0x69, 0x73, 0x74, 0x1, 0xff, 0xc0, 0x0, 0x1, 0x7, 0x43, 0x6c, 0x6f, 0x73, 0x69, 0x6e, 0x67, 0x1, 0x4, 0x0, 0x0, 0x0, 0x1b, 0xff, 0xbf, 0x2, 0x1, 0x1, 0xc, 0x5b, 0x5d, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x1, 0xff, 0xc0, 0x0, 0x1, 0xff, 0xbe, 0x0, 0x0, 0x3f, 0xff, 0xbd, 0x3, 0x1, 0x2, 0xff, 0xbe, 0x0, 0x1, 0x5, 0x1, 0x3, 0x44, 0x6f, 0x63, 0x1, 0xff, 0x94, 0x0, 0x1, 0x5, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x1, 0xff, 0xaa, 0x0, 0x1, 0x4, 0x54, 0x79, 0x70, 0x65, 0x1, 0x10, 0x0, 0x1, 0x3, 0x54, 0x61, 0x67, 0x1, 0xff, 0xa6, 0x0, 0x1, 0x7, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x1, 0xff, 0x94, 0x0, 0x0, 0x0, 0x38, 0xff, 0xc1, 0x3, 0x1, 0x1, 0x8, 0x46, 0x75, 0x6e, 0x63, 0x54, 0x79, 0x70, 0x65, 0x1, 0xff, 0xc2, 0x0, 0x1, 0x3, 0x1, 0x4, 0x46, 0x75, 0x6e, 0x63, 0x1, 0x4, 0x0, 0x1, 0x6, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1, 0xff, 0xbc, 0x0, 0x1, 0x7, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x1, 0xff, 0xbc, 0x0, 0x0, 0x0, 0x37, 0xff, 0xc3, 0x3, 0x1, 0x1, 0x9, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x6d, 0x74, 0x1, 0xff, 0xc4, 0x0, 0x1, 0x3, 0x1, 0x6, 0x4c, 0x62, 0x72, 0x61, 0x63, 0x65, 0x1, 0x4, 0x0, 0x1, 0x4, 0x4c, 0x69, 0x73, 0x74, 0x1, 0xff, 0xc6, 0x0, 0x1, 0x6, 0x52, 0x62, 0x72, 0x61, 0x63, 0x65, 0x1, 0x4, 0x0, 0x0, 0x0, 0x18, 0xff, 0xc5, 0x2, 0x1, 0x1, 0xa, 0x5b, 0x5d, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x74, 0x6d, 0x74, 0x1, 0xff, 0xc6, 0x0, 0x1, 0x10, 0x0, 0x0, 0xfe, 0x15, 0x37, 0xff, 0xba, 0xff, 0xba, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x1, 0xd4, 0x1, 0x19, 0x2f, 0x2f, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x0, 0x0, 0x2, 0x1, 0xfe, 0x2, 0x12, 0x1, 0x9, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x46, 0x1, 0x1, 0xa, 0x1, 0x9, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x46, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x6, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x2, 0x8, 0x1, 0x1, 0xfe, 0x2, 0x24, 0x2, 0xfe, 0x2, 0x26, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x2, 0x2a, 0x1, 0x3, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x53, 0x74, 0x6d, 0x74, 0xff, 0xc7, 0x3, 0x1, 0x1, 0xa, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x53, 0x74, 0x6d, 0x74, 0x1, 0xff, 0xc8, 0x0, 0x1, 0x4, 0x1, 0x3, 0x4c, 0x68, 0x73, 0x1, 0xff, 0xca, 0x0, 0x1, 0x6, 0x54, 0x6f, 0x6b, 0x50, 0x6f, 0x73, 0x1, 0x4, 0x0, 0x1, 0x3, 0x54, 0x6f, 0x6b, 0x1, 0x4, 0x0, 0x1, 0x3, 0x52, 0x68, 0x73, 0x1, 0xff, 0xca, 0x0, 0x0, 0x0, 0x18, 0xff, 0xc9, 0x2, 0x1, 0x1, 0xa, 0x5b, 0x5d, 0x61, 0x73, 0x74, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x1, 0xff, 0xca, 0x0, 0x1, 0x10, 0x0, 0x0, 0xfe, 0x3, 0x2f, 0xff, 0xc8, 0xff, 0xa1, 0x1, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x25, 0x1, 0xfe, 0x2, 0x58, 0x1, 0x3, 0x61, 0x70, 0x70, 0x1, 0x1, 0x8, 0x1, 0x3, 0x61, 0x70, 0x70, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x2, 0x0, 0x0, 0x1, 0xfe, 0x2, 0x60, 0x1, 0x5e, 0x1, 0x1, 0x11, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x74, 0xff, 0xcb, 0x3, 0x1, 0x1, 0xc, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x74, 0x1, 0xff, 0xcc, 0x0, 0x1, 0x5, 0x1, 0x4, 0x54, 0x79, 0x70, 0x65, 0x1, 0x10, 0x0, 0x1, 0x6, 0x4c, 0x62, 0x72, 0x61, 0x63, 0x65, 0x1, 0x4, 0x0, 0x1, 0x4, 0x45, 0x6c, 0x74, 0x73, 0x1, 0xff, 0xca, 0x0, 0x1, 0x6, 0x52, 0x62, 0x72, 0x61, 0x63, 0x65, 0x1, 0x4, 0x0, 0x1, 0xa, 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x1, 0x2, 0x0, 0x0, 0x0, 0x26, 0xff, 0xcc, 0x22, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xa, 0x1, 0xfe, 0x2, 0x66, 0x1, 0x3, 0x41, 0x70, 0x70, 0x0, 0x1, 0xfe, 0x2, 0x6c, 0x2, 0xfe, 0x2, 0x6e, 0x0, 0x0, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x53, 0x74, 0x6d, 0x74, 0xff, 0xc8, 0x3d, 0x1, 0x1, 0x11, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x78, 0x70, 0x72, 0xff, 0xcd, 0x3, 0x1, 0x1, 0xc, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x78, 0x70, 0x72, 0x1, 0xff, 0xce, 0x0, 0x1, 0x2, 0x1, 0x1, 0x58, 0x1, 0x10, 0x0, 0x1, 0x3, 0x53, 0x65, 0x6c, 0x1, 0xff, 0x9a, 0x0, 0x0, 0x0, 0x6e, 0xff, 0xce, 0x41, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x25, 0x1, 0xfe, 0x2, 0x74, 0x1, 0x3, 0x61, 0x70, 0x70, 0x1, 0x1, 0x8, 0x1, 0x3, 0x61, 0x70, 0x70, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x2, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x2, 0x7c, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x0, 0x0, 0x1, 0xfe, 0x2, 0x86, 0x1, 0x54, 0x1, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x4c, 0x69, 0x74, 0xff, 0xa6, 0x10, 0x1, 0xfe, 0x2, 0x8a, 0x1, 0x12, 0x1, 0x7, 0x22, 0x67, 0x72, 0x65, 0x65, 0x74, 0x22, 0x0, 0x0, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x53, 0x74, 0x6d, 0x74, 0xff, 0xc8, 0x79, 0x1, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x8, 0x1, 0xfe, 0x2, 0x9c, 0x1, 0x1, 0x5f, 0x0, 0x1, 0xfe, 0x2, 0xa0, 0x1, 0x54, 0x1, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x72, 0xff, 0xcf, 0x3, 0x1, 0x1, 0x8, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x72, 0x1, 0xff, 0xd0, 0x0, 0x1, 0x5, 0x1, 0x3, 0x46, 0x75, 0x6e, 0x1, 0x10, 0x0, 0x1, 0x6, 0x4c, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x1, 0x4, 0x0, 0x1, 0x4, 0x41, 0x72, 0x67, 0x73, 0x1, 0xff, 0xca, 0x0, 0x1, 0x8, 0x45, 0x6c, 0x6c, 0x69, 0x70, 0x73, 0x69, 0x73, 0x1, 0x4, 0x0, 0x1, 0x6, 0x52, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x1, 0x4, 0x0, 0x0, 0x0, 0xfe, 0x1, 0xf, 0xff, 0xd0, 0xfe, 0x1, 0x9, 0x1, 0x11, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x78, 0x70, 0x72, 0xff, 0xce, 0x40, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x25, 0x1, 0xfe, 0x2, 0xa4, 0x1, 0x3, 0x61, 0x70, 0x70, 0x1, 0x1, 0x8, 0x1, 0x3, 0x61, 0x70, 0x70, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x2, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x2, 0xac, 0x1, 0x3, 0x52, 0x75, 0x6e, 0x0, 0x0, 0x1, 0xfe, 0x2, 0xb2, 0x1, 0x1, 0x11, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x74, 0xff, 0xcc, 0x42, 0x1, 0xe, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x41, 0x72, 0x72, 0x61, 0x79, 0x54, 0x79, 0x70, 0x65, 0xff, 0xd1, 0x3, 0x1, 0x1, 0x9, 0x41, 0x72, 0x72, 0x61, 0x79, 0x54, 0x79, 0x70, 0x65, 0x1, 0xff, 0xd2, 0x0, 0x1, 0x3, 0x1, 0x6, 0x4c, 0x62, 0x72, 0x61, 0x63, 0x6b, 0x1, 0x4, 0x0, 0x1, 0x3, 0x4c, 0x65, 0x6e, 0x1, 0x10, 0x0, 0x1, 0x3, 0x45, 0x6c, 0x74, 0x1, 0x10, 0x0, 0x0, 0x0, 0x50, 0xff, 0xd2, 0x21, 0x1, 0xfe, 0x2, 0xb4, 0x2, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xd, 0x1, 0xfe, 0x2, 0xb8, 0x1, 0x6, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x0, 0x0, 0x1, 0xfe, 0x2, 0xc4, 0x1, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x4c, 0x69, 0x74, 0xff, 0xa6, 0x10, 0x1, 0xfe, 0x2, 0xc6, 0x1, 0x12, 0x1, 0x7, 0x22, 0x67, 0x72, 0x65, 0x65, 0x74, 0x22, 0x0, 0x1, 0xfe, 0x2, 0xd4, 0x0, 0x2, 0xfe, 0x2, 0xd6, 0x0, 0x0, 0x1, 0xfe, 0x2, 0xda, 0x0, 0x0, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xba, 0xff, 0x91, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x2, 0xe0, 0x1, 0x15, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x0, 0x0, 0x2, 0x1, 0xfe, 0x3, 0x16, 0x1, 0x8, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x46, 0x1, 0x1, 0xa, 0x1, 0x8, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x46, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1a, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x4, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x3, 0xc, 0x1, 0x1, 0xfe, 0x3, 0x26, 0x2, 0xfe, 0x3, 0x28, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x3, 0x2c, 0x1, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x53, 0x74, 0x6d, 0x74, 0xff, 0xd3, 0x3, 0x1, 0x1, 0x8, 0x45, 0x78, 0x70, 0x72, 0x53, 0x74, 0x6d, 0x74, 0x1, 0xff, 0xd4, 0x0, 0x1, 0x1, 0x1, 0x1, 0x58, 0x1, 0x10, 0x0, 0x0, 0x0, 0x5c, 0xff, 0xd4, 0x53, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x72, 0xff, 0xd0, 0x40, 0x1, 0x11, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x78, 0x70, 0x72, 0xff, 0xce, 0x21, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x8, 0x1, 0xfe, 0x3, 0x5a, 0x1, 0x1, 0x70, 0x0, 0x1, 0x1, 0xfe, 0x3, 0x5e, 0x1, 0x1, 0x46, 0x0, 0x0, 0x1, 0xfe, 0x3, 0x60, 0x3, 0xfe, 0x3, 0x62, 0x0, 0x0, 0x1, 0xfe, 0x3, 0x8c, 0x0, 0x0, 0x1, 0x0, 0x1, 0x1, 0x3, 0x1, 0xfe, 0x1, 0x70, 0x1, 0x12, 0x1, 0x30, 0x22, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x78, 0x2f, 0x70, 0x6b, 0x67, 0x73, 0x69, 0x74, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x22, 0x0, 0x0, 0x2, 0x6, 0x1, 0x3, 0x1, 0x2, 0x1, 0x36, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x32, 0x30, 0x32, 0x30, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x6f, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x2e, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x2e, 0x0, 0x1, 0x70, 0x1, 0x35, 0x2f, 0x2f, 0x20, 0x55, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x42, 0x53, 0x44, 0x2d, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x0, 0x1, 0xff, 0xdc, 0x1, 0x31, 0x2f, 0x2f, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x1, 0xd4, 0x1, 0x19, 0x2f, 0x2f, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x2, 0x30, 0x1, 0x12, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x2, 0xe0, 0x1, 0x15, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x3, 0x32, 0x1, 0x12, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x0, 0x0, 0x1, 0x2, 0x1, 0xfe, 0x3, 0x68, 0x1, 0xa, 0x2f, 0x2f, 0x20, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x3a, 0x0, 0x1, 0xfe, 0x3, 0x80, 0x1, 0x5, 0x2f, 0x2f, 0x20, 0x6f, 0x6b, 0x0, 0x0, 0x0, 0x1, 0x3, 0xc, 0x18, 0x1e, 0x1, 0x2, 0x1, 0x8, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x46, 0x1, 0x4, 0x0, 0x1, 0x9, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x46, 0x0, 0x0, 0x1, 0x1b, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x2f, 0x70, 0x2e, 0x67, 0x6f, 0x1, 0x1, 0x1, 0x2, 0x1, 0xfe, 0x4, 0xd2, 0x1, 0x39, 0x2f, 0x2f, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x20, 0x70, 0x20, 0x69, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x20, 0x6c, 0x6f, 0x74, 0x0, 0x1, 0xfe, 0x5, 0x46, 0x1, 0x35, 0x2f, 0x2f, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x61, 0x79, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x27, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x74, 0x2e, 0x0, 0x0, 0x1, 0xfe, 0x5, 0xb2, 0x1, 0x1, 0xfe, 0x5, 0xc2, 0x1, 0x1, 0x70, 0x0, 0x1, 0xd, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0x59, 0x2, 0xfe, 0x5, 0xc8, 0x1, 0xff, 0x96, 0x1, 0xfe, 0x5, 0xd6, 0x1, 0x2, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0xff, 0xa4, 0x10, 0x3, 0x1, 0xfe, 0x5, 0xdc, 0x1, 0x12, 0x1, 0x5, 0x22, 0x66, 0x6d, 0x74, 0x22, 0x0, 0x0, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0xff, 0xa4, 0x11, 0x3, 0x1, 0xfe, 0x5, 0xea, 0x1, 0x12, 0x1, 0x6, 0x22, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x0, 0x0, 0x1, 0xfe, 0x5, 0xf8, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0x78, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x5, 0xfe, 0x1, 0x8, 0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x0, 0x0, 0x1, 0xfe, 0x6, 0x10, 0x1, 0xff, 0x80, 0x2, 0x1, 0xe, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd5, 0x3, 0x1, 0x1, 0x9, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x70, 0x65, 0x63, 0x1, 0xff, 0xd6, 0x0, 0x1, 0x5, 0x1, 0x3, 0x44, 0x6f, 0x63, 0x1, 0xff, 0x94, 0x0, 0x1, 0x5, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x1, 0xff, 0xaa, 0x0, 0x1, 0x4, 0x54, 0x79, 0x70, 0x65, 0x1, 0x10, 0x0, 0x1, 0x6, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1, 0xff, 0xca, 0x0, 0x1, 0x7, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x1, 0xff, 0x94, 0x0, 0x0, 0x0, 0x45, 0xff, 0xd6, 0x41, 0x2, 0x1, 0x1, 0xfe, 0x6, 0x1c, 0x1, 0x1, 0x43, 0x1, 0x1, 0x4, 0x1, 0x1, 0x43, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xa, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x0, 0x0, 0x0, 0x2, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x4c, 0x69, 0x74, 0xff, 0xa6, 0xa, 0x1, 0xfe, 0x6, 0x24, 0x1, 0xa, 0x1, 0x1, 0x31, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0xff, 0xa5, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x6, 0x2a, 0x1, 0x6, 0x2f, 0x2f, 0x20, 0x76, 0x61, 0x72, 0x0, 0x0, 0x1, 0xfe, 0x6, 0x38, 0x1, 0xff, 0xaa, 0x2, 0x1, 0xe, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd6, 0x78, 0x2, 0x1, 0x1, 0xfe, 0x6, 0x40, 0x1, 0x1, 0x56, 0x1, 0x1, 0x8, 0x1, 0x1, 0x56, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x10, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x2, 0x0, 0x0, 0x2, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x72, 0xff, 0xd0, 0x41, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x29, 0x1, 0xfe, 0x6, 0x48, 0x1, 0x5, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x1, 0x1, 0xa, 0x1, 0x5, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x4, 0x0, 0x0, 0x1, 0xfe, 0x6, 0x52, 0x3, 0xfe, 0x6, 0x54, 0x0, 0x0, 0x0, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xba, 0xff, 0xb1, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x6, 0x5a, 0x1, 0x10, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x0, 0x0, 0x2, 0x1, 0xfe, 0x6, 0x86, 0x1, 0x1, 0x46, 0x1, 0x1, 0xa, 0x1, 0x1, 0x46, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x16, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x6, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x6, 0x7c, 0x1, 0x1, 0xfe, 0x6, 0x88, 0x1, 0x1, 0x2, 0x1, 0x1, 0xfe, 0x6, 0x8a, 0x1, 0x1, 0x74, 0x1, 0x1, 0x8, 0x1, 0x1, 0x74, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x8, 0x0, 0x0, 0x1, 0x11, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x78, 0x70, 0x72, 0xff, 0xce, 0x27, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xb, 0x1, 0xfe, 0x6, 0x8e, 0x1, 0x4, 0x74, 0x69, 0x6d, 0x65, 0x0, 0x1, 0x1, 0xfe, 0x6, 0x98, 0x1, 0x4, 0x54, 0x69, 0x6d, 0x65, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x6, 0xa0, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0x73, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x7, 0x18, 0x1, 0x7, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x0, 0x0, 0x1, 0xfe, 0x7, 0x28, 0x1, 0xff, 0xa8, 0x2, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd7, 0x3, 0x1, 0x1, 0x8, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0x1, 0xff, 0xd8, 0x0, 0x1, 0x5, 0x1, 0x3, 0x44, 0x6f, 0x63, 0x1, 0xff, 0x94, 0x0, 0x1, 0x4, 0x4e, 0x61, 0x6d, 0x65, 0x1, 0xff, 0x9a, 0x0, 0x1, 0x6, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x1, 0x4, 0x0, 0x1, 0x4, 0x54, 0x79, 0x70, 0x65, 0x1, 0x10, 0x0, 0x1, 0x7, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x1, 0xff, 0x94, 0x0, 0x0, 0x0, 0x40, 0xff, 0xd8, 0x3c, 0x2, 0x1, 0xfe, 0x7, 0x32, 0x1, 0x1, 0x54, 0x1, 0x1, 0x6, 0x1, 0x1, 0x54, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x22, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xa, 0x0, 0x0, 0x2, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xa, 0x1, 0xfe, 0x7, 0x36, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0xff, 0xa9, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x7, 0x40, 0x1, 0xf, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x0, 0x0, 0x1, 0xfe, 0x7, 0x60, 0x1, 0xff, 0x80, 0x2, 0x1, 0xe, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd6, 0x73, 0x2, 0x1, 0x1, 0xfe, 0x7, 0x6c, 0x1, 0x2, 0x43, 0x54, 0x1, 0x1, 0x4, 0x1, 0x2, 0x43, 0x54, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x2a, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xc, 0x0, 0x0, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x21, 0x1, 0xfe, 0x7, 0x72, 0x1, 0x1, 0x54, 0x1, 0x1, 0x6, 0x1, 0x1, 0x54, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x22, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xa, 0x0, 0x0, 0x1, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x4c, 0x69, 0x74, 0xff, 0xa6, 0xa, 0x1, 0xfe, 0x7, 0x7a, 0x1, 0xa, 0x1, 0x1, 0x33, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0xff, 0x8c, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x7, 0x80, 0x1, 0xf, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x0, 0x0, 0x1, 0xfe, 0x7, 0xa0, 0x1, 0xff, 0xaa, 0x2, 0x1, 0xe, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd6, 0x56, 0x2, 0x1, 0x1, 0xfe, 0x7, 0xa8, 0x1, 0x2, 0x56, 0x54, 0x1, 0x1, 0x8, 0x1, 0x2, 0x56, 0x54, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x32, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xe, 0x0, 0x0, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x21, 0x1, 0xfe, 0x7, 0xae, 0x1, 0x1, 0x54, 0x1, 0x1, 0x6, 0x1, 0x1, 0x54, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x22, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xa, 0x0, 0x0, 0x0, 0x0, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xba, 0xff, 0x80, 0x1, 0x1, 0x1, 0x1, 0xfe, 0x7, 0xb4, 0x1, 0xb, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x46, 0x75, 0x6e, 0x63, 0x0, 0x0, 0x2, 0x1, 0xfe, 0x7, 0xd6, 0x1, 0x2, 0x54, 0x46, 0x1, 0x1, 0xa, 0x1, 0x2, 0x54, 0x46, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x38, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x10, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x7, 0xcc, 0x1, 0x1, 0xfe, 0x7, 0xda, 0x2, 0xfe, 0x7, 0xdc, 0x0, 0x1, 0x2, 0x1, 0x3, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x21, 0x1, 0xfe, 0x7, 0xe0, 0x1, 0x1, 0x54, 0x1, 0x1, 0x6, 0x1, 0x1, 0x54, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x22, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xba, 0xff, 0xa4, 0x1, 0x1, 0x2, 0x1, 0xfe, 0x8, 0x8, 0x1, 0x9, 0x2f, 0x2f, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x0, 0x1, 0xfe, 0x8, 0x1c, 0x1, 0x32, 0x2f, 0x2f, 0x20, 0x42, 0x55, 0x47, 0x28, 0x75, 0x69, 0x64, 0x29, 0x3a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x65, 0x64, 0x0, 0x0, 0x1, 0x1, 0xfe, 0x8, 0x8c, 0x1, 0x1, 0x3, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x21, 0x1, 0xfe, 0x8, 0x8e, 0x1, 0x1, 0x54, 0x1, 0x1, 0x6, 0x1, 0x1, 0x54, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x22, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0xa, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x8, 0x90, 0x0, 0x1, 0x1, 0xfe, 0x8, 0x94, 0x1, 0x1, 0x4d, 0x0, 0x1, 0x1, 0xfe, 0x8, 0x82, 0x1, 0x1, 0xfe, 0x8, 0x96, 0x2, 0xfe, 0x8, 0x98, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0xff, 0xf4, 0x2, 0xfe, 0x8, 0xf0, 0x1, 0xff, 0xa8, 0x2, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd8, 0x73, 0x2, 0x1, 0xfe, 0x8, 0xfa, 0x1, 0x2, 0x53, 0x31, 0x1, 0x1, 0x6, 0x1, 0x2, 0x53, 0x31, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x46, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x12, 0x0, 0x0, 0x2, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0xff, 0xd9, 0x3, 0x1, 0x1, 0xa, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x1, 0xff, 0xda, 0x0, 0x1, 0x3, 0x1, 0x6, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x1, 0x4, 0x0, 0x1, 0x6, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1, 0xff, 0xbc, 0x0, 0x1, 0xa, 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x1, 0x2, 0x0, 0x0, 0x0, 0x65, 0xff, 0xda, 0x61, 0x1, 0xfe, 0x9, 0x0, 0x1, 0x1, 0xfe, 0x9, 0xe, 0x1, 0x1, 0x2, 0x1, 0x1, 0xfe, 0x9, 0x14, 0x1, 0x1, 0x46, 0x1, 0x1, 0x8, 0x1, 0x1, 0x46, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x14, 0x0, 0x0, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xa, 0x1, 0xfe, 0x9, 0x18, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x0, 0x2, 0x1, 0x1, 0x1, 0xfe, 0x9, 0x20, 0x1, 0x8, 0x2f, 0x2f, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x9, 0x32, 0x0, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0xff, 0xe2, 0x2, 0xfe, 0x9, 0x38, 0x1, 0xff, 0xa8, 0x2, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd8, 0xff, 0xc6, 0x2, 0x1, 0xfe, 0x9, 0x42, 0x1, 0x2, 0x75, 0x73, 0x1, 0x1, 0x6, 0x1, 0x2, 0x75, 0x73, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x50, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x16, 0x0, 0x0, 0x2, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0xff, 0xda, 0xff, 0x8c, 0x1, 0xfe, 0x9, 0x48, 0x1, 0x1, 0xfe, 0x9, 0x56, 0x1, 0x2, 0x2, 0x1, 0x1, 0xfe, 0x9, 0x5c, 0x1, 0x1, 0x47, 0x1, 0x1, 0x8, 0x1, 0x1, 0x47, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x18, 0x0, 0x0, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xb, 0x1, 0xfe, 0x9, 0x60, 0x1, 0x4, 0x62, 0x6f, 0x6f, 0x6c, 0x0, 0x0, 0x2, 0x1, 0x1, 0xfe, 0x9, 0x6c, 0x1, 0x1, 0x75, 0x1, 0x1, 0x8, 0x1, 0x1, 0x75, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1a, 0x0, 0x0, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xa, 0x1, 0xfe, 0x9, 0x70, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x0, 0x0, 0x1, 0xfe, 0x9, 0x78, 0x0, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0xfe, 0x1, 0x51, 0x2, 0xfe, 0x9, 0x7c, 0x1, 0xff, 0xa8, 0x2, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd8, 0xfe, 0x1, 0x34, 0x2, 0x1, 0xfe, 0x9, 0x86, 0x1, 0x2, 0x53, 0x32, 0x1, 0x1, 0x6, 0x1, 0x2, 0x53, 0x32, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x5e, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1c, 0x0, 0x0, 0x2, 0xf, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0xff, 0xda, 0xff, 0xfa, 0x1, 0xfe, 0x9, 0x8c, 0x1, 0x1, 0xfe, 0x9, 0x9a, 0x1, 0x3, 0x3, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x23, 0x1, 0xfe, 0x9, 0xa0, 0x1, 0x2, 0x53, 0x31, 0x1, 0x1, 0x6, 0x1, 0x2, 0x53, 0x31, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x46, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x12, 0x0, 0x0, 0x2, 0x1, 0x1, 0x1, 0xfe, 0x9, 0xa6, 0x1, 0x12, 0x2f, 0x2f, 0x20, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x0, 0x0, 0x0, 0x3, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0x23, 0x1, 0xfe, 0x9, 0xce, 0x1, 0x2, 0x75, 0x73, 0x1, 0x1, 0x6, 0x1, 0x2, 0x75, 0x73, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x50, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x16, 0x0, 0x0, 0x2, 0x1, 0x1, 0x1, 0xfe, 0x9, 0xd4, 0x1, 0x1e, 0x2f, 0x2f, 0x20, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x2c, 0x20, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x0, 0x0, 0x0, 0x2, 0x1, 0x1, 0xfe, 0xa, 0x14, 0x1, 0x1, 0x48, 0x1, 0x1, 0x8, 0x1, 0x1, 0x48, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1e, 0x0, 0x0, 0x1, 0xa, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0xff, 0x9a, 0xa, 0x1, 0xfe, 0xa, 0x1a, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x0, 0x0, 0x1, 0xfe, 0xa, 0x22, 0x0, 0x0, 0x0, 0x0, 0xc, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x47, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0xff, 0xb6, 0xfe, 0x1, 0xf, 0x1, 0x1, 0x1, 0x1, 0xfe, 0xa, 0x28, 0x1, 0x15, 0x2f, 0x2f, 0x20, 0x49, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x0, 0x0, 0x1, 0xfe, 0xa, 0x54, 0x1, 0xff, 0xa8, 0x2, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x53, 0x70, 0x65, 0x63, 0xff, 0xd8, 0x7b, 0x2, 0x1, 0xfe, 0xa, 0x5e, 0x1, 0x1, 0x49, 0x1, 0x1, 0x6, 0x1, 0x1, 0x49, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x6c, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x20, 0x0, 0x0, 0x2, 0x12, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0xff, 0xdb, 0x3, 0x1, 0x1, 0xd, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x1, 0xff, 0xdc, 0x0, 0x1, 0x3, 0x1, 0x9, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x1, 0x4, 0x0, 0x1, 0x7, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x1, 0xff, 0xbc, 0x0, 0x1, 0xa, 0x49, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x1, 0x2, 0x0, 0x0, 0x0, 0x58, 0xff, 0xdc, 0x54, 0x1, 0xfe, 0xa, 0x62, 0x1, 0x1, 0xfe, 0xa, 0x76, 0x1, 0x1, 0x2, 0x1, 0x1, 0xfe, 0xa, 0x7c, 0x1, 0x2, 0x4d, 0x31, 0x1, 0x1, 0xa, 0x1, 0x2, 0x4d, 0x31, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x1, 0x1, 0x3, 0x69, 0x6e, 0x74, 0x4, 0x2, 0x0, 0x22, 0x0, 0x0, 0x1, 0xd, 0x2a, 0x61, 0x73, 0x74, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x54, 0x79, 0x70, 0x65, 0xff, 0xc2, 0xb, 0x2, 0x1, 0xfe, 0xa, 0x80, 0x2, 0xfe, 0xa, 0x82, 0x0, 0x0, 0x0, 0x1, 0xfe, 0xa, 0x86, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x2, 0x3, 0x1, 0xfe, 0x5, 0xdc, 0x1, 0x12, 0x1, 0x5, 0x22, 0x66, 0x6d, 0x74, 0x22, 0x0, 0x0, 0x3, 0x1, 0xfe, 0x5, 0xea, 0x1, 0x12, 0x1, 0x6, 0x22, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x0, 0x0, 0x2, 0x10, 0x1, 0x3, 0x1, 0xfe, 0x3, 0x92, 0x1, 0x36, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x32, 0x30, 0x32, 0x30, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x6f, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x2e, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x2e, 0x0, 0x1, 0xfe, 0x4, 0x0, 0x1, 0x35, 0x2f, 0x2f, 0x20, 0x55, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x67, 0x6f, 0x76, 0x65, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x42, 0x53, 0x44, 0x2d, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x0, 0x1, 0xfe, 0x4, 0x6c, 0x1, 0x31, 0x2f, 0x2f, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x0, 0x0, 0x1, 0x2, 0x1, 0xfe, 0x4, 0xd2, 0x1, 0x39, 0x2f, 0x2f, 0x20, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x20, 0x70, 0x20, 0x69, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x67, 0x6f, 0x64, 0x6f, 0x63, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x20, 0x6c, 0x6f, 0x74, 0x0, 0x1, 0xfe, 0x5, 0x46, 0x1, 0x35, 0x2f, 0x2f, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x61, 0x79, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x27, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x69, 0x74, 0x2e, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x5, 0xfe, 0x1, 0x8, 0x2f, 0x2f, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x6, 0x2a, 0x1, 0x6, 0x2f, 0x2f, 0x20, 0x76, 0x61, 0x72, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x6, 0x5a, 0x1, 0x10, 0x2f, 0x2f, 0x20, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x6, 0xce, 0x1, 0x12, 0x2f, 0x2f, 0x20, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x7, 0x18, 0x1, 0x7, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x7, 0x40, 0x1, 0xf, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x7, 0x80, 0x1, 0xf, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x7, 0xb4, 0x1, 0xb, 0x2f, 0x2f, 0x20, 0x74, 0x79, 0x70, 0x65, 0x46, 0x75, 0x6e, 0x63, 0x0, 0x0, 0x1, 0x2, 0x1, 0xfe, 0x8, 0x8, 0x1, 0x9, 0x2f, 0x2f, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x0, 0x1, 0xfe, 0x8, 0x1c, 0x1, 0x32, 0x2f, 0x2f, 0x20, 0x42, 0x55, 0x47, 0x28, 0x75, 0x69, 0x64, 0x29, 0x3a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x65, 0x64, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x8, 0xa4, 0x1, 0x14, 0x2f, 0x2f, 0x20, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x9, 0x20, 0x1, 0x8, 0x2f, 0x2f, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x9, 0xa6, 0x1, 0x12, 0x2f, 0x2f, 0x20, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0x9, 0xd4, 0x1, 0x1e, 0x2f, 0x2f, 0x20, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x64, 0x65, 0x64, 0x2c, 0x20, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x0, 0x0, 0x1, 0x1, 0x1, 0xfe, 0xa, 0x28, 0x1, 0x15, 0x2f, 0x2f, 0x20, 0x49, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x0, 0x0, 0x0, 0x1, 0x6, 0x1c, 0x26, 0x4c, 0x56, 0x5a, 0x68, 0x1, 0xc, 0x1, 0x1, 0x43, 0x0, 0x1, 0x2, 0x43, 0x54, 0x1, 0xc, 0x0, 0x1, 0x1, 0x46, 0x1, 0x6, 0x0, 0x1, 0x1, 0x49, 0x1, 0x20, 0x0, 0x1, 0x2, 0x53, 0x31, 0x1, 0x12, 0x0, 0x1, 0x2, 0x53, 0x32, 0x1, 0x1c, 0x0, 0x1, 0x1, 0x54, 0x1, 0xa, 0x0, 0x1, 0x2, 0x54, 0x46, 0x1, 0x10, 0x0, 0x1, 0x1, 0x56, 0x1, 0x2, 0x0, 0x1, 0x2, 0x56, 0x54, 0x1, 0xe, 0x0, 0x1, 0x5, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x1, 0x4, 0x0, 0x1, 0x2, 0x75, 0x73, 0x1, 0x16, 0x0, 0x0, 0x0} + Documentation = &internal.Documentation{ + Synopsis: Synopsis, + GOOS: GOOS, + GOARCH: GOARCH, + HTML: DocumentationHTML, + Source: DocumentationSource, + } +) diff --git a/internal/testing/sample/gen_documentation.go b/internal/testing/sample/gen_documentation.go new file mode 100644 index 00000000..da5477ec --- /dev/null +++ b/internal/testing/sample/gen_documentation.go @@ -0,0 +1,85 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// Run this to generate documentation.go. + +package main + +import ( + "context" + "fmt" + "go/parser" + "go/token" + "log" + "os" + + "golang.org/x/pkgsite/internal/godoc" + "golang.org/x/pkgsite/internal/source" + "golang.org/x/pkgsite/internal/testing/sample" +) + +func main() { + ctx := context.Background() + fset := token.NewFileSet() + pkgs, err := parser.ParseDir(fset, "../../godoc/testdata/p", nil, parser.ParseComments) + if err != nil { + log.Fatal(err) + } + p := godoc.NewPackage(fset, sample.GOOS, sample.GOARCH, nil) + for _, pkg := range pkgs { + for _, f := range pkg.Files { + p.AddFile(f, true) + } + } + src, err := p.Encode(ctx) + if err != nil { + log.Fatal(err) + } + si := source.NewGitHubInfo(sample.ModulePath, "", "abcde") + mi := &godoc.ModuleInfo{ + ModulePath: sample.ModulePath, + ResolvedVersion: sample.VersionString, + ModulePackages: nil, + } + _, _, html, err := p.Render(ctx, "p", si, mi, "", "") + if err != nil { + log.Fatal(err) + } + + f, err := os.Create("documentation.gen.go") + if err != nil { + log.Fatal(err) + } + fmt.Fprintf(f, ` +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sample + +import ( + "github.com/google/safehtml/testconversions" + "golang.org/x/pkgsite/internal" +) + + + +var ( + DocumentationHTML = testconversions.MakeHTMLForTest(%s) + DocumentationSource = %#v + Documentation = &internal.Documentation{ + Synopsis: Synopsis, + GOOS: GOOS, + GOARCH: GOARCH, + HTML: DocumentationHTML, + Source: DocumentationSource, + } +) +`, "`"+html.String()+"`", src) + if err := f.Close(); err != nil { + log.Fatal(err) + } +} diff --git a/internal/testing/sample/sample.go b/internal/testing/sample/sample.go index c35cde00..ca88902b 100644 --- a/internal/testing/sample/sample.go +++ b/internal/testing/sample/sample.go @@ -17,13 +17,14 @@ import ( "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" "github.com/google/licensecheck" - "github.com/google/safehtml/template" "golang.org/x/pkgsite/internal" "golang.org/x/pkgsite/internal/licenses" "golang.org/x/pkgsite/internal/source" "golang.org/x/pkgsite/internal/stdlib" ) +//go:generate go run gen_documentation.go + // These sample values can be used to construct test cases. var ( ModulePath = "github.com/valid/module_name" @@ -50,23 +51,16 @@ var ( }, Contents: []byte(`unknown`), } - DocumentationHTML = template.MustParseAndExecuteToHTML("This is the documentation HTML") - PackageName = "foo" - Suffix = "foo" - PackagePath = path.Join(ModulePath, Suffix) - V1Path = PackagePath - Imports = []string{"path/to/bar", "fmt"} - Synopsis = "This is a package synopsis" - ReadmeFilePath = "README.md" - ReadmeContents = "readme" - GOOS = "linux" - GOARCH = "amd64" - Documentation = &internal.Documentation{ - Synopsis: Synopsis, - HTML: DocumentationHTML, - GOOS: GOOS, - GOARCH: GOARCH, - } + PackageName = "foo" + Suffix = "foo" + PackagePath = path.Join(ModulePath, Suffix) + V1Path = PackagePath + Imports = []string{"path/to/bar", "fmt"} + Synopsis = "This is a package synopsis" + ReadmeFilePath = "README.md" + ReadmeContents = "readme" + GOOS = "linux" + GOARCH = "amd64" ) // LicenseCmpOpts are options to use when comparing licenses with the cmp package. @@ -146,6 +140,7 @@ func UnitForPackage(path, modulePath, version, name string, isRedistributable bo Documentation: &internal.Documentation{ Synopsis: Synopsis, HTML: DocumentationHTML, + Source: DocumentationSource, GOOS: GOOS, GOARCH: GOARCH, }, -- cgit v1.3-5-g9baa