├── .github ├── CODEOWNERS ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── custom.md │ └── feature_request.md └── workflows │ └── ci.yml ├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── _examples └── basic │ ├── README.md │ ├── api │ └── api.go │ ├── docs │ ├── docs.go │ ├── swagger.json │ └── swagger.yaml │ ├── main.go │ └── web │ └── handler.go ├── b0x.yml ├── go.mod ├── go.sum ├── swagger.go └── swaggerFiles ├── ab0x.go ├── b0xfile__favicon-16x16.png.go ├── b0xfile__favicon-32x32.png.go ├── b0xfile__index.html.go ├── b0xfile__oauth2-redirect.html.go ├── b0xfile__swagger-ui-bundle.js.go ├── b0xfile__swagger-ui-bundle.js.map.go ├── b0xfile__swagger-ui-standalone-preset.js.go ├── b0xfile__swagger-ui-standalone-preset.js.map.go ├── b0xfile__swagger-ui.css.go ├── b0xfile__swagger-ui.css.map.go ├── b0xfile__swagger-ui.js.go ├── b0xfile__swagger-ui.js.map.go ├── b0xfile__theme-feeling-blue.css.go ├── b0xfile__theme-flattop.css.go ├── b0xfile__theme-material.css.go ├── b0xfile__theme-monokai.css.go ├── b0xfile__theme-muted.css.go ├── b0xfile__theme-newspaper.css.go └── b0xfile__theme-outline.css.go /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # These owners will be the default owners for everything in the repo. 2 | * @kataras 3 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: kataras -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: "[BUG]" 5 | labels: type:bug 6 | assignees: kataras 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. [...] 16 | 17 | **Expected behavior** 18 | A clear and concise description of what you expected to happen. 19 | 20 | **Screenshots** 21 | If applicable, add screenshots to help explain your problem. 22 | 23 | **Desktop (please complete the following information):** 24 | - OS: [e.g. ubuntu, windows] 25 | 26 | **iris.Version** 27 | - e.g. v12.2.0-alpha8 or master 28 | 29 | Please make sure the bug is reproducible over the `master` branch: 30 | 31 | ```sh 32 | $ cd PROJECT 33 | $ go get github.com/kataras/iris/v12@master 34 | $ go get github.com/iris-contrib/swagger@master 35 | $ go run . 36 | ``` 37 | 38 | **Additional context** 39 | Add any other context about the problem here. 40 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/custom.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Custom issue template 3 | about: Other 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | Describe the issue you are facing or ask for help 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: "[FEATURE REQUEST]" 5 | labels: type:idea 6 | assignees: kataras 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: [master] 6 | pull_request: 7 | branches: [master] 8 | 9 | jobs: 10 | 11 | test: 12 | name: Test 13 | runs-on: ubuntu-latest 14 | 15 | strategy: 16 | matrix: 17 | go_version: [1.17] 18 | steps: 19 | 20 | - name: Set up Go 1.x 21 | uses: actions/setup-go@v2 22 | with: 23 | go-version: ${{ matrix.go_version }} 24 | 25 | - name: Check out code into the Go module directory 26 | uses: actions/checkout@v2 27 | 28 | - name: Test 29 | run: go test -v ./... 30 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | go.sum 3 | *.exe 4 | .DS_STORE 5 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: go 2 | 3 | go: 4 | - 1.15.x 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Swaggo 4 | Copyright (c) 2019-2023 Gerasimos Maropoulos 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Swagger for the Iris web framework 2 | 3 | [Iris](https://github.com/kataras/iris) middleware to automatically generate RESTful API documentation with Swagger 2.0 as requested at [#1231](https://github.com/kataras/iris/issues/1231). 4 | 5 | [![build status](https://img.shields.io/github/actions/workflow/status/iris-contrib/swagger/ci.yml?branch=master&style=for-the-badge)](https://github.com/iris-contrib/swagger/actions) 6 | [![Go Report Card](https://goreportcard.com/badge/github.com/iris-contrib/swagger?style=for-the-badge)](https://goreportcard.com/report/github.com/iris-contrib/swagger) 7 | 8 | ## Usage 9 | 10 | ### Start using it 11 | 12 | 1. Add comments to your API source code, [See Declarative Comments Format](https://swaggo.github.io/swaggo.io/declarative_comments_format/). 13 | 2. Download [Swag](https://github.com/swaggo/swag) for Go by using: 14 | 15 | ```sh 16 | $ go install github.com/swaggo/swag/cmd/swag@latest 17 | 18 | # if you find swag cli not work, you can try to install swag cli from source 19 | git clone git@github.com:swaggo/swag.git 20 | cd swag 21 | # tag variable should match with github.com/swaggo/swag in go.mod 22 | # here we use v1.8.10 23 | git checkout -b ${tag} tags/${tag} 24 | go install ./cmd/swag 25 | ``` 26 | 27 | 3. Run the [Swag](https://github.com/swaggo/swag) in your Go project root folder which contains `main.go` file, [Swag](https://github.com/swaggo/swag) will parse comments and generate required files(`docs` folder and `docs/doc.go`). 28 | 29 | ```sh 30 | $ swag init 31 | ``` 32 | 33 | 4. Download [swagger for Iris](https://github.com/iris-contrib/swagger) by using: 34 | 35 | ```sh 36 | $ go get github.com/iris-contrib/swagger/v12@master 37 | ``` 38 | 39 | And import following in your code: 40 | 41 | ```go 42 | import "github.com/iris-contrib/swagger" // swagger middleware for Iris 43 | import "github.com/iris-contrib/swagger/swaggerFiles" // swagger embed files 44 | 45 | ``` 46 | 47 | ### Example Code: 48 | 49 | ```go 50 | package main 51 | 52 | import ( 53 | "github.com/kataras/iris/v12" 54 | 55 | "github.com/iris-contrib/swagger" 56 | "github.com/iris-contrib/swagger/swaggerFiles" 57 | 58 | _ "github.com/your_username/your_project/docs" 59 | // docs folder should be generated by Swag CLI (swag init), 60 | // you have to import it. 61 | ) 62 | 63 | // @title Swagger Example API 64 | // @version 1.0 65 | // @description This is a sample server Petstore server. 66 | // @termsOfService http://swagger.io/terms/ 67 | 68 | // @contact.name API Support 69 | // @contact.url http://www.swagger.io/support 70 | // @contact.email support@swagger.io 71 | 72 | // @license.name Apache 2.0 73 | // @license.url http://www.apache.org/licenses/LICENSE-2.0.html 74 | 75 | // @host localhost:8080 76 | // @BasePath /v2 77 | func main() { 78 | app := iris.New() 79 | 80 | swaggerUI := swagger.Handler(swaggerFiles.Handler, 81 | swagger.URL("/swagger/doc.json"), 82 | swagger.DeepLinking(true), 83 | swagger.Prefix("/swagger"), 84 | ) 85 | 86 | // Register on http://localhost:8080/swagger 87 | app.Get("/swagger", swaggerUI) 88 | // And the wildcard one for index.html, *.js, *.css and e.t.c. 89 | app.Get("/swagger/{any:path}", swaggerUI) 90 | 91 | app.Listen(":8080") 92 | } 93 | ``` 94 | 95 | 5. Run it, and navigate through , you should see the Swagger 2.0 API documentation page. 96 | 97 | 6. If you want to disable swagger when some environment variable is set, use `DisablingHandler` instead of `Handler`. 98 | 99 | ```go 100 | swagger.DisablingHandler(swaggerFiles.Handler, "THE_OS_VARIABLE_NAME_HERE", configurators ...Configurator) 101 | ``` 102 | 103 | 7. If you want to change swagger-ui theme, you can add `swagger.SetTheme(swagger.Monokai)` when init `swaggerUI` 104 | ```go 105 | swaggerUI := swagger.Handler(swaggerFiles.Handler, 106 | swagger.URL("/swagger/doc.json"), 107 | swagger.DeepLinking(true), 108 | swagger.Prefix("/swagger"), 109 | // ref: https://github.com/ostranme/swagger-ui-themes 110 | // current we support 7 themes 111 | // theme is a optional config, if you not set, it will use default theme 112 | swagger.SetTheme(swagger.Monokai), 113 | ) 114 | ``` 115 | -------------------------------------------------------------------------------- /_examples/basic/README.md: -------------------------------------------------------------------------------- 1 | # Basic 2 | 3 | ```sh 4 | $ go install github.com/swaggo/swag/cmd/swag@latest 5 | $ swag init 6 | $ go run main.go 7 | ``` 8 | 9 | Navigate to . -------------------------------------------------------------------------------- /_examples/basic/api/api.go: -------------------------------------------------------------------------------- 1 | package api 2 | 3 | import ( 4 | "github.com/kataras/iris/v12" 5 | ) 6 | 7 | // @Summary Add a new pet to the store 8 | // @Description get string by ID 9 | // @Accept json 10 | // @Produce json 11 | // @Param some_id path int true "Some ID" 12 | // @Success 200 {string} string "ok" 13 | // @Failure 400 {object} web.APIError "We need ID!!" 14 | // @Failure 404 {object} web.APIError "Can not find ID" 15 | // @Router /testapi/get-string-by-int/{some_id} [get] 16 | func GetStringByInt(ctx iris.Context) { 17 | // err := web.APIError{} 18 | // fmt.Println(err) 19 | 20 | id := ctx.Params().GetIntDefault("some_id", 0) 21 | ctx.JSON(Pet3{ 22 | ID: id, 23 | }) 24 | } 25 | 26 | // @Description get struct array by ID 27 | // @Accept json 28 | // @Produce json 29 | // @Param some_id path string true "Some ID" 30 | // @Param offset query int true "Offset" 31 | // @Param limit query int true "Offset" 32 | // @Success 200 {string} string "ok" 33 | // @Failure 400 {object} web.APIError "We need ID!!" 34 | // @Failure 404 {object} web.APIError "Can not find ID" 35 | // @Router /testapi/get-struct-array-by-string/{some_id} [get] 36 | func GetStructArrayByString(ctx iris.Context) { 37 | id := ctx.Params().GetIntDefault("some_id", 0) 38 | ctx.Writef("OK: GetStructArrayByString: %d", id) 39 | } 40 | 41 | type Pet3 struct { 42 | ID int `json:"id"` 43 | } 44 | -------------------------------------------------------------------------------- /_examples/basic/docs/docs.go: -------------------------------------------------------------------------------- 1 | // Package docs GENERATED BY THE COMMAND ABOVE; DO NOT EDIT 2 | // This file was generated by swaggo/swag 3 | package docs 4 | 5 | import "github.com/swaggo/swag" 6 | 7 | const docTemplate = `{ 8 | "schemes": {{ marshal .Schemes }}, 9 | "swagger": "2.0", 10 | "info": { 11 | "description": "{{escape .Description}}", 12 | "title": "{{.Title}}", 13 | "termsOfService": "http://swagger.io/terms/", 14 | "contact": { 15 | "name": "API Support", 16 | "url": "http://www.swagger.io/support", 17 | "email": "support@swagger.io" 18 | }, 19 | "license": { 20 | "name": "Apache 2.0", 21 | "url": "http://www.apache.org/licenses/LICENSE-2.0.html" 22 | }, 23 | "version": "{{.Version}}" 24 | }, 25 | "host": "{{.Host}}", 26 | "basePath": "{{.BasePath}}", 27 | "paths": { 28 | "/testapi/get-string-by-int/{some_id}": { 29 | "get": { 30 | "description": "get string by ID", 31 | "consumes": [ 32 | "application/json" 33 | ], 34 | "produces": [ 35 | "application/json" 36 | ], 37 | "summary": "Add a new pet to the store", 38 | "parameters": [ 39 | { 40 | "type": "integer", 41 | "description": "Some ID", 42 | "name": "some_id", 43 | "in": "path", 44 | "required": true 45 | } 46 | ], 47 | "responses": { 48 | "200": { 49 | "description": "ok", 50 | "schema": { 51 | "type": "string" 52 | } 53 | }, 54 | "400": { 55 | "description": "We need ID!!", 56 | "schema": { 57 | "$ref": "#/definitions/web.APIError" 58 | } 59 | }, 60 | "404": { 61 | "description": "Can not find ID", 62 | "schema": { 63 | "$ref": "#/definitions/web.APIError" 64 | } 65 | } 66 | } 67 | } 68 | }, 69 | "/testapi/get-struct-array-by-string/{some_id}": { 70 | "get": { 71 | "description": "get struct array by ID", 72 | "consumes": [ 73 | "application/json" 74 | ], 75 | "produces": [ 76 | "application/json" 77 | ], 78 | "parameters": [ 79 | { 80 | "type": "string", 81 | "description": "Some ID", 82 | "name": "some_id", 83 | "in": "path", 84 | "required": true 85 | }, 86 | { 87 | "type": "integer", 88 | "description": "Offset", 89 | "name": "offset", 90 | "in": "query", 91 | "required": true 92 | }, 93 | { 94 | "type": "integer", 95 | "description": "Offset", 96 | "name": "limit", 97 | "in": "query", 98 | "required": true 99 | } 100 | ], 101 | "responses": { 102 | "200": { 103 | "description": "ok", 104 | "schema": { 105 | "type": "string" 106 | } 107 | }, 108 | "400": { 109 | "description": "We need ID!!", 110 | "schema": { 111 | "$ref": "#/definitions/web.APIError" 112 | } 113 | }, 114 | "404": { 115 | "description": "Can not find ID", 116 | "schema": { 117 | "$ref": "#/definitions/web.APIError" 118 | } 119 | } 120 | } 121 | } 122 | } 123 | }, 124 | "definitions": { 125 | "web.APIError": { 126 | "type": "object", 127 | "properties": { 128 | "errorCode": { 129 | "type": "integer" 130 | }, 131 | "errorMessage": { 132 | "type": "string" 133 | } 134 | } 135 | } 136 | } 137 | }` 138 | 139 | // SwaggerInfo holds exported Swagger Info so clients can modify it 140 | var SwaggerInfo = &swag.Spec{ 141 | Version: "1.0", 142 | Host: "localhost:8080", 143 | BasePath: "/v2", 144 | Schemes: []string{}, 145 | Title: "Swagger Example API", 146 | Description: "This is a sample server Petstore server.", 147 | InfoInstanceName: "swagger", 148 | SwaggerTemplate: docTemplate, 149 | } 150 | 151 | func init() { 152 | swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) 153 | } 154 | -------------------------------------------------------------------------------- /_examples/basic/docs/swagger.json: -------------------------------------------------------------------------------- 1 | { 2 | "swagger": "2.0", 3 | "info": { 4 | "description": "This is a sample server Petstore server.", 5 | "title": "Swagger Example API", 6 | "termsOfService": "http://swagger.io/terms/", 7 | "contact": { 8 | "name": "API Support", 9 | "url": "http://www.swagger.io/support", 10 | "email": "support@swagger.io" 11 | }, 12 | "license": { 13 | "name": "Apache 2.0", 14 | "url": "http://www.apache.org/licenses/LICENSE-2.0.html" 15 | }, 16 | "version": "1.0" 17 | }, 18 | "host": "localhost:8080", 19 | "basePath": "/v2", 20 | "paths": { 21 | "/testapi/get-string-by-int/{some_id}": { 22 | "get": { 23 | "description": "get string by ID", 24 | "consumes": [ 25 | "application/json" 26 | ], 27 | "produces": [ 28 | "application/json" 29 | ], 30 | "summary": "Add a new pet to the store", 31 | "parameters": [ 32 | { 33 | "type": "integer", 34 | "description": "Some ID", 35 | "name": "some_id", 36 | "in": "path", 37 | "required": true 38 | } 39 | ], 40 | "responses": { 41 | "200": { 42 | "description": "ok", 43 | "schema": { 44 | "type": "string" 45 | } 46 | }, 47 | "400": { 48 | "description": "We need ID!!", 49 | "schema": { 50 | "$ref": "#/definitions/web.APIError" 51 | } 52 | }, 53 | "404": { 54 | "description": "Can not find ID", 55 | "schema": { 56 | "$ref": "#/definitions/web.APIError" 57 | } 58 | } 59 | } 60 | } 61 | }, 62 | "/testapi/get-struct-array-by-string/{some_id}": { 63 | "get": { 64 | "description": "get struct array by ID", 65 | "consumes": [ 66 | "application/json" 67 | ], 68 | "produces": [ 69 | "application/json" 70 | ], 71 | "parameters": [ 72 | { 73 | "type": "string", 74 | "description": "Some ID", 75 | "name": "some_id", 76 | "in": "path", 77 | "required": true 78 | }, 79 | { 80 | "type": "integer", 81 | "description": "Offset", 82 | "name": "offset", 83 | "in": "query", 84 | "required": true 85 | }, 86 | { 87 | "type": "integer", 88 | "description": "Offset", 89 | "name": "limit", 90 | "in": "query", 91 | "required": true 92 | } 93 | ], 94 | "responses": { 95 | "200": { 96 | "description": "ok", 97 | "schema": { 98 | "type": "string" 99 | } 100 | }, 101 | "400": { 102 | "description": "We need ID!!", 103 | "schema": { 104 | "$ref": "#/definitions/web.APIError" 105 | } 106 | }, 107 | "404": { 108 | "description": "Can not find ID", 109 | "schema": { 110 | "$ref": "#/definitions/web.APIError" 111 | } 112 | } 113 | } 114 | } 115 | } 116 | }, 117 | "definitions": { 118 | "web.APIError": { 119 | "type": "object", 120 | "properties": { 121 | "errorCode": { 122 | "type": "integer" 123 | }, 124 | "errorMessage": { 125 | "type": "string" 126 | } 127 | } 128 | } 129 | } 130 | } -------------------------------------------------------------------------------- /_examples/basic/docs/swagger.yaml: -------------------------------------------------------------------------------- 1 | basePath: /v2 2 | definitions: 3 | web.APIError: 4 | properties: 5 | errorCode: 6 | type: integer 7 | errorMessage: 8 | type: string 9 | type: object 10 | host: localhost:8080 11 | info: 12 | contact: 13 | email: support@swagger.io 14 | name: API Support 15 | url: http://www.swagger.io/support 16 | description: This is a sample server Petstore server. 17 | license: 18 | name: Apache 2.0 19 | url: http://www.apache.org/licenses/LICENSE-2.0.html 20 | termsOfService: http://swagger.io/terms/ 21 | title: Swagger Example API 22 | version: "1.0" 23 | paths: 24 | /testapi/get-string-by-int/{some_id}: 25 | get: 26 | consumes: 27 | - application/json 28 | description: get string by ID 29 | parameters: 30 | - description: Some ID 31 | in: path 32 | name: some_id 33 | required: true 34 | type: integer 35 | produces: 36 | - application/json 37 | responses: 38 | "200": 39 | description: ok 40 | schema: 41 | type: string 42 | "400": 43 | description: We need ID!! 44 | schema: 45 | $ref: '#/definitions/web.APIError' 46 | "404": 47 | description: Can not find ID 48 | schema: 49 | $ref: '#/definitions/web.APIError' 50 | summary: Add a new pet to the store 51 | /testapi/get-struct-array-by-string/{some_id}: 52 | get: 53 | consumes: 54 | - application/json 55 | description: get struct array by ID 56 | parameters: 57 | - description: Some ID 58 | in: path 59 | name: some_id 60 | required: true 61 | type: string 62 | - description: Offset 63 | in: query 64 | name: offset 65 | required: true 66 | type: integer 67 | - description: Offset 68 | in: query 69 | name: limit 70 | required: true 71 | type: integer 72 | produces: 73 | - application/json 74 | responses: 75 | "200": 76 | description: ok 77 | schema: 78 | type: string 79 | "400": 80 | description: We need ID!! 81 | schema: 82 | $ref: '#/definitions/web.APIError' 83 | "404": 84 | description: Can not find ID 85 | schema: 86 | $ref: '#/definitions/web.APIError' 87 | swagger: "2.0" 88 | -------------------------------------------------------------------------------- /_examples/basic/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "github.com/iris-contrib/swagger" 5 | "github.com/kataras/iris/v12" 6 | 7 | "github.com/iris-contrib/swagger/_examples/basic/api" 8 | "github.com/iris-contrib/swagger/swaggerFiles" 9 | 10 | _ "github.com/iris-contrib/swagger/_examples/basic/docs" 11 | ) 12 | 13 | // @title Swagger Example API 14 | // @version 1.0 15 | // @description This is a sample server Petstore server. 16 | // @termsOfService http://swagger.io/terms/ 17 | 18 | // @contact.name API Support 19 | // @contact.url http://www.swagger.io/support 20 | // @contact.email support@swagger.io 21 | 22 | // @license.name Apache 2.0 23 | // @license.url http://www.apache.org/licenses/LICENSE-2.0.html 24 | 25 | // @host localhost:8080 26 | // @BasePath /v2 27 | func main() { 28 | app := iris.New() 29 | 30 | // To enable compression: 31 | // app.Use(iris.Compression) 32 | 33 | app.Get("/v2/testapi/get-string-by-int/{some_id:int}", api.GetStringByInt) 34 | app.Get("/v2/testapi/get-struct-array-by-string/{some_id:int}", api.GetStructArrayByString) 35 | 36 | // Configure the swagger UI page. 37 | swaggerUI := swagger.Handler(swaggerFiles.Handler, 38 | swagger.URL("http://localhost:8080/swagger/doc.json"), // The url pointing to API definition. 39 | swagger.DeepLinking(true), 40 | swagger.Prefix("/swagger"), 41 | ) 42 | // Register on http://localhost:8080/swagger 43 | app.Get("/swagger", swaggerUI) 44 | // And http://localhost:8080/swagger/index.html, *.js, *.css and e.t.c. 45 | app.Get("/swagger/{any:path}", swaggerUI) 46 | 47 | app.Listen(":8080") 48 | } 49 | -------------------------------------------------------------------------------- /_examples/basic/web/handler.go: -------------------------------------------------------------------------------- 1 | package web 2 | 3 | // @hello 4 | // yo yo yo yo 5 | type Pet struct { 6 | ID int `json:"id"` 7 | Category struct { 8 | ID int `json:"id"` 9 | Name string `json:"name"` 10 | } `json:"category"` 11 | Name string `json:"name"` 12 | PhotoUrls []string `json:"photoUrls"` 13 | Tags []struct { 14 | ID int `json:"id"` 15 | Name string `json:"name"` 16 | } `json:"tags"` 17 | Status string `json:"status"` 18 | } 19 | 20 | type Pet2 struct { 21 | ID int `json:"id"` 22 | } 23 | 24 | type APIError struct { 25 | ErrorCode int 26 | ErrorMessage string 27 | } 28 | -------------------------------------------------------------------------------- /b0x.yml: -------------------------------------------------------------------------------- 1 | # all folders and files are relative to the path 2 | # where fileb0x was run at! 3 | 4 | # default: main 5 | pkg: swaggerFiles 6 | 7 | # destination 8 | dest: "./swaggerFiles/" 9 | 10 | # gofmt 11 | # type: bool 12 | # default: false 13 | fmt: true 14 | 15 | # compress files 16 | # at the moment, only supports gzip 17 | # 18 | # type: object 19 | compression: 20 | # activates the compression 21 | # 22 | # type: bool 23 | # default: false 24 | compress: false 25 | 26 | # valid values are: 27 | # -> "NoCompression" 28 | # -> "BestSpeed" 29 | # -> "BestCompression" 30 | # -> "DefaultCompression" or "" 31 | # 32 | # type: string 33 | # default: "DefaultCompression" # when: Compress == true && Method == "" 34 | method: "" 35 | 36 | # true = do it yourself (the file is written as gzip compressed file into the memory file system) 37 | # false = decompress files at run time (while writing file into memory file system) 38 | # 39 | # type: bool 40 | # default: false 41 | keep: false 42 | 43 | # --------------- 44 | # -- DANGEROUS -- 45 | # --------------- 46 | # 47 | # cleans the destination folder (only b0xfiles) 48 | # you should use this when using the spread function 49 | # type: bool 50 | # default: false 51 | clean: true 52 | 53 | # default: ab0x.go 54 | output: "ab0x.go" 55 | 56 | # [unexporTed] builds non-exporTed functions, variables and types... 57 | # type: bool 58 | # default: false 59 | unexporTed: false 60 | 61 | # [spread] means it will make a file to hold all fileb0x data 62 | # and each file into a separaTed .go file 63 | # 64 | # example: 65 | # theres 2 files in the folder assets, they're: hello.json and world.txt 66 | # when spread is activaTed, fileb0x will make a file: 67 | # b0x.go or [output]'s data, assets_hello.json.go and assets_world.txt.go 68 | # 69 | # 70 | # type: bool 71 | # default: false 72 | spread: true 73 | 74 | # type: array of objects 75 | custom: 76 | 77 | - files: 78 | # everything inside the folder 79 | # type: array of strings 80 | - "./dist/" 81 | 82 | # base is the path that will be removed from all files' path 83 | # type: string 84 | base: "dist" -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/iris-contrib/swagger 2 | 3 | go 1.20 4 | 5 | require ( 6 | github.com/kataras/iris/v12 v12.2.0 7 | github.com/swaggo/swag v1.8.10 8 | golang.org/x/net v0.8.0 9 | ) 10 | 11 | require ( 12 | github.com/BurntSushi/toml v1.2.1 // indirect 13 | github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53 // indirect 14 | github.com/CloudyKit/jet/v6 v6.2.0 // indirect 15 | github.com/Joker/jade v1.1.3 // indirect 16 | github.com/KyleBanks/depth v1.2.1 // indirect 17 | github.com/PuerkitoBio/purell v1.1.1 // indirect 18 | github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect 19 | github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06 // indirect 20 | github.com/andybalholm/brotli v1.0.5 // indirect 21 | github.com/aymerick/douceur v0.2.0 // indirect 22 | github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385 // indirect 23 | github.com/fatih/structs v1.1.0 // indirect 24 | github.com/flosch/pongo2/v4 v4.0.2 // indirect 25 | github.com/go-openapi/jsonpointer v0.19.5 // indirect 26 | github.com/go-openapi/jsonreference v0.19.6 // indirect 27 | github.com/go-openapi/spec v0.20.4 // indirect 28 | github.com/go-openapi/swag v0.19.15 // indirect 29 | github.com/golang/snappy v0.0.4 // indirect 30 | github.com/google/uuid v1.3.0 // indirect 31 | github.com/gorilla/css v1.0.0 // indirect 32 | github.com/iris-contrib/schema v0.0.6 // indirect 33 | github.com/josharian/intern v1.0.0 // indirect 34 | github.com/kataras/blocks v0.0.7 // indirect 35 | github.com/kataras/golog v0.1.8 // indirect 36 | github.com/kataras/pio v0.0.11 // indirect 37 | github.com/kataras/sitemap v0.0.6 // indirect 38 | github.com/kataras/tunnel v0.0.4 // indirect 39 | github.com/klauspost/compress v1.16.0 // indirect 40 | github.com/mailgun/raymond/v2 v2.0.48 // indirect 41 | github.com/mailru/easyjson v0.7.7 // indirect 42 | github.com/microcosm-cc/bluemonday v1.0.23 // indirect 43 | github.com/russross/blackfriday/v2 v2.1.0 // indirect 44 | github.com/schollz/closestmatch v2.1.0+incompatible // indirect 45 | github.com/sirupsen/logrus v1.8.1 // indirect 46 | github.com/tdewolff/minify/v2 v2.12.4 // indirect 47 | github.com/tdewolff/parse/v2 v2.6.4 // indirect 48 | github.com/valyala/bytebufferpool v1.0.0 // indirect 49 | github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect 50 | github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect 51 | github.com/yosssi/ace v0.0.5 // indirect 52 | golang.org/x/crypto v0.7.0 // indirect 53 | golang.org/x/sys v0.6.0 // indirect 54 | golang.org/x/text v0.8.0 // indirect 55 | golang.org/x/time v0.3.0 // indirect 56 | golang.org/x/tools v0.6.0 // indirect 57 | google.golang.org/protobuf v1.29.1 // indirect 58 | gopkg.in/ini.v1 v1.67.0 // indirect 59 | gopkg.in/yaml.v2 v2.4.0 // indirect 60 | gopkg.in/yaml.v3 v3.0.1 // indirect 61 | ) 62 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= 2 | github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= 3 | github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53 h1:sR+/8Yb4slttB4vD+b9btVEnWgL3Q00OBTzVT8B9C0c= 4 | github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= 5 | github.com/CloudyKit/jet/v6 v6.2.0 h1:EpcZ6SR9n28BUGtNJSvlBqf90IpjeFr36Tizxhn/oME= 6 | github.com/CloudyKit/jet/v6 v6.2.0/go.mod h1:d3ypHeIRNo2+XyqnGA8s+aphtcVpjP5hPwP/Lzo7Ro4= 7 | github.com/Joker/hpp v1.0.0 h1:65+iuJYdRXv/XyN62C1uEmmOx3432rNG/rKlX6V7Kkc= 8 | github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= 9 | github.com/Joker/jade v1.1.3 h1:Qbeh12Vq6BxURXT1qZBRHsDxeURB8ztcL6f3EXSGeHk= 10 | github.com/Joker/jade v1.1.3/go.mod h1:T+2WLyt7VH6Lp0TRxQrUYEs64nRc83wkMQrfeIQKduM= 11 | github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= 12 | github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= 13 | github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= 14 | github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= 15 | github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= 16 | github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= 17 | github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06 h1:KkH3I3sJuOLP3TjA/dfr4NAY8bghDwnXiU7cTKxQqo0= 18 | github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06/go.mod h1:7erjKLwalezA0k99cWs5L11HWOAPNjdUZ6RxH1BXbbM= 19 | github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= 20 | github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs= 21 | github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= 22 | github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= 23 | github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= 24 | github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U= 25 | github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= 26 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 27 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 28 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 29 | github.com/djherbis/atime v1.1.0/go.mod h1:28OF6Y8s3NQWwacXc5eZTsEsiMzp7LF8MbXE+XJPdBE= 30 | github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= 31 | github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385 h1:clC1lXBpe2kTj2VHdaIu9ajZQe4kcEY9j0NsnDDBZ3o= 32 | github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= 33 | github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= 34 | github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= 35 | github.com/flosch/pongo2/v4 v4.0.2 h1:gv+5Pe3vaSVmiJvh/BZa82b7/00YUGm0PIyVVLop0Hw= 36 | github.com/flosch/pongo2/v4 v4.0.2/go.mod h1:B5ObFANs/36VwxxlgKpdchIJHMvHB562PW+BWPhwZD8= 37 | github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= 38 | github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= 39 | github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= 40 | github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= 41 | github.com/go-openapi/jsonreference v0.19.6 h1:UBIxjkht+AWIgYzCDSv2GN+E/togfwXUJFRTWhl2Jjs= 42 | github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= 43 | github.com/go-openapi/spec v0.20.4 h1:O8hJrt0UMnhHcluhIdUgCLRWyM2x7QkBXRvOs7m+O1M= 44 | github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= 45 | github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= 46 | github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM= 47 | github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= 48 | github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= 49 | github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= 50 | github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= 51 | github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= 52 | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 53 | github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= 54 | github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= 55 | github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 56 | github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= 57 | github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= 58 | github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= 59 | github.com/imkira/go-interpol v1.1.0 h1:KIiKr0VSG2CUW1hl1jpiyuzuJeKUUpC8iM1AIE7N1Vk= 60 | github.com/iris-contrib/httpexpect/v2 v2.12.1 h1:3cTZSyBBen/kfjCtgNFoUKi1u0FVXNaAjyRJOo6AVS4= 61 | github.com/iris-contrib/schema v0.0.6 h1:CPSBLyx2e91H2yJzPuhGuifVRnZBBJ3pCOMbOvPZaTw= 62 | github.com/iris-contrib/schema v0.0.6/go.mod h1:iYszG0IOsuIsfzjymw1kMzTL8YQcCWlm65f3wX8J5iA= 63 | github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= 64 | github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= 65 | github.com/kataras/blocks v0.0.7 h1:cF3RDY/vxnSRezc7vLFlQFTYXG/yAr1o7WImJuZbzC4= 66 | github.com/kataras/blocks v0.0.7/go.mod h1:UJIU97CluDo0f+zEjbnbkeMRlvYORtmc1304EeyXf4I= 67 | github.com/kataras/golog v0.1.8 h1:isP8th4PJH2SrbkciKnylaND9xoTtfxv++NB+DF0l9g= 68 | github.com/kataras/golog v0.1.8/go.mod h1:rGPAin4hYROfk1qT9wZP6VY2rsb4zzc37QpdPjdkqVw= 69 | github.com/kataras/iris/v12 v12.2.0 h1:WzDY5nGuW/LgVaFS5BtTkW3crdSKJ/FEgWnxPnIVVLI= 70 | github.com/kataras/iris/v12 v12.2.0/go.mod h1:BLzBpEunc41GbE68OUaQlqX4jzi791mx5HU04uPb90Y= 71 | github.com/kataras/pio v0.0.11 h1:kqreJ5KOEXGMwHAWHDwIl+mjfNCPhAwZPa8gK7MKlyw= 72 | github.com/kataras/pio v0.0.11/go.mod h1:38hH6SWH6m4DKSYmRhlrCJ5WItwWgCVrTNU62XZyUvI= 73 | github.com/kataras/sitemap v0.0.6 h1:w71CRMMKYMJh6LR2wTgnk5hSgjVNB9KL60n5e2KHvLY= 74 | github.com/kataras/sitemap v0.0.6/go.mod h1:dW4dOCNs896OR1HmG+dMLdT7JjDk7mYBzoIRwuj5jA4= 75 | github.com/kataras/tunnel v0.0.4 h1:sCAqWuJV7nPzGrlb0os3j49lk2JhILT0rID38NHNLpA= 76 | github.com/kataras/tunnel v0.0.4/go.mod h1:9FkU4LaeifdMWqZu7o20ojmW4B7hdhv2CMLwfnHGpYw= 77 | github.com/klauspost/compress v1.16.0 h1:iULayQNOReoYUe+1qtKOqw9CwJv3aNQu8ivo7lw1HU4= 78 | github.com/klauspost/compress v1.16.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= 79 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 80 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 81 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 82 | github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= 83 | github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= 84 | github.com/mailgun/raymond/v2 v2.0.48 h1:5dmlB680ZkFG2RN/0lvTAghrSxIESeu9/2aeDqACtjw= 85 | github.com/mailgun/raymond/v2 v2.0.48/go.mod h1:lsgvL50kgt1ylcFJYZiULi5fjPBkkhNfj4KA0W54Z18= 86 | github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= 87 | github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= 88 | github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= 89 | github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= 90 | github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= 91 | github.com/matryer/try v0.0.0-20161228173917-9ac251b645a2/go.mod h1:0KeJpeMD6o+O4hW7qJOT7vyQPKrWmj26uf5wMc/IiIs= 92 | github.com/microcosm-cc/bluemonday v1.0.23 h1:SMZe2IGa0NuHvnVNAZ+6B38gsTbi5e4sViiWJyDDqFY= 93 | github.com/microcosm-cc/bluemonday v1.0.23/go.mod h1:mN70sk7UkkF8TUr2IGBpNN0jAgStuPzlK76QuruE/z4= 94 | github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= 95 | github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= 96 | github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= 97 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 98 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 99 | github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= 100 | github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= 101 | github.com/sanity-io/litter v1.5.5 h1:iE+sBxPBzoK6uaEP5Lt3fHNgpKcHXc/A2HGETy0uJQo= 102 | github.com/schollz/closestmatch v2.1.0+incompatible h1:Uel2GXEpJqOWBrlyI+oY9LTiyyjYS17cCYRqP13/SHk= 103 | github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= 104 | github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= 105 | github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= 106 | github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= 107 | github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= 108 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 109 | github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= 110 | github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= 111 | github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 112 | github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 113 | github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= 114 | github.com/swaggo/swag v1.8.10 h1:eExW4bFa52WOjqRzRD58bgWsWfdFJso50lpbeTcmTfo= 115 | github.com/swaggo/swag v1.8.10/go.mod h1:ezQVUUhly8dludpVk+/PuwJWvLLanB13ygV5Pr9enSk= 116 | github.com/tdewolff/minify/v2 v2.12.4 h1:kejsHQMM17n6/gwdw53qsi6lg0TGddZADVyQOz1KMdE= 117 | github.com/tdewolff/minify/v2 v2.12.4/go.mod h1:h+SRvSIX3kwgwTFOpSckvSxgax3uy8kZTSF1Ojrr3bk= 118 | github.com/tdewolff/parse/v2 v2.6.4 h1:KCkDvNUMof10e3QExio9OPZJT8SbdKojLBumw8YZycQ= 119 | github.com/tdewolff/parse/v2 v2.6.4/go.mod h1:woz0cgbLwFdtbjJu8PIKxhW05KplTFQkOdX78o+Jgrs= 120 | github.com/tdewolff/test v1.0.7 h1:8Vs0142DmPFW/bQeHRP3MV19m1gvndjUb1sn8yy74LM= 121 | github.com/tdewolff/test v1.0.7/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE= 122 | github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= 123 | github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= 124 | github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= 125 | github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= 126 | github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= 127 | github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= 128 | github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= 129 | github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= 130 | github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= 131 | github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 h1:6fRhSjgLCkTD3JnJxvaJ4Sj+TYblw757bqYgZaOq5ZY= 132 | github.com/yosssi/ace v0.0.5 h1:tUkIP/BLdKqrlrPwcmH0shwEEhTRHoGnc1wFIWmaBUA= 133 | github.com/yosssi/ace v0.0.5/go.mod h1:ALfIzm2vT7t5ZE7uoIZqF3TQ7SAOyupFZnkrF5id+K0= 134 | github.com/yudai/gojsondiff v1.0.0 h1:27cbfqXLVEJ1o8I6v3y9lg8Ydm53EKqHXAOMxEGlCOA= 135 | github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 h1:BHyfKlQyqbsFN5p3IfnEUduWvb9is428/nNb5L3U01M= 136 | github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= 137 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 138 | golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 139 | golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= 140 | golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= 141 | golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= 142 | golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= 143 | golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 144 | golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 145 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 146 | golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= 147 | golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 148 | golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= 149 | golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= 150 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 151 | golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 152 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 153 | golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 154 | golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 155 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 156 | golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 157 | golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 158 | golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 159 | golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 160 | golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= 161 | golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 162 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 163 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 164 | golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 165 | golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= 166 | golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= 167 | golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= 168 | golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= 169 | golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 170 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 171 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 172 | golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= 173 | golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= 174 | golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= 175 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 176 | golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 177 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 178 | golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= 179 | golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 180 | google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= 181 | google.golang.org/protobuf v1.29.1 h1:7QBf+IK2gx70Ap/hDsOmam3GE0v9HicjfEdAxE62UoM= 182 | google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= 183 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 184 | gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 185 | gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 186 | gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= 187 | gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 188 | gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= 189 | gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= 190 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 191 | gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= 192 | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 193 | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 194 | gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 195 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 196 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 197 | moul.io/http2curl/v2 v2.3.0 h1:9r3JfDzWPcbIklMOs2TnIFzDYvfAZvjeavG6EzP7jYs= 198 | -------------------------------------------------------------------------------- /swagger.go: -------------------------------------------------------------------------------- 1 | package swagger 2 | 3 | import ( 4 | "fmt" 5 | "html/template" 6 | "os" 7 | "regexp" 8 | "strings" 9 | 10 | "golang.org/x/net/webdav" 11 | 12 | "github.com/kataras/iris/v12" 13 | "github.com/swaggo/swag" 14 | ) 15 | 16 | // Configurator represents a configuration setter. 17 | type Configurator interface { 18 | Configure(*Config) 19 | } 20 | 21 | // ConfiguratorFunc implements the Configuration as a function type. 22 | type ConfiguratorFunc func(*Config) 23 | 24 | // Configure calls itself and modifies the default config. 25 | func (fn ConfiguratorFunc) Configure(config *Config) { 26 | fn(config) 27 | } 28 | 29 | // Config stores swagger configuration variables. 30 | type Config struct { 31 | // The URL pointing to API definition (normally swagger.json or swagger.yaml). 32 | // Default is `swagger.json`. 33 | URL string 34 | // The prefix url which this swagger ui is registered on. 35 | // Defaults to "/swagger". It can be a "." too. 36 | Prefix string 37 | FontCDN string 38 | Theme Theme 39 | DeepLinking bool 40 | DocExpansion string 41 | DomID string 42 | // Enabling tag Filtering 43 | Filter bool 44 | } 45 | 46 | // Configure completes the Configurator interface. 47 | // It allows to pass a Config as it is and override any option. 48 | func (c Config) Configure(config *Config) { 49 | config.URL = c.URL 50 | config.Prefix = c.Prefix 51 | config.DeepLinking = c.DeepLinking 52 | config.DocExpansion = c.DocExpansion 53 | config.DomID = c.DomID 54 | config.Filter = c.Filter 55 | } 56 | 57 | // URL presents the URL pointing to API definition (normally swagger.json or swagger.yaml). 58 | func URL(url string) ConfiguratorFunc { 59 | return func(c *Config) { 60 | c.URL = url 61 | } 62 | } 63 | 64 | // Prefix presents the URL prefix of this swagger UI (normally "/swagger" or "."). 65 | func Prefix(prefix string) ConfiguratorFunc { 66 | return func(c *Config) { 67 | c.Prefix = prefix 68 | } 69 | } 70 | 71 | // Change google font cdn to any you like. 72 | func FontCDN(cdn string) ConfiguratorFunc { 73 | cdn = strings.TrimSuffix(cdn, "/") 74 | return func(c *Config) { 75 | c.FontCDN = cdn 76 | } 77 | } 78 | 79 | type Theme string 80 | 81 | const ( 82 | FeelingBlue Theme = "feeling-blue" 83 | Material Theme = "material" 84 | Muted Theme = "muted" 85 | Outline Theme = "outline" 86 | Flattop Theme = "flattop" 87 | Monokai Theme = "monokai" 88 | Newspaper Theme = "newspaper" 89 | Unknow Theme = "unknow" 90 | ) 91 | 92 | func (t Theme) String() string { 93 | switch t { 94 | case FeelingBlue: 95 | fallthrough 96 | case Material: 97 | fallthrough 98 | case Muted: 99 | fallthrough 100 | case Outline: 101 | fallthrough 102 | case Flattop: 103 | fallthrough 104 | case Monokai: 105 | fallthrough 106 | case Newspaper: 107 | themeName := string(t) 108 | return fmt.Sprintf("theme-%s", themeName) 109 | default: 110 | return "unknow" 111 | } 112 | } 113 | 114 | func (t Theme) IsValid() bool { 115 | return t != Unknow 116 | } 117 | 118 | func SetTheme(theme Theme) ConfiguratorFunc { 119 | return func(c *Config) { 120 | c.Theme = theme 121 | } 122 | } 123 | 124 | // DocExpansion list, full, none. 125 | func DocExpansion(docExpansion string) ConfiguratorFunc { 126 | return func(c *Config) { 127 | c.DocExpansion = docExpansion 128 | } 129 | } 130 | 131 | // DomID #swagger-ui. 132 | func DomID(domID string) ConfiguratorFunc { 133 | return func(c *Config) { 134 | c.DomID = domID 135 | } 136 | } 137 | 138 | // DeepLinking set the swagger deeplinking configuration. 139 | func DeepLinking(deepLinking bool) ConfiguratorFunc { 140 | return func(c *Config) { 141 | c.DeepLinking = deepLinking 142 | } 143 | } 144 | 145 | var instanceNameRegex = regexp.MustCompile(`^/(\w+)\.json$`) 146 | 147 | // Handler wraps the webdav http handler into an Iris Handler one. 148 | // 149 | // Usage: 150 | // 151 | // swaggerUI := swagger.Handler(swaggerFiles.Handler, 152 | // swagger.URL("http://localhost:8080/swagger/swagger.json"), // The url pointing to API definition)) 153 | // swagger.DeepLinking(true), 154 | // swagger.Prefix("/swagger"), 155 | // ) 156 | // app.Get("/swagger", swaggerUI) 157 | // app.Get("/swagger/{any:path}", swaggerUI) 158 | // 159 | // OR 160 | // 161 | // swaggerUI := swagger.Handler(swaggerFiles.Handler, swagger.Config{ 162 | // URL: ..., 163 | // Prefix: ..., 164 | // DeepLinking: ..., 165 | // DocExpansion: ..., 166 | // DomID: ..., 167 | // } 168 | func Handler(h *webdav.Handler, configurators ...Configurator) iris.Handler { 169 | config := &Config{ 170 | URL: "swagger/swagger.json", 171 | DeepLinking: true, 172 | DocExpansion: "list", 173 | DomID: "#swagger-ui", 174 | Prefix: "/swagger", 175 | FontCDN: "https://fonts.googleapis.com", 176 | Theme: Unknow, 177 | Filter: true, 178 | } 179 | 180 | for _, c := range configurators { 181 | c.Configure(config) 182 | } 183 | 184 | if prefix := config.Prefix; prefix != "" && prefix != "." { 185 | h.Prefix = prefix 186 | } else { 187 | config.Prefix = "." // relative files and don't touch the webdav one's (index swagger will not work without index.html). 188 | } 189 | 190 | handler := func(ctx iris.Context) { 191 | path := strings.TrimPrefix(ctx.Path(), config.Prefix) 192 | if sufIdx := strings.LastIndexByte(path, '.'); sufIdx > 0 { 193 | suffix := path[sufIdx:] 194 | switch suffix { 195 | case ".html": 196 | ctx.ContentType("text/html; charset=utf-8") 197 | case ".css": 198 | ctx.ContentType("text/css; charset=utf-8") 199 | case ".js": 200 | ctx.ContentType("application/javascript") 201 | case ".json": 202 | ctx.ContentType("application/json") 203 | } 204 | } 205 | if match := instanceNameRegex.FindStringSubmatch(path); match != nil { 206 | doc, err := swag.ReadDoc(match[1]) // default instance name is swagger 207 | if err != nil { 208 | ctx.Application().Logger().Errorf("swagger: %v", err) 209 | ctx.StopWithStatus(iris.StatusInternalServerError) 210 | return 211 | } 212 | ctx.WriteString(doc) 213 | return 214 | } 215 | switch path { 216 | case "", "/", "/index.html": 217 | ctx.ContentType("text/html; charset=utf-8") 218 | err := indexTmpl.Execute(ctx, config) 219 | if err != nil { 220 | ctx.Application().Logger().Errorf("swagger: %v", err) 221 | ctx.StopWithStatus(iris.StatusInternalServerError) 222 | return 223 | } 224 | default: 225 | h.ServeHTTP(ctx.ResponseWriter(), ctx.Request()) 226 | } 227 | } 228 | 229 | return handler 230 | } 231 | 232 | // DisablingHandler turns handler off 233 | // if specified environment variable passed. 234 | func DisablingHandler(h *webdav.Handler, envName string, configurators ...Configurator) iris.Handler { 235 | eFlag := os.Getenv(envName) 236 | if eFlag != "" { 237 | return func(ctx iris.Context) { 238 | // Simulate behavior when route unspecified and 239 | // return 404 HTTP code 240 | ctx.NotFound() 241 | } 242 | } 243 | 244 | return Handler(h, configurators...) 245 | } 246 | 247 | var indexTmpl = template.Must(template.New("swagger_index.html").Parse(` 248 | 249 | 250 | 251 | 252 | Swagger UI 253 | 254 | 255 | {{if .Theme.IsValid }} 256 | 257 | {{end}} 258 | 259 | 260 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 |
306 | 307 | 308 | 330 | 331 | 332 | `)) 333 | -------------------------------------------------------------------------------- /swaggerFiles/ab0x.go: -------------------------------------------------------------------------------- 1 | // Code generated by fileb0x at "2017-11-26 17:57:18.000591466 +0600 +06 m=+3.756909921" from config file "b0x.yml" DO NOT EDIT. 2 | 3 | package swaggerFiles 4 | 5 | import ( 6 | "bytes" 7 | "context" 8 | "io" 9 | "log" 10 | "net/http" 11 | "os" 12 | "path" 13 | 14 | "golang.org/x/net/webdav" 15 | ) 16 | 17 | var ( 18 | // CTX is a context for webdav vfs 19 | CTX = context.Background() 20 | 21 | // FS is a virtual memory file system 22 | FS = webdav.NewMemFS() 23 | 24 | // Handler is used to server files through a http handler 25 | Handler *webdav.Handler 26 | 27 | // HTTP is the http file system 28 | HTTP http.FileSystem = new(HTTPFS) 29 | ) 30 | 31 | // HTTPFS implements http.FileSystem 32 | type HTTPFS struct{} 33 | 34 | func init() { 35 | if CTX.Err() != nil { 36 | log.Fatal(CTX.Err()) 37 | } 38 | 39 | //var err error 40 | 41 | Handler = &webdav.Handler{ 42 | FileSystem: FS, 43 | LockSystem: webdav.NewMemLS(), 44 | } 45 | 46 | } 47 | 48 | // Open a file 49 | func (hfs *HTTPFS) Open(path string) (http.File, error) { 50 | f, err := FS.OpenFile(CTX, path, os.O_RDONLY, 0644) 51 | if err != nil { 52 | return nil, err 53 | } 54 | 55 | return f, nil 56 | } 57 | 58 | // ReadFile is adapTed from ioutil 59 | func ReadFile(path string) ([]byte, error) { 60 | f, err := FS.OpenFile(CTX, path, os.O_RDONLY, 0644) 61 | if err != nil { 62 | return nil, err 63 | } 64 | 65 | buf := bytes.NewBuffer(make([]byte, 0, bytes.MinRead)) 66 | 67 | // If the buffer overflows, we will get bytes.ErrTooLarge. 68 | // Return that as an error. Any other panic remains. 69 | defer func() { 70 | e := recover() 71 | if e == nil { 72 | return 73 | } 74 | if panicErr, ok := e.(error); ok && panicErr == bytes.ErrTooLarge { 75 | err = panicErr 76 | } else { 77 | panic(e) 78 | } 79 | }() 80 | _, err = buf.ReadFrom(f) 81 | return buf.Bytes(), err 82 | } 83 | 84 | // WriteFile is adapTed from ioutil 85 | func WriteFile(filename string, data []byte, perm os.FileMode) error { 86 | f, err := FS.OpenFile(CTX, filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm) 87 | if err != nil { 88 | return err 89 | } 90 | n, err := f.Write(data) 91 | if err == nil && n < len(data) { 92 | err = io.ErrShortWrite 93 | } 94 | if err1 := f.Close(); err == nil { 95 | err = err1 96 | } 97 | return err 98 | } 99 | 100 | // WalkDirs looks for files in the given dir and returns a list of files in it 101 | // usage for all files in the b0x: WalkDirs("", false) 102 | func WalkDirs(name string, includeDirsInList bool, files ...string) ([]string, error) { 103 | f, err := FS.OpenFile(CTX, name, os.O_RDONLY, 0) 104 | if err != nil { 105 | return nil, err 106 | } 107 | 108 | fileInfos, err := f.Readdir(0) 109 | f.Close() 110 | if err != nil { 111 | return nil, err 112 | } 113 | 114 | for _, info := range fileInfos { 115 | filename := path.Join(name, info.Name()) 116 | 117 | if includeDirsInList || !info.IsDir() { 118 | files = append(files, filename) 119 | } 120 | 121 | if info.IsDir() { 122 | files, err = WalkDirs(filename, includeDirsInList, files...) 123 | if err != nil { 124 | return nil, err 125 | } 126 | } 127 | } 128 | 129 | return files, nil 130 | } 131 | -------------------------------------------------------------------------------- /swaggerFiles/b0xfile__favicon-16x16.png.go: -------------------------------------------------------------------------------- 1 | // Code generaTed by fileb0x at "2017-11-26 17:57:23.142282087 +0600 +06 m=+8.898600553" from config file "b0x.yml" DO NOT EDIT. 2 | 3 | package swaggerFiles 4 | 5 | import ( 6 | "log" 7 | "os" 8 | ) 9 | 10 | // FileFavicon16x16Png is "/favicon-16x16.png" 11 | var FileFavicon16x16Png = []byte("\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\x00\x00\x10\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xff\x61\x00\x00\x01\x84\x49\x44\x41\x54\x78\x01\x95\x53\x03\x4c\x75\x71\x1c\xfd\x8c\xf1\xc3\xec\x30\xa7\x29\xcd\x61\xb6\x6b\x36\xb2\x9b\xf9\xb2\x6b\xc8\x35\x2f\xdb\x8d\x71\x78\xc6\x94\x6d\xcc\x7b\xef\x7f\x4f\xff\xf3\x6c\xdc\xed\xf2\xe0\xfe\xf8\xc9\xff\x50\x14\x11\x2f\x14\x5b\xa3\x50\xc4\xa1\xbc\x3f\xf1\x74\x3e\x37\x12\x73\x13\x03\x85\xca\x37\x49\x52\x09\x61\xb5\x6a\x8f\xa7\x31\xbe\x5d\x88\xf6\xb9\x4c\xf0\x1c\x93\xcf\xda\xe3\x29\x10\x93\x66\x8d\xe4\x06\x13\xcf\xde\x3c\x9b\xd1\x34\x95\x8a\x92\x81\x4f\x41\xcf\x46\x89\xdd\x3c\x9b\x20\x4d\xe6\x7d\x4c\xe4\x07\x15\xc5\xf5\xe3\xff\x49\x0c\x7b\xd6\x8d\xff\x73\x99\x34\xba\x73\x66\x68\xae\x3f\xaf\x6b\x1a\x70\x72\x77\x10\x20\x3c\xb9\xdb\xc7\x86\xa6\xd1\x19\x49\x0a\xa8\xb1\xd7\x84\x79\x33\x67\x17\x31\x54\x24\xb5\x63\x7f\x71\xfb\x62\x71\xbf\x6b\x8e\x27\x1d\x51\xb0\xc2\x2c\x92\x0b\x78\x7c\x3b\x46\xe5\xf0\xef\x00\x83\xf2\xa1\x1f\x78\x7c\x3f\x71\xbd\xcb\xc2\x16\x80\x5a\x46\xf0\xc4\x4a\xf3\xe3\xe4\x6e\x31\xcc\x17\x6b\x60\x3a\x7d\xcb\x79\xe8\x98\xcb\x42\xc7\x7c\x36\x7a\x97\x72\xd1\x34\x9d\x06\xd3\xf9\x8a\xe4\x94\x90\x8b\xb6\xd9\x0c\x50\xeb\x63\x40\xd0\x7c\xbe\x2a\xc9\x34\xc8\xa7\x98\x27\xcd\x68\x00\xe3\xd9\x32\xa6\x76\x4b\x7d\x0c\x42\xa4\xf0\x2b\x44\x0a\xc7\x81\x29\xb0\x10\x9a\xe3\xa9\xd8\x8b\x78\xe4\x28\xa2\xbb\x8d\x6c\x0d\x01\xb6\x8a\x2d\xf3\x37\x38\xbe\xdd\xc7\xa6\xb6\xc9\xd9\xc6\x64\xd8\x5c\x6d\xf4\x0c\x92\x09\x75\x51\x0e\xd2\xf5\xb3\xd1\xf1\x77\xdf\x51\x16\xb3\x34\x61\x24\xa1\xc4\xc4\x28\x56\xbc\x46\xd9\xdf\xa4\x91\xe9\xb0\x26\x2c\x12\x2b\xcd\x93\xcf\x1c\x1c\x62\xdc\xca\x00\x71\x74\xeb\xcc\x2d\x14\x89\xfe\xfc\x0f\x6d\x32\x6a\x88\xec\xcc\x73\x18\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82") 12 | 13 | func init() { 14 | 15 | f, err := FS.OpenFile(CTX, "/favicon-16x16.png", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777) 16 | if err != nil { 17 | log.Fatal(err) 18 | } 19 | 20 | _, err = f.Write(FileFavicon16x16Png) 21 | if err != nil { 22 | log.Fatal(err) 23 | } 24 | 25 | err = f.Close() 26 | if err != nil { 27 | log.Fatal(err) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /swaggerFiles/b0xfile__favicon-32x32.png.go: -------------------------------------------------------------------------------- 1 | // Code generaTed by fileb0x at "2017-11-26 17:57:18.759175324 +0600 +06 m=+4.515493805" from config file "b0x.yml" DO NOT EDIT. 2 | 3 | package swaggerFiles 4 | 5 | import ( 6 | "log" 7 | "os" 8 | ) 9 | 10 | // FileFavicon32x32Png is "/favicon-32x32.png" 11 | var FileFavicon32x32Png = []byte("\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\x00\x00\x04\x3c\x49\x44\x41\x54\x78\x01\xbd\x57\x03\xcc\x65\x59\x0c\x7e\x6b\xdb\xb6\x6d\xc4\x5e\xc7\x5e\xdb\xb6\x3d\x46\xf0\xdb\xb6\x6d\xdb\xb6\x6d\xf3\xa2\xd3\x6f\xf2\xce\x33\x7f\x35\x69\xee\x61\xdb\x5b\x1f\x8d\xa3\xa0\xaa\xea\xa9\xb2\xb2\xf9\xa4\xac\x48\x3f\xf2\x37\x42\x92\xd7\xab\x78\x3c\x02\x94\xe4\x8d\x1a\xfe\x46\x61\x0f\x67\x70\x56\xb3\x53\xa0\xa8\xf2\x85\x4c\xf8\x7b\x45\x91\xfa\x88\x54\x72\x04\x70\x96\x05\xf9\x91\xef\x5e\x6c\x8f\xbe\x9d\x3f\x96\xde\x66\x22\x53\x82\x30\xaf\xd1\xf0\x74\x03\x95\xb4\x7a\x52\x62\xe5\xcf\x14\x5e\xf4\x21\x90\xc7\x3f\x51\x71\xab\x07\xef\xd5\x13\xce\x08\xc0\x5d\xa6\xf1\x2e\x68\x39\xc9\x5c\xb9\x98\xff\x20\x4e\x10\x5b\xdf\x5c\xa6\xbc\xa6\xe3\xf4\x6f\xc4\xdd\xf4\x99\xa7\xc6\x26\xfe\x13\x71\x17\xe5\x36\x1e\xe3\x3b\x4b\x3a\xa1\x59\x88\x04\xd0\x74\x94\xf9\xd5\x7c\xa1\x41\x5c\xae\xea\x0a\xa1\x5f\x82\xaf\x01\x71\xa7\xf0\x97\xa0\xab\xa9\xb2\x33\x08\x34\x84\x59\x9a\x98\xf6\xb5\x76\xff\x5c\x30\x67\xc7\xa2\x90\xfc\xb7\x41\x6c\x5b\x18\x9c\xff\x26\xb1\xc3\x1a\x08\xa1\x5e\x6c\xcb\xe6\x71\x82\xb9\x47\xc6\x2b\x20\xb0\x23\xe8\x9e\xf6\xa2\xa1\x10\x09\x16\x7d\x02\x0e\x07\x75\x01\x43\xf2\xdf\xc2\xc5\x1d\xc5\xa0\xbc\x37\x48\xd0\x87\x63\x9a\xaa\xfe\x42\xf6\xd8\x09\x62\xa8\xea\x0a\x36\xba\xf8\xb5\xcf\x39\x54\xd1\x11\x40\xab\xeb\x73\x34\x34\x55\x6b\x97\xd1\xe0\x54\x0d\xad\x6e\xcc\xc3\xfe\xf4\xb5\xef\xb9\x46\x7b\x15\x9d\x01\xba\xe8\x30\x0a\x51\xc4\xb9\xf0\x76\x53\x87\x8b\x2e\xfd\x82\x00\xe3\x73\x6d\x94\xdd\x70\xc8\xae\x00\xd9\xf5\x07\x69\x6c\xb6\x85\x00\xb1\x65\x5f\x1b\xed\xfd\x1c\x74\x95\x2e\x3a\x90\xb4\x74\xb6\x67\xbb\xf4\x60\x31\x8f\xc3\xc7\x94\x20\xa2\x00\xb0\x3f\xfa\x21\x87\xd5\xfd\x5f\xd4\x7d\x04\xa8\xed\x89\x30\xdb\xcb\x69\x38\xa2\xf5\x05\xb9\xef\xa4\x2f\x20\x75\x8a\x90\x43\x0c\x9b\x5e\x68\x19\x4c\x21\xc0\xef\xa1\x37\x39\x2c\x00\xb4\x08\x68\x1d\x4c\x33\xdb\xfb\x3b\xfc\x0e\x5d\x68\x32\xef\xa7\x35\x50\x05\x26\xc8\x62\x38\x60\x2e\x40\x1a\x01\x7e\x0b\xb9\xde\x61\x01\x7e\x0c\xbc\x1c\x4c\xa8\x75\x28\xdd\xd2\x3e\x7c\x49\x44\xc4\xcf\xd0\x40\x04\x26\x25\xad\x1e\x16\x0f\xf7\x8d\x97\x41\x52\xfa\xca\xe7\x6c\x87\x05\xf8\xd2\xfb\x0c\x84\x1d\x0d\x4c\x56\x59\xdc\x2f\x6a\x75\x13\x1a\x88\xd2\xa0\xaa\x61\x82\x7c\x6e\x7a\x70\x5f\xf4\x03\xc8\x09\xd4\x3b\x5e\x8a\x39\x7d\xee\x75\x9a\x91\x20\x60\x04\x14\x73\xec\xe1\x0c\xc6\x5d\xa3\x05\x60\x60\xd1\x77\x12\x2a\x7e\x20\x00\xf3\xae\xd3\xa0\x9c\x62\x82\xa2\x62\x78\x28\xb3\x6e\x1f\x71\x78\xd2\xf2\xda\x34\x1d\x8a\x7d\x1c\x6b\xd4\x3e\x9c\x49\x2b\xeb\xb3\xf4\x6b\xc8\x75\x60\x4c\x93\xf3\x5d\x34\xb5\xd0\xc3\xe3\x33\xd9\xee\xd7\xf2\xd9\x19\xea\x18\xc9\xc1\x59\x3a\x18\xfb\x28\x2d\xad\x4e\x82\x06\x65\xd5\x1f\x30\xa2\x1d\x56\xf8\xbe\x30\xc1\x98\x35\x01\xf8\xd2\x7e\x5c\xa6\xa5\xb5\x29\x26\xf6\x98\x56\x80\x6c\xe4\x03\xf8\x03\x04\x00\x73\x9a\x5e\xec\x85\x00\xf4\x2b\x0b\x00\xe1\x3a\x47\xf2\x70\x96\x0e\xc4\x3c\x42\x8b\xab\x13\xa0\x81\xd0\xb4\x2e\x00\xab\xd8\xaa\x09\xf6\xc7\x3c\xac\x35\x41\x09\xe6\xf4\x05\xab\xf7\x6b\x23\x13\x9c\x09\x34\x32\xc1\x17\x3a\x13\xe4\xc3\x04\x10\xde\xae\x09\x22\x30\x29\xb6\xe6\x84\x13\xc2\x09\xcf\x72\xda\x09\xfb\x27\x2b\x2d\x3b\x61\x8b\x70\x42\x29\x66\x77\xc2\x30\xc0\x66\x18\x22\x5d\x0b\x01\x10\x86\x92\x41\x22\xba\x73\x0f\x12\xd1\xed\x06\x89\x48\x7a\x5a\x9b\x8a\xe5\x3e\x2c\xe4\x36\x1e\x35\xbb\x50\xdd\x15\x4a\x80\x7d\xce\xa4\xe2\xc8\x7b\x6d\xa4\xe2\xc3\xc2\x01\x07\xc0\xdb\xa4\x18\x2d\xa1\x93\x31\xba\x10\x53\xfa\x25\xb6\x50\x60\x10\x19\x76\x99\x23\x7c\x47\x67\x9b\x09\x10\x57\xf6\x8d\x49\x31\xba\x92\xd6\x36\x17\x45\x12\xfa\xd9\xa8\xf3\x55\x54\x65\x0a\x1b\x95\x9d\x81\x66\xe5\x18\xa5\x75\x6d\x63\x81\x86\xa6\xeb\xec\x09\x80\x34\xcb\x67\x17\xa1\x39\xfa\xc6\xf7\x3c\xa3\xbd\xf2\x0e\x7f\x02\x80\x97\x59\xc7\xac\x18\x34\x24\x68\xa3\x76\xba\x21\x09\xcc\x7b\xcd\xb4\x21\xb1\xd8\x92\x25\x68\xe3\x93\xdc\xd3\x5f\xda\x31\xe6\xae\x69\xcf\x83\xa6\x70\xbc\x24\xf0\xb2\xda\x94\xa2\x71\x14\x42\x40\x13\xdb\xff\xf3\xd7\x0d\xfa\x41\xb9\xc5\x6e\x7b\x8e\xd6\x59\x08\x01\x75\xc1\x27\x7e\x16\x8e\xe9\x04\xa2\xfb\x41\x2b\xc7\x34\x0c\x98\xab\xd7\x3a\xfc\x30\xd1\x76\xaf\x24\xa2\x23\xb7\xf1\x08\xfd\x6d\x21\x4f\x58\x68\x38\x10\x6a\x7c\x67\xd1\xe0\x61\xb2\x99\x04\x9a\x5b\x79\x9a\xbd\x6b\xf2\x34\x43\x24\xa0\x9e\x23\x9f\xa3\xa8\x00\x31\xc6\x1a\x22\xc0\xe4\x69\xa6\xcc\x30\xf3\xf7\xb7\xf5\x58\x45\xb8\xe0\xa1\xc9\xc2\x0c\x90\x83\x80\x24\x83\x38\xdf\xd6\xe3\xd4\x82\x46\x4e\x47\x0f\x87\x36\x8a\xbf\x31\xa8\x64\x28\xa7\x40\x8c\x51\x58\x90\xdb\x19\x9f\xc5\x59\x47\xe9\x9e\x00\xa5\x79\x33\x5d\x9a\x4a\xe1\x22\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82") 12 | 13 | func init() { 14 | 15 | f, err := FS.OpenFile(CTX, "/favicon-32x32.png", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777) 16 | if err != nil { 17 | log.Fatal(err) 18 | } 19 | 20 | _, err = f.Write(FileFavicon32x32Png) 21 | if err != nil { 22 | log.Fatal(err) 23 | } 24 | 25 | err = f.Close() 26 | if err != nil { 27 | log.Fatal(err) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /swaggerFiles/b0xfile__index.html.go: -------------------------------------------------------------------------------- 1 | // Code generaTed by fileb0x at "2017-11-26 17:57:18.758111185 +0600 +06 m=+4.514429656" from config file "b0x.yml" DO NOT EDIT. 2 | 3 | package swaggerFiles 4 | 5 | import ( 6 | "log" 7 | "os" 8 | ) 9 | 10 | // FileIndexHTML is "/index.html" 11 | var FileIndexHTML = []byte("\x3c\x21\x2d\x2d\x20\x48\x54\x4d\x4c\x20\x66\x6f\x72\x20\x73\x74\x61\x74\x69\x63\x20\x64\x69\x73\x74\x72\x69\x62\x75\x74\x69\x6f\x6e\x20\x62\x75\x6e\x64\x6c\x65\x20\x62\x75\x69\x6c\x64\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x68\x74\x6d\x6c\x3e\x0a\x3c\x68\x74\x6d\x6c\x20\x6c\x61\x6e\x67\x3d\x22\x65\x6e\x22\x3e\x0a\x3c\x68\x65\x61\x64\x3e\x0a\x20\x20\x3c\x6d\x65\x74\x61\x20\x63\x68\x61\x72\x73\x65\x74\x3d\x22\x55\x54\x46\x2d\x38\x22\x3e\x0a\x20\x20\x3c\x74\x69\x74\x6c\x65\x3e\x53\x77\x61\x67\x67\x65\x72\x20\x55\x49\x3c\x2f\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x3c\x6c\x69\x6e\x6b\x20\x68\x72\x65\x66\x3d\x22\x68\x74\x74\x70\x73\x3a\x2f\x2f\x66\x6f\x6e\x74\x73\x2e\x67\x6f\x6f\x67\x6c\x65\x61\x70\x69\x73\x2e\x63\x6f\x6d\x2f\x63\x73\x73\x3f\x66\x61\x6d\x69\x6c\x79\x3d\x4f\x70\x65\x6e\x2b\x53\x61\x6e\x73\x3a\x34\x30\x30\x2c\x37\x30\x30\x7c\x53\x6f\x75\x72\x63\x65\x2b\x43\x6f\x64\x65\x2b\x50\x72\x6f\x3a\x33\x30\x30\x2c\x36\x30\x30\x7c\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x2b\x57\x65\x62\x3a\x34\x30\x30\x2c\x36\x30\x30\x2c\x37\x30\x30\x22\x20\x72\x65\x6c\x3d\x22\x73\x74\x79\x6c\x65\x73\x68\x65\x65\x74\x22\x3e\x0a\x20\x20\x3c\x6c\x69\x6e\x6b\x20\x72\x65\x6c\x3d\x22\x73\x74\x79\x6c\x65\x73\x68\x65\x65\x74\x22\x20\x74\x79\x70\x65\x3d\x22\x74\x65\x78\x74\x2f\x63\x73\x73\x22\x20\x68\x72\x65\x66\x3d\x22\x2e\x2f\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x2e\x63\x73\x73\x22\x20\x3e\x0a\x20\x20\x3c\x6c\x69\x6e\x6b\x20\x72\x65\x6c\x3d\x22\x69\x63\x6f\x6e\x22\x20\x74\x79\x70\x65\x3d\x22\x69\x6d\x61\x67\x65\x2f\x70\x6e\x67\x22\x20\x68\x72\x65\x66\x3d\x22\x2e\x2f\x66\x61\x76\x69\x63\x6f\x6e\x2d\x33\x32\x78\x33\x32\x2e\x70\x6e\x67\x22\x20\x73\x69\x7a\x65\x73\x3d\x22\x33\x32\x78\x33\x32\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x6c\x69\x6e\x6b\x20\x72\x65\x6c\x3d\x22\x69\x63\x6f\x6e\x22\x20\x74\x79\x70\x65\x3d\x22\x69\x6d\x61\x67\x65\x2f\x70\x6e\x67\x22\x20\x68\x72\x65\x66\x3d\x22\x2e\x2f\x66\x61\x76\x69\x63\x6f\x6e\x2d\x31\x36\x78\x31\x36\x2e\x70\x6e\x67\x22\x20\x73\x69\x7a\x65\x73\x3d\x22\x31\x36\x78\x31\x36\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x73\x74\x79\x6c\x65\x3e\x0a\x20\x20\x20\x20\x68\x74\x6d\x6c\x0a\x20\x20\x20\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x62\x6f\x78\x2d\x73\x69\x7a\x69\x6e\x67\x3a\x20\x62\x6f\x72\x64\x65\x72\x2d\x62\x6f\x78\x3b\x0a\x20\x20\x20\x20\x20\x20\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x20\x2d\x6d\x6f\x7a\x2d\x73\x63\x72\x6f\x6c\x6c\x62\x61\x72\x73\x2d\x76\x65\x72\x74\x69\x63\x61\x6c\x3b\x0a\x20\x20\x20\x20\x20\x20\x6f\x76\x65\x72\x66\x6c\x6f\x77\x2d\x79\x3a\x20\x73\x63\x72\x6f\x6c\x6c\x3b\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x2a\x2c\x0a\x20\x20\x20\x20\x2a\x3a\x62\x65\x66\x6f\x72\x65\x2c\x0a\x20\x20\x20\x20\x2a\x3a\x61\x66\x74\x65\x72\x0a\x20\x20\x20\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x62\x6f\x78\x2d\x73\x69\x7a\x69\x6e\x67\x3a\x20\x69\x6e\x68\x65\x72\x69\x74\x3b\x0a\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x62\x6f\x64\x79\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x30\x3b\x0a\x20\x20\x20\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x66\x61\x66\x61\x66\x61\x3b\x0a\x20\x20\x20\x20\x7d\x0a\x20\x20\x3c\x2f\x73\x74\x79\x6c\x65\x3e\x0a\x3c\x2f\x68\x65\x61\x64\x3e\x0a\x0a\x3c\x62\x6f\x64\x79\x3e\x0a\x0a\x3c\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x61\x62\x73\x6f\x6c\x75\x74\x65\x3b\x77\x69\x64\x74\x68\x3a\x30\x3b\x68\x65\x69\x67\x68\x74\x3a\x30\x22\x3e\x0a\x20\x20\x3c\x64\x65\x66\x73\x3e\x0a\x20\x20\x20\x20\x3c\x73\x79\x6d\x62\x6f\x6c\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x69\x64\x3d\x22\x75\x6e\x6c\x6f\x63\x6b\x65\x64\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x35\x2e\x38\x20\x38\x48\x31\x34\x56\x35\x2e\x36\x43\x31\x34\x20\x32\x2e\x37\x30\x33\x20\x31\x32\x2e\x36\x36\x35\x20\x31\x20\x31\x30\x20\x31\x20\x37\x2e\x33\x33\x34\x20\x31\x20\x36\x20\x32\x2e\x37\x30\x33\x20\x36\x20\x35\x2e\x36\x56\x36\x68\x32\x76\x2d\x2e\x38\x30\x31\x43\x38\x20\x33\x2e\x37\x35\x34\x20\x38\x2e\x37\x39\x37\x20\x33\x20\x31\x30\x20\x33\x63\x31\x2e\x32\x30\x33\x20\x30\x20\x32\x20\x2e\x37\x35\x34\x20\x32\x20\x32\x2e\x31\x39\x39\x56\x38\x48\x34\x63\x2d\x2e\x35\x35\x33\x20\x30\x2d\x31\x20\x2e\x36\x34\x36\x2d\x31\x20\x31\x2e\x31\x39\x39\x56\x31\x37\x63\x30\x20\x2e\x35\x34\x39\x2e\x34\x32\x38\x20\x31\x2e\x31\x33\x39\x2e\x39\x35\x31\x20\x31\x2e\x33\x30\x37\x6c\x31\x2e\x31\x39\x37\x2e\x33\x38\x37\x43\x35\x2e\x36\x37\x32\x20\x31\x38\x2e\x38\x36\x31\x20\x36\x2e\x35\x35\x20\x31\x39\x20\x37\x2e\x31\x20\x31\x39\x68\x35\x2e\x38\x63\x2e\x35\x34\x39\x20\x30\x20\x31\x2e\x34\x32\x38\x2d\x2e\x31\x33\x39\x20\x31\x2e\x39\x35\x31\x2d\x2e\x33\x30\x37\x6c\x31\x2e\x31\x39\x36\x2d\x2e\x33\x38\x37\x63\x2e\x35\x32\x34\x2d\x2e\x31\x36\x37\x2e\x39\x35\x33\x2d\x2e\x37\x35\x37\x2e\x39\x35\x33\x2d\x31\x2e\x33\x30\x36\x56\x39\x2e\x31\x39\x39\x43\x31\x37\x20\x38\x2e\x36\x34\x36\x20\x31\x36\x2e\x33\x35\x32\x20\x38\x20\x31\x35\x2e\x38\x20\x38\x7a\x22\x3e\x3c\x2f\x70\x61\x74\x68\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x73\x79\x6d\x62\x6f\x6c\x3e\x0a\x0a\x20\x20\x20\x20\x3c\x73\x79\x6d\x62\x6f\x6c\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x69\x64\x3d\x22\x6c\x6f\x63\x6b\x65\x64\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x35\x2e\x38\x20\x38\x48\x31\x34\x56\x35\x2e\x36\x43\x31\x34\x20\x32\x2e\x37\x30\x33\x20\x31\x32\x2e\x36\x36\x35\x20\x31\x20\x31\x30\x20\x31\x20\x37\x2e\x33\x33\x34\x20\x31\x20\x36\x20\x32\x2e\x37\x30\x33\x20\x36\x20\x35\x2e\x36\x56\x38\x48\x34\x63\x2d\x2e\x35\x35\x33\x20\x30\x2d\x31\x20\x2e\x36\x34\x36\x2d\x31\x20\x31\x2e\x31\x39\x39\x56\x31\x37\x63\x30\x20\x2e\x35\x34\x39\x2e\x34\x32\x38\x20\x31\x2e\x31\x33\x39\x2e\x39\x35\x31\x20\x31\x2e\x33\x30\x37\x6c\x31\x2e\x31\x39\x37\x2e\x33\x38\x37\x43\x35\x2e\x36\x37\x32\x20\x31\x38\x2e\x38\x36\x31\x20\x36\x2e\x35\x35\x20\x31\x39\x20\x37\x2e\x31\x20\x31\x39\x68\x35\x2e\x38\x63\x2e\x35\x34\x39\x20\x30\x20\x31\x2e\x34\x32\x38\x2d\x2e\x31\x33\x39\x20\x31\x2e\x39\x35\x31\x2d\x2e\x33\x30\x37\x6c\x31\x2e\x31\x39\x36\x2d\x2e\x33\x38\x37\x63\x2e\x35\x32\x34\x2d\x2e\x31\x36\x37\x2e\x39\x35\x33\x2d\x2e\x37\x35\x37\x2e\x39\x35\x33\x2d\x31\x2e\x33\x30\x36\x56\x39\x2e\x31\x39\x39\x43\x31\x37\x20\x38\x2e\x36\x34\x36\x20\x31\x36\x2e\x33\x35\x32\x20\x38\x20\x31\x35\x2e\x38\x20\x38\x7a\x4d\x31\x32\x20\x38\x48\x38\x56\x35\x2e\x31\x39\x39\x43\x38\x20\x33\x2e\x37\x35\x34\x20\x38\x2e\x37\x39\x37\x20\x33\x20\x31\x30\x20\x33\x63\x31\x2e\x32\x30\x33\x20\x30\x20\x32\x20\x2e\x37\x35\x34\x20\x32\x20\x32\x2e\x31\x39\x39\x56\x38\x7a\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x73\x79\x6d\x62\x6f\x6c\x3e\x0a\x0a\x20\x20\x20\x20\x3c\x73\x79\x6d\x62\x6f\x6c\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x69\x64\x3d\x22\x63\x6c\x6f\x73\x65\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x34\x2e\x33\x34\x38\x20\x31\x34\x2e\x38\x34\x39\x63\x2d\x2e\x34\x36\x39\x2e\x34\x36\x39\x2d\x31\x2e\x32\x32\x39\x2e\x34\x36\x39\x2d\x31\x2e\x36\x39\x37\x20\x30\x4c\x31\x30\x20\x31\x31\x2e\x38\x31\x39\x6c\x2d\x32\x2e\x36\x35\x31\x20\x33\x2e\x30\x32\x39\x63\x2d\x2e\x34\x36\x39\x2e\x34\x36\x39\x2d\x31\x2e\x32\x32\x39\x2e\x34\x36\x39\x2d\x31\x2e\x36\x39\x37\x20\x30\x2d\x2e\x34\x36\x39\x2d\x2e\x34\x36\x39\x2d\x2e\x34\x36\x39\x2d\x31\x2e\x32\x32\x39\x20\x30\x2d\x31\x2e\x36\x39\x37\x6c\x32\x2e\x37\x35\x38\x2d\x33\x2e\x31\x35\x2d\x32\x2e\x37\x35\x39\x2d\x33\x2e\x31\x35\x32\x63\x2d\x2e\x34\x36\x39\x2d\x2e\x34\x36\x39\x2d\x2e\x34\x36\x39\x2d\x31\x2e\x32\x32\x38\x20\x30\x2d\x31\x2e\x36\x39\x37\x2e\x34\x36\x39\x2d\x2e\x34\x36\x39\x20\x31\x2e\x32\x32\x38\x2d\x2e\x34\x36\x39\x20\x31\x2e\x36\x39\x37\x20\x30\x4c\x31\x30\x20\x38\x2e\x31\x38\x33\x6c\x32\x2e\x36\x35\x31\x2d\x33\x2e\x30\x33\x31\x63\x2e\x34\x36\x39\x2d\x2e\x34\x36\x39\x20\x31\x2e\x32\x32\x38\x2d\x2e\x34\x36\x39\x20\x31\x2e\x36\x39\x37\x20\x30\x20\x2e\x34\x36\x39\x2e\x34\x36\x39\x2e\x34\x36\x39\x20\x31\x2e\x32\x32\x39\x20\x30\x20\x31\x2e\x36\x39\x37\x6c\x2d\x32\x2e\x37\x35\x38\x20\x33\x2e\x31\x35\x32\x20\x32\x2e\x37\x35\x38\x20\x33\x2e\x31\x35\x63\x2e\x34\x36\x39\x2e\x34\x36\x39\x2e\x34\x36\x39\x20\x31\x2e\x32\x32\x39\x20\x30\x20\x31\x2e\x36\x39\x38\x7a\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x73\x79\x6d\x62\x6f\x6c\x3e\x0a\x0a\x20\x20\x20\x20\x3c\x73\x79\x6d\x62\x6f\x6c\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x69\x64\x3d\x22\x6c\x61\x72\x67\x65\x2d\x61\x72\x72\x6f\x77\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x33\x2e\x32\x35\x20\x31\x30\x4c\x36\x2e\x31\x30\x39\x20\x32\x2e\x35\x38\x63\x2d\x2e\x32\x36\x38\x2d\x2e\x32\x37\x2d\x2e\x32\x36\x38\x2d\x2e\x37\x30\x37\x20\x30\x2d\x2e\x39\x37\x39\x2e\x32\x36\x38\x2d\x2e\x32\x37\x2e\x37\x30\x31\x2d\x2e\x32\x37\x2e\x39\x36\x39\x20\x30\x6c\x37\x2e\x38\x33\x20\x37\x2e\x39\x30\x38\x63\x2e\x32\x36\x38\x2e\x32\x37\x31\x2e\x32\x36\x38\x2e\x37\x30\x39\x20\x30\x20\x2e\x39\x37\x39\x6c\x2d\x37\x2e\x38\x33\x20\x37\x2e\x39\x30\x38\x63\x2d\x2e\x32\x36\x38\x2e\x32\x37\x31\x2d\x2e\x37\x30\x31\x2e\x32\x37\x2d\x2e\x39\x36\x39\x20\x30\x2d\x2e\x32\x36\x38\x2d\x2e\x32\x36\x39\x2d\x2e\x32\x36\x38\x2d\x2e\x37\x30\x37\x20\x30\x2d\x2e\x39\x37\x39\x4c\x31\x33\x2e\x32\x35\x20\x31\x30\x7a\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x73\x79\x6d\x62\x6f\x6c\x3e\x0a\x0a\x20\x20\x20\x20\x3c\x73\x79\x6d\x62\x6f\x6c\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x69\x64\x3d\x22\x6c\x61\x72\x67\x65\x2d\x61\x72\x72\x6f\x77\x2d\x64\x6f\x77\x6e\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x37\x2e\x34\x31\x38\x20\x36\x2e\x31\x30\x39\x63\x2e\x32\x37\x32\x2d\x2e\x32\x36\x38\x2e\x37\x30\x39\x2d\x2e\x32\x36\x38\x2e\x39\x37\x39\x20\x30\x73\x2e\x32\x37\x31\x2e\x37\x30\x31\x20\x30\x20\x2e\x39\x36\x39\x6c\x2d\x37\x2e\x39\x30\x38\x20\x37\x2e\x38\x33\x63\x2d\x2e\x32\x37\x2e\x32\x36\x38\x2d\x2e\x37\x30\x37\x2e\x32\x36\x38\x2d\x2e\x39\x37\x39\x20\x30\x6c\x2d\x37\x2e\x39\x30\x38\x2d\x37\x2e\x38\x33\x63\x2d\x2e\x32\x37\x2d\x2e\x32\x36\x38\x2d\x2e\x32\x37\x2d\x2e\x37\x30\x31\x20\x30\x2d\x2e\x39\x36\x39\x2e\x32\x37\x31\x2d\x2e\x32\x36\x38\x2e\x37\x30\x39\x2d\x2e\x32\x36\x38\x2e\x39\x37\x39\x20\x30\x4c\x31\x30\x20\x31\x33\x2e\x32\x35\x6c\x37\x2e\x34\x31\x38\x2d\x37\x2e\x31\x34\x31\x7a\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x73\x79\x6d\x62\x6f\x6c\x3e\x0a\x0a\x0a\x20\x20\x20\x20\x3c\x73\x79\x6d\x62\x6f\x6c\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x32\x34\x20\x32\x34\x22\x20\x69\x64\x3d\x22\x6a\x75\x6d\x70\x2d\x74\x6f\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x39\x20\x37\x76\x34\x48\x35\x2e\x38\x33\x6c\x33\x2e\x35\x38\x2d\x33\x2e\x35\x39\x4c\x38\x20\x36\x6c\x2d\x36\x20\x36\x20\x36\x20\x36\x20\x31\x2e\x34\x31\x2d\x31\x2e\x34\x31\x4c\x35\x2e\x38\x33\x20\x31\x33\x48\x32\x31\x56\x37\x7a\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x73\x79\x6d\x62\x6f\x6c\x3e\x0a\x0a\x20\x20\x20\x20\x3c\x73\x79\x6d\x62\x6f\x6c\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x32\x34\x20\x32\x34\x22\x20\x69\x64\x3d\x22\x65\x78\x70\x61\x6e\x64\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x30\x20\x31\x38\x68\x34\x76\x2d\x32\x68\x2d\x34\x76\x32\x7a\x4d\x33\x20\x36\x76\x32\x68\x31\x38\x56\x36\x48\x33\x7a\x6d\x33\x20\x37\x68\x31\x32\x76\x2d\x32\x48\x36\x76\x32\x7a\x22\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x73\x79\x6d\x62\x6f\x6c\x3e\x0a\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\x0a\x3c\x64\x69\x76\x20\x69\x64\x3d\x22\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x22\x3e\x3c\x2f\x64\x69\x76\x3e\x0a\x0a\x3c\x73\x63\x72\x69\x70\x74\x20\x73\x72\x63\x3d\x22\x2e\x2f\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x2d\x62\x75\x6e\x64\x6c\x65\x2e\x6a\x73\x22\x3e\x20\x3c\x2f\x73\x63\x72\x69\x70\x74\x3e\x0a\x3c\x73\x63\x72\x69\x70\x74\x20\x73\x72\x63\x3d\x22\x2e\x2f\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x2d\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x2d\x70\x72\x65\x73\x65\x74\x2e\x6a\x73\x22\x3e\x20\x3c\x2f\x73\x63\x72\x69\x70\x74\x3e\x0a\x3c\x73\x63\x72\x69\x70\x74\x3e\x0a\x77\x69\x6e\x64\x6f\x77\x2e\x6f\x6e\x6c\x6f\x61\x64\x20\x3d\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x28\x29\x20\x7b\x0a\x20\x20\x0a\x20\x20\x2f\x2f\x20\x42\x75\x69\x6c\x64\x20\x61\x20\x73\x79\x73\x74\x65\x6d\x0a\x20\x20\x63\x6f\x6e\x73\x74\x20\x75\x69\x20\x3d\x20\x53\x77\x61\x67\x67\x65\x72\x55\x49\x42\x75\x6e\x64\x6c\x65\x28\x7b\x0a\x20\x20\x20\x20\x75\x72\x6c\x3a\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x65\x74\x73\x74\x6f\x72\x65\x2e\x73\x77\x61\x67\x67\x65\x72\x2e\x69\x6f\x2f\x76\x32\x2f\x73\x77\x61\x67\x67\x65\x72\x2e\x6a\x73\x6f\x6e\x22\x2c\x0a\x20\x20\x20\x20\x64\x6f\x6d\x5f\x69\x64\x3a\x20\x27\x23\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x27\x2c\x0a\x20\x20\x20\x20\x64\x65\x65\x70\x4c\x69\x6e\x6b\x69\x6e\x67\x3a\x20\x74\x72\x75\x65\x2c\x0a\x20\x20\x20\x20\x70\x72\x65\x73\x65\x74\x73\x3a\x20\x5b\x0a\x20\x20\x20\x20\x20\x20\x53\x77\x61\x67\x67\x65\x72\x55\x49\x42\x75\x6e\x64\x6c\x65\x2e\x70\x72\x65\x73\x65\x74\x73\x2e\x61\x70\x69\x73\x2c\x0a\x20\x20\x20\x20\x20\x20\x53\x77\x61\x67\x67\x65\x72\x55\x49\x53\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x50\x72\x65\x73\x65\x74\x0a\x20\x20\x20\x20\x5d\x2c\x0a\x20\x20\x20\x20\x70\x6c\x75\x67\x69\x6e\x73\x3a\x20\x5b\x0a\x20\x20\x20\x20\x20\x20\x53\x77\x61\x67\x67\x65\x72\x55\x49\x42\x75\x6e\x64\x6c\x65\x2e\x70\x6c\x75\x67\x69\x6e\x73\x2e\x44\x6f\x77\x6e\x6c\x6f\x61\x64\x55\x72\x6c\x0a\x20\x20\x20\x20\x5d\x2c\x0a\x20\x20\x20\x20\x6c\x61\x79\x6f\x75\x74\x3a\x20\x22\x53\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x4c\x61\x79\x6f\x75\x74\x22\x0a\x20\x20\x7d\x29\x0a\x0a\x20\x20\x77\x69\x6e\x64\x6f\x77\x2e\x75\x69\x20\x3d\x20\x75\x69\x0a\x7d\x0a\x3c\x2f\x73\x63\x72\x69\x70\x74\x3e\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\x0a\x0a\x3c\x2f\x68\x74\x6d\x6c\x3e\x0a") 12 | 13 | func init() { 14 | 15 | f, err := FS.OpenFile(CTX, "/index.html", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777) 16 | if err != nil { 17 | log.Fatal(err) 18 | } 19 | 20 | _, err = f.Write(FileIndexHTML) 21 | if err != nil { 22 | log.Fatal(err) 23 | } 24 | 25 | err = f.Close() 26 | if err != nil { 27 | log.Fatal(err) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /swaggerFiles/b0xfile__oauth2-redirect.html.go: -------------------------------------------------------------------------------- 1 | // Code generaTed by fileb0x at "2017-11-26 17:57:18.158384185 +0600 +06 m=+3.914702659" from config file "b0x.yml" DO NOT EDIT. 2 | 3 | package swaggerFiles 4 | 5 | import ( 6 | "log" 7 | "os" 8 | ) 9 | 10 | // FileOauth2RedirectHTML is "/oauth2-redirect.html" 11 | var FileOauth2RedirectHTML = []byte("\x3c\x21\x64\x6f\x63\x74\x79\x70\x65\x20\x68\x74\x6d\x6c\x3e\x0a\x3c\x68\x74\x6d\x6c\x20\x6c\x61\x6e\x67\x3d\x22\x65\x6e\x2d\x55\x53\x22\x3e\x0a\x3c\x62\x6f\x64\x79\x20\x6f\x6e\x6c\x6f\x61\x64\x3d\x22\x72\x75\x6e\x28\x29\x22\x3e\x0a\x3c\x2f\x62\x6f\x64\x79\x3e\x0a\x3c\x2f\x68\x74\x6d\x6c\x3e\x0a\x3c\x73\x63\x72\x69\x70\x74\x3e\x0a\x20\x20\x20\x20\x27\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74\x27\x3b\x0a\x20\x20\x20\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x72\x75\x6e\x20\x28\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x76\x61\x72\x20\x6f\x61\x75\x74\x68\x32\x20\x3d\x20\x77\x69\x6e\x64\x6f\x77\x2e\x6f\x70\x65\x6e\x65\x72\x2e\x73\x77\x61\x67\x67\x65\x72\x55\x49\x52\x65\x64\x69\x72\x65\x63\x74\x4f\x61\x75\x74\x68\x32\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x76\x61\x72\x20\x73\x65\x6e\x74\x53\x74\x61\x74\x65\x20\x3d\x20\x6f\x61\x75\x74\x68\x32\x2e\x73\x74\x61\x74\x65\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x76\x61\x72\x20\x72\x65\x64\x69\x72\x65\x63\x74\x55\x72\x6c\x20\x3d\x20\x6f\x61\x75\x74\x68\x32\x2e\x72\x65\x64\x69\x72\x65\x63\x74\x55\x72\x6c\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x76\x61\x72\x20\x69\x73\x56\x61\x6c\x69\x64\x2c\x20\x71\x70\x2c\x20\x61\x72\x72\x3b\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x2f\x63\x6f\x64\x65\x7c\x74\x6f\x6b\x65\x6e\x7c\x65\x72\x72\x6f\x72\x2f\x2e\x74\x65\x73\x74\x28\x77\x69\x6e\x64\x6f\x77\x2e\x6c\x6f\x63\x61\x74\x69\x6f\x6e\x2e\x68\x61\x73\x68\x29\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x71\x70\x20\x3d\x20\x77\x69\x6e\x64\x6f\x77\x2e\x6c\x6f\x63\x61\x74\x69\x6f\x6e\x2e\x68\x61\x73\x68\x2e\x73\x75\x62\x73\x74\x72\x69\x6e\x67\x28\x31\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x20\x65\x6c\x73\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x71\x70\x20\x3d\x20\x6c\x6f\x63\x61\x74\x69\x6f\x6e\x2e\x73\x65\x61\x72\x63\x68\x2e\x73\x75\x62\x73\x74\x72\x69\x6e\x67\x28\x31\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x72\x72\x20\x3d\x20\x71\x70\x2e\x73\x70\x6c\x69\x74\x28\x22\x26\x22\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x61\x72\x72\x2e\x66\x6f\x72\x45\x61\x63\x68\x28\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x28\x76\x2c\x69\x2c\x5f\x61\x72\x72\x29\x20\x7b\x20\x5f\x61\x72\x72\x5b\x69\x5d\x20\x3d\x20\x27\x22\x27\x20\x2b\x20\x76\x2e\x72\x65\x70\x6c\x61\x63\x65\x28\x27\x3d\x27\x2c\x20\x27\x22\x3a\x22\x27\x29\x20\x2b\x20\x27\x22\x27\x3b\x7d\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x71\x70\x20\x3d\x20\x71\x70\x20\x3f\x20\x4a\x53\x4f\x4e\x2e\x70\x61\x72\x73\x65\x28\x27\x7b\x27\x20\x2b\x20\x61\x72\x72\x2e\x6a\x6f\x69\x6e\x28\x29\x20\x2b\x20\x27\x7d\x27\x2c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x28\x6b\x65\x79\x2c\x20\x76\x61\x6c\x75\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x65\x74\x75\x72\x6e\x20\x6b\x65\x79\x20\x3d\x3d\x3d\x20\x22\x22\x20\x3f\x20\x76\x61\x6c\x75\x65\x20\x3a\x20\x64\x65\x63\x6f\x64\x65\x55\x52\x49\x43\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x28\x76\x61\x6c\x75\x65\x29\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x29\x20\x3a\x20\x7b\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\x73\x56\x61\x6c\x69\x64\x20\x3d\x20\x71\x70\x2e\x73\x74\x61\x74\x65\x20\x3d\x3d\x3d\x20\x73\x65\x6e\x74\x53\x74\x61\x74\x65\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x28\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x61\x75\x74\x68\x32\x2e\x61\x75\x74\x68\x2e\x73\x63\x68\x65\x6d\x61\x2e\x67\x65\x74\x28\x22\x66\x6c\x6f\x77\x22\x29\x20\x3d\x3d\x3d\x20\x22\x61\x63\x63\x65\x73\x73\x43\x6f\x64\x65\x22\x7c\x7c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x61\x75\x74\x68\x32\x2e\x61\x75\x74\x68\x2e\x73\x63\x68\x65\x6d\x61\x2e\x67\x65\x74\x28\x22\x66\x6c\x6f\x77\x22\x29\x20\x3d\x3d\x3d\x20\x22\x61\x75\x74\x68\x6f\x72\x69\x7a\x61\x74\x69\x6f\x6e\x43\x6f\x64\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x29\x20\x26\x26\x20\x21\x6f\x61\x75\x74\x68\x32\x2e\x61\x75\x74\x68\x2e\x63\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x21\x69\x73\x56\x61\x6c\x69\x64\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x61\x75\x74\x68\x32\x2e\x65\x72\x72\x43\x62\x28\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x75\x74\x68\x49\x64\x3a\x20\x6f\x61\x75\x74\x68\x32\x2e\x61\x75\x74\x68\x2e\x6e\x61\x6d\x65\x2c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x75\x72\x63\x65\x3a\x20\x22\x61\x75\x74\x68\x22\x2c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6c\x65\x76\x65\x6c\x3a\x20\x22\x77\x61\x72\x6e\x69\x6e\x67\x22\x2c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6d\x65\x73\x73\x61\x67\x65\x3a\x20\x22\x41\x75\x74\x68\x6f\x72\x69\x7a\x61\x74\x69\x6f\x6e\x20\x6d\x61\x79\x20\x62\x65\x20\x75\x6e\x73\x61\x66\x65\x2c\x20\x70\x61\x73\x73\x65\x64\x20\x73\x74\x61\x74\x65\x20\x77\x61\x73\x20\x63\x68\x61\x6e\x67\x65\x64\x20\x69\x6e\x20\x73\x65\x72\x76\x65\x72\x20\x50\x61\x73\x73\x65\x64\x20\x73\x74\x61\x74\x65\x20\x77\x61\x73\x6e\x27\x74\x20\x72\x65\x74\x75\x72\x6e\x65\x64\x20\x66\x72\x6f\x6d\x20\x61\x75\x74\x68\x20\x73\x65\x72\x76\x65\x72\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x66\x20\x28\x71\x70\x2e\x63\x6f\x64\x65\x29\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x65\x6c\x65\x74\x65\x20\x6f\x61\x75\x74\x68\x32\x2e\x73\x74\x61\x74\x65\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x61\x75\x74\x68\x32\x2e\x61\x75\x74\x68\x2e\x63\x6f\x64\x65\x20\x3d\x20\x71\x70\x2e\x63\x6f\x64\x65\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x61\x75\x74\x68\x32\x2e\x63\x61\x6c\x6c\x62\x61\x63\x6b\x28\x7b\x61\x75\x74\x68\x3a\x20\x6f\x61\x75\x74\x68\x32\x2e\x61\x75\x74\x68\x2c\x20\x72\x65\x64\x69\x72\x65\x63\x74\x55\x72\x6c\x3a\x20\x72\x65\x64\x69\x72\x65\x63\x74\x55\x72\x6c\x7d\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x20\x65\x6c\x73\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x61\x75\x74\x68\x32\x2e\x65\x72\x72\x43\x62\x28\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x61\x75\x74\x68\x49\x64\x3a\x20\x6f\x61\x75\x74\x68\x32\x2e\x61\x75\x74\x68\x2e\x6e\x61\x6d\x65\x2c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x75\x72\x63\x65\x3a\x20\x22\x61\x75\x74\x68\x22\x2c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6c\x65\x76\x65\x6c\x3a\x20\x22\x65\x72\x72\x6f\x72\x22\x2c\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6d\x65\x73\x73\x61\x67\x65\x3a\x20\x22\x41\x75\x74\x68\x6f\x72\x69\x7a\x61\x74\x69\x6f\x6e\x20\x66\x61\x69\x6c\x65\x64\x3a\x20\x6e\x6f\x20\x61\x63\x63\x65\x73\x73\x43\x6f\x64\x65\x20\x72\x65\x63\x65\x69\x76\x65\x64\x20\x66\x72\x6f\x6d\x20\x74\x68\x65\x20\x73\x65\x72\x76\x65\x72\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x20\x65\x6c\x73\x65\x20\x7b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x61\x75\x74\x68\x32\x2e\x63\x61\x6c\x6c\x62\x61\x63\x6b\x28\x7b\x61\x75\x74\x68\x3a\x20\x6f\x61\x75\x74\x68\x32\x2e\x61\x75\x74\x68\x2c\x20\x74\x6f\x6b\x65\x6e\x3a\x20\x71\x70\x2c\x20\x69\x73\x56\x61\x6c\x69\x64\x3a\x20\x69\x73\x56\x61\x6c\x69\x64\x2c\x20\x72\x65\x64\x69\x72\x65\x63\x74\x55\x72\x6c\x3a\x20\x72\x65\x64\x69\x72\x65\x63\x74\x55\x72\x6c\x7d\x29\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x7d\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x77\x69\x6e\x64\x6f\x77\x2e\x63\x6c\x6f\x73\x65\x28\x29\x3b\x0a\x20\x20\x20\x20\x7d\x0a\x3c\x2f\x73\x63\x72\x69\x70\x74\x3e\x0a") 12 | 13 | func init() { 14 | 15 | f, err := FS.OpenFile(CTX, "/oauth2-redirect.html", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777) 16 | if err != nil { 17 | log.Fatal(err) 18 | } 19 | 20 | _, err = f.Write(FileOauth2RedirectHTML) 21 | if err != nil { 22 | log.Fatal(err) 23 | } 24 | 25 | err = f.Close() 26 | if err != nil { 27 | log.Fatal(err) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /swaggerFiles/b0xfile__swagger-ui.css.map.go: -------------------------------------------------------------------------------- 1 | // Code generaTed by fileb0x at "2017-11-26 17:57:18.489607614 +0600 +06 m=+4.245926076" from config file "b0x.yml" DO NOT EDIT. 2 | 3 | package swaggerFiles 4 | 5 | import ( 6 | "log" 7 | "os" 8 | ) 9 | 10 | // FileSwaggerUICSSMap is "/swagger-ui.css.map" 11 | var FileSwaggerUICSSMap = []byte("\x7b\x22\x76\x65\x72\x73\x69\x6f\x6e\x22\x3a\x33\x2c\x22\x73\x6f\x75\x72\x63\x65\x73\x22\x3a\x5b\x5d\x2c\x22\x6e\x61\x6d\x65\x73\x22\x3a\x5b\x5d\x2c\x22\x6d\x61\x70\x70\x69\x6e\x67\x73\x22\x3a\x22\x22\x2c\x22\x66\x69\x6c\x65\x22\x3a\x22\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x2e\x63\x73\x73\x22\x2c\x22\x73\x6f\x75\x72\x63\x65\x52\x6f\x6f\x74\x22\x3a\x22\x22\x7d") 12 | 13 | func init() { 14 | 15 | f, err := FS.OpenFile(CTX, "/swagger-ui.css.map", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777) 16 | if err != nil { 17 | log.Fatal(err) 18 | } 19 | 20 | _, err = f.Write(FileSwaggerUICSSMap) 21 | if err != nil { 22 | log.Fatal(err) 23 | } 24 | 25 | err = f.Close() 26 | if err != nil { 27 | log.Fatal(err) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /swaggerFiles/b0xfile__theme-outline.css.go: -------------------------------------------------------------------------------- 1 | // Code generaTed by fileb0x at "2023-06-21 00:19:19.611606 +0800 CST m=+0.013912501" from config file "b0x.yml" DO NOT EDIT. 2 | // modified(2023-06-21 00:19:15.153339168 +0800 CST) 3 | // original path: dist/theme-outline.css 4 | 5 | package swaggerFiles 6 | 7 | import ( 8 | "os" 9 | ) 10 | 11 | // FileThemeOutlineCSS is "/theme-outline.css" 12 | var FileThemeOutlineCSS = []byte("\x40\x63\x68\x61\x72\x73\x65\x74\x20\x22\x55\x54\x46\x2d\x38\x22\x3b\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x68\x74\x6d\x6c\x20\x7b\x0a\x20\x20\x62\x6f\x78\x2d\x73\x69\x7a\x69\x6e\x67\x3a\x20\x62\x6f\x72\x64\x65\x72\x2d\x62\x6f\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2a\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x3a\x61\x66\x74\x65\x72\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x3a\x62\x65\x66\x6f\x72\x65\x20\x7b\x0a\x20\x20\x62\x6f\x78\x2d\x73\x69\x7a\x69\x6e\x67\x3a\x20\x69\x6e\x68\x65\x72\x69\x74\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x62\x6f\x64\x79\x20\x7b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x66\x61\x66\x61\x66\x61\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x77\x72\x61\x70\x70\x65\x72\x20\x7b\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x31\x30\x30\x25\x3b\x0a\x20\x20\x6d\x61\x78\x2d\x77\x69\x64\x74\x68\x3a\x20\x31\x34\x36\x30\x70\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x20\x61\x75\x74\x6f\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x20\x32\x30\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x74\x61\x67\x2d\x73\x65\x63\x74\x69\x6f\x6e\x20\x7b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x66\x6c\x65\x78\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x6f\x72\x69\x65\x6e\x74\x3a\x20\x76\x65\x72\x74\x69\x63\x61\x6c\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x64\x69\x72\x65\x63\x74\x69\x6f\x6e\x3a\x20\x6e\x6f\x72\x6d\x61\x6c\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x2d\x64\x69\x72\x65\x63\x74\x69\x6f\x6e\x3a\x20\x63\x6f\x6c\x75\x6d\x6e\x3b\x0a\x20\x20\x66\x6c\x65\x78\x2d\x64\x69\x72\x65\x63\x74\x69\x6f\x6e\x3a\x20\x63\x6f\x6c\x75\x6d\x6e\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x74\x61\x67\x20\x7b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x66\x6c\x65\x78\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x31\x30\x70\x78\x20\x32\x30\x70\x78\x20\x31\x30\x70\x78\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x63\x75\x72\x73\x6f\x72\x3a\x20\x70\x6f\x69\x6e\x74\x65\x72\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x6c\x6c\x20\x2e\x32\x73\x3b\x0a\x20\x20\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x6c\x6c\x20\x2e\x32\x73\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x62\x6f\x74\x74\x6f\x6d\x3a\x20\x31\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x72\x67\x62\x61\x28\x35\x39\x2c\x20\x36\x35\x2c\x20\x38\x31\x2c\x20\x2e\x33\x29\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\x20\x61\x6c\x69\x67\x6e\x2d\x69\x74\x65\x6d\x73\x3a\x20\x63\x65\x6e\x74\x65\x72\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x74\x61\x67\x3a\x68\x6f\x76\x65\x72\x20\x7b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x30\x2c\x20\x30\x2c\x20\x30\x2c\x20\x2e\x30\x32\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x74\x61\x67\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x32\x34\x70\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x20\x30\x20\x35\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x20\x57\x65\x62\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x74\x61\x67\x2e\x6e\x6f\x2d\x64\x65\x73\x63\x20\x73\x70\x61\x6e\x20\x7b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x66\x6c\x65\x78\x3a\x20\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x74\x61\x67\x20\x73\x76\x67\x20\x7b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x6c\x6c\x20\x2e\x34\x73\x3b\x0a\x20\x20\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x6c\x6c\x20\x2e\x34\x73\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x74\x61\x67\x20\x73\x6d\x61\x6c\x6c\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x34\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x34\x30\x30\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x4f\x70\x65\x6e\x20\x53\x61\x6e\x73\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x70\x61\x72\xd0\xb0\x6d\x65\x74\x65\x72\x5f\x5f\x74\x79\x70\x65\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x32\x70\x78\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x35\x70\x78\x20\x30\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x53\x6f\x75\x72\x63\x65\x20\x43\x6f\x64\x65\x20\x50\x72\x6f\x2c\x20\x6d\x6f\x6e\x6f\x73\x70\x61\x63\x65\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x36\x30\x30\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x76\x69\x65\x77\x2d\x6c\x69\x6e\x65\x2d\x6c\x69\x6e\x6b\x20\x7b\x0a\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x72\x65\x6c\x61\x74\x69\x76\x65\x3b\x0a\x20\x20\x74\x6f\x70\x3a\x20\x33\x70\x78\x3b\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x32\x30\x70\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x20\x35\x70\x78\x3b\x0a\x20\x20\x63\x75\x72\x73\x6f\x72\x3a\x20\x70\x6f\x69\x6e\x74\x65\x72\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x6c\x6c\x20\x2e\x35\x73\x3b\x0a\x20\x20\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x6c\x6c\x20\x2e\x35\x73\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x20\x7b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x20\x30\x20\x31\x35\x70\x78\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x31\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x23\x30\x30\x30\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x34\x70\x78\x3b\x0a\x20\x20\x62\x6f\x78\x2d\x73\x68\x61\x64\x6f\x77\x3a\x20\x30\x20\x30\x20\x33\x70\x78\x20\x72\x67\x62\x61\x28\x30\x2c\x20\x30\x2c\x20\x30\x2c\x20\x2e\x31\x39\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x69\x73\x2d\x6f\x70\x65\x6e\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x20\x7b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x62\x6f\x74\x74\x6f\x6d\x3a\x20\x31\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x23\x30\x30\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x65\x63\x74\x69\x6f\x6e\x2d\x68\x65\x61\x64\x65\x72\x20\x7b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x38\x70\x78\x20\x32\x30\x70\x78\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x68\x73\x6c\x61\x28\x30\x2c\x20\x30\x25\x2c\x20\x31\x30\x30\x25\x2c\x20\x2e\x38\x29\x3b\x0a\x20\x20\x62\x6f\x78\x2d\x73\x68\x61\x64\x6f\x77\x3a\x20\x30\x20\x31\x70\x78\x20\x32\x70\x78\x20\x72\x67\x62\x61\x28\x30\x2c\x20\x30\x2c\x20\x30\x2c\x20\x2e\x31\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x65\x63\x74\x69\x6f\x6e\x2d\x68\x65\x61\x64\x65\x72\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x65\x63\x74\x69\x6f\x6e\x2d\x68\x65\x61\x64\x65\x72\x20\x6c\x61\x62\x65\x6c\x20\x7b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x66\x6c\x65\x78\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\x20\x61\x6c\x69\x67\x6e\x2d\x69\x74\x65\x6d\x73\x3a\x20\x63\x65\x6e\x74\x65\x72\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x65\x63\x74\x69\x6f\x6e\x2d\x68\x65\x61\x64\x65\x72\x20\x6c\x61\x62\x65\x6c\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x32\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x37\x30\x30\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x20\x57\x65\x62\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x65\x63\x74\x69\x6f\x6e\x2d\x68\x65\x61\x64\x65\x72\x20\x6c\x61\x62\x65\x6c\x20\x73\x70\x61\x6e\x20\x7b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x20\x31\x30\x70\x78\x20\x30\x20\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x65\x63\x74\x69\x6f\x6e\x2d\x68\x65\x61\x64\x65\x72\x20\x68\x34\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x34\x70\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x20\x57\x65\x62\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x6d\x65\x74\x68\x6f\x64\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x34\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x37\x30\x30\x3b\x0a\x20\x20\x6d\x69\x6e\x2d\x77\x69\x64\x74\x68\x3a\x20\x38\x30\x70\x78\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x36\x70\x78\x20\x31\x35\x70\x78\x3b\x0a\x20\x20\x74\x65\x78\x74\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x33\x70\x78\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x30\x30\x30\x3b\x0a\x20\x20\x74\x65\x78\x74\x2d\x73\x68\x61\x64\x6f\x77\x3a\x20\x30\x20\x31\x70\x78\x20\x30\x20\x72\x67\x62\x61\x28\x30\x2c\x20\x30\x2c\x20\x30\x2c\x20\x2e\x31\x29\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x20\x57\x65\x62\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x66\x66\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x70\x61\x74\x68\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x70\x61\x74\x68\x5f\x5f\x64\x65\x70\x72\x65\x63\x61\x74\x65\x64\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x36\x70\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x66\x6c\x65\x78\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x53\x6f\x75\x72\x63\x65\x20\x43\x6f\x64\x65\x20\x50\x72\x6f\x2c\x20\x6d\x6f\x6e\x6f\x73\x70\x61\x63\x65\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x36\x30\x30\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\x20\x61\x6c\x69\x67\x6e\x2d\x69\x74\x65\x6d\x73\x3a\x20\x63\x65\x6e\x74\x65\x72\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x70\x61\x74\x68\x20\x2e\x76\x69\x65\x77\x2d\x6c\x69\x6e\x65\x2d\x6c\x69\x6e\x6b\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x70\x61\x74\x68\x5f\x5f\x64\x65\x70\x72\x65\x63\x61\x74\x65\x64\x20\x2e\x76\x69\x65\x77\x2d\x6c\x69\x6e\x65\x2d\x6c\x69\x6e\x6b\x20\x7b\x0a\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x72\x65\x6c\x61\x74\x69\x76\x65\x3b\x0a\x20\x20\x74\x6f\x70\x3a\x20\x32\x70\x78\x3b\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x30\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x3b\x0a\x20\x20\x63\x75\x72\x73\x6f\x72\x3a\x20\x70\x6f\x69\x6e\x74\x65\x72\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x6c\x6c\x20\x2e\x35\x73\x3b\x0a\x20\x20\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x6c\x6c\x20\x2e\x35\x73\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x70\x61\x74\x68\x3a\x68\x6f\x76\x65\x72\x20\x2e\x76\x69\x65\x77\x2d\x6c\x69\x6e\x65\x2d\x6c\x69\x6e\x6b\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x70\x61\x74\x68\x5f\x5f\x64\x65\x70\x72\x65\x63\x61\x74\x65\x64\x3a\x68\x6f\x76\x65\x72\x20\x2e\x76\x69\x65\x77\x2d\x6c\x69\x6e\x65\x2d\x6c\x69\x6e\x6b\x20\x7b\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x31\x38\x70\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x20\x35\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x70\x61\x74\x68\x5f\x5f\x64\x65\x70\x72\x65\x63\x61\x74\x65\x64\x20\x7b\x0a\x20\x20\x74\x65\x78\x74\x2d\x64\x65\x63\x6f\x72\x61\x74\x69\x6f\x6e\x3a\x20\x6c\x69\x6e\x65\x2d\x74\x68\x72\x6f\x75\x67\x68\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x33\x70\x78\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x4f\x70\x65\x6e\x20\x53\x61\x6e\x73\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x20\x7b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x66\x6c\x65\x78\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x35\x70\x78\x3b\x0a\x20\x20\x63\x75\x72\x73\x6f\x72\x3a\x20\x70\x6f\x69\x6e\x74\x65\x72\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\x20\x61\x6c\x69\x67\x6e\x2d\x69\x74\x65\x6d\x73\x3a\x20\x63\x65\x6e\x74\x65\x72\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x70\x6f\x73\x74\x20\x7b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x34\x39\x63\x63\x39\x30\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x37\x33\x2c\x20\x32\x30\x34\x2c\x20\x31\x34\x34\x2c\x20\x2e\x31\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x70\x6f\x73\x74\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x6d\x65\x74\x68\x6f\x64\x20\x7b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x34\x39\x63\x63\x39\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x70\x6f\x73\x74\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x20\x7b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x34\x39\x63\x63\x39\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x70\x75\x74\x20\x7b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x63\x61\x31\x33\x30\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x32\x35\x32\x2c\x20\x31\x36\x31\x2c\x20\x34\x38\x2c\x20\x2e\x31\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x70\x75\x74\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x6d\x65\x74\x68\x6f\x64\x20\x7b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x66\x63\x61\x31\x33\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x70\x75\x74\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x20\x7b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x63\x61\x31\x33\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x64\x65\x6c\x65\x74\x65\x20\x7b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x39\x33\x65\x33\x65\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x32\x34\x39\x2c\x20\x36\x32\x2c\x20\x36\x32\x2c\x20\x2e\x31\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x64\x65\x6c\x65\x74\x65\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x6d\x65\x74\x68\x6f\x64\x20\x7b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x66\x39\x33\x65\x33\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x64\x65\x6c\x65\x74\x65\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x20\x7b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x39\x33\x65\x33\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x67\x65\x74\x20\x7b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x36\x31\x61\x66\x66\x65\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x39\x37\x2c\x20\x31\x37\x35\x2c\x20\x32\x35\x34\x2c\x20\x2e\x31\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x67\x65\x74\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x6d\x65\x74\x68\x6f\x64\x20\x7b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x36\x31\x61\x66\x66\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x67\x65\x74\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x20\x7b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x36\x31\x61\x66\x66\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x70\x61\x74\x63\x68\x20\x7b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x35\x30\x65\x33\x63\x32\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x38\x30\x2c\x20\x32\x32\x37\x2c\x20\x31\x39\x34\x2c\x20\x2e\x31\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x70\x61\x74\x63\x68\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x6d\x65\x74\x68\x6f\x64\x20\x7b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x35\x30\x65\x33\x63\x32\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x70\x61\x74\x63\x68\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x20\x7b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x35\x30\x65\x33\x63\x32\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x68\x65\x61\x64\x20\x7b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x39\x30\x31\x32\x66\x65\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x31\x34\x34\x2c\x20\x31\x38\x2c\x20\x32\x35\x34\x2c\x20\x2e\x31\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x68\x65\x61\x64\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x6d\x65\x74\x68\x6f\x64\x20\x7b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x39\x30\x31\x32\x66\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x68\x65\x61\x64\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x20\x7b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x39\x30\x31\x32\x66\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x6f\x70\x74\x69\x6f\x6e\x73\x20\x7b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x30\x64\x35\x61\x61\x37\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x31\x33\x2c\x20\x39\x30\x2c\x20\x31\x36\x37\x2c\x20\x2e\x31\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x6f\x70\x74\x69\x6f\x6e\x73\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x6d\x65\x74\x68\x6f\x64\x20\x7b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x30\x64\x35\x61\x61\x37\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x6f\x70\x74\x69\x6f\x6e\x73\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x20\x7b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x30\x64\x35\x61\x61\x37\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x64\x65\x70\x72\x65\x63\x61\x74\x65\x64\x20\x7b\x0a\x20\x20\x6f\x70\x61\x63\x69\x74\x79\x3a\x20\x2e\x36\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x65\x62\x65\x62\x65\x62\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x68\x73\x6c\x61\x28\x30\x2c\x20\x30\x25\x2c\x20\x39\x32\x25\x2c\x20\x2e\x31\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x64\x65\x70\x72\x65\x63\x61\x74\x65\x64\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x6d\x65\x74\x68\x6f\x64\x20\x7b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x65\x62\x65\x62\x65\x62\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x64\x65\x70\x72\x65\x63\x61\x74\x65\x64\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x20\x7b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x65\x62\x65\x62\x65\x62\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x74\x61\x62\x20\x7b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x66\x6c\x65\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x32\x30\x70\x78\x20\x30\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x3b\x0a\x20\x20\x6c\x69\x73\x74\x2d\x73\x74\x79\x6c\x65\x3a\x20\x6e\x6f\x6e\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x74\x61\x62\x20\x6c\x69\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x32\x70\x78\x3b\x0a\x20\x20\x6d\x69\x6e\x2d\x77\x69\x64\x74\x68\x3a\x20\x31\x30\x30\x70\x78\x3b\x0a\x20\x20\x6d\x69\x6e\x2d\x77\x69\x64\x74\x68\x3a\x20\x39\x30\x70\x78\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x3b\x0a\x20\x20\x63\x75\x72\x73\x6f\x72\x3a\x20\x70\x6f\x69\x6e\x74\x65\x72\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x20\x57\x65\x62\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x74\x61\x62\x20\x6c\x69\x3a\x66\x69\x72\x73\x74\x2d\x6f\x66\x2d\x74\x79\x70\x65\x20\x7b\x0a\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x72\x65\x6c\x61\x74\x69\x76\x65\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x2d\x6c\x65\x66\x74\x3a\x20\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x74\x61\x62\x20\x6c\x69\x3a\x66\x69\x72\x73\x74\x2d\x6f\x66\x2d\x74\x79\x70\x65\x3a\x61\x66\x74\x65\x72\x20\x7b\x0a\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x62\x73\x6f\x6c\x75\x74\x65\x3b\x0a\x20\x20\x74\x6f\x70\x3a\x20\x30\x3b\x0a\x20\x20\x72\x69\x67\x68\x74\x3a\x20\x36\x70\x78\x3b\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x31\x70\x78\x3b\x0a\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x31\x30\x30\x25\x3b\x0a\x20\x20\x63\x6f\x6e\x74\x65\x6e\x74\x3a\x20\x22\x22\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x30\x2c\x20\x30\x2c\x20\x30\x2c\x20\x2e\x32\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x74\x61\x62\x20\x6c\x69\x2e\x61\x63\x74\x69\x76\x65\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x37\x30\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x2d\x77\x72\x61\x70\x70\x65\x72\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x74\x69\x74\x6c\x65\x5f\x6e\x6f\x72\x6d\x61\x6c\x20\x7b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x31\x35\x70\x78\x20\x32\x30\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x2d\x77\x72\x61\x70\x70\x65\x72\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x2d\x77\x72\x61\x70\x70\x65\x72\x20\x68\x34\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x74\x69\x74\x6c\x65\x5f\x6e\x6f\x72\x6d\x61\x6c\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x74\x69\x74\x6c\x65\x5f\x6e\x6f\x72\x6d\x61\x6c\x20\x68\x34\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x32\x70\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x20\x30\x20\x35\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x4f\x70\x65\x6e\x20\x53\x61\x6e\x73\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x2d\x77\x72\x61\x70\x70\x65\x72\x20\x70\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x74\x69\x74\x6c\x65\x5f\x6e\x6f\x72\x6d\x61\x6c\x20\x70\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x34\x70\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x4f\x70\x65\x6e\x20\x53\x61\x6e\x73\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x65\x78\x65\x63\x75\x74\x65\x2d\x77\x72\x61\x70\x70\x65\x72\x20\x7b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x32\x30\x70\x78\x3b\x0a\x20\x20\x74\x65\x78\x74\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x72\x69\x67\x68\x74\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x65\x78\x65\x63\x75\x74\x65\x2d\x77\x72\x61\x70\x70\x65\x72\x20\x2e\x62\x74\x6e\x20\x7b\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x31\x30\x30\x25\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x38\x70\x78\x20\x34\x30\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x62\x6f\x64\x79\x2d\x70\x61\x72\x61\x6d\x2d\x6f\x70\x74\x69\x6f\x6e\x73\x20\x7b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x66\x6c\x65\x78\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x6f\x72\x69\x65\x6e\x74\x3a\x20\x76\x65\x72\x74\x69\x63\x61\x6c\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x64\x69\x72\x65\x63\x74\x69\x6f\x6e\x3a\x20\x6e\x6f\x72\x6d\x61\x6c\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x2d\x64\x69\x72\x65\x63\x74\x69\x6f\x6e\x3a\x20\x63\x6f\x6c\x75\x6d\x6e\x3b\x0a\x20\x20\x66\x6c\x65\x78\x2d\x64\x69\x72\x65\x63\x74\x69\x6f\x6e\x3a\x20\x63\x6f\x6c\x75\x6d\x6e\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x62\x6f\x64\x79\x2d\x70\x61\x72\x61\x6d\x2d\x6f\x70\x74\x69\x6f\x6e\x73\x20\x2e\x62\x6f\x64\x79\x2d\x70\x61\x72\x61\x6d\x2d\x65\x64\x69\x74\x20\x7b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x31\x30\x70\x78\x20\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x62\x6f\x64\x79\x2d\x70\x61\x72\x61\x6d\x2d\x6f\x70\x74\x69\x6f\x6e\x73\x20\x6c\x61\x62\x65\x6c\x20\x7b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x38\x70\x78\x20\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x62\x6f\x64\x79\x2d\x70\x61\x72\x61\x6d\x2d\x6f\x70\x74\x69\x6f\x6e\x73\x20\x6c\x61\x62\x65\x6c\x20\x73\x65\x6c\x65\x63\x74\x20\x7b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x33\x70\x78\x20\x30\x20\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x72\x65\x73\x70\x6f\x6e\x73\x65\x73\x2d\x69\x6e\x6e\x65\x72\x20\x7b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x32\x30\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x72\x65\x73\x70\x6f\x6e\x73\x65\x73\x2d\x69\x6e\x6e\x65\x72\x20\x68\x34\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x72\x65\x73\x70\x6f\x6e\x73\x65\x73\x2d\x69\x6e\x6e\x65\x72\x20\x68\x35\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x32\x70\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x31\x30\x70\x78\x20\x30\x20\x35\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x4f\x70\x65\x6e\x20\x53\x61\x6e\x73\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x72\x65\x73\x70\x6f\x6e\x73\x65\x2d\x63\x6f\x6c\x5f\x73\x74\x61\x74\x75\x73\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x34\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x4f\x70\x65\x6e\x20\x53\x61\x6e\x73\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x72\x65\x73\x70\x6f\x6e\x73\x65\x2d\x63\x6f\x6c\x5f\x73\x74\x61\x74\x75\x73\x20\x2e\x72\x65\x73\x70\x6f\x6e\x73\x65\x2d\x75\x6e\x64\x6f\x63\x75\x6d\x65\x6e\x74\x65\x64\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x31\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x53\x6f\x75\x72\x63\x65\x20\x43\x6f\x64\x65\x20\x50\x72\x6f\x2c\x20\x6d\x6f\x6e\x6f\x73\x70\x61\x63\x65\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x36\x30\x30\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x39\x39\x39\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x72\x65\x73\x70\x6f\x6e\x73\x65\x2d\x63\x6f\x6c\x5f\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x5f\x5f\x69\x6e\x6e\x65\x72\x20\x73\x70\x61\x6e\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x32\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x74\x79\x6c\x65\x3a\x20\x69\x74\x61\x6c\x69\x63\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x62\x6c\x6f\x63\x6b\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x31\x30\x70\x78\x20\x30\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x34\x70\x78\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x34\x31\x34\x34\x34\x65\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x53\x6f\x75\x72\x63\x65\x20\x43\x6f\x64\x65\x20\x50\x72\x6f\x2c\x20\x6d\x6f\x6e\x6f\x73\x70\x61\x63\x65\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x36\x30\x30\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x66\x66\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x72\x65\x73\x70\x6f\x6e\x73\x65\x2d\x63\x6f\x6c\x5f\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x5f\x5f\x69\x6e\x6e\x65\x72\x20\x73\x70\x61\x6e\x20\x70\x20\x7b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x62\x6f\x64\x79\x20\x70\x72\x65\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x32\x70\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x77\x68\x69\x74\x65\x2d\x73\x70\x61\x63\x65\x3a\x20\x70\x72\x65\x2d\x77\x72\x61\x70\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x34\x70\x78\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x34\x31\x34\x34\x34\x65\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x53\x6f\x75\x72\x63\x65\x20\x43\x6f\x64\x65\x20\x50\x72\x6f\x2c\x20\x6d\x6f\x6e\x6f\x73\x70\x61\x63\x65\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x36\x30\x30\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x66\x66\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x62\x6f\x64\x79\x20\x70\x72\x65\x20\x73\x70\x61\x6e\x20\x7b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x66\x66\x21\x69\x6d\x70\x6f\x72\x74\x61\x6e\x74\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x73\x63\x68\x65\x6d\x65\x2d\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x20\x7b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x20\x30\x20\x32\x30\x70\x78\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x33\x30\x70\x78\x20\x30\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x66\x66\x66\x3b\x0a\x20\x20\x62\x6f\x78\x2d\x73\x68\x61\x64\x6f\x77\x3a\x20\x30\x20\x31\x70\x78\x20\x32\x70\x78\x20\x30\x20\x72\x67\x62\x61\x28\x30\x2c\x20\x30\x2c\x20\x30\x2c\x20\x2e\x31\x35\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x73\x63\x68\x65\x6d\x65\x2d\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x20\x2e\x73\x63\x68\x65\x6d\x65\x73\x20\x7b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x66\x6c\x65\x78\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\x20\x61\x6c\x69\x67\x6e\x2d\x69\x74\x65\x6d\x73\x3a\x20\x63\x65\x6e\x74\x65\x72\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x73\x63\x68\x65\x6d\x65\x2d\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x20\x2e\x73\x63\x68\x65\x6d\x65\x73\x3e\x6c\x61\x62\x65\x6c\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x32\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x37\x30\x30\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x66\x6c\x65\x78\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x6f\x72\x69\x65\x6e\x74\x3a\x20\x76\x65\x72\x74\x69\x63\x61\x6c\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x64\x69\x72\x65\x63\x74\x69\x6f\x6e\x3a\x20\x6e\x6f\x72\x6d\x61\x6c\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x2d\x64\x69\x72\x65\x63\x74\x69\x6f\x6e\x3a\x20\x63\x6f\x6c\x75\x6d\x6e\x3b\x0a\x20\x20\x66\x6c\x65\x78\x2d\x64\x69\x72\x65\x63\x74\x69\x6f\x6e\x3a\x20\x63\x6f\x6c\x75\x6d\x6e\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x2d\x32\x30\x70\x78\x20\x31\x35\x70\x78\x20\x30\x20\x30\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x20\x57\x65\x62\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x73\x63\x68\x65\x6d\x65\x2d\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x20\x2e\x73\x63\x68\x65\x6d\x65\x73\x3e\x6c\x61\x62\x65\x6c\x20\x73\x65\x6c\x65\x63\x74\x20\x7b\x0a\x20\x20\x6d\x69\x6e\x2d\x77\x69\x64\x74\x68\x3a\x20\x31\x33\x30\x70\x78\x3b\x0a\x20\x20\x74\x65\x78\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x75\x70\x70\x65\x72\x63\x61\x73\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6c\x6f\x61\x64\x69\x6e\x67\x2d\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x20\x7b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x34\x30\x70\x78\x20\x30\x20\x36\x30\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6c\x6f\x61\x64\x69\x6e\x67\x2d\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x20\x2e\x6c\x6f\x61\x64\x69\x6e\x67\x20\x7b\x0a\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x72\x65\x6c\x61\x74\x69\x76\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6c\x6f\x61\x64\x69\x6e\x67\x2d\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x20\x2e\x6c\x6f\x61\x64\x69\x6e\x67\x3a\x61\x66\x74\x65\x72\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x37\x30\x30\x3b\x0a\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x62\x73\x6f\x6c\x75\x74\x65\x3b\x0a\x20\x20\x74\x6f\x70\x3a\x20\x35\x30\x25\x3b\x0a\x20\x20\x6c\x65\x66\x74\x3a\x20\x35\x30\x25\x3b\x0a\x20\x20\x63\x6f\x6e\x74\x65\x6e\x74\x3a\x20\x22\x6c\x6f\x61\x64\x69\x6e\x67\x22\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x2d\x35\x30\x25\x2c\x20\x2d\x35\x30\x25\x29\x3b\x0a\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x2d\x35\x30\x25\x2c\x20\x2d\x35\x30\x25\x29\x3b\x0a\x20\x20\x74\x65\x78\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x75\x70\x70\x65\x72\x63\x61\x73\x65\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x20\x57\x65\x62\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6c\x6f\x61\x64\x69\x6e\x67\x2d\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x20\x2e\x6c\x6f\x61\x64\x69\x6e\x67\x3a\x62\x65\x66\x6f\x72\x65\x20\x7b\x0a\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x62\x73\x6f\x6c\x75\x74\x65\x3b\x0a\x20\x20\x74\x6f\x70\x3a\x20\x35\x30\x25\x3b\x0a\x20\x20\x6c\x65\x66\x74\x3a\x20\x35\x30\x25\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x62\x6c\x6f\x63\x6b\x3b\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x36\x30\x70\x78\x3b\x0a\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x36\x30\x70\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x2d\x33\x30\x70\x78\x3b\x0a\x20\x20\x63\x6f\x6e\x74\x65\x6e\x74\x3a\x20\x22\x22\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x61\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x3a\x20\x72\x6f\x74\x61\x74\x69\x6f\x6e\x20\x31\x73\x20\x69\x6e\x66\x69\x6e\x69\x74\x65\x20\x6c\x69\x6e\x65\x61\x72\x2c\x20\x6f\x70\x61\x63\x69\x74\x79\x20\x2e\x35\x73\x3b\x0a\x20\x20\x61\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x3a\x20\x72\x6f\x74\x61\x74\x69\x6f\x6e\x20\x31\x73\x20\x69\x6e\x66\x69\x6e\x69\x74\x65\x20\x6c\x69\x6e\x65\x61\x72\x2c\x20\x6f\x70\x61\x63\x69\x74\x79\x20\x2e\x35\x73\x3b\x0a\x20\x20\x6f\x70\x61\x63\x69\x74\x79\x3a\x20\x31\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x32\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x72\x67\x62\x61\x28\x38\x35\x2c\x20\x38\x35\x2c\x20\x38\x35\x2c\x20\x2e\x31\x29\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x72\x67\x62\x61\x28\x30\x2c\x20\x30\x2c\x20\x30\x2c\x20\x2e\x36\x29\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x31\x30\x30\x25\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x61\x63\x6b\x66\x61\x63\x65\x2d\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x20\x68\x69\x64\x64\x65\x6e\x3b\x0a\x20\x20\x62\x61\x63\x6b\x66\x61\x63\x65\x2d\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x20\x68\x69\x64\x64\x65\x6e\x0a\x7d\x0a\x0a\x40\x2d\x77\x65\x62\x6b\x69\x74\x2d\x6b\x65\x79\x66\x72\x61\x6d\x65\x73\x20\x72\x6f\x74\x61\x74\x69\x6f\x6e\x20\x7b\x0a\x20\x20\x74\x6f\x20\x7b\x0a\x20\x20\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x72\x6f\x74\x61\x74\x65\x28\x31\x74\x75\x72\x6e\x29\x3b\x0a\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x72\x6f\x74\x61\x74\x65\x28\x31\x74\x75\x72\x6e\x29\x0a\x20\x20\x7d\x0a\x7d\x0a\x0a\x40\x6b\x65\x79\x66\x72\x61\x6d\x65\x73\x20\x72\x6f\x74\x61\x74\x69\x6f\x6e\x20\x7b\x0a\x20\x20\x74\x6f\x20\x7b\x0a\x20\x20\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x72\x6f\x74\x61\x74\x65\x28\x31\x74\x75\x72\x6e\x29\x3b\x0a\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x72\x6f\x74\x61\x74\x65\x28\x31\x74\x75\x72\x6e\x29\x0a\x20\x20\x7d\x0a\x7d\x0a\x0a\x40\x2d\x77\x65\x62\x6b\x69\x74\x2d\x6b\x65\x79\x66\x72\x61\x6d\x65\x73\x20\x62\x6c\x69\x6e\x6b\x65\x72\x20\x7b\x0a\x20\x20\x35\x30\x25\x20\x7b\x0a\x20\x20\x20\x20\x6f\x70\x61\x63\x69\x74\x79\x3a\x20\x30\x0a\x20\x20\x7d\x0a\x7d\x0a\x0a\x40\x6b\x65\x79\x66\x72\x61\x6d\x65\x73\x20\x62\x6c\x69\x6e\x6b\x65\x72\x20\x7b\x0a\x20\x20\x35\x30\x25\x20\x7b\x0a\x20\x20\x20\x20\x6f\x70\x61\x63\x69\x74\x79\x3a\x20\x30\x0a\x20\x20\x7d\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x62\x74\x6e\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x34\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x37\x30\x30\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x35\x70\x78\x20\x32\x33\x70\x78\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x6c\x6c\x20\x2e\x33\x73\x3b\x0a\x20\x20\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x6c\x6c\x20\x2e\x33\x73\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x32\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x23\x38\x38\x38\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x34\x70\x78\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x74\x72\x61\x6e\x73\x70\x61\x72\x65\x6e\x74\x3b\x0a\x20\x20\x62\x6f\x78\x2d\x73\x68\x61\x64\x6f\x77\x3a\x20\x30\x20\x31\x70\x78\x20\x32\x70\x78\x20\x72\x67\x62\x61\x28\x30\x2c\x20\x30\x2c\x20\x30\x2c\x20\x2e\x31\x29\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x20\x57\x65\x62\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x62\x74\x6e\x5b\x64\x69\x73\x61\x62\x6c\x65\x64\x5d\x20\x7b\x0a\x20\x20\x63\x75\x72\x73\x6f\x72\x3a\x20\x6e\x6f\x74\x2d\x61\x6c\x6c\x6f\x77\x65\x64\x3b\x0a\x20\x20\x6f\x70\x61\x63\x69\x74\x79\x3a\x20\x2e\x33\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x62\x74\x6e\x3a\x68\x6f\x76\x65\x72\x20\x7b\x0a\x20\x20\x62\x6f\x78\x2d\x73\x68\x61\x64\x6f\x77\x3a\x20\x30\x20\x30\x20\x35\x70\x78\x20\x72\x67\x62\x61\x28\x30\x2c\x20\x30\x2c\x20\x30\x2c\x20\x2e\x33\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x62\x74\x6e\x2e\x63\x61\x6e\x63\x65\x6c\x20\x7b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x66\x36\x30\x36\x30\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x20\x57\x65\x62\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x66\x36\x30\x36\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x62\x74\x6e\x2e\x61\x75\x74\x68\x6f\x72\x69\x7a\x65\x20\x7b\x0a\x20\x20\x6c\x69\x6e\x65\x2d\x68\x65\x69\x67\x68\x74\x3a\x20\x31\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x69\x6e\x6c\x69\x6e\x65\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x34\x39\x63\x63\x39\x30\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x34\x39\x63\x63\x39\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x62\x74\x6e\x2e\x61\x75\x74\x68\x6f\x72\x69\x7a\x65\x20\x73\x70\x61\x6e\x20\x7b\x0a\x20\x20\x66\x6c\x6f\x61\x74\x3a\x20\x6c\x65\x66\x74\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x34\x70\x78\x20\x32\x30\x70\x78\x20\x30\x20\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x62\x74\x6e\x2e\x61\x75\x74\x68\x6f\x72\x69\x7a\x65\x20\x73\x76\x67\x20\x7b\x0a\x20\x20\x66\x69\x6c\x6c\x3a\x20\x23\x34\x39\x63\x63\x39\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x62\x74\x6e\x2e\x65\x78\x65\x63\x75\x74\x65\x20\x7b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x61\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x3a\x20\x70\x75\x6c\x73\x65\x20\x32\x73\x20\x69\x6e\x66\x69\x6e\x69\x74\x65\x3b\x0a\x20\x20\x61\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x3a\x20\x70\x75\x6c\x73\x65\x20\x32\x73\x20\x69\x6e\x66\x69\x6e\x69\x74\x65\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x66\x66\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x34\x39\x39\x30\x65\x32\x0a\x7d\x0a\x0a\x40\x2d\x77\x65\x62\x6b\x69\x74\x2d\x6b\x65\x79\x66\x72\x61\x6d\x65\x73\x20\x70\x75\x6c\x73\x65\x20\x7b\x0a\x20\x20\x30\x25\x20\x7b\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x66\x66\x3b\x0a\x20\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x34\x39\x39\x30\x65\x32\x3b\x0a\x20\x20\x20\x20\x62\x6f\x78\x2d\x73\x68\x61\x64\x6f\x77\x3a\x20\x30\x20\x30\x20\x30\x20\x30\x20\x72\x67\x62\x61\x28\x37\x33\x2c\x20\x31\x34\x34\x2c\x20\x32\x32\x36\x2c\x20\x2e\x38\x29\x0a\x20\x20\x7d\x0a\x20\x20\x37\x30\x25\x20\x7b\x0a\x20\x20\x20\x20\x62\x6f\x78\x2d\x73\x68\x61\x64\x6f\x77\x3a\x20\x30\x20\x30\x20\x30\x20\x35\x70\x78\x20\x72\x67\x62\x61\x28\x37\x33\x2c\x20\x31\x34\x34\x2c\x20\x32\x32\x36\x2c\x20\x30\x29\x0a\x20\x20\x7d\x0a\x20\x20\x74\x6f\x20\x7b\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x66\x66\x3b\x0a\x20\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x34\x39\x39\x30\x65\x32\x3b\x0a\x20\x20\x20\x20\x62\x6f\x78\x2d\x73\x68\x61\x64\x6f\x77\x3a\x20\x30\x20\x30\x20\x30\x20\x30\x20\x72\x67\x62\x61\x28\x37\x33\x2c\x20\x31\x34\x34\x2c\x20\x32\x32\x36\x2c\x20\x30\x29\x0a\x20\x20\x7d\x0a\x7d\x0a\x0a\x40\x6b\x65\x79\x66\x72\x61\x6d\x65\x73\x20\x70\x75\x6c\x73\x65\x20\x7b\x0a\x20\x20\x30\x25\x20\x7b\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x66\x66\x3b\x0a\x20\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x34\x39\x39\x30\x65\x32\x3b\x0a\x20\x20\x20\x20\x62\x6f\x78\x2d\x73\x68\x61\x64\x6f\x77\x3a\x20\x30\x20\x30\x20\x30\x20\x30\x20\x72\x67\x62\x61\x28\x37\x33\x2c\x20\x31\x34\x34\x2c\x20\x32\x32\x36\x2c\x20\x2e\x38\x29\x0a\x20\x20\x7d\x0a\x20\x20\x37\x30\x25\x20\x7b\x0a\x20\x20\x20\x20\x62\x6f\x78\x2d\x73\x68\x61\x64\x6f\x77\x3a\x20\x30\x20\x30\x20\x30\x20\x35\x70\x78\x20\x72\x67\x62\x61\x28\x37\x33\x2c\x20\x31\x34\x34\x2c\x20\x32\x32\x36\x2c\x20\x30\x29\x0a\x20\x20\x7d\x0a\x20\x20\x74\x6f\x20\x7b\x0a\x20\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x66\x66\x3b\x0a\x20\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x34\x39\x39\x30\x65\x32\x3b\x0a\x20\x20\x20\x20\x62\x6f\x78\x2d\x73\x68\x61\x64\x6f\x77\x3a\x20\x30\x20\x30\x20\x30\x20\x30\x20\x72\x67\x62\x61\x28\x37\x33\x2c\x20\x31\x34\x34\x2c\x20\x32\x32\x36\x2c\x20\x30\x29\x0a\x20\x20\x7d\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x62\x74\x6e\x2d\x67\x72\x6f\x75\x70\x20\x7b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x66\x6c\x65\x78\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x33\x30\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x62\x74\x6e\x2d\x67\x72\x6f\x75\x70\x20\x2e\x62\x74\x6e\x20\x7b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x66\x6c\x65\x78\x3a\x20\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x62\x74\x6e\x2d\x67\x72\x6f\x75\x70\x20\x2e\x62\x74\x6e\x3a\x66\x69\x72\x73\x74\x2d\x63\x68\x69\x6c\x64\x20\x7b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x34\x70\x78\x20\x30\x20\x30\x20\x34\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x62\x74\x6e\x2d\x67\x72\x6f\x75\x70\x20\x2e\x62\x74\x6e\x3a\x6c\x61\x73\x74\x2d\x63\x68\x69\x6c\x64\x20\x7b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x30\x20\x34\x70\x78\x20\x34\x70\x78\x20\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x61\x75\x74\x68\x6f\x72\x69\x7a\x61\x74\x69\x6f\x6e\x5f\x5f\x62\x74\x6e\x20\x7b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x6e\x6f\x6e\x65\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x6e\x6f\x6e\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x61\x75\x74\x68\x6f\x72\x69\x7a\x61\x74\x69\x6f\x6e\x5f\x5f\x62\x74\x6e\x2e\x6c\x6f\x63\x6b\x65\x64\x20\x7b\x0a\x20\x20\x6f\x70\x61\x63\x69\x74\x79\x3a\x20\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x61\x75\x74\x68\x6f\x72\x69\x7a\x61\x74\x69\x6f\x6e\x5f\x5f\x62\x74\x6e\x2e\x75\x6e\x6c\x6f\x63\x6b\x65\x64\x20\x7b\x0a\x20\x20\x6f\x70\x61\x63\x69\x74\x79\x3a\x20\x2e\x34\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x65\x78\x70\x61\x6e\x64\x2d\x6d\x65\x74\x68\x6f\x64\x73\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x65\x78\x70\x61\x6e\x64\x2d\x6f\x70\x65\x72\x61\x74\x69\x6f\x6e\x20\x7b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x6e\x6f\x6e\x65\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x6e\x6f\x6e\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x65\x78\x70\x61\x6e\x64\x2d\x6d\x65\x74\x68\x6f\x64\x73\x20\x73\x76\x67\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x65\x78\x70\x61\x6e\x64\x2d\x6f\x70\x65\x72\x61\x74\x69\x6f\x6e\x20\x73\x76\x67\x20\x7b\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x32\x30\x70\x78\x3b\x0a\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x32\x30\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x65\x78\x70\x61\x6e\x64\x2d\x6d\x65\x74\x68\x6f\x64\x73\x20\x7b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x20\x31\x30\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x65\x78\x70\x61\x6e\x64\x2d\x6d\x65\x74\x68\x6f\x64\x73\x3a\x68\x6f\x76\x65\x72\x20\x73\x76\x67\x20\x7b\x0a\x20\x20\x66\x69\x6c\x6c\x3a\x20\x23\x34\x34\x34\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x65\x78\x70\x61\x6e\x64\x2d\x6d\x65\x74\x68\x6f\x64\x73\x20\x73\x76\x67\x20\x7b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x6c\x6c\x20\x2e\x33\x73\x3b\x0a\x20\x20\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x6c\x6c\x20\x2e\x33\x73\x3b\x0a\x20\x20\x66\x69\x6c\x6c\x3a\x20\x23\x37\x37\x37\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x62\x75\x74\x74\x6f\x6e\x20\x7b\x0a\x20\x20\x63\x75\x72\x73\x6f\x72\x3a\x20\x70\x6f\x69\x6e\x74\x65\x72\x3b\x0a\x20\x20\x6f\x75\x74\x6c\x69\x6e\x65\x3a\x20\x6e\x6f\x6e\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x73\x65\x6c\x65\x63\x74\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x34\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x37\x30\x30\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x35\x70\x78\x20\x34\x30\x70\x78\x20\x35\x70\x78\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x32\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x23\x34\x31\x34\x34\x34\x65\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x34\x70\x78\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x66\x37\x66\x37\x66\x37\x20\x75\x72\x6c\x28\x64\x61\x74\x61\x3a\x69\x6d\x61\x67\x65\x2f\x73\x76\x67\x2b\x78\x6d\x6c\x3b\x62\x61\x73\x65\x36\x34\x2c\x50\x48\x4e\x32\x5a\x79\x42\x34\x62\x57\x78\x75\x63\x7a\x30\x69\x61\x48\x52\x30\x63\x44\x6f\x76\x4c\x33\x64\x33\x64\x79\x35\x33\x4d\x79\x35\x76\x63\x6d\x63\x76\x4d\x6a\x41\x77\x4d\x43\x39\x7a\x64\x6d\x63\x69\x49\x48\x5a\x70\x5a\x58\x64\x43\x62\x33\x67\x39\x49\x6a\x41\x67\x4d\x43\x41\x79\x4d\x43\x41\x79\x4d\x43\x49\x2b\x49\x43\x41\x67\x49\x44\x78\x77\x59\x58\x52\x6f\x49\x47\x51\x39\x49\x6b\x30\x78\x4d\x79\x34\x30\x4d\x54\x67\x67\x4e\x79\x34\x34\x4e\x54\x6c\x6a\x4c\x6a\x49\x33\x4d\x53\x30\x75\x4d\x6a\x59\x34\x4c\x6a\x63\x77\x4f\x53\x30\x75\x4d\x6a\x59\x34\x4c\x6a\x6b\x33\x4f\x43\x41\x77\x49\x43\x34\x79\x4e\x79\x34\x79\x4e\x6a\x67\x75\x4d\x6a\x63\x79\x4c\x6a\x63\x77\x4d\x53\x41\x77\x49\x43\x34\x35\x4e\x6a\x6c\x73\x4c\x54\x4d\x75\x4f\x54\x41\x34\x49\x44\x4d\x75\x4f\x44\x4e\x6a\x4c\x53\x34\x79\x4e\x79\x34\x79\x4e\x6a\x67\x74\x4c\x6a\x63\x77\x4e\x79\x34\x79\x4e\x6a\x67\x74\x4c\x6a\x6b\x33\x4f\x53\x41\x77\x62\x43\x30\x7a\x4c\x6a\x6b\x77\x4f\x43\x30\x7a\x4c\x6a\x67\x7a\x59\x79\x30\x75\x4d\x6a\x63\x74\x4c\x6a\x49\x32\x4e\x79\x30\x75\x4d\x6a\x63\x74\x4c\x6a\x63\x77\x4d\x53\x41\x77\x4c\x53\x34\x35\x4e\x6a\x6b\x75\x4d\x6a\x63\x78\x4c\x53\x34\x79\x4e\x6a\x67\x75\x4e\x7a\x41\x35\x4c\x53\x34\x79\x4e\x6a\x67\x75\x4f\x54\x63\x34\x49\x44\x42\x4d\x4d\x54\x41\x67\x4d\x54\x46\x73\x4d\x79\x34\x30\x4d\x54\x67\x74\x4d\x79\x34\x78\x4e\x44\x46\x36\x49\x69\x38\x2b\x50\x43\x39\x7a\x64\x6d\x63\x2b\x29\x20\x72\x69\x67\x68\x74\x20\x31\x30\x70\x78\x20\x63\x65\x6e\x74\x65\x72\x20\x6e\x6f\x2d\x72\x65\x70\x65\x61\x74\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x2d\x73\x69\x7a\x65\x3a\x20\x32\x30\x70\x78\x3b\x0a\x20\x20\x62\x6f\x78\x2d\x73\x68\x61\x64\x6f\x77\x3a\x20\x30\x20\x31\x70\x78\x20\x32\x70\x78\x20\x30\x20\x72\x67\x62\x61\x28\x30\x2c\x20\x30\x2c\x20\x30\x2c\x20\x2e\x32\x35\x29\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x20\x57\x65\x62\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x61\x70\x70\x65\x61\x72\x61\x6e\x63\x65\x3a\x20\x6e\x6f\x6e\x65\x3b\x0a\x20\x20\x2d\x6d\x6f\x7a\x2d\x61\x70\x70\x65\x61\x72\x61\x6e\x63\x65\x3a\x20\x6e\x6f\x6e\x65\x3b\x0a\x20\x20\x61\x70\x70\x65\x61\x72\x61\x6e\x63\x65\x3a\x20\x6e\x6f\x6e\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x73\x65\x6c\x65\x63\x74\x5b\x6d\x75\x6c\x74\x69\x70\x6c\x65\x5d\x20\x7b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x35\x70\x78\x20\x30\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x35\x70\x78\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x66\x37\x66\x37\x66\x37\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x62\x6f\x64\x79\x20\x73\x65\x6c\x65\x63\x74\x20\x7b\x0a\x20\x20\x6d\x69\x6e\x2d\x77\x69\x64\x74\x68\x3a\x20\x32\x33\x30\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x6c\x61\x62\x65\x6c\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x32\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x37\x30\x30\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x20\x30\x20\x35\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x20\x57\x65\x62\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x69\x6e\x70\x75\x74\x5b\x74\x79\x70\x65\x3d\x65\x6d\x61\x69\x6c\x5d\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x69\x6e\x70\x75\x74\x5b\x74\x79\x70\x65\x3d\x70\x61\x73\x73\x77\x6f\x72\x64\x5d\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x69\x6e\x70\x75\x74\x5b\x74\x79\x70\x65\x3d\x73\x65\x61\x72\x63\x68\x5d\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x69\x6e\x70\x75\x74\x5b\x74\x79\x70\x65\x3d\x74\x65\x78\x74\x5d\x20\x7b\x0a\x20\x20\x6d\x69\x6e\x2d\x77\x69\x64\x74\x68\x3a\x20\x31\x30\x30\x70\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x35\x70\x78\x20\x30\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x38\x70\x78\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x31\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x23\x64\x39\x64\x39\x64\x39\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x34\x70\x78\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x66\x66\x66\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x69\x6e\x70\x75\x74\x5b\x74\x79\x70\x65\x3d\x65\x6d\x61\x69\x6c\x5d\x2e\x69\x6e\x76\x61\x6c\x69\x64\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x69\x6e\x70\x75\x74\x5b\x74\x79\x70\x65\x3d\x70\x61\x73\x73\x77\x6f\x72\x64\x5d\x2e\x69\x6e\x76\x61\x6c\x69\x64\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x69\x6e\x70\x75\x74\x5b\x74\x79\x70\x65\x3d\x73\x65\x61\x72\x63\x68\x5d\x2e\x69\x6e\x76\x61\x6c\x69\x64\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x69\x6e\x70\x75\x74\x5b\x74\x79\x70\x65\x3d\x74\x65\x78\x74\x5d\x2e\x69\x6e\x76\x61\x6c\x69\x64\x20\x7b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x61\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x3a\x20\x73\x68\x61\x6b\x65\x20\x2e\x34\x73\x20\x31\x3b\x0a\x20\x20\x61\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x3a\x20\x73\x68\x61\x6b\x65\x20\x2e\x34\x73\x20\x31\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x39\x33\x65\x33\x65\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x66\x65\x65\x62\x65\x62\x0a\x7d\x0a\x0a\x40\x2d\x77\x65\x62\x6b\x69\x74\x2d\x6b\x65\x79\x66\x72\x61\x6d\x65\x73\x20\x73\x68\x61\x6b\x65\x20\x7b\x0a\x20\x20\x31\x30\x25\x2c\x20\x39\x30\x25\x20\x7b\x0a\x20\x20\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x33\x64\x28\x2d\x31\x70\x78\x2c\x20\x30\x2c\x20\x30\x29\x3b\x0a\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x33\x64\x28\x2d\x31\x70\x78\x2c\x20\x30\x2c\x20\x30\x29\x0a\x20\x20\x7d\x0a\x20\x20\x32\x30\x25\x2c\x20\x38\x30\x25\x20\x7b\x0a\x20\x20\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x33\x64\x28\x32\x70\x78\x2c\x20\x30\x2c\x20\x30\x29\x3b\x0a\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x33\x64\x28\x32\x70\x78\x2c\x20\x30\x2c\x20\x30\x29\x0a\x20\x20\x7d\x0a\x20\x20\x33\x30\x25\x2c\x20\x35\x30\x25\x2c\x20\x37\x30\x25\x20\x7b\x0a\x20\x20\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x33\x64\x28\x2d\x34\x70\x78\x2c\x20\x30\x2c\x20\x30\x29\x3b\x0a\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x33\x64\x28\x2d\x34\x70\x78\x2c\x20\x30\x2c\x20\x30\x29\x0a\x20\x20\x7d\x0a\x20\x20\x34\x30\x25\x2c\x20\x36\x30\x25\x20\x7b\x0a\x20\x20\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x33\x64\x28\x34\x70\x78\x2c\x20\x30\x2c\x20\x30\x29\x3b\x0a\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x33\x64\x28\x34\x70\x78\x2c\x20\x30\x2c\x20\x30\x29\x0a\x20\x20\x7d\x0a\x7d\x0a\x0a\x40\x6b\x65\x79\x66\x72\x61\x6d\x65\x73\x20\x73\x68\x61\x6b\x65\x20\x7b\x0a\x20\x20\x31\x30\x25\x2c\x20\x39\x30\x25\x20\x7b\x0a\x20\x20\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x33\x64\x28\x2d\x31\x70\x78\x2c\x20\x30\x2c\x20\x30\x29\x3b\x0a\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x33\x64\x28\x2d\x31\x70\x78\x2c\x20\x30\x2c\x20\x30\x29\x0a\x20\x20\x7d\x0a\x20\x20\x32\x30\x25\x2c\x20\x38\x30\x25\x20\x7b\x0a\x20\x20\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x33\x64\x28\x32\x70\x78\x2c\x20\x30\x2c\x20\x30\x29\x3b\x0a\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x33\x64\x28\x32\x70\x78\x2c\x20\x30\x2c\x20\x30\x29\x0a\x20\x20\x7d\x0a\x20\x20\x33\x30\x25\x2c\x20\x35\x30\x25\x2c\x20\x37\x30\x25\x20\x7b\x0a\x20\x20\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x33\x64\x28\x2d\x34\x70\x78\x2c\x20\x30\x2c\x20\x30\x29\x3b\x0a\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x33\x64\x28\x2d\x34\x70\x78\x2c\x20\x30\x2c\x20\x30\x29\x0a\x20\x20\x7d\x0a\x20\x20\x34\x30\x25\x2c\x20\x36\x30\x25\x20\x7b\x0a\x20\x20\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x33\x64\x28\x34\x70\x78\x2c\x20\x30\x2c\x20\x30\x29\x3b\x0a\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x33\x64\x28\x34\x70\x78\x2c\x20\x30\x2c\x20\x30\x29\x0a\x20\x20\x7d\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x74\x65\x78\x74\x61\x72\x65\x61\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x32\x70\x78\x3b\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x31\x30\x30\x25\x3b\x0a\x20\x20\x6d\x69\x6e\x2d\x68\x65\x69\x67\x68\x74\x3a\x20\x32\x38\x30\x70\x78\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x6e\x6f\x6e\x65\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x34\x70\x78\x3b\x0a\x20\x20\x6f\x75\x74\x6c\x69\x6e\x65\x3a\x20\x6e\x6f\x6e\x65\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x68\x73\x6c\x61\x28\x30\x2c\x20\x30\x25\x2c\x20\x31\x30\x30\x25\x2c\x20\x2e\x38\x29\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x53\x6f\x75\x72\x63\x65\x20\x43\x6f\x64\x65\x20\x50\x72\x6f\x2c\x20\x6d\x6f\x6e\x6f\x73\x70\x61\x63\x65\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x36\x30\x30\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x74\x65\x78\x74\x61\x72\x65\x61\x3a\x66\x6f\x63\x75\x73\x20\x7b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x32\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x23\x36\x31\x61\x66\x66\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x74\x65\x78\x74\x61\x72\x65\x61\x2e\x63\x75\x72\x6c\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x32\x70\x78\x3b\x0a\x20\x20\x6d\x69\x6e\x2d\x68\x65\x69\x67\x68\x74\x3a\x20\x31\x30\x30\x70\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x72\x65\x73\x69\x7a\x65\x3a\x20\x6e\x6f\x6e\x65\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x34\x70\x78\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x34\x31\x34\x34\x34\x65\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x53\x6f\x75\x72\x63\x65\x20\x43\x6f\x64\x65\x20\x50\x72\x6f\x2c\x20\x6d\x6f\x6e\x6f\x73\x70\x61\x63\x65\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x36\x30\x30\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x66\x66\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x63\x68\x65\x63\x6b\x62\x6f\x78\x20\x7b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x35\x70\x78\x20\x30\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x6f\x70\x61\x63\x69\x74\x79\x20\x2e\x35\x73\x3b\x0a\x20\x20\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x6f\x70\x61\x63\x69\x74\x79\x20\x2e\x35\x73\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x33\x33\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x63\x68\x65\x63\x6b\x62\x6f\x78\x20\x6c\x61\x62\x65\x6c\x20\x7b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x66\x6c\x65\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x63\x68\x65\x63\x6b\x62\x6f\x78\x20\x70\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x34\x30\x30\x21\x69\x6d\x70\x6f\x72\x74\x61\x6e\x74\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x74\x79\x6c\x65\x3a\x20\x69\x74\x61\x6c\x69\x63\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x21\x69\x6d\x70\x6f\x72\x74\x61\x6e\x74\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x53\x6f\x75\x72\x63\x65\x20\x43\x6f\x64\x65\x20\x50\x72\x6f\x2c\x20\x6d\x6f\x6e\x6f\x73\x70\x61\x63\x65\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x36\x30\x30\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x63\x68\x65\x63\x6b\x62\x6f\x78\x20\x69\x6e\x70\x75\x74\x5b\x74\x79\x70\x65\x3d\x63\x68\x65\x63\x6b\x62\x6f\x78\x5d\x20\x7b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x6e\x6f\x6e\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x63\x68\x65\x63\x6b\x62\x6f\x78\x20\x69\x6e\x70\x75\x74\x5b\x74\x79\x70\x65\x3d\x63\x68\x65\x63\x6b\x62\x6f\x78\x5d\x2b\x6c\x61\x62\x65\x6c\x3e\x2e\x69\x74\x65\x6d\x20\x7b\x0a\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x72\x65\x6c\x61\x74\x69\x76\x65\x3b\x0a\x20\x20\x74\x6f\x70\x3a\x20\x33\x70\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x69\x6e\x6c\x69\x6e\x65\x2d\x62\x6c\x6f\x63\x6b\x3b\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x31\x36\x70\x78\x3b\x0a\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x31\x36\x70\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x20\x38\x70\x78\x20\x30\x20\x30\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x35\x70\x78\x3b\x0a\x20\x20\x63\x75\x72\x73\x6f\x72\x3a\x20\x70\x6f\x69\x6e\x74\x65\x72\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x31\x70\x78\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x65\x38\x65\x38\x65\x38\x3b\x0a\x20\x20\x62\x6f\x78\x2d\x73\x68\x61\x64\x6f\x77\x3a\x20\x30\x20\x30\x20\x30\x20\x32\x70\x78\x20\x23\x65\x38\x65\x38\x65\x38\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x66\x6c\x65\x78\x3a\x20\x30\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x3a\x20\x6e\x6f\x6e\x65\x3b\x0a\x20\x20\x66\x6c\x65\x78\x3a\x20\x6e\x6f\x6e\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x63\x68\x65\x63\x6b\x62\x6f\x78\x20\x69\x6e\x70\x75\x74\x5b\x74\x79\x70\x65\x3d\x63\x68\x65\x63\x6b\x62\x6f\x78\x5d\x2b\x6c\x61\x62\x65\x6c\x3e\x2e\x69\x74\x65\x6d\x3a\x61\x63\x74\x69\x76\x65\x20\x7b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x73\x63\x61\x6c\x65\x28\x2e\x39\x29\x3b\x0a\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x73\x63\x61\x6c\x65\x28\x2e\x39\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x63\x68\x65\x63\x6b\x62\x6f\x78\x20\x69\x6e\x70\x75\x74\x5b\x74\x79\x70\x65\x3d\x63\x68\x65\x63\x6b\x62\x6f\x78\x5d\x3a\x63\x68\x65\x63\x6b\x65\x64\x2b\x6c\x61\x62\x65\x6c\x3e\x2e\x69\x74\x65\x6d\x20\x7b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x65\x38\x65\x38\x65\x38\x20\x75\x72\x6c\x28\x22\x64\x61\x74\x61\x3a\x69\x6d\x61\x67\x65\x2f\x73\x76\x67\x2b\x78\x6d\x6c\x3b\x63\x68\x61\x72\x73\x65\x74\x3d\x75\x74\x66\x2d\x38\x2c\x25\x33\x43\x73\x76\x67\x20\x77\x69\x64\x74\x68\x3d\x27\x31\x30\x27\x20\x68\x65\x69\x67\x68\x74\x3d\x27\x38\x27\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x27\x33\x20\x37\x20\x31\x30\x20\x38\x27\x20\x78\x6d\x6c\x6e\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x25\x33\x45\x25\x33\x43\x70\x61\x74\x68\x20\x66\x69\x6c\x6c\x3d\x27\x25\x32\x33\x34\x31\x34\x37\x34\x45\x27\x20\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3d\x27\x65\x76\x65\x6e\x6f\x64\x64\x27\x20\x64\x3d\x27\x4d\x36\x2e\x33\x33\x33\x20\x31\x35\x4c\x33\x20\x31\x31\x2e\x36\x36\x37\x6c\x31\x2e\x33\x33\x33\x2d\x31\x2e\x33\x33\x34\x20\x32\x20\x32\x4c\x31\x31\x2e\x36\x36\x37\x20\x37\x20\x31\x33\x20\x38\x2e\x33\x33\x33\x7a\x27\x2f\x25\x33\x45\x25\x33\x43\x2f\x73\x76\x67\x25\x33\x45\x22\x29\x20\x35\x30\x25\x20\x6e\x6f\x2d\x72\x65\x70\x65\x61\x74\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x64\x69\x61\x6c\x6f\x67\x2d\x75\x78\x20\x7b\x0a\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x66\x69\x78\x65\x64\x3b\x0a\x20\x20\x7a\x2d\x69\x6e\x64\x65\x78\x3a\x20\x39\x39\x39\x39\x3b\x0a\x20\x20\x74\x6f\x70\x3a\x20\x30\x3b\x0a\x20\x20\x72\x69\x67\x68\x74\x3a\x20\x30\x3b\x0a\x20\x20\x62\x6f\x74\x74\x6f\x6d\x3a\x20\x30\x3b\x0a\x20\x20\x6c\x65\x66\x74\x3a\x20\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x64\x69\x61\x6c\x6f\x67\x2d\x75\x78\x20\x2e\x62\x61\x63\x6b\x64\x72\x6f\x70\x2d\x75\x78\x20\x7b\x0a\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x66\x69\x78\x65\x64\x3b\x0a\x20\x20\x74\x6f\x70\x3a\x20\x30\x3b\x0a\x20\x20\x72\x69\x67\x68\x74\x3a\x20\x30\x3b\x0a\x20\x20\x62\x6f\x74\x74\x6f\x6d\x3a\x20\x30\x3b\x0a\x20\x20\x6c\x65\x66\x74\x3a\x20\x30\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x30\x2c\x20\x30\x2c\x20\x30\x2c\x20\x2e\x38\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x64\x69\x61\x6c\x6f\x67\x2d\x75\x78\x20\x2e\x6d\x6f\x64\x61\x6c\x2d\x75\x78\x20\x7b\x0a\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x62\x73\x6f\x6c\x75\x74\x65\x3b\x0a\x20\x20\x7a\x2d\x69\x6e\x64\x65\x78\x3a\x20\x39\x39\x39\x39\x3b\x0a\x20\x20\x74\x6f\x70\x3a\x20\x35\x30\x25\x3b\x0a\x20\x20\x6c\x65\x66\x74\x3a\x20\x35\x30\x25\x3b\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x31\x30\x30\x25\x3b\x0a\x20\x20\x6d\x69\x6e\x2d\x77\x69\x64\x74\x68\x3a\x20\x33\x30\x30\x70\x78\x3b\x0a\x20\x20\x6d\x61\x78\x2d\x77\x69\x64\x74\x68\x3a\x20\x36\x35\x30\x70\x78\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x2d\x35\x30\x25\x2c\x20\x2d\x35\x30\x25\x29\x3b\x0a\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x2d\x35\x30\x25\x2c\x20\x2d\x35\x30\x25\x29\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x31\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x23\x65\x62\x65\x62\x65\x62\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x34\x70\x78\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x66\x66\x66\x3b\x0a\x20\x20\x62\x6f\x78\x2d\x73\x68\x61\x64\x6f\x77\x3a\x20\x30\x20\x31\x30\x70\x78\x20\x33\x30\x70\x78\x20\x30\x20\x72\x67\x62\x61\x28\x30\x2c\x20\x30\x2c\x20\x30\x2c\x20\x2e\x32\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x64\x69\x61\x6c\x6f\x67\x2d\x75\x78\x20\x2e\x6d\x6f\x64\x61\x6c\x2d\x75\x78\x2d\x63\x6f\x6e\x74\x65\x6e\x74\x20\x7b\x0a\x20\x20\x6f\x76\x65\x72\x66\x6c\x6f\x77\x2d\x79\x3a\x20\x61\x75\x74\x6f\x3b\x0a\x20\x20\x6d\x61\x78\x2d\x68\x65\x69\x67\x68\x74\x3a\x20\x35\x34\x30\x70\x78\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x32\x30\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x64\x69\x61\x6c\x6f\x67\x2d\x75\x78\x20\x2e\x6d\x6f\x64\x61\x6c\x2d\x75\x78\x2d\x63\x6f\x6e\x74\x65\x6e\x74\x20\x70\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x32\x70\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x20\x30\x20\x35\x70\x78\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x34\x31\x34\x34\x34\x65\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x4f\x70\x65\x6e\x20\x53\x61\x6e\x73\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x64\x69\x61\x6c\x6f\x67\x2d\x75\x78\x20\x2e\x6d\x6f\x64\x61\x6c\x2d\x75\x78\x2d\x63\x6f\x6e\x74\x65\x6e\x74\x20\x68\x34\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x38\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x36\x30\x30\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x31\x35\x70\x78\x20\x30\x20\x30\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x20\x57\x65\x62\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x64\x69\x61\x6c\x6f\x67\x2d\x75\x78\x20\x2e\x6d\x6f\x64\x61\x6c\x2d\x75\x78\x2d\x68\x65\x61\x64\x65\x72\x20\x7b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x66\x6c\x65\x78\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x31\x32\x70\x78\x20\x30\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x62\x6f\x74\x74\x6f\x6d\x3a\x20\x31\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x23\x65\x62\x65\x62\x65\x62\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\x20\x61\x6c\x69\x67\x6e\x2d\x69\x74\x65\x6d\x73\x3a\x20\x63\x65\x6e\x74\x65\x72\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x64\x69\x61\x6c\x6f\x67\x2d\x75\x78\x20\x2e\x6d\x6f\x64\x61\x6c\x2d\x75\x78\x2d\x68\x65\x61\x64\x65\x72\x20\x2e\x63\x6c\x6f\x73\x65\x2d\x6d\x6f\x64\x61\x6c\x20\x7b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x6e\x6f\x6e\x65\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x6e\x6f\x6e\x65\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x61\x70\x70\x65\x61\x72\x61\x6e\x63\x65\x3a\x20\x6e\x6f\x6e\x65\x3b\x0a\x20\x20\x2d\x6d\x6f\x7a\x2d\x61\x70\x70\x65\x61\x72\x61\x6e\x63\x65\x3a\x20\x6e\x6f\x6e\x65\x3b\x0a\x20\x20\x61\x70\x70\x65\x61\x72\x61\x6e\x63\x65\x3a\x20\x6e\x6f\x6e\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x64\x69\x61\x6c\x6f\x67\x2d\x75\x78\x20\x2e\x6d\x6f\x64\x61\x6c\x2d\x75\x78\x2d\x68\x65\x61\x64\x65\x72\x20\x68\x33\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x32\x30\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x36\x30\x30\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x20\x32\x30\x70\x78\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x20\x57\x65\x62\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6d\x6f\x64\x65\x6c\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x32\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x33\x30\x30\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x53\x6f\x75\x72\x63\x65\x20\x43\x6f\x64\x65\x20\x50\x72\x6f\x2c\x20\x6d\x6f\x6e\x6f\x73\x70\x61\x63\x65\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x36\x30\x30\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6d\x6f\x64\x65\x6c\x2d\x74\x6f\x67\x67\x6c\x65\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x72\x65\x6c\x61\x74\x69\x76\x65\x3b\x0a\x20\x20\x74\x6f\x70\x3a\x20\x36\x70\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x69\x6e\x6c\x69\x6e\x65\x2d\x62\x6c\x6f\x63\x6b\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x61\x75\x74\x6f\x20\x2e\x33\x65\x6d\x3b\x0a\x20\x20\x63\x75\x72\x73\x6f\x72\x3a\x20\x70\x6f\x69\x6e\x74\x65\x72\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x20\x2e\x31\x35\x73\x20\x65\x61\x73\x65\x2d\x69\x6e\x3b\x0a\x20\x20\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x20\x2e\x31\x35\x73\x20\x65\x61\x73\x65\x2d\x69\x6e\x3b\x0a\x20\x20\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x20\x2e\x31\x35\x73\x20\x65\x61\x73\x65\x2d\x69\x6e\x3b\x0a\x20\x20\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x20\x2e\x31\x35\x73\x20\x65\x61\x73\x65\x2d\x69\x6e\x2c\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x20\x2e\x31\x35\x73\x20\x65\x61\x73\x65\x2d\x69\x6e\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x72\x6f\x74\x61\x74\x65\x28\x39\x30\x64\x65\x67\x29\x3b\x0a\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x72\x6f\x74\x61\x74\x65\x28\x39\x30\x64\x65\x67\x29\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x2d\x6f\x72\x69\x67\x69\x6e\x3a\x20\x35\x30\x25\x20\x35\x30\x25\x3b\x0a\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x2d\x6f\x72\x69\x67\x69\x6e\x3a\x20\x35\x30\x25\x20\x35\x30\x25\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6d\x6f\x64\x65\x6c\x2d\x74\x6f\x67\x67\x6c\x65\x2e\x63\x6f\x6c\x6c\x61\x70\x73\x65\x64\x20\x7b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x72\x6f\x74\x61\x74\x65\x28\x30\x64\x65\x67\x29\x3b\x0a\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x72\x6f\x74\x61\x74\x65\x28\x30\x64\x65\x67\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6d\x6f\x64\x65\x6c\x2d\x74\x6f\x67\x67\x6c\x65\x3a\x61\x66\x74\x65\x72\x20\x7b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x62\x6c\x6f\x63\x6b\x3b\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x32\x30\x70\x78\x3b\x0a\x20\x20\x68\x65\x69\x67\x68\x74\x3a\x20\x32\x30\x70\x78\x3b\x0a\x20\x20\x63\x6f\x6e\x74\x65\x6e\x74\x3a\x20\x22\x22\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x75\x72\x6c\x28\x22\x64\x61\x74\x61\x3a\x69\x6d\x61\x67\x65\x2f\x73\x76\x67\x2b\x78\x6d\x6c\x3b\x63\x68\x61\x72\x73\x65\x74\x3d\x75\x74\x66\x2d\x38\x2c\x25\x33\x43\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x77\x69\x64\x74\x68\x3d\x27\x32\x34\x27\x20\x68\x65\x69\x67\x68\x74\x3d\x27\x32\x34\x27\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x27\x30\x20\x30\x20\x32\x34\x20\x32\x34\x27\x25\x33\x45\x25\x33\x43\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x31\x30\x20\x36\x4c\x38\x2e\x35\x39\x20\x37\x2e\x34\x31\x20\x31\x33\x2e\x31\x37\x20\x31\x32\x6c\x2d\x34\x2e\x35\x38\x20\x34\x2e\x35\x39\x4c\x31\x30\x20\x31\x38\x6c\x36\x2d\x36\x7a\x27\x2f\x25\x33\x45\x25\x33\x43\x2f\x73\x76\x67\x25\x33\x45\x22\x29\x20\x35\x30\x25\x20\x6e\x6f\x2d\x72\x65\x70\x65\x61\x74\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x2d\x73\x69\x7a\x65\x3a\x20\x31\x30\x30\x25\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6d\x6f\x64\x65\x6c\x2d\x6a\x75\x6d\x70\x2d\x74\x6f\x2d\x70\x61\x74\x68\x20\x7b\x0a\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x72\x65\x6c\x61\x74\x69\x76\x65\x3b\x0a\x20\x20\x63\x75\x72\x73\x6f\x72\x3a\x20\x70\x6f\x69\x6e\x74\x65\x72\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6d\x6f\x64\x65\x6c\x2d\x6a\x75\x6d\x70\x2d\x74\x6f\x2d\x70\x61\x74\x68\x20\x2e\x76\x69\x65\x77\x2d\x6c\x69\x6e\x65\x2d\x6c\x69\x6e\x6b\x20\x7b\x0a\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x62\x73\x6f\x6c\x75\x74\x65\x3b\x0a\x20\x20\x74\x6f\x70\x3a\x20\x2d\x2e\x34\x65\x6d\x3b\x0a\x20\x20\x63\x75\x72\x73\x6f\x72\x3a\x20\x70\x6f\x69\x6e\x74\x65\x72\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6d\x6f\x64\x65\x6c\x2d\x74\x69\x74\x6c\x65\x20\x7b\x0a\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x72\x65\x6c\x61\x74\x69\x76\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6d\x6f\x64\x65\x6c\x2d\x74\x69\x74\x6c\x65\x3a\x68\x6f\x76\x65\x72\x20\x2e\x6d\x6f\x64\x65\x6c\x2d\x68\x69\x6e\x74\x20\x7b\x0a\x20\x20\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x20\x76\x69\x73\x69\x62\x6c\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6d\x6f\x64\x65\x6c\x2d\x68\x69\x6e\x74\x20\x7b\x0a\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x62\x73\x6f\x6c\x75\x74\x65\x3b\x0a\x20\x20\x74\x6f\x70\x3a\x20\x2d\x31\x2e\x38\x65\x6d\x3b\x0a\x20\x20\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x20\x68\x69\x64\x64\x65\x6e\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x2e\x31\x65\x6d\x20\x2e\x35\x65\x6d\x3b\x0a\x20\x20\x77\x68\x69\x74\x65\x2d\x73\x70\x61\x63\x65\x3a\x20\x6e\x6f\x77\x72\x61\x70\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x65\x62\x65\x62\x65\x62\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x34\x70\x78\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x30\x2c\x20\x30\x2c\x20\x30\x2c\x20\x2e\x37\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x73\x65\x63\x74\x69\x6f\x6e\x2e\x6d\x6f\x64\x65\x6c\x73\x20\x7b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x33\x30\x70\x78\x20\x30\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x31\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x72\x67\x62\x61\x28\x35\x39\x2c\x20\x36\x35\x2c\x20\x38\x31\x2c\x20\x2e\x33\x29\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x34\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x73\x65\x63\x74\x69\x6f\x6e\x2e\x6d\x6f\x64\x65\x6c\x73\x2e\x69\x73\x2d\x6f\x70\x65\x6e\x20\x7b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x20\x30\x20\x32\x30\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x73\x65\x63\x74\x69\x6f\x6e\x2e\x6d\x6f\x64\x65\x6c\x73\x2e\x69\x73\x2d\x6f\x70\x65\x6e\x20\x68\x34\x20\x7b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x20\x30\x20\x35\x70\x78\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x62\x6f\x74\x74\x6f\x6d\x3a\x20\x31\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x72\x67\x62\x61\x28\x35\x39\x2c\x20\x36\x35\x2c\x20\x38\x31\x2c\x20\x2e\x33\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x73\x65\x63\x74\x69\x6f\x6e\x2e\x6d\x6f\x64\x65\x6c\x73\x2e\x69\x73\x2d\x6f\x70\x65\x6e\x20\x68\x34\x20\x73\x76\x67\x20\x7b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x72\x6f\x74\x61\x74\x65\x28\x39\x30\x64\x65\x67\x29\x3b\x0a\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x72\x6f\x74\x61\x74\x65\x28\x39\x30\x64\x65\x67\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x73\x65\x63\x74\x69\x6f\x6e\x2e\x6d\x6f\x64\x65\x6c\x73\x20\x68\x34\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x36\x70\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x66\x6c\x65\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x31\x30\x70\x78\x20\x32\x30\x70\x78\x20\x31\x30\x70\x78\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x63\x75\x72\x73\x6f\x72\x3a\x20\x70\x6f\x69\x6e\x74\x65\x72\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x6c\x6c\x20\x2e\x32\x73\x3b\x0a\x20\x20\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x6c\x6c\x20\x2e\x32\x73\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x20\x57\x65\x62\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x37\x37\x37\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\x20\x61\x6c\x69\x67\x6e\x2d\x69\x74\x65\x6d\x73\x3a\x20\x63\x65\x6e\x74\x65\x72\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x73\x65\x63\x74\x69\x6f\x6e\x2e\x6d\x6f\x64\x65\x6c\x73\x20\x68\x34\x20\x73\x76\x67\x20\x7b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x6c\x6c\x20\x2e\x34\x73\x3b\x0a\x20\x20\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x6c\x6c\x20\x2e\x34\x73\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x73\x65\x63\x74\x69\x6f\x6e\x2e\x6d\x6f\x64\x65\x6c\x73\x20\x68\x34\x20\x73\x70\x61\x6e\x20\x7b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x66\x6c\x65\x78\x3a\x20\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x73\x65\x63\x74\x69\x6f\x6e\x2e\x6d\x6f\x64\x65\x6c\x73\x20\x68\x34\x3a\x68\x6f\x76\x65\x72\x20\x7b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x30\x2c\x20\x30\x2c\x20\x30\x2c\x20\x2e\x30\x32\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x73\x65\x63\x74\x69\x6f\x6e\x2e\x6d\x6f\x64\x65\x6c\x73\x20\x68\x35\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x36\x70\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x20\x30\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x20\x57\x65\x62\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x37\x37\x37\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x73\x65\x63\x74\x69\x6f\x6e\x2e\x6d\x6f\x64\x65\x6c\x73\x20\x2e\x6d\x6f\x64\x65\x6c\x2d\x6a\x75\x6d\x70\x2d\x74\x6f\x2d\x70\x61\x74\x68\x20\x7b\x0a\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x72\x65\x6c\x61\x74\x69\x76\x65\x3b\x0a\x20\x20\x74\x6f\x70\x3a\x20\x35\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x73\x65\x63\x74\x69\x6f\x6e\x2e\x6d\x6f\x64\x65\x6c\x73\x20\x2e\x6d\x6f\x64\x65\x6c\x2d\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x20\x7b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x20\x32\x30\x70\x78\x20\x31\x35\x70\x78\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x6c\x6c\x20\x2e\x35\x73\x3b\x0a\x20\x20\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x6c\x6c\x20\x2e\x35\x73\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x34\x70\x78\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x30\x2c\x20\x30\x2c\x20\x30\x2c\x20\x2e\x30\x35\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x73\x65\x63\x74\x69\x6f\x6e\x2e\x6d\x6f\x64\x65\x6c\x73\x20\x2e\x6d\x6f\x64\x65\x6c\x2d\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x3a\x68\x6f\x76\x65\x72\x20\x7b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x30\x2c\x20\x30\x2c\x20\x30\x2c\x20\x2e\x30\x37\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x73\x65\x63\x74\x69\x6f\x6e\x2e\x6d\x6f\x64\x65\x6c\x73\x20\x2e\x6d\x6f\x64\x65\x6c\x2d\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x3a\x66\x69\x72\x73\x74\x2d\x6f\x66\x2d\x74\x79\x70\x65\x20\x7b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x32\x30\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x73\x65\x63\x74\x69\x6f\x6e\x2e\x6d\x6f\x64\x65\x6c\x73\x20\x2e\x6d\x6f\x64\x65\x6c\x2d\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x3a\x6c\x61\x73\x74\x2d\x6f\x66\x2d\x74\x79\x70\x65\x20\x7b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x20\x32\x30\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x73\x65\x63\x74\x69\x6f\x6e\x2e\x6d\x6f\x64\x65\x6c\x73\x20\x2e\x6d\x6f\x64\x65\x6c\x2d\x62\x6f\x78\x20\x7b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x6e\x6f\x6e\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6d\x6f\x64\x65\x6c\x2d\x62\x6f\x78\x20\x7b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x34\x70\x78\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x30\x2c\x20\x30\x2c\x20\x30\x2c\x20\x2e\x31\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6d\x6f\x64\x65\x6c\x2d\x62\x6f\x78\x20\x2e\x6d\x6f\x64\x65\x6c\x2d\x6a\x75\x6d\x70\x2d\x74\x6f\x2d\x70\x61\x74\x68\x20\x7b\x0a\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x72\x65\x6c\x61\x74\x69\x76\x65\x3b\x0a\x20\x20\x74\x6f\x70\x3a\x20\x34\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6d\x6f\x64\x65\x6c\x2d\x74\x69\x74\x6c\x65\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x36\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x20\x57\x65\x62\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x35\x35\x35\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x73\x70\x61\x6e\x3e\x73\x70\x61\x6e\x2e\x6d\x6f\x64\x65\x6c\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x73\x70\x61\x6e\x3e\x73\x70\x61\x6e\x2e\x6d\x6f\x64\x65\x6c\x20\x2e\x62\x72\x61\x63\x65\x2d\x63\x6c\x6f\x73\x65\x20\x7b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x20\x30\x20\x30\x20\x31\x30\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x70\x72\x6f\x70\x2d\x74\x79\x70\x65\x20\x7b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x35\x35\x61\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x70\x72\x6f\x70\x2d\x65\x6e\x75\x6d\x20\x7b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x62\x6c\x6f\x63\x6b\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x70\x72\x6f\x70\x2d\x66\x6f\x72\x6d\x61\x74\x20\x7b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x39\x39\x39\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x74\x61\x62\x6c\x65\x20\x7b\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x31\x30\x30\x25\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6c\x61\x70\x73\x65\x3a\x20\x63\x6f\x6c\x6c\x61\x70\x73\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x74\x61\x62\x6c\x65\x2e\x6d\x6f\x64\x65\x6c\x20\x74\x62\x6f\x64\x79\x20\x74\x72\x20\x74\x64\x20\x7b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x3b\x0a\x20\x20\x76\x65\x72\x74\x69\x63\x61\x6c\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x74\x6f\x70\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x74\x61\x62\x6c\x65\x2e\x6d\x6f\x64\x65\x6c\x20\x74\x62\x6f\x64\x79\x20\x74\x72\x20\x74\x64\x3a\x66\x69\x72\x73\x74\x2d\x6f\x66\x2d\x74\x79\x70\x65\x20\x7b\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x31\x30\x30\x70\x78\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x74\x61\x62\x6c\x65\x2e\x68\x65\x61\x64\x65\x72\x73\x20\x74\x64\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x32\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x33\x30\x30\x3b\x0a\x20\x20\x76\x65\x72\x74\x69\x63\x61\x6c\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x6d\x69\x64\x64\x6c\x65\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x53\x6f\x75\x72\x63\x65\x20\x43\x6f\x64\x65\x20\x50\x72\x6f\x2c\x20\x6d\x6f\x6e\x6f\x73\x70\x61\x63\x65\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x36\x30\x30\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x74\x61\x62\x6c\x65\x20\x74\x62\x6f\x64\x79\x20\x74\x72\x20\x74\x64\x20\x7b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x31\x30\x70\x78\x20\x30\x20\x30\x3b\x0a\x20\x20\x76\x65\x72\x74\x69\x63\x61\x6c\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x74\x6f\x70\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x74\x61\x62\x6c\x65\x20\x74\x62\x6f\x64\x79\x20\x74\x72\x20\x74\x64\x3a\x66\x69\x72\x73\x74\x2d\x6f\x66\x2d\x74\x79\x70\x65\x20\x7b\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x32\x30\x25\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x31\x30\x70\x78\x20\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x74\x61\x62\x6c\x65\x20\x74\x68\x65\x61\x64\x20\x74\x72\x20\x74\x64\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x74\x61\x62\x6c\x65\x20\x74\x68\x65\x61\x64\x20\x74\x72\x20\x74\x68\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x32\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x37\x30\x30\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x31\x32\x70\x78\x20\x30\x3b\x0a\x20\x20\x74\x65\x78\x74\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x6c\x65\x66\x74\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x62\x6f\x74\x74\x6f\x6d\x3a\x20\x31\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x72\x67\x62\x61\x28\x35\x39\x2c\x20\x36\x35\x2c\x20\x38\x31\x2c\x20\x2e\x32\x29\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x4f\x70\x65\x6e\x20\x53\x61\x6e\x73\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x73\x2d\x63\x6f\x6c\x5f\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x20\x70\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x34\x70\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x4f\x70\x65\x6e\x20\x53\x61\x6e\x73\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x73\x2d\x63\x6f\x6c\x5f\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x20\x69\x6e\x70\x75\x74\x5b\x74\x79\x70\x65\x3d\x74\x65\x78\x74\x5d\x20\x7b\x0a\x20\x20\x77\x69\x64\x74\x68\x3a\x20\x31\x30\x30\x25\x3b\x0a\x20\x20\x6d\x61\x78\x2d\x77\x69\x64\x74\x68\x3a\x20\x33\x34\x30\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x5f\x5f\x6e\x61\x6d\x65\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x36\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x34\x30\x30\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x20\x57\x65\x62\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x5f\x5f\x6e\x61\x6d\x65\x2e\x72\x65\x71\x75\x69\x72\x65\x64\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x37\x30\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x5f\x5f\x6e\x61\x6d\x65\x2e\x72\x65\x71\x75\x69\x72\x65\x64\x3a\x61\x66\x74\x65\x72\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x72\x65\x6c\x61\x74\x69\x76\x65\x3b\x0a\x20\x20\x74\x6f\x70\x3a\x20\x2d\x36\x70\x78\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x35\x70\x78\x3b\x0a\x20\x20\x63\x6f\x6e\x74\x65\x6e\x74\x3a\x20\x22\x72\x65\x71\x75\x69\x72\x65\x64\x22\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x72\x67\x62\x61\x28\x32\x35\x35\x2c\x20\x30\x2c\x20\x30\x2c\x20\x2e\x36\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x5f\x5f\x69\x6e\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x32\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x74\x79\x6c\x65\x3a\x20\x69\x74\x61\x6c\x69\x63\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x53\x6f\x75\x72\x63\x65\x20\x43\x6f\x64\x65\x20\x50\x72\x6f\x2c\x20\x6d\x6f\x6e\x6f\x73\x70\x61\x63\x65\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x36\x30\x30\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x38\x38\x38\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x74\x61\x62\x6c\x65\x2d\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x20\x7b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x32\x30\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x74\x6f\x70\x62\x61\x72\x20\x7b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x38\x70\x78\x20\x33\x30\x70\x78\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x38\x39\x62\x66\x30\x34\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x74\x6f\x70\x62\x61\x72\x20\x2e\x74\x6f\x70\x62\x61\x72\x2d\x77\x72\x61\x70\x70\x65\x72\x20\x7b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x74\x6f\x70\x62\x61\x72\x20\x2e\x74\x6f\x70\x62\x61\x72\x2d\x77\x72\x61\x70\x70\x65\x72\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x74\x6f\x70\x62\x61\x72\x20\x61\x20\x7b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x66\x6c\x65\x78\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\x20\x61\x6c\x69\x67\x6e\x2d\x69\x74\x65\x6d\x73\x3a\x20\x63\x65\x6e\x74\x65\x72\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x74\x6f\x70\x62\x61\x72\x20\x61\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x2e\x35\x65\x6d\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x37\x30\x30\x3b\x0a\x20\x20\x74\x65\x78\x74\x2d\x64\x65\x63\x6f\x72\x61\x74\x69\x6f\x6e\x3a\x20\x6e\x6f\x6e\x65\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x20\x57\x65\x62\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x66\x66\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x74\x6f\x70\x62\x61\x72\x20\x61\x20\x73\x70\x61\x6e\x20\x7b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x20\x31\x30\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x74\x6f\x70\x62\x61\x72\x20\x2e\x64\x6f\x77\x6e\x6c\x6f\x61\x64\x2d\x75\x72\x6c\x2d\x77\x72\x61\x70\x70\x65\x72\x20\x7b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x66\x6c\x65\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x74\x6f\x70\x62\x61\x72\x20\x2e\x64\x6f\x77\x6e\x6c\x6f\x61\x64\x2d\x75\x72\x6c\x2d\x77\x72\x61\x70\x70\x65\x72\x20\x69\x6e\x70\x75\x74\x5b\x74\x79\x70\x65\x3d\x74\x65\x78\x74\x5d\x20\x7b\x0a\x20\x20\x6d\x69\x6e\x2d\x77\x69\x64\x74\x68\x3a\x20\x33\x35\x30\x70\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x32\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x23\x35\x34\x37\x66\x30\x30\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x34\x70\x78\x20\x30\x20\x30\x20\x34\x70\x78\x3b\x0a\x20\x20\x6f\x75\x74\x6c\x69\x6e\x65\x3a\x20\x6e\x6f\x6e\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x74\x6f\x70\x62\x61\x72\x20\x2e\x64\x6f\x77\x6e\x6c\x6f\x61\x64\x2d\x75\x72\x6c\x2d\x77\x72\x61\x70\x70\x65\x72\x20\x2e\x64\x6f\x77\x6e\x6c\x6f\x61\x64\x2d\x75\x72\x6c\x2d\x62\x75\x74\x74\x6f\x6e\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x36\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x37\x30\x30\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x34\x70\x78\x20\x34\x30\x70\x78\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x6e\x6f\x6e\x65\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x30\x20\x34\x70\x78\x20\x34\x70\x78\x20\x30\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x35\x34\x37\x66\x30\x30\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x20\x57\x65\x62\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x66\x66\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x69\x6e\x66\x6f\x20\x7b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x35\x30\x70\x78\x20\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x69\x6e\x66\x6f\x20\x68\x67\x72\x6f\x75\x70\x2e\x6d\x61\x69\x6e\x20\x7b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x20\x30\x20\x32\x30\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x69\x6e\x66\x6f\x20\x68\x67\x72\x6f\x75\x70\x2e\x6d\x61\x69\x6e\x20\x61\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x32\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x69\x6e\x66\x6f\x20\x70\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x34\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x4f\x70\x65\x6e\x20\x53\x61\x6e\x73\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x69\x6e\x66\x6f\x20\x63\x6f\x64\x65\x20\x7b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x33\x70\x78\x20\x35\x70\x78\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x34\x70\x78\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x30\x2c\x20\x30\x2c\x20\x30\x2c\x20\x2e\x30\x35\x29\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x53\x6f\x75\x72\x63\x65\x20\x43\x6f\x64\x65\x20\x50\x72\x6f\x2c\x20\x6d\x6f\x6e\x6f\x73\x70\x61\x63\x65\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x36\x30\x30\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x39\x30\x31\x32\x66\x65\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x69\x6e\x66\x6f\x20\x61\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x34\x70\x78\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x6c\x6c\x20\x2e\x34\x73\x3b\x0a\x20\x20\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x6c\x6c\x20\x2e\x34\x73\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x4f\x70\x65\x6e\x20\x53\x61\x6e\x73\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x34\x39\x39\x30\x65\x32\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x69\x6e\x66\x6f\x20\x61\x3a\x68\x6f\x76\x65\x72\x20\x7b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x31\x66\x36\x39\x63\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x69\x6e\x66\x6f\x3e\x64\x69\x76\x20\x7b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x20\x30\x20\x35\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x69\x6e\x66\x6f\x20\x2e\x62\x61\x73\x65\x2d\x75\x72\x6c\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x32\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x33\x30\x30\x21\x69\x6d\x70\x6f\x72\x74\x61\x6e\x74\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x53\x6f\x75\x72\x63\x65\x20\x43\x6f\x64\x65\x20\x50\x72\x6f\x2c\x20\x6d\x6f\x6e\x6f\x73\x70\x61\x63\x65\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x36\x30\x30\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x69\x6e\x66\x6f\x20\x2e\x74\x69\x74\x6c\x65\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x33\x36\x70\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x4f\x70\x65\x6e\x20\x53\x61\x6e\x73\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x69\x6e\x66\x6f\x20\x2e\x74\x69\x74\x6c\x65\x20\x73\x6d\x61\x6c\x6c\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x70\x6f\x73\x69\x74\x69\x6f\x6e\x3a\x20\x72\x65\x6c\x61\x74\x69\x76\x65\x3b\x0a\x20\x20\x74\x6f\x70\x3a\x20\x2d\x35\x70\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x69\x6e\x6c\x69\x6e\x65\x2d\x62\x6c\x6f\x63\x6b\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x20\x30\x20\x30\x20\x35\x70\x78\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x32\x70\x78\x20\x34\x70\x78\x3b\x0a\x20\x20\x76\x65\x72\x74\x69\x63\x61\x6c\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x73\x75\x70\x65\x72\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x35\x37\x70\x78\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x37\x64\x38\x34\x39\x32\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x69\x6e\x66\x6f\x20\x2e\x74\x69\x74\x6c\x65\x20\x73\x6d\x61\x6c\x6c\x20\x70\x72\x65\x20\x7b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x20\x57\x65\x62\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x66\x66\x66\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x61\x75\x74\x68\x2d\x62\x74\x6e\x2d\x77\x72\x61\x70\x70\x65\x72\x20\x7b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x66\x6c\x65\x78\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x31\x30\x70\x78\x20\x30\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x70\x61\x63\x6b\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x2d\x70\x61\x63\x6b\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\x20\x6a\x75\x73\x74\x69\x66\x79\x2d\x63\x6f\x6e\x74\x65\x6e\x74\x3a\x20\x63\x65\x6e\x74\x65\x72\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x61\x75\x74\x68\x2d\x77\x72\x61\x70\x70\x65\x72\x20\x7b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x66\x6c\x65\x78\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x70\x61\x63\x6b\x3a\x20\x65\x6e\x64\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x2d\x70\x61\x63\x6b\x3a\x20\x65\x6e\x64\x3b\x0a\x20\x20\x6a\x75\x73\x74\x69\x66\x79\x2d\x63\x6f\x6e\x74\x65\x6e\x74\x3a\x20\x66\x6c\x65\x78\x2d\x65\x6e\x64\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x61\x75\x74\x68\x2d\x77\x72\x61\x70\x70\x65\x72\x20\x2e\x61\x75\x74\x68\x6f\x72\x69\x7a\x65\x20\x7b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x2d\x72\x69\x67\x68\x74\x3a\x20\x32\x30\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x61\x75\x74\x68\x2d\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x20\x7b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x20\x30\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x31\x30\x70\x78\x20\x32\x30\x70\x78\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x62\x6f\x74\x74\x6f\x6d\x3a\x20\x31\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x23\x65\x62\x65\x62\x65\x62\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x61\x75\x74\x68\x2d\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x3a\x6c\x61\x73\x74\x2d\x6f\x66\x2d\x74\x79\x70\x65\x20\x7b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x31\x30\x70\x78\x20\x32\x30\x70\x78\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x61\x75\x74\x68\x2d\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x20\x68\x34\x20\x7b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x35\x70\x78\x20\x30\x20\x31\x35\x70\x78\x21\x69\x6d\x70\x6f\x72\x74\x61\x6e\x74\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x61\x75\x74\x68\x2d\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x20\x2e\x77\x72\x61\x70\x70\x65\x72\x20\x7b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x61\x75\x74\x68\x2d\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x20\x69\x6e\x70\x75\x74\x5b\x74\x79\x70\x65\x3d\x70\x61\x73\x73\x77\x6f\x72\x64\x5d\x2c\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x61\x75\x74\x68\x2d\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x20\x69\x6e\x70\x75\x74\x5b\x74\x79\x70\x65\x3d\x74\x65\x78\x74\x5d\x20\x7b\x0a\x20\x20\x6d\x69\x6e\x2d\x77\x69\x64\x74\x68\x3a\x20\x32\x33\x30\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x61\x75\x74\x68\x2d\x63\x6f\x6e\x74\x61\x69\x6e\x65\x72\x20\x2e\x65\x72\x72\x6f\x72\x73\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x32\x70\x78\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x31\x30\x70\x78\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x34\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x53\x6f\x75\x72\x63\x65\x20\x43\x6f\x64\x65\x20\x50\x72\x6f\x2c\x20\x6d\x6f\x6e\x6f\x73\x70\x61\x63\x65\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x36\x30\x30\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x73\x63\x6f\x70\x65\x73\x20\x68\x32\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x34\x70\x78\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x20\x57\x65\x62\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x73\x63\x6f\x70\x65\x2d\x64\x65\x66\x20\x7b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x30\x20\x30\x20\x32\x30\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x65\x72\x72\x6f\x72\x73\x2d\x77\x72\x61\x70\x70\x65\x72\x20\x7b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x32\x30\x70\x78\x3b\x0a\x20\x20\x70\x61\x64\x64\x69\x6e\x67\x3a\x20\x31\x30\x70\x78\x20\x32\x30\x70\x78\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x61\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x3a\x20\x73\x63\x61\x6c\x65\x55\x70\x20\x2e\x35\x73\x3b\x0a\x20\x20\x61\x6e\x69\x6d\x61\x74\x69\x6f\x6e\x3a\x20\x73\x63\x61\x6c\x65\x55\x70\x20\x2e\x35\x73\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x32\x70\x78\x20\x73\x6f\x6c\x69\x64\x20\x23\x66\x39\x33\x65\x33\x65\x3b\x0a\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x72\x61\x64\x69\x75\x73\x3a\x20\x34\x70\x78\x3b\x0a\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x32\x34\x39\x2c\x20\x36\x32\x2c\x20\x36\x32\x2c\x20\x2e\x31\x29\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x65\x72\x72\x6f\x72\x73\x2d\x77\x72\x61\x70\x70\x65\x72\x20\x2e\x65\x72\x72\x6f\x72\x2d\x77\x72\x61\x70\x70\x65\x72\x20\x7b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x20\x30\x20\x31\x30\x70\x78\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x65\x72\x72\x6f\x72\x73\x2d\x77\x72\x61\x70\x70\x65\x72\x20\x2e\x65\x72\x72\x6f\x72\x73\x20\x68\x34\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x34\x70\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x53\x6f\x75\x72\x63\x65\x20\x43\x6f\x64\x65\x20\x50\x72\x6f\x2c\x20\x6d\x6f\x6e\x6f\x73\x70\x61\x63\x65\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x77\x65\x69\x67\x68\x74\x3a\x20\x36\x30\x30\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x65\x72\x72\x6f\x72\x73\x2d\x77\x72\x61\x70\x70\x65\x72\x20\x68\x67\x72\x6f\x75\x70\x20\x7b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x62\x6f\x78\x3b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x66\x6c\x65\x78\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x2d\x61\x6c\x69\x67\x6e\x3a\x20\x63\x65\x6e\x74\x65\x72\x3b\x0a\x20\x20\x61\x6c\x69\x67\x6e\x2d\x69\x74\x65\x6d\x73\x3a\x20\x63\x65\x6e\x74\x65\x72\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x65\x72\x72\x6f\x72\x73\x2d\x77\x72\x61\x70\x70\x65\x72\x20\x68\x67\x72\x6f\x75\x70\x20\x68\x34\x20\x7b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x32\x30\x70\x78\x3b\x0a\x20\x20\x6d\x61\x72\x67\x69\x6e\x3a\x20\x30\x3b\x0a\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x62\x6f\x78\x2d\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x2d\x6d\x73\x2d\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x66\x6c\x65\x78\x3a\x20\x31\x3b\x0a\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x54\x69\x74\x69\x6c\x6c\x69\x75\x6d\x20\x57\x65\x62\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x33\x62\x34\x31\x35\x31\x0a\x7d\x0a\x0a\x40\x2d\x77\x65\x62\x6b\x69\x74\x2d\x6b\x65\x79\x66\x72\x61\x6d\x65\x73\x20\x73\x63\x61\x6c\x65\x55\x70\x20\x7b\x0a\x20\x20\x30\x25\x20\x7b\x0a\x20\x20\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x73\x63\x61\x6c\x65\x28\x2e\x38\x29\x3b\x0a\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x73\x63\x61\x6c\x65\x28\x2e\x38\x29\x3b\x0a\x20\x20\x20\x20\x6f\x70\x61\x63\x69\x74\x79\x3a\x20\x30\x0a\x20\x20\x7d\x0a\x20\x20\x74\x6f\x20\x7b\x0a\x20\x20\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x73\x63\x61\x6c\x65\x28\x31\x29\x3b\x0a\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x73\x63\x61\x6c\x65\x28\x31\x29\x3b\x0a\x20\x20\x20\x20\x6f\x70\x61\x63\x69\x74\x79\x3a\x20\x31\x0a\x20\x20\x7d\x0a\x7d\x0a\x0a\x40\x6b\x65\x79\x66\x72\x61\x6d\x65\x73\x20\x73\x63\x61\x6c\x65\x55\x70\x20\x7b\x0a\x20\x20\x30\x25\x20\x7b\x0a\x20\x20\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x73\x63\x61\x6c\x65\x28\x2e\x38\x29\x3b\x0a\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x73\x63\x61\x6c\x65\x28\x2e\x38\x29\x3b\x0a\x20\x20\x20\x20\x6f\x70\x61\x63\x69\x74\x79\x3a\x20\x30\x0a\x20\x20\x7d\x0a\x20\x20\x74\x6f\x20\x7b\x0a\x20\x20\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x73\x63\x61\x6c\x65\x28\x31\x29\x3b\x0a\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3a\x20\x73\x63\x61\x6c\x65\x28\x31\x29\x3b\x0a\x20\x20\x20\x20\x6f\x70\x61\x63\x69\x74\x79\x3a\x20\x31\x0a\x20\x20\x7d\x0a\x7d\x0a\x0a\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x52\x65\x73\x69\x7a\x65\x72\x2e\x76\x65\x72\x74\x69\x63\x61\x6c\x2e\x64\x69\x73\x61\x62\x6c\x65\x64\x20\x7b\x0a\x20\x20\x64\x69\x73\x70\x6c\x61\x79\x3a\x20\x6e\x6f\x6e\x65\x0a\x7d\x0a\x0a\x2f\x2a\x23\x20\x73\x6f\x75\x72\x63\x65\x4d\x61\x70\x70\x69\x6e\x67\x55\x52\x4c\x3d\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x2e\x63\x73\x73\x2e\x6d\x61\x70\x2a\x2f\x0a\x0a\x2f\x2a\x2a\x0a\x20\x2a\x20\x53\x77\x61\x67\x67\x65\x72\x20\x55\x49\x20\x54\x68\x65\x6d\x65\x20\x4f\x76\x65\x72\x72\x69\x64\x65\x73\x0a\x20\x2a\x0a\x20\x2a\x20\x54\x68\x65\x6d\x65\x3a\x20\x4f\x75\x74\x6c\x69\x6e\x65\x0a\x20\x2a\x20\x41\x75\x74\x68\x6f\x72\x3a\x20\x4d\x61\x72\x6b\x20\x4f\x73\x74\x72\x61\x6e\x64\x65\x72\x0a\x20\x2a\x20\x47\x69\x74\x68\x75\x62\x3a\x20\x68\x74\x74\x70\x73\x3a\x2f\x2f\x67\x69\x74\x68\x75\x62\x2e\x63\x6f\x6d\x2f\x6f\x73\x74\x72\x61\x6e\x6d\x65\x2f\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x2d\x74\x68\x65\x6d\x65\x73\x0a\x20\x2a\x2f\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x70\x6f\x73\x74\x20\x7b\x0a\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x31\x30\x61\x35\x34\x61\x3b\x0a\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x32\x34\x31\x2c\x20\x32\x34\x31\x2c\x20\x32\x34\x31\x2c\x20\x2e\x31\x29\x3b\x0a\x20\x7d\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x70\x6f\x73\x74\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x6d\x65\x74\x68\x6f\x64\x20\x7b\x0a\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x66\x61\x66\x61\x66\x61\x3b\x0a\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x31\x30\x61\x35\x34\x61\x3b\x0a\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x73\x6f\x6c\x69\x64\x20\x31\x70\x78\x20\x23\x31\x30\x61\x35\x34\x61\x3b\x0a\x20\x7d\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x70\x6f\x73\x74\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x20\x7b\x0a\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x44\x41\x44\x46\x45\x31\x3b\x0a\x20\x7d\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x70\x75\x74\x20\x7b\x0a\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x63\x35\x38\x36\x32\x62\x3b\x0a\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x32\x34\x31\x2c\x20\x32\x34\x31\x2c\x20\x32\x34\x31\x2c\x20\x2e\x31\x29\x3b\x0a\x20\x7d\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x70\x75\x74\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x6d\x65\x74\x68\x6f\x64\x20\x7b\x0a\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x66\x61\x66\x61\x66\x61\x3b\x0a\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x63\x35\x38\x36\x32\x62\x3b\x0a\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x73\x6f\x6c\x69\x64\x20\x31\x70\x78\x20\x23\x63\x35\x38\x36\x32\x62\x3b\x0a\x20\x7d\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x70\x75\x74\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x20\x7b\x0a\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x44\x41\x44\x46\x45\x31\x3b\x0a\x20\x7d\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x64\x65\x6c\x65\x74\x65\x20\x7b\x0a\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x61\x34\x31\x65\x32\x32\x3b\x0a\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x32\x34\x31\x2c\x20\x32\x34\x31\x2c\x20\x32\x34\x31\x2c\x20\x2e\x31\x29\x3b\x0a\x20\x7d\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x64\x65\x6c\x65\x74\x65\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x6d\x65\x74\x68\x6f\x64\x20\x7b\x0a\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x66\x61\x66\x61\x66\x61\x3b\x0a\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x61\x34\x31\x65\x32\x32\x3b\x0a\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x73\x6f\x6c\x69\x64\x20\x31\x70\x78\x20\x23\x61\x34\x31\x65\x32\x32\x3b\x0a\x20\x7d\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x64\x65\x6c\x65\x74\x65\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x20\x7b\x0a\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x44\x41\x44\x46\x45\x31\x3b\x0a\x20\x7d\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x67\x65\x74\x20\x7b\x0a\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x30\x66\x36\x61\x62\x34\x3b\x0a\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x32\x34\x31\x2c\x20\x32\x34\x31\x2c\x20\x32\x34\x31\x2c\x20\x2e\x31\x29\x3b\x0a\x20\x7d\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x67\x65\x74\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x6d\x65\x74\x68\x6f\x64\x20\x7b\x0a\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x66\x61\x66\x61\x66\x61\x3b\x0a\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x30\x66\x36\x61\x62\x34\x3b\x0a\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x73\x6f\x6c\x69\x64\x20\x31\x70\x78\x20\x23\x30\x66\x36\x61\x62\x34\x3b\x0a\x20\x7d\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x67\x65\x74\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x20\x7b\x0a\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x44\x41\x44\x46\x45\x31\x3b\x0a\x20\x7d\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x70\x61\x74\x63\x68\x20\x7b\x0a\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x63\x35\x38\x36\x32\x62\x3b\x0a\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x32\x34\x31\x2c\x20\x32\x34\x31\x2c\x20\x32\x34\x31\x2c\x20\x2e\x31\x29\x3b\x0a\x20\x7d\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x70\x61\x74\x63\x68\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x6d\x65\x74\x68\x6f\x64\x20\x7b\x0a\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x66\x61\x66\x61\x66\x61\x3b\x0a\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x63\x35\x38\x36\x32\x62\x3b\x0a\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x73\x6f\x6c\x69\x64\x20\x31\x70\x78\x20\x23\x63\x35\x38\x36\x32\x62\x3b\x0a\x20\x7d\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x70\x61\x74\x63\x68\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x20\x7b\x0a\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x44\x41\x44\x46\x45\x31\x3b\x0a\x20\x7d\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x68\x65\x61\x64\x20\x7b\x0a\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x30\x66\x36\x61\x62\x34\x3b\x0a\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x32\x34\x31\x2c\x20\x32\x34\x31\x2c\x20\x32\x34\x31\x2c\x20\x2e\x31\x29\x3b\x0a\x20\x7d\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x68\x65\x61\x64\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x6d\x65\x74\x68\x6f\x64\x20\x7b\x0a\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x66\x61\x66\x61\x66\x61\x3b\x0a\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x30\x66\x36\x61\x62\x34\x3b\x0a\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x73\x6f\x6c\x69\x64\x20\x31\x70\x78\x20\x23\x30\x66\x36\x61\x62\x34\x3b\x0a\x20\x7d\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x68\x65\x61\x64\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x20\x7b\x0a\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x44\x41\x44\x46\x45\x31\x3b\x0a\x20\x7d\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x6f\x70\x74\x69\x6f\x6e\x73\x20\x7b\x0a\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x30\x66\x36\x61\x62\x34\x3b\x0a\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x72\x67\x62\x61\x28\x32\x34\x31\x2c\x20\x32\x34\x31\x2c\x20\x32\x34\x31\x2c\x20\x2e\x31\x29\x3b\x0a\x20\x7d\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x6f\x70\x74\x69\x6f\x6e\x73\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x2d\x6d\x65\x74\x68\x6f\x64\x20\x7b\x0a\x20\x20\x20\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x20\x23\x66\x61\x66\x61\x66\x61\x3b\x0a\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x30\x66\x36\x61\x62\x34\x3b\x0a\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x3a\x20\x73\x6f\x6c\x69\x64\x20\x31\x70\x78\x20\x23\x30\x66\x36\x61\x62\x34\x3b\x0a\x20\x7d\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x6f\x70\x74\x69\x6f\x6e\x73\x20\x2e\x6f\x70\x62\x6c\x6f\x63\x6b\x2d\x73\x75\x6d\x6d\x61\x72\x79\x20\x7b\x0a\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x2d\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x44\x41\x44\x46\x45\x31\x3b\x0a\x20\x7d\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x69\x6e\x66\x6f\x20\x61\x20\x7b\x0a\x20\x20\x20\x66\x6f\x6e\x74\x2d\x73\x69\x7a\x65\x3a\x20\x31\x34\x70\x78\x3b\x0a\x20\x20\x20\x2d\x77\x65\x62\x6b\x69\x74\x2d\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x6c\x6c\x20\x2e\x34\x73\x3b\x0a\x20\x20\x20\x74\x72\x61\x6e\x73\x69\x74\x69\x6f\x6e\x3a\x20\x61\x6c\x6c\x20\x2e\x34\x73\x3b\x0a\x20\x20\x20\x66\x6f\x6e\x74\x2d\x66\x61\x6d\x69\x6c\x79\x3a\x20\x4f\x70\x65\x6e\x20\x53\x61\x6e\x73\x2c\x20\x73\x61\x6e\x73\x2d\x73\x65\x72\x69\x66\x3b\x0a\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x30\x66\x36\x61\x62\x34\x3b\x0a\x20\x7d\x0a\x0a\x20\x2e\x73\x77\x61\x67\x67\x65\x72\x2d\x75\x69\x20\x2e\x69\x6e\x66\x6f\x20\x61\x3a\x68\x6f\x76\x65\x72\x20\x7b\x0a\x20\x20\x20\x63\x6f\x6c\x6f\x72\x3a\x20\x23\x30\x66\x36\x61\x62\x34\x3b\x0a\x20\x7d\x0a") 13 | 14 | func init() { 15 | 16 | f, err := FS.OpenFile(CTX, "/theme-outline.css", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777) 17 | if err != nil { 18 | panic(err) 19 | } 20 | 21 | _, err = f.Write(FileThemeOutlineCSS) 22 | if err != nil { 23 | panic(err) 24 | } 25 | 26 | err = f.Close() 27 | if err != nil { 28 | panic(err) 29 | } 30 | } 31 | --------------------------------------------------------------------------------